springboot 55

[Spring Boot] OSIV

OSIV (Open Session in View)란? OSIV(Open Session in View)는 Hibernate와 같은 JPA 구현체에서 제공하는 디자인 패턴임. • 클라이언트의 요청이 시작된 후, **영속성 컨텍스트(EntityManager)**가 View(Rendering)까지 열려 있는 상태를 유지하도록 설정함. • 이 패턴은 지연 로딩(Lazy Loading)을 지원하기 위해 사용됨.OSIV 동작 방식 1. 요청 시작 • 클라이언트의 요청이 들어오면, 영속성 컨텍스트가 생성됨. 2. 서비스 및 리포지토리 레이어 처리 • 서비스나 리포지토리에서 필요한 엔티티를 조회 및 수정함. 3. View 렌더링 단계 • View에서 요청한 엔티티에 대해 지연 로딩이 필요한 경우, 영속성 컨텍스트가 열려..

[Spring Boot] Swagger와 OpenAPI

Swagger와 OpenAPI란?SwaggerSwagger는 RESTful API를 설계, 문서화, 그리고 테스트할 수 있는 도구 모음임. • 개발자가 REST API를 쉽게 이해하고, 활용할 수 있도록 문서와 테스트 환경을 제공함. • Swagger는 OpenAPI의 초기 버전(2.0)에서 시작되었으며, 이후 OpenAPI로 발전했음. OpenAPIOpenAPI는 API의 설계와 문서화를 위한 표준 사양임. • OpenAPI Specification(OAS): RESTful API를 정의하는 문법 및 규칙. • YAML 또는 JSON 형식으로 API의 엔드포인트, 요청/응답, 데이터 구조 등을 명세함.Swagger와 OpenAPI의 관계 • Swagger는 OpenAPI Specification(OAS..

[Spring Boot] MockMvc

MockMvc란? MockMvc는 Spring Boot에서 제공하는 테스트 유틸리티임. • Spring MVC 애플리케이션의 컨트롤러를 서버를 띄우지 않고도 테스트할 수 있도록 지원함. • 실제 HTTP 요청을 보내지 않고, 가상으로 요청 및 응답을 처리함.MockMvc의 주요 특징 1. 가상 HTTP 요청 처리 • Mock 환경에서 컨트롤러 로직을 테스트할 수 있음. • 실제 서버 없이도 HTTP 요청/응답의 동작을 확인 가능함. 2. 완전한 Spring 컨텍스트 지원 • MockMvc는 Spring의 DI(의존성 주입)와 컨텍스트를 활용해 컨트롤러 및 관련 빈을 로드함. 3. Rest API 테스트 가능 • GET, POST, PUT, DELETE 등의 HTTP 메서드와 다양한 요청 파라미터를 테스트..

[Spring Boot] Specification과 QueryDSL

1. JPA Specification 개념 • Spring Data JPA에서 제공하는 동적 쿼리 작성 기능. • Java 객체 기반으로 조건을 조합하며, Criteria API를 내부적으로 활용. • 복잡한 쿼리를 작성하면서도, 조건을 재사용할 수 있도록 설계되었다. 구성 요소 • Specification 인터페이스: 동적 쿼리의 조건을 정의. • Predicate: 조건문을 의미하며, CriteriaBuilder를 통해 생성.Specification의 주요 메서드 • toPredicate() • 동적 쿼리의 핵심 메서드로, 필터 조건을 정의. 기본 형태Specification specification = (root, query, criteriaBuilder) -> { // 조건 정의 ret..

[Spring Boot] List<Sort.Order>와 Sort.Order.desc()

출처 : ChatGPTSpring Data JPA 또는 Spring에서 정렬을 설정할 때 사용되는 코드. 주로 데이터베이스에서 데이터를 정렬하여 가져오기 위한 요청을 만들 때 활용된다구조 설명 1. Sort 클래스:  • Spring Data JPA에서 제공하는 클래스.  • 정렬 조건(오름차순, 내림차순)을 정의할 때 사용.  • 여러 컬럼에 대한 정렬 기준을 설정할 수 있다. 2. Sort.Order 클래스:  • 단일 정렬 조건(컬럼 이름과 방향)을 정의한다.  • 정렬 방향:  • Sort.Order.asc() → 오름차순 정렬.  • Sort.Order.desc() → 내림차순 정렬.List sorts = new ArrayList();sorts.add(Sort.Order.desc("columnN..

[Spring Boot, JPA] EntityManager

JPA에서 데이터베이스와 상호작용하기 위해 사용되는 핵심 인터페이스JPA의 영속성 컨텍스트를 관리하고, 엔티티의 생명주기를 제어하며, 데이터베이스 작업(저장, 업데이트, 삭제 등)을 수행한다엔티티매니저는 JPA 표준 사양에 속하며, 스프링부트에서는 보통 Hibernate가 이를 구현체로 사용한다 주요 역할1. 영속성 컨텍스트 관리엔티티를 영속성 컨텍스트에 저장하고 관리한다영속성 컨텍스트는 엔티티의 1차 캐시 역할을 수행하며, 엔티티 상태를 추적한다2. 엔티티 상태 관리Transient : 영속성 컨텍스트에 포함되지 않은 상태Persistent : 영속성 컨텍스트에 포함되어 관리되는 상태Detached : 영속성 컨텍스트에서 분리된 상태Removed : 삭제 예정 상태3. 데이터베이스 작업 처리데이터 저장..

[Spring Boot] @ControllerAdvice

Spring MVC에서 사용되는 어노테이션. 전역 예외 처리, 전역 데이터 바인딩, 전역 모델 처리와 관련 있다컨트롤러 전역에서 특정 동작을 적용할 수 있도록 도와준다 관련된 어노테이션1. @ExceptionHandler특정 예외(Exception) 발생 시 해당 예외를 처리하는 메서드에 사용된다@ControllerAdvice와 함께 사용하면 모든 컨트롤러에서 발생한 특정 예외를 처리할 수 있다속성value : 처리할 예외 타입을 지정@ControllerAdvicepublic class GlobalExceptionHandler { @ExceptionHandler(NullPointerException.class) public ResponseEntity handleNullPointerExcepti..

[Spring Boot] PSA

스프링 프레임워크가 소프트웨어 아키텍처 설계에 기반하여 따르는 핵심 원칙(Principles)과 유연성(Flexibility)을 의미사용자가 원하는 방식으로 자유롭게 애플리케이션을 설계하고 구현할 수 있는 기반을 제공 주요원칙1. 선택과 유연성 (Choice and Flexibility)스프링은 강제적인 사용법 대신 다양한 선택지를 제공예 : XML설정, Java Config, 어노테이션 기반 설정 모두 지원2. POJO 기반 개발 (Plain Old Java Object)스프링은 비즈니스 로직이 특정 프레임워크나 기술에 종속되지 않도록 POJO로 개발을 장려함3. Non-Invasive Programming Model스프링은 비침투적 방식으로 설계되어, 특정 프레임워크에 종속적인 코드를 최소화한다즉, ..

[Spring Boot] AOP

관점 지향 프로그래밍프로그램의 핵심 로직과 공통적으로 사용되는 기능(횡단 관심사)을 분리하여 코드를 더 간결하고 유지보수하기 쉽게 만드는 프로그래밍 기법스프링에서 AOP는 애플리케이션 전반에 걸친 공통 로직을 캡슐화 하는데 사용 주요 개념1. 횡단 관심사 (Cross-Cutting Concern)여러 클래스나 메서드에서 반복적으로 나타나는 공통 기능예 : 로깅, 트랜잭션 관리, 보안 검사 등2. 핵심 관심사 (Core Concern)애플리케이션의 주요 비즈니스 로직3. AOP의 역할횡단 관심사를 핵심 관심사에서 분리하여 모듈화코드 중복을 줄이고 비즈니스 로직에만 집중할 수 있도록 돕는다AOP에서 사용하는 주요 용어1. Aspect횡단 관심사를 모듈화한 코드 단위예 : 로깅 기능을 캡슐화한 모듈2. Joi..

[Spring Boot] DTO

DTO (Data Trsnfer Object)데이터 전송객체, 시스템 간 데이터를 주고받을 때 사용하는 객체주로 계층 간 데이터를 전달하거나 데이터를 캡슐화하여 전송하는데 사용됨 특징1. 데이터 전송 목적데이터베이스, 서비스, 컨트롤러 등 여러 계층 간 데이터를 전달하기 위해 사용함2. 필드와 Getter, Setter 만 포함비즈니스 로직은 포함하지 않으며, 단순히 데이터를 저장하고 전달함3. Immutable 또는 Mutable일반적으로 DTO는 불변객체로 만들어지는 경우가 많다하지만 필요에 따라 Setter를 제공하여 Mutable하게 구현하기도 한다 사용하는 이유1. 계층 간 데이터 전달컨트롤러, 서비스, 데이터베이스 등의 계층 간 데이터를 전달하는 표준화된 객체로 사용2. 보안성 및 안정성도메인..