🤔 문제 상황DB 조회 시 성능 최적화는 개발자들이 자주 마주치는 과제이다.특히 복잡한 엔티티 관계와 다양한 응답 값 설정이 필요한 상황에서는 더욱 그렇다. 이러한 맥락에서 findByXXX() 메소드를 사용하여 DB에서 직접 필터링하는 방식과 findAll()로 모든 데이터를 가져온 후 Java의 stream API를 이용해 필터링하는 방식 중 전자가 더욱 성능에 좋다고는 알고 있었지만, 어떻게/ 왜 더 효율적인지에 대한 의문이 생겼다.실무에서는 종종 findAll()을 사용한 후 stream의 filter 등으로 데이터를 가공하는 접근법을 볼 수 있었다. 이는 주로 빠른 개발 속도를 위해 선택되며, 복잡한 연관 관계에서 SQL 쿼리 작성에 시간을 들이는 대신 컴파일 시점에 확인 가능한 stream ..
🤔 문제 상황JPA를 사용하며 객체를 설계할 때, 직접 참조와 간접 참조 각각 어느때에 사용하면 적절할지에 대한 고민이 생겼다.더불어 회사에서 코드 리뷰를 하다가 간접 참조로 설계를 한 팀원의 코드에 왜 여기서 간접 참조를 했나요? or 왜 여기는 직접 참조를 했나요? 등의 리뷰를 보고 나도 아무 생각없이 객체간 설계를 하고 있던 것은 아닌가 하는 생각이 들었다.🕊️ 나의 생각우선 각 용어의 뜻을 보자면직접 참조 : 말 그대로 Entity간의 참조를 직접적으로 하는 것이다. 구체적인 방법으로는 JPA 사용시 @OneToOne / @ManyToOne등의 어노테이션을 써서 매핑(참조)를 하는 것을 말한다.간접 참조 : 직접 참조의 반대의 의미로, 외래키(FK)를 맺지 않고 다른 Entity의 (더 나아가..
🤔 문제 상황스케줄러를 사용하고 있는 프로젝트가 있다. 해당 스케줄러가 주기적으로 동작하던 와중 아래와 같은 롤백 예외 로그가 찍혔다.... ERROR ... [askScheduler-10] c.w.b.b.l.CreateDeliveryMessageListener : org.springframework.transaction.TransactionSystemException: Could not commit JPA transaction; nested exception is javax.persistence.RollbackException: Transaction marked as rollbackOnlyat o.s.orm.jpa.JpaTransactionManager.doCommit(JpaTr..
🤔 문제 상황JPA에서 엔티티 간 연관 관계를 Lazy Loading으로 설정했을 때, 이 엔티티를 사용하는 메서드에 @Transactional 어노테이션이 없다면 LazyInitializationException이 발생할 수 있다.예시 코드로 보자면@Entitypublic class User { @Id private Long id; @OneToMany(fetch = FetchType.LAZY) private List orders;}public class UserService { public void processUserOrders(Long userId) { User user = userRepository.findById(userId).orElseThrow(); ..
취업 준비 과정에서 아직 필요성을 크게 느끼지 못해 클린 아키텍처를 적용해 본 경험이 없었습니다. 하지만 요즘 신입 채용 공고를 보면 드문 드문 아키텍처에 관한 우대사항도 보이고, 많은 기업들의 블로그,유튜브 영상을 보면 아키텍처에 관한 부분이 많은 부분을 차지하고 있다라고 느꼈습니다. 당장 제가 사용해볼만한 부분은 아니라고 생각하지만, 이번에 '만들면서 배우는 클린 아키텍처'를 읽으며 주로 많이 사용해왔던 레이어드 아키텍처와 책에서 소개하는 클린 아키텍처의 차이를 비교해가며 공부할 수 있었습니다. 책을 통해 서비스 레이어가 클린 아키텍처에서는 유스케이스로 대체되는 등 각 계층의 역할과 규칙을 이해할 수 있었습니다. 정보 저자 : 톰 홈버그 옮긴이 : 박소은 감수 : 조영호 한줄평 : 실제 예제 프로젝..
최근 취업 준비를 하며 면접도 보러오는 등, 더디지만 조금의 발전을 하고 있다고 스스로 느끼고 있습니다.개인 프로젝트를 프론트부터 배포까지 A to Z 진행을 해보는 것은 저에게 큰 도움이 되었고, 하나의 서비스를 혼자서 진행해보니 시스템 설계에 관해서도 관심이 많이 갔습니다.그러던 중 꼭 읽고 싶어서 샀지만 아직 와닿지가 않아 묵혀 두었던 '가상 면접 사례로 배우는 대규모 시스템 설계 기초1' 을 다시 꺼내 읽었습니다. 정보 저자 : 알렉스 쉬 옮긴이 : 이병준 한줄평 : 여러가지 시스템 설계 디자인을 가볍게 알아볼 수 있는 책 읽으면 좋을 독자 : 프로젝트를 몇번 해봤고, 단순히 API만 짜본 것이 아니라 시스템 설계에 대해서 고민을 해본 독자들 (반대로 기본적인 API 구성만 해본 독자는 당장 와..
최근 '모띠클' 이라는 아카이빙 서비스를 개인 프로젝트로 진행을 하고 있습니다. 더불어 아침마다 책을 두 권씩 읽고 있는데, 그중 '가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 읽고 있습니다. 어제도 여느날과 마찬가지로 책을 읽다가 '4장. 처리율 제한 장치의 설계' 부분을 읽게 되었습니다. 해당 파트에서는 챕터명 그대로 미들웨어를 활용해서 처리율을 제한을 두어 시스템에 부하를 덜어주는 것에 대하여 알려줍니다. 해당 파트를 읽다가 내 프로젝트에도 접목을 시켜볼 수 있을 것 같았습니다. 그래서 해당 부분을 공부 해보고 프로젝트에 접목시켜 본 것을 남겨보려고 합니다. 들어가기 앞서 서론에서 보았듯이 개인 프로젝트의 특정 API 호출에 트래픽을 제한해보려고 한다. 내 프로젝트에서 트래픽 제한을 걸..
최근 취업 준비에 박차를 가하고 있다. 공부를 하며 이런 저런 기술도 써보았습니다. 쉬운 기술, 어려운 기술, 트렌디한 기술등등 여러 기술을 접하고 적용해보는 경험을 했다. 하지만 취업을 앞두고 면접또한 준비를 해야하는 상황이었는데, 자바와 웹 기술에 대한 전반적인 기본기를 한 번더 빠르게 다지고 싶은 마음이 있었다. 그러다 한빛 미디어의 '이것이 취업을 위한 백엔드 개발이다' 라는 책을 알게 되었고 구성과 내용이 너무 알차서 개발자로 취업을 희망하는 취준생에게 소개하고자 한다. 정보 출판사 : 한빛 미디어 저자 : 이준형 한줄평 : 제목 그대로 취업을 앞둔 백엔드 개발자. 특히 자바 개발자들이 보면 이 한 권(?)으로 개념을 다시 잡을 수 있는 책 전반적인 구성 책의 전체적인 목차등은 도서 사이트에서도..