JPA 양방향 관계를 설정하고 테스트하다가 Controller 단에서 아래 예외가 발생하였다. 찾아보니 JSON 직렬화 하는 과정에서 무한 참조로인해 생긴 예외로 원인과 해결방안에 대해 정리해보려한다. java.lang.IllegalStateException: Cannot call sendError() after the response has been committed .. java.lang.StackOverflowError: null .. ~[jackson-databind-2.15.3.jar:2.15.3] JPA 양방향 순환 참조 어떤 상황이었는지 간단하게 시나리오를 구현해보자. User 와 Notice 엔티티가 있고 1:N 양방향 관계이다. - User public class User { @Id @G..
클라우드 서버에 jar 를 통해 배포하는 과정에서 애플리케이션을 정상적으로 종료하는 것에 대한 고려를 하지 못했다. kill -9 이 아닌 kill 을 통해 종료 요청을 보내는 것도 방법이지만 운영 환경에서 용이하게 관리할 수 있도록 shutdown endpoint 를 구현하기로 하였다. 비정상적인 종료와 정상적인 종료 Linux 환경을 기준으로 kill -9 을 통해 프로세스를 종료시킨다면, 프로세스는 현재 진행 중인 요청도 마무리하지 못하고 강제 종료되게 된다. 이는 비정상적인 종료로 데이터 손실이나 파일 손상과 같은 부작용을 초래할 수 있다. 정상 종료는 제어된 방식으로 애플리케이션을 종료하여 진행 중인 작업을 완료하고 시스템을 해제하고 데이터 무결성을 보장하며 종료할 수 있다. 정상적으로 종료하는..
spring boot 프로젝트에서 JWT 를 통한 인증을 수행하는데 Swagger 문서에는 인증에 대한 description 이 없어 그 부분을 추가하려고 한다. 사용하고 있는 라이브러리는 아래와 같다. // Swagger 설정 implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.2.0' Swagger 전역 설정 모든 API 에 대한 인증 설정을 추가하려면 전역 설정을 할 수 있다. 그렇다고 진짜로 인증을 요구하는 것은 아니다. 만약에 JWT 인증이 필요없는 API 가 있다면 그 API 에 대해서도 인증은 활성화되어있지만 JWT에 대한 검증 로직이 없기 떄문에 정상적으로 요청이 가능하다. 공식 문서를 통해 JWT 인증을 요구하는 설정 ..
Spring 3.x 프로젝트 환경을 설정하며 API 문서로 Swagger 를 사용하려고 하는데 그 전에 비해 방법이 더 간단해져 정리해보았다. Swagger 란 ? Swagger 는 REST API 를 설명하고 문서화하는 데 사용되며, OpenAPI 사양을 기반으로 구축된 오픈 소스 프레임워크이다. 공식 문서에 따라 OpenAPI 사양은 REST API 에 대한 API 설명 형식으로 아래를 포함한 전체 API 를 설명할 수 있다. - 사용 가능한 엔드포인트(/users) 및 각 엔드포인트의 작업 ( GET /users, POST /users ) - 작업 매개변수 각 작업에 대한 입력 및 출력 - 인증 방법 - 연락처 정보, 라이센스, 이용 약관 및 기타 정보 Swagger 적용하기 spring boot ..