본문 바로가기

삽질일기8

Spring Batch JpaPagingItemReader 사용 시 주의사항 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 스프링 배치의 청크 프로세싱은 Item에 대한 읽기, 처리, 쓰기 작업을 Reader, Processor, Wirter로 잘 추상화해 두었다. 따라서 일반적으로 Reader 는 읽는 역할을 한다고 생각했다. 하지만 JpaPagingItemReader 는 단순히 읽는 역할 이상을 한다. JpaPagingItemReader#doReadPage 메소드의 코드를 보자. protected void doReadPage() { EntityTransaction tx = null; if (this.transacted) { tx = this.entityManager.getTransaction(); tx.begin(); this... 2023. 7. 2.
[Mybatis] 일대다 테이블 조회시 페이징과 N+1 Select 문제 해결 과정 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 예시를 위한 도메인은 간단한 결재 시스템입니다. 아래와 같은 1:N 관계의 테이블이 있다고 가정합니다. 예를 들어, 신청자가 휴가 신청을 올릴 때 팀장, 본부장, 사장 순으로 결재권자를 지정할 수 있습니다. 그렇게 지정 후 신청 버튼을 클릭하면 신청 table에 row 한건이 추가되고 승인자 table에는 그 신청건에서 지정한 승인자 3명의 정보가 추가됩니다. apply_id는 하나의 신청 건에 대한 unique key이고 approver_id는 하나의 승인 정보에 대한 unique key이며, 신청 테이블: 승인 테이블 = 1:N 관계이고 외래 키는 apply_id입니다. 객체로 모델링하면 아래와 같습니다. .. 2022. 3. 22.
[AWS] ELB와 Nginx가 만들어낸 장애 어제 오전 출근하자마자 클라우드에 올라간 서버에 접속이 안된다는 문의가 들어왔습니다. 지난 9월에 클라우드에 올라간 직후 4달가량 멀쩡히 운영되던 클라우드 서버가 갑자기 접속이 되지 않는다니?! 어떤 설정도 건드리지 않았고 배포를 다시 한 것도 아니었는데 갑자기 문제가 발생하여 매우 의아했습니다. 우선 원인을 분석하기 위해 Cloud Watch를 통해 각 서비스의 로그를 확인했고 ELB의 모니터링 대시보드를 확인해 보았습니다. (참고로 클라우드에 올라간 서버 구성을 짧게 설명하자면, 앞단에 ELB를 두고 뒷단은 spring cloud기반 마이크로 서비스로 구성되어 있습니다. ELB를 통해 scale out을 적용하기 위해 모든 트래픽은 ELB를 통하게 구성하였습니다.) 확인 결과 눈에 띄는 현상은 아래와.. 2022. 1. 11.
더 좋은 개발자가 되기 위해 https://www.youtube.com/watch?v=4v_1GyYQN0E 하나의 서비스를 프로젝트 성으로 개발하고 빠지는 것이 아니라 고객의 요구에 맞게 지속해서 발전시키는 경험을 하는 게 중요하다. 유지보수 과정에서 고객의 요구는 계속 바뀔 것이고 그에 따라 내 코드도 변경되어야 할 것이다. 또한, 성능상의 문제를 경험할 수도 있다. 내 코드를 다른 사람이 사용할 수도 있다. 이러한 경험을 통해 변경에 용의 한 코드, 성능, 가독성 등등의 경험을 쌓을 수 있다. 또한, 하나의 프로젝트를 지속해서 관리하는 것을 통해 그 프로젝트애 한에서는 개발 문화를 조금씩 내가 주도할 수도 있다. 나는 이런 경험을 지금 잘해 나가고 있는가? 그게 아니라면 나는 지금 위험한 상황일 수 있다. 모니터링, 클라우드, .. 2021. 12. 17.