BE/Spring & Spring Boot 62

[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. 보안성 및 안정성도메인..

[Spring Boot, JPA] 관련 어노테이션

1. 엔티티(Entity)관련 어노테이션@Entity이 클래스가 JPA에서 관리되는 엔티티임을 선언데이터베이스 테이블에 매핑된다주의사항 : 반드시 기본 생성자 (public or protected)가 필요하다@Entity가 붙은 클래스는 final일 수 없다@Entitypublic class User { @Id @GeneratedValue private Long id; private String name;} @Table엔티티 클래스와 매핑될 데이터베이스 테이블을 지정한다기본적으로는 클래스 이름을 테이블 이름으로 사용하지만, 커스텀 이름을 지정할 때 사용한다속성 :name : 매핑할 테이블 이름schema : 스키마 이름catalog : 카탈로그 이름uniqueConstraints :..

[Spring Boot] 관련 어노테이션

1. 스프링부트 기본 설정 관련@SpringBootApplication스프링부트 애플리케이션의 시작점임을 명시@Configuration, @EnableAutoConfiguration, @ComponentScan 을 결합한 어노테이션@SpringBootApplicationpublic class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); }} @EnableAutoConfiguration스프링부트가 클래스패스에 있는 라이브러리와 애플리케이션의 설정을 기반으로 자동 설정을 활성화 @ConfigurationJava 기반의 설정 파일임을 명시@B..

[Spring Boot] Validation 유효성 검사

애플리케이션에서 입력값이 예상한 조건에 부합하는지 확인하는 과정 필요한 이유1. 데이터 무결성 보장잘못된 입력값으로 인해 발생할 수 있는 데이터베이스나 시스템 오류 방지2. 보안 강화유효하지 않은 데이터를 허용하지 않아 악의적인 요청 차단3. 사용자 경험 향상잘못된 데이터를 입력했을때 즉시 피드백 제공Spring Boot에서 Validation 사용하기1. 의존성 추가 org.springframework.boot spring-boot-starter-validation 2. 주요 어노테이션어노테이션설명@NotNull값이 null이 아니어야 함@NotEmpty값이 null이 아니고, 빈 문자열이 아니어야 함@NotBlank값이 null, 빈 문자열, 공백만 포함하지 않아야 함@Size문자열, 배열..

[Spring Boot] Thymeleaf 타임리프

Java 웹 애플리케이션에서 HTML 템플릿 엔진으로 사용되는 라이브러리서버에서 동적으로 데이터를 렌더링하여 HTML을 생성하며, Spring Boot와 잘 통합되어 뷰(View)를 생성하는데 널리 사용됨Thymeleaf의 주요 특징1. HTML 템플릿 파일로 작동순수 HTML로 디자인 할수 있어 HTML파일이 브라우저에서도 제대로 표시됨개발자와 디자이너가 동일한 파일을 사용할 수 있음2. Spring MVC와 강력한 통합컨트롤러에서 전달된 모델 데이터를 쉽게 활용 가능3. 표현식 기반의 문법 지원데이터 바인딩, 반복, 조건문 등을 쉽게 처리할 수 있음4. 확장성커스텀 태그와 속성을 정희할 수 있어 유연한 사용이 가능5. 서버 및 클라이언트에서 모두 동작 가능서버 사이드 렌더링을 기본으로 지원하지만, 클..

[Spring Boot] Page

Page (페이징)주로 Spring Data JPA 에서 사용되는 인터페이스페이징 처리는 데이터베이스에서 많은 데이터를 한번에 불러오지 않고, 필요한 크기만큼 나누어 가져오는 방식Page와 Pageable1. Page페이징된 데이터를 담고있는 객체페이징 처리된 데이터와 함께, 전체 데이터의 크기, 페이지 정보 등을 제공2. Pageable페이징 요청 정보를 담고있는 객체현재 페이지 번호, 페이지 크기(한페이지에 몇개의 데이터) 등을 설정하여 페이징 요청에 사용됨주요 메서드데이터 관련 메서드1. getContent()현재 페이지의 데이터리스트를 반환2. getTotalElements()전체 데이터 개수를 반환3. getTotalPages()전체 페이지 수를 반환4. getNumber()현재 페이지 번호를 ..