Spring29 JPA에서 Enum 활용 방법 (ORDINAL vs STRING 등) 이전에 다뤘던 Enum의 객체지향적 활용방법https://record47584.tistory.com/81 Enum의 객체 지향적 활용 방법Enum 이란?서로 관련된 상수들의 집합을 타입으로 정의한 것단순 static final 상수보다 타입 안정성이 높음 (컴파일 타임에 오타나 잘못된 값을 방지)작성 예시public enum ProductStatus{ FOR_SALE, // 판매 중record47584.tistory.com Enum을 DB 컬럼에 매핑하는 이유문자열로 상태를 관리하는 경우, 오타나 정합성 문제가 발생할 수 있음타입 안정성 확보 @Enumerate 전략 선택 - ORDINAL vs STRINGJPA에서 Enum 필드를 DB 컬럼에 매핑할 때는 @Enumerated 어노테이션을 붙여야 한.. 2026. 7. 21. N+1 문제의 개념과 해결 방법 N+1 문제란? 처음 조회를 위해 1번의 SQL이 실행되고, 연관된 데이터를 조회하기 위해 N번의 SQL이 추가로 실행되는 현상 지연 로딩(Lazy Loading) 된 연관 엔티티를 반복적으로 조회할 때 발생처음에는 부모 엔티티만 조회하고, 연관 엔티티에 접근할 때마다 추가 SQL이 실행되기 때문에 데이터 개수(N)만큼 쿼리가 증가 지연 로딩 (Lazy Loading) 이란?연관된 엔티티를 처음부터 조회하지 않고, 실제로 사용할 때 조회하는 방식 프로젝트 구조 (ERD) N+1 과의 1차전 (@EntityGraph 활용)// 댓글 모두 조회 @Transactional(readOnly = true) public List getAll(Long scheduleId) { List c.. 2026. 7. 9. 빈 순환 참조 발생 (The dependencies of some of the beans in the application context form a cycle) 양방향 매핑을 구현하는 과정에서 아래와 같은 에러가 발생했다.2026-07-07T15:54:13.312+09:00 ERROR 5692 --- [Schedule2Project] [ main] o.s.b.d.LoggingFailureAnalysisReporter : ***************************APPLICATION FAILED TO START***************************Description:The dependencies of some of the beans in the application context form a cycle: commentController defined in file [D:\workspace\Schedule2Project\.. 2026. 7. 7. IoC/DI, 스프링 컨테이너와 Bean의 개념 IoC (Inversion of Control) (제어의 역전) 란?객체의 생성과 관리를 개발자가 하는 것이라 아니라 프레임워크가 대신하는 것// 일반 코드public class A { b = new B(); // 개발자가 클래스를 직접 생성, 제어}// 제어의 역전public class A { private B b; // 코드에서 객체를 생성하지 않음, 어디선가 받아온 객체를 b에 할당} 스프링은 제어의 역전을 중요한 컨셉으로 삼고 있으며, 객체를 생성하고 제어하는 주체를 스프링 컨테이너 라고 한다. DI (Dependency Injection) (의존성 주입) 란? 외부에서 객체를 주입받아 사용하는 것 의존성 주입에 대해서는 이미 다룬적이 있다.( 참고 : https://record475.. 2026. 7. 7. 생성자를 구현했는데도 @NoArgsConstructor를 쓰는 이유 @NoArgsConstructor란?Lombok에서 제공하는 어노테이션으로, 매개 변수가 없는 생성자를 자동으로 생성해준다.만약 Schedule 이라는 클래스가 있다면,public Schedule() { } 위의 코드를 자동으로 추가해주는 어노테이션인 것이다. 발생한 상황프로젝트를 진행하던 중, 아래와 같이 Entity를 만들었다.@Getter@Entity@Table(name = "schedules")@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Schedule extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long .. 2026. 7. 4. Spring에서의 예외 처리 (+ 커스텀 에러 구현) Spring에서의 예외 처리자바의 try-catch문을 대신해서, 스프링에서의 핸드링 방식을 정리해 보았다. 1. Spring 기본 예외 처리2. @ExceptionHandler3. @RestControllerAdvice 이렇게 3가지가 존재하고, 동시에 존재할 경우 위의 3,1,2 순서대로 우선순위를 가진다. 1. Spring 기본 예외 처리 (비권장) @Transactional(readOnly = true) public GetScheduleResponse getOne(Long id) { Schedule schedule = scheduleRepository.findById(id).orElseThrow( ()->new IllegalStateExcepti.. 2026. 7. 2. 이전 1 2 3 4 5 다음