2025/05/23 6

[CH 3 일정 관리 앱 Develop] 정리 & 회고

요구 사항 정의 및 설계https://gajicoding.tistory.com/348 [CH 3 일정 관리 앱 Develop] 요구 사항 정의 및 설계필수 기능 - 요구 사항 정의 Lv 0. API 명세 및 ERD 작성API 명세서 작성하기API명세서는 프로젝트 root(최상위) 경로의 README.md 에 작성ERD 작성하기ERD는 프로젝트 root(최상위) 경로의 README.md 에 첨부SQLgajicoding.tistory.com새롭게 알게된 지식Spring Boot 환경별 설정 관리하기 – application-{profile}.propertiesSpring Boot Logger 사용법 – SLF4J & LogbackJSON 포맷 변경하기: Jackson 설정 커스터마이징문제 해결JPA 변경사항..

JSON 포맷 변경하기: Jackson 설정 커스터마이징

1. Jackson이란? Java 객체와 JSON 간 변환(직렬화/역직렬화)을 담당하는 라이브러리Spring Boot 기본 JSON 처리 라이브러리로 자동 설정 제공2. JSON 포맷 변경이 필요한 이유 API 응답 형식 일관성 유지날짜/시간 포맷 표준화null 값 처리 방식 조절필드 네이밍 전략 변경 (camelCase ↔ snake_case)가독성 향상을 위한 pretty print 적용 등3. Jackson 설정 커스터마이징하는 방법 ObjectMapper 직접 설정@Configurationpublic class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new Object..

Spring/문법 2025.05.23

@LastModifiedDate 와 DB의 ON UPDATE CURRENT_TIMESTAMP 동시 사용 문제

updatedAt 필드를 자동으로 관리하는 방법 2가지JPA Auditing의 @LastModifiedDate: 엔티티가 변경될 때 JPA가 Java 객체의 필드를 수정DB의 ON UPDATE CURRENT_TIMESTAMP: DB에서 직접 updated_at 값을 자동 변경 이 둘을 동시에 사용하면 시간 값이 충돌하거나 예상치 못한 동작이 발생할 수 있다.발생 가능한 문제 문제 유형 설명 값 불일치애플리케이션에서 설정한 @LastModifiedDate 값과 DB에서 자동 설정한 값이 다를 수 있음엔티티 변경 감지 실패DB에서 자동 갱신한 값이 영속성 컨텍스트에 반영되지 않아 dirty checking에 영향을 줄 수 있음무한 업데이트 루프DB에서 업데이트된 시간 값으로 인해, 엔티티가 계속 변경되었다..

JPA 변경사항이 즉시 반영되지 않을 때 - 영속성 컨텍스트와 DB 값 불일치 문제

1. 문제 상황update API 에서,데이터베이스에는 이름 변경이 정상적으로 반영됨하지만 클라이언트에 반환되는 응답 DTO의 updatedAt 값은 변경 전 값이 계속 보여지는 문제 발생@Transactional@Overridepublic UserResponseDTO updateName(Long id, UserRequestDTO requestDTO) { User user = userRepository.findById(id) .orElseThrow(() -> UserExceptionFactory.notFoundById(id)); ... user.setName(requestDTO.getName()); return new UserResponseDTO(user);} DB 반..

Spring Boot Logger 사용법 – SLF4J & Logback

Spring Boot에서는 System.out.println() 대신 Logger를 사용한다. 처음에는 println이 더 직관적이고 간편하게 느껴질 수 있지만, 실제 서비스 운영 환경에서는 다음과 같은 요구 사항이 생긴다:로그 중요도 구분 (DEBUG, INFO, ERROR 등)로그 파일 저장 및 관리다양한 환경별 로그 수준 조절멀티스레드 환경에서도 안정적 동작일관된 포맷, 성능 최적화이를 위해 Spring Boot는 기본적으로 SLF4J(Simple Logging Facade for Java) + Logback 조합을 내장하여 제공한다.이 글에서는 왜 Logger를 사용해야 하는지, 어떻게 사용하는지, 그리고 실전에서 어떻게 설정하고 활용할 수 있는지 정리한다.1. System.out.println(..

Spring/문법 2025.05.23

Spring Boot 환경별 설정 관리하기 – application-{profile}.properties

Spring Boot 환경별 설정 관리하기application.properties 파일에 접미사를 붙여 다양한 환경(개발, 운영 등)에 맞는 설정을 관리하는 방법에 대해 정리하고자 한다.1. application-{profile}.propertiesSpring Boot에서는 다음과 같은 형태로 설정 파일을 분리할 수 있다.src/main/resources/├── application.properties # (공통 설정)├── application-dev.properties # (개발 환경)└── application-prod.properties # (운영 환경) 파일 구성 예시 # application.properties (공통 설정)server.port=8080spring.profiles.ac..

Spring/문법 2025.05.23