증상카테고리 수정 시, 상위 카테고리(⟨⟨parentId⟩⟩)를 제거하고 싶었으나API 요청에서 해당 필드를 아예 누락하거나 null로 보내도 변경이 반영되지 않음.원인기존에는 DTO에서 ⟨⟨parentId⟩⟩를 일반 필드(Integer, Long 등)로 선언하여값을 아예 보내지 않으면 서비스 레이어에서 “미수정”으로 간주,null로 보내면 프론트/백엔드/컨버터 해석에 따라 "변경 없음" 또는 "오류"로 처리됨.결과적으로 상위 카테고리를 “없음(null)”으로 업데이트하는 방법이 없음.해결 방법카테고리 수정 DTO에서 ⟨⟨parentId⟩⟩ 타입을 ⟨⟨JsonNullable⟩⟩로 변경.서비스에서 ⟨⟨parentId⟩⟩의 ⟨⟨isPresent()⟩⟩ 여부를 체크:present이고 값이 null이면, 진짜로..
증상테스트 코드에 ⟨⟨@Transactional⟩⟩을 적용했는데도,테스트 실행 후 카테고리 테이블의 ⟨⟨AUTO_INCREMENT⟩⟩ 값이 계속 증가함.원인MySQL의 ⟨⟨AUTO_INCREMENT⟩⟩는 트랜잭션이 롤백되어도 이미 증가한 값을 복구하지 않음.테스트와 실제 데이터베이스를 분리하지 않으면, 테스트로 인한 ID 증가 현상이 운영 데이터에 영향을 줄 수 있음.해결 방법테스트 환경을 운영 환경과 완전히 분리하여 별도의 DB를 사용하도록 설정.테스트 환경의 ⟨⟨AUTO_INCREMENT⟩⟩ 값이 증가해도 운영 DB에는 영향이 없도록 구조를 변경.결과테스트 환경에서 발생하는 ID 증가 이슈가 실제 서비스 DB에 영향을 미치지 않게 되었음.안심하고 테스트를 반복할 수 있는 환경을 마련함.
오늘 한 일 요약 예외 처리 시스템 구축 — 일관된 오류 응답을 위한 전역 예외 처리 체계 정립유효성 검사 시스템 구축 — DTO 기반 제약 조건과 검증 실패 응답 구조화감사 로그 기반 이력 시스템 도입 — 작성자·수정자 기록을 위한 컬럼 추가 및 ⟨⟨BaseAuditEntity⟩⟩ 도입커스텀 ⟨⟨UserDetails⟩⟩로 JWT에서 ⟨⟨userId⟩⟩ 추출 — 감사 주체 식별을 위한 JWT 정보 연동 예외 처리 시스템 구축 개요전역에서 일관된 구조로 예외를 처리하기 위해 ⟨⟨@RestControllerAdvice⟩⟩ 기반의 예외 처리 시스템을 구축했다.고민한 점단순한 500 에러 대신 의미 있는 메시지를 주고 싶었고, 예외 메시지 구조를 어떻게 정할지 고민했다.예외를 얼마나 세분화할지, 어떤 기준으로 ..
증상Spring Boot 애플리케이션 실행 시 다음과 같은 에러가 발생했다.***************************APPLICATION FAILED TO START***************************Description:The bean 'jpaAuditingHandler' could not be registered. A bean with that name has already been defined and overriding is disabled.Action:Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true원인JPA Aud..
오늘 한 일 요약 유저 엔티티 설계→ ⟨⟨BaseTimeEntity⟩⟩를 활용한 생성일·수정일 자동화, ⟨⟨role⟩⟩ 필드 ENUM 처리, JPA Auditing 적용회원가입 및 로그인 구현→ ⟨⟨BCrypt⟩⟩로 암호화 및 검증, 유효성 검증 포함, 유닛 테스트로 정상 및 실패 케이스 점검JWT 인증 도입→ ⟨⟨JwtProvider⟩⟩로 토큰 발급/파싱/검증 구현, ⟨⟨JwtAuthenticationFilter⟩⟩로 필터 적용, 보안 테스트 완료 유저 엔티티 설계개요회원 기능을 위한 유저 엔티티를 설계하고, JPA Auditing을 적용해 생성일·수정일을 공통 추상 클래스로 분리하였다.고민한 점⟨⟨createdAt⟩⟩, ⟨⟨updatedAt⟩⟩ 필드를 중복 없이 필요 엔티티에 공통 적용하는 방식⟨⟨r..
JWT란?JWT 정의JWT(JSON Web Token)는 JSON 포맷으로 정보를 안전하게 전달하기 위한 웹 표준(RFC 7519)이다. 주로 인증(Authentication) 및 인가(Authorization)에 사용된다.JWT 장점 무상태(Stateless): 별도의 서버 세션 관리를 하지 않아 서버의 부하가 줄고 확장성이 뛰어나다.효율적인 데이터 전송: JSON 형식으로 간단히 구조화된 데이터를 전달한다.범용성 및 확장성: 분산된 환경에서도 쉽게 적용 가능하다. JWT 구조 헤더(Header)토큰의 타입과 암호화 알고리즘을 명시한다.페이로드(Payload)클레임(Claims)을 담는다. 주로 사용자 정보 및 만료 시간이 포함된다.서명(Signature)토큰의 위변조를 방지하기 위한 서명 데이터를 ..