본문 바로가기

전체 글51

[MSA] 서킷브레이커 적용 (Resilience4j) 작년 소프트웨어 마에스트로 14기에서 개발을 할 때, 내가 가장 많이 성장했던 시기라고 생각한다. 열정적인 동료(세무무 & 동구)와 쏘마의 지원 덕분이라고 생각이 든다. 그 중 클라우드 비용이 지원되었기 때문에 AWS의 여러 리소스를 학습하며 사용해보고, 기술적으로 MSA를 적용해면서 많이 배웠다. 현재는 그 전과 다른 기술을 바탕으로 일을 하고 있어, 이대로면 예전에 공부했던 내용을 다 잊어버릴까 시간이 날 때, 이전에 개발하고 공부했던 내용들을 기록하려고 한다. 먼저 MSA 환경에서 개발하면서, CircuitBreaker가 많이 신기하고 재밌게 개발한 기억이 있어, CircuitBreaker를 적용한 예시와 개념을 정리하려고 한다! 서킷브레이커 개념 여러 서비스로 구성된 MSA 환경에서는 한 서비스에.. 2024. 1. 23.
[Spring] MyBatis 사용법 및 동적 쿼리 정리 지금까지 토이 프로젝트에서는 JPA와 QueryDSL을 활용하여 개발했지만, 이번에 입사하게 된 첫 회사에서는 MyBatis를 주로 사용하고 있었다. 처음에는 JPA와 QueryDSL을 사용하지 않아 조금 아쉬웠지만, "로마에서는 로마법을 따르라"라는 말과 같이 새로운 환경에 맞춰 공부하고 적응하는 것이 필요하다고 생각했다. 따라서 기본적인 MyBatis 사용법과 동적 쿼리 사용법을 기록하고자 한다. 1. MyBatis JdbcTemplate 보다 더 많은 기능 제공 SQL을 XML에 편리하게 작성하고 동적 쿼리를 매우 편하게 작성 가능 약간의 설정이 필요, Spring Boot를 사용하면 편하게 설정 가능 2. MyBatis 사용법 1) 마이바티스 매핑 XML을 호출해주는 Mapper Interface.. 2024. 1. 9.
[Spring] @Cacheable를 통해 성능 개선하기 (캐시) 이제 중간 발표도 끝났겠다, 다시 열심히 블로그를 작성하려고 한다. "마이브러리" 프로젝트를 진행하면서 이슈도 많았고, 많은 것을 배우고 개발 중이었기 때문에 포스팅할 내용들이 너무 많다.. 다시 꾸준하게 블로그를 작성해봐야겠다.!! SWM에서 "마이브러리" 프로젝트를 진행하는 과정에 있어서 외부 API를 사용하여 도서의 정보를 가져오는 기능이 있었다. 매 사용자의 요청마다 외부 API를 호출하기 때문에 캐시를 적용하여, 외부 API 호출량도 줄이고 응답 속도도 줄일 것이라 기대하고 캐시를 도입하였다. 캐시를 도입한 이유 외부 API를 사용하기 때문에 외부 API 상태에 따라 응답 속도에 영향을 받는다. 길게는 2초 이상의 응답 속도가 걸린 적이 있다. 도서의 정보 데이터는 갱신이 자주 일어나지 않지만 .. 2023. 9. 4.
[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.
[Java] JVM 정리 (JVM의 개념, 실행과정, 구조) JDK vs JRE JDK (Java Development Kit) 자바를 개발 시 필요한 라이브러리와 javac, javadoc 등의 개발 도구 포함 자바 프로그램을 실행시키기 위한 JRE(Java Runtime Environment) 포함 Java SE (Java Standard Edition) 가장 기본이 되는 표준 에디션의 자바 플랫폼으로 자바 언어의 핵심 기능 제공 Java EE (Java Enterprise Edition) 대규모 기업용 에디션, SE 확장판 JRE (Java Runtime Environment) JVM과 자바 프로그램을 실행시킬 때 필요한 라이브러리 API를 함께 묶어서 배포되는 패키지 JRE은 기본적으로 JDK에 포함되어 있어 JDK를 설치하면 함께 설치된다. JVM (Ja.. 2023. 7. 12.
[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.