본문 바로가기

개발35

[Spring] @Async를 사용하여 비동기 처리 (+ 쓰기, 읽기 서비스 분리) SWM 프로젝트를 진행하면서, 비동기 처리를 통해서 효율적으로 요청을 처리하고, 많은 도서 데이터의 확보를 위한 고민을 하였습니다. 따라서 해당 포스트에서는 Spring @Async에 대해서 정리하고, 실제 적용한 부분에 대해서 설명하고자 한다. 비동기 처리가 필요한 이유 도서 상세 페이지 조회 시, 도서 정보가 도서 DB에 저장되어 있지 않으면 알라딘 API를 호출하여 도서 상세 페이지 응답을 처리한다. 이때, 비동기 처리를 통해 알라딘 API를 통해 조회된 데이터를 도서 DB에 저장하는 작업을 수행한다. 도서 DB에 도서 데이터를 저장하고, 도서 상세 페이지를 보여줄 경우, 도서 DB에 병목이 있을 경우 도서 상세 페이지를 사용자에게 띄어주는 것에 영향을 줄 수 있다고 생각한다. 따라서 비동기 처리를.. 2023. 8. 12.
[Spring] JPA Fetch Join 사용시, MultipleBagFetchException 발생 SWM 프로젝트를 하면서, Fetch Join을 사용하여 N+1 문제가 발생하지 않고 연관 관계로 연결되어 있는 엔티티를 조회하려고 했었다. Book 엔티티에는 @ManyToOne 관계로 BookCategory를 가지고 있고, @OneToMany(mappedBy= "book") 관계로는 bookAuthor와 BookTranslator로 가지고 있다. 따라서 Fetch Join을 통해서 Book 엔티티를 조회할 때, Book과 연관 관계를 맺고 있는 BookCategory, BookAuthor, BookTranslator 그리고 BookAuthor와 연관관계를 맺고 있는 Author, BookTranslator와 연관관계를 맺고 있는 Translator까지 모두 조회하려고 했었다! N+1 문제가 발생하지 .. 2023. 8. 3.
[Test] Test Code에 필요한 Test Fixture 재사용하기 SWM 프로젝트를 하면서 테스트 코드를 열심히 짜면서 개발하고 있다. TDD는 아니지만, API 하나하나를 개발할 때마다 단위 테스트를 작성하고 있다. 개발 시간이 배로 드는 것 같지만, 테스트 코드 덕분에 리펙토링이나 코드 리뷰 이후 코드를 수정하는 일에 있어서 자신감과 안정감을 가지고 코드를 수정할 수 있고, 매번 서버를 실행시키고 직접 테스트를 하는 것보다는 훨씬 쉽고 빠르게 테스트할 수 있다는 점에 매우 만족하면서 열심히 작성 중이다. 진짜 시간이 더 걸린다 외 다른 점들은 다 좋은 점들밖에 없는 것 같다! 단위 테스트에 필요한 데이터들을 생성하는 과정에서 시행착오를 겪으면서 조금 더 나은 방법을 알게 되어서 공유하려고 한다. (더 나은 방법이 있을 수 있는데.. 더 좋은 방법이 있다면 알려주십시.. 2023. 7. 11.
[AWS] ECR, Docker Image Push & Pull 하기 SWM 프로젝트를 개발하고 이후에 배포하는 과정에 있어서, AWS와 Docker를 사용하려고 계획 중입니다. Docker 컨테이너 이미지 저장소로 Docker Hub와 ECR 중 선택하는 과정에 있어서, 비용적인 측면과 AWS 기반 인프라적인 측면에서 Docker Hub 보다는 ECR이 좀 더 적합 다는 생각이 들었습니다. AWS 클라우드 비용을 SWM에서 지원해 준다. Docker Hub의 경우 Public Repository는 무료이지만, Private Repository는 유료 구독을 해야 한다. EC2, S3, RDS 등 AWS 서비스로 인프로를 구축할 예정으로, ECR 사용 시 나머지 AWS 서비스와 원활하고 강력한 통합을 예상한다. 이미지 액세스에 대해서 엄격한 IAM을 구성하여 보안 측면을 .. 2023. 7. 9.
[Test] 외부 API 테스트하기 (+ RestTemplateBuilder) SWM에서 프로젝트를 진행하는 과정에서 카카오 도서 검색 API를 사용하여 도서를 검색해 오는 기능을 구현하고, 테스트 코드를 작성하는 과정에서 아래와 같은 이슈가 나타났다. Unable to use auto-configured MockRestServiceServer since MockServerRestTemplateCustomizer has not been bound to a RestTemplate java.lang.IllegalStateException: Unable to use auto-configured MockRestServiceServer since MockServerRestTemplateCustomizer has not been bound to a RestTemplate at org.spri.. 2023. 7. 6.
[Spring] Spring Rest Docs로 API 문서 자동화하기 SWM에서 프로젝트를 진행하는 과정에서 API 문서 자동화를 위해 Spring Rest Docs를 적용하기로 했다. 이전에는 Swagger나 노션에 API 문서를 작성했지만, 아래와 같은 단점이 있었고 여러 단점을 해결하기 위해 Spring Rest Docs를 적용하기로 결정하였다. Swagger는 프로덕션 코드(컨트롤러 레이어, 요청/응답 객체)에 Swagger 애노테이션이 추가되어 가독성이 떨어졌다. 테스트 기반 아니기 때문에, API 문서대로 기능이 동작한다는 보장이 없었다. 노션에 API 문서를 작성 시, 새로운 코드를 개발하거나 기존 코드를 변경하였을 때 코드와 문서를 동기화하는 과정이 번거로웠다. 따라서 이번 포스트에서는 Spring Rest Docs를 적용하는 과정을 기록하고자 한다. 1) .. 2023. 7. 3.