Controller 레벨의 예외 처리는 아래 포스팅을 참고해주시면 됩니다.RFC 9457과 헥사고날 아키텍처로 구현하는 예외 처리 설계서0️⃣들어가며Spring Boot로 REST API를 개발할 때 JWT 기반 인증을 도입하면, 반드시 마주치는 문제가 있습니다. 공들여 설계한 @RestControllerAdvice 기반 예외 처리가 Security Filter에서는 전혀 동작하지 않는다는 점입니다.단순히 "Filter는 DispatcherServlet 앞단이라서"라고 넘기기 쉽지만, 정확히 왜 그런지 구조를 이해하지 못하면 JWT 커스텀 필터를 만들 때 의도치 않은 500 응답을 마주하게 됩니다.이 포스팅은 JWT 커스텀 필터를 사용하는 환경을 전제로, Spring Container와 Servlet C..
이번 포스팅에서는 사내 웹서비스를 개발하며 예외처리에 대해 고민했던 부분을 정리해봤습니다.참고 포스팅Spring Security Filter 예외 처리 + 전략0️⃣들어가며: 예외 처리에 대한 우리 팀의 고민시스템이 성장하고 아키텍처가 복잡해질수록 '예외를 어떻게 정의하고, 어디서 던지며, 클라이언트에게 어떻게 보여줄 것인가'에 대한 기준이 모호해지곤 합니다. 특히 표준화되지 않은 에러 응답은 프트엔드와의 소통 비용을 증가시키고, 레이어 간 책임이 섞인 예외는 시스템의 결합도를 높입니다.우리 팀 또한 절대적인 시간이 부족한 상태에서 서비스 개발을 진행하는 과정에서 예외 처리에 대한 설계, 컨벤션없이 진행하다보니 점점 복잡해지고 구조 파악에 상당 시간이 드는 것을 체감했습니다.이러한 문제를 해결하기 위해 ..
실무 모니터링 환경을 구축하기 위한 첫 번째 단계로 스프링부트에서 제공되는 액추에이터에 대해 학습한 내용을 정리하였습니다. 개요 운영 환경에서 서비스할 때 필요한 기능들을 프로덕션 준비 기능이라 합니다. 간단하게 알아보면 애플리케이션이 현재 살아있는지, 로그 정보는 정상 설정 되었는지, 커넥션 풀은 얼마나 사용되고 있는지 등을 확인할 수 있어야 합니다. 스프링부트에서 제공하는 액추에이터는 위와 같은 기능을 매우 편리하게 사용할 수 있는 다양한 편의 기능들을 제공합니다. 액추에이터 build.gradle 추가 //actuator 추가 implementation 'org.springframework.boot:spring-boot-starter-actuator' 의존성을 추가 후 아래 url로 접속해보면 몇 ..
이번 포스팅으로는 프로젝트 개발 도중 직면한 N+1문제에 대한 해결과정에 대해 나열해보려 합니다. 테스트는 포스트맨을 활용하였고, 추후 JMETER를 활용하여 API 성능 테스트까지 진행해보려 합니다. 기본적으로 현재 프로젝트는 팔로우 서비스를 제공하고 있습니다. 유저 검색 API 스펙으로는 인스타그램의 검색기능과 비슷합니다. 다음은 이번 문제의 주춧돌 API에 대한 요구사항입니다. 위 이미지는 인스타그램에서 h라는 키워드로 검색을 했을 때의 결과입니다. h에 해당하는 유저를 검색함과 동시에 현재 로그인 한 유저의 팔로우들 중 얼마나 해당 유저를 팔로우하고 있는지 한명의 유저 이름과 함께 totalCount를 응답으로 주고 있습니다. 다음은 이번 서비스에 적용시킬 API 로직 요구사항입니다. 유저의 이름..
JWT 정리 Intro 로그인 서비스를 구현하게 된다면 세션방식, 쿠키방식, JWT방식 세 가지를 고려하게 됩니다. 이번에는 JWT방식을 활용하여 로그인 서비스를 구현을 하기 위한 필요한 개념들에 대해 정리를 해보았습니다. 또한 로그인 서비스를 구현하려하면 인증과 인가라는 개념에 대해서도 알고 있어야 하기에 먼저 정의를 해보았습니다. 인증과 인가 각각을 알아보기 이전에 인증과 인가를 되게 비슷하다고 생각을 할 수 있는데 둘은 엄연히 다른 개념이라는 걸 알아야합니다. 둘은 사용자의 정보를 효율적으로 식별하고 전달하는 과정에서 필수적인 일들입니다. 인증 인증은 쉽게 말하면, 로그인입니다. 클라이언트가 주장하는 신원을 확인하는 과정으로 다음과 같은 인증방식이 있습니다. 사용자 ID 및 비밀번호 OAuth SA..
