Spring 81

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 ObjectMa..

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

[📙 숙련 Spring] 3-5. Spring Data JPA 실습

📙 목차요구사항회원 생성 기능특정 회원 조회 기능비밀번호 수정 기능게시글 생성 기능게시글 전체 조회 기능특정 게시글 조회 기능특정 게시글 삭제 기능1. 요구사항게시판 프로젝트회원 관련 기능1. 회원 생성 기능 C2. 특정 회원 조회 기능 R3. 비밀번호 수정 기능 U게시판 관련 기능1. 게시글 생성 기능 C2. 게시글 전체 조회 기능 R3. 특정 게시글 조회 기능 R (작성자 나이 포함)4. 특정 게시글 삭제 기능 D모든 데이터 통신은 JSON을 사용한다. 3-4. Entity 설계 실습 이어서 진행 https://github.com/gajicoding/spring-jpa-board/tree/v1.1.0 GitHub - gajicoding/spring-jpa-boardContribute to gajic..

Spring/강의 2025.05.21

[📙 숙련 Spring] 3-4. Entity 설계 실습

📙 목차요구사항프로젝트 준비BaseEntity 설계 및 적용하기회원(Member) Entity 설계하기게시글(Board) Entity 설계하기연관관계 설정하기1. 요구사항게시판 프로젝트회원(Member)로그인에 사용할 아이디 : 필수, 유일로그인에 사용할 비밀번호 : 필수나이생성 시간수정 시간게시글(Board)제목 : 필수내용 : 긴 텍스트생성 시간수정 시간연관관계한명의 회원은 여러개의 게시글을 작성할 수 있다. (단방향)2. 프로젝트 준비프로젝트 생성 Database 준비board 스키마 생성 JPA 관련 설정# application.properties# DataSource 설정spring.datasource.url=jdbc:mysql://localhost:3306/boardspring.datas..

Spring/강의 2025.05.21

[📙 숙련 Spring] 3-3. Spring Data JPA

📙 목차Spring Boot와 JPA Spring Data JPASimpleJpaRepositoryQuery MethodsJPA AuditingJPA Auditing 적용하기1. Spring Boot와 JPASpring Boot는 JPA 설정을 자동으로 구성하여 JPA를 쉽게 사용할 수 있도록 도와준다. 기존 코드직접 트랜잭션을 사용한다.(JPA는 기본적으로 하나의 트랜잭션 안에서 기능을 수행한다)직접 EntityManagerFactory 와 EntityManager 를 생성하여 사용한다.직접 close() 하여 연결을 종료 해야한다.public static void main(String[] args) { // EntityManagerFactory 생성 EntityManagerFactory..

Spring/강의 2025.05.21

[📙 숙련 Spring] 3-2. JPA Entity 만들기

📙 목차@Entity@TableDDL 자동 생성 (hibernate.hbm2ddl.auto)EntityManager를 사용한 JPA 실행 예필드 매핑기본 키(PK) 연관관계 Mapping1. @Entity @Entity JPA가 관리하는 Entity 클래스임을 선언하는 어노테이션이다.반드시 기본 생성자와 PK(@Id) 필드를 포함해야 한다.클래스명과 동일한 이름이 Entity 이름 기본값이며, @Entity(name = "CustomName")으로 변경 가능하다.사용할 수 없는 대상: final, enum, interface, inner 클래스, 그리고 final 필드.@Entity(name = "Tutor") // 기본 값, name 속성은 생략하면 된다.@Table(name = "tutor")pub..

Spring/강의 2025.05.21

[📙 숙련 Spring] 3-1. JPA

📙 목차패러다임 불일치(Paradigm Mismatch)JPAJPA 사용 이유 영속성 컨텍스트1. 패러다임 불일치(Paradigm Mismatch) 패러다임 불일치(Paradigm Mismatch) 객체 지향 프로그래밍(Object-Oriented Programming)과 관계형 데이터베이스(Relational Database)가 서로 다른 설계 철학과 구조를 가지고 있기 때문에 이 둘을 연결할 때 생기는 구조적·개념적 충돌을 의미한다.객체는 클래스와 참조, 캡슐화, 상속, 다형성 등 객체 지향 개념을 따르지만RDB는 테이블, 외래 키, 정규화, SQL 등 관계형 모델을 기반으로 동작한다.이러한 차이로 인해, 객체를 RDB에 저장하거나 불러올 때 반복적인 SQL 작성, JOIN 처리, 객체 조립, 동일..

Spring/강의 2025.05.20