본문 바로가기

전체 글

(14)
[트러블 슈팅] n + 1 문제를 IN절로 해결하기 도입원데이히어로 프로젝트에서 이미지 조회 시 n + 1 문제가 발생했다. 그래서 In절로 n + 1 문제를 해결하고 더 나아가 쿼리를 튜닝하여 성능을 개선하였다. 이번 글에서는 In절로 n + 1 문제를 해결한 경험만 이야기해 보겠다. 실행 계획을 통해 슬로우 쿼리를 튜닝한 경험은 다음 글에서 작성해 볼 계획이다. 객체 사이의 관계n + 1 문제 상황을 설명하기 전에 객체 사이의 관계에 대해 설명해 보겠다. 프로젝트 내 미션(Mission)이라는 도메인이 있다. 여기서 미션은 프로젝트 내 도메인 용어로 벌레 잡기, 포장, 청소처럼 소소한 일거리를 뜻한다. 미션은 이미지를 최대 5개 가질 수 있으므로 미션과 미션 이미지는 OneToMany 관계이다.  먼저 객체 참조와 아이디 참조 중 어떤 참조 관계를 선..
제 1회 게으른 개발자 컨퍼런스 다녀온 후기 게으른 개발자 컨퍼런스2024 게으른 개발자 컨퍼런스에 초대합니다.lazyconf.dev 데브코스 멘토님을 통해 알게된 컨퍼런스로 주니어 백엔드 개발자 대상이라 한 번 신청해보았다. 100명 랜덤 추첨이었고 이런 운은 없는 편이라 기대도 안했다. 그런데 메일을 열어보니, 우와! 선정되었다! 주변에 선정되신 분이 딱 한 분이었고 함께 듣기로 했다.   들었던 세션은 분산 트랜잭션 : 과거와 현재, 소비자 관점의 API 설계 패턴, JPA Patterns, 신규 서비스 개발기, 2년차 주니어 개발자의 성능 개선 도전기 순이다. 내 첫 컨퍼런스였기에 꽤 설레는 마음으로 컨퍼런스로 향했다.분산 트랜잭션 : 과거와 현재분산 시스템과 분산 서비스가 왜 등장했는지부터 시작해서 분산 트랜잭션의 발전 과정에 대한 내용이..
[트러블 슈팅] 리팩토링을 통한 복잡했던 모듈 구조를 단순화 도입지난 글, [트러블 슈팅] 레이어별 멀티 모듈 적용 (과도한 모듈 분리로 실패🤪) 에서 레이어 간 단방향 의존 관계를 갖도록 레이어 별로 모듈 분리를 시도했다. 그러나 과도한 분리로 인해 모듈 구조가 복잡해졌고 결국 실패로 이어졌다. 이번 글에서 복잡했던 멀티 모듈 구조를 리팩토링을 통해 단순화한 경험을 이야기하겠다.과도하게 분리된 모듈을 하나의 모듈로계층마다 독립적이고 관심사가 다르므로 모듈화를 통해 응집도를 높이려고 했다. 그리고 레이어드 아키텍처에서 단방향 의존 관계를 가져야 하므로 모듈의 의존 방향을 통해 제약을 걸어주었다. 그러나 아키텍처를 모듈과 일치시키려는 강박 때문에 모듈 구조가 너무 복잡해졌다. 그리고 구현에 대한 깊은 이해도 없이 성급하게 모듈화를 진행시켰다. 결국 과도한 추상화로..