본문 바로가기

삽질일기/트러블 슈팅6

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.
HTTP multipart/form-data에 jwt token 포함 시켜 전송하기 1. 서론 일반적으로, api 서버는 api를 모든 사용자에게 노출시키지 않는다. 인증된 사용자를 기본으로 인가된 api만 노출시킨다.(그 수단으로 세션이나 토큰을 주로 사용한다.) 사내에서 개발되는 api 서버는 로그인된 사용자에 한에서 jwt token을 발급하고, 사용자는 매 요청마다 헤더에 token을 포함시킨다. 그럼, 서버에선 token의 유효성, 권한 등을 확인해 유효한 사용자에 대해서만 api에 접근할 수 있도록 한다. 그런데, 특정 api의 경우 ui에서 요청 시 헤더 값을 커스텀하게 세팅하지 못하는 경우가 발생했다. (파일 다운로드 api의 경우, 단순 ajax를 사용한 비동기 통신으로 서버에 요청하게 되면 파일이 모두 다운로드될 때까지 아무것도 표시되지 않는다. form.sumit 방.. 2021. 11. 3.