Spring/Spring Boot

Spring/Spring Boot

[DB / Spring ] @Transactional 세부 설정 - 격리 수준 / 전파 수준 설정

스프링 부트에서는 @Transactional 어노테이션을 이용하여 복잡한 트랜잭션 처리를 단순화한다. 클래스, 메서드 단위로 어노테이션을 추가할 수 있고, 스프링이 AOP를 통해 프락시를 도입하여 트랜잭션 처리를 모두 해결해 준다. @Transactional 세부 설정 트랜잭션의 세부 설정을 통해 상황별로 적절한 설정을 하여 성능을 최적화할 수 있다. @Transactional 세부 설정 종류 Isolation (격리 수준 설정) Propagation(전파 수준 설정) readOnly 속성 트랜잭션 롤백 예외 설정 time-out 설정 1. Isolation(격리 수준) 일관성이 깨지는 것을 어느 정도까지 허용하느냐에 대한 설정이다. 기본 설정은 DEFAULT이다. @Transactional(isolat..

Spring/Spring Boot

[Spring] 빈 스코프 (Bean Scope) / 싱글톤, 프로토타입 등

빈 스코프란? 스프링 빈은 기본적으로 싱글톤으로 관리된다. 그래서 스프링 컨테이너는 스프링 싱글톤 컨테이너라고 불리기도 한다. 그러나 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. "스코프"는 빈이 존재할 수 있는 범위를 뜻한다. 한마디로 빈 스코프는 빈이 존재할 수 있는 범위 또는 빈의 라이프사이클의 범위라고 생각할 수 있을 것 같다. 스프링은 아래와 같이 다양한 빈 스코프를 지원한다. 싱글톤 : default, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 빈의 생성과 의존성 주입까지만 관여하고, 더 이상 관리하지 않는 짧은 범위의 스코프 웹 관련 스코프 : request, session, application 등 여러 스코프..

Spring/Spring Boot

[Spring] 빈 생명 주기 콜백 (Bean LifeCycle) @PostConstruct / @PreDestroy

Spring Bean LifeCycle Spring DI 컨테이너는 Bean으로 등록된 객체의 생명주기 관리를 위임받아서 관리하고, 객체가 필요한 곳에서 이 Bean을 의존성 주입받아서 사용할 수 있다. 스프링 컨테이너가 생성될 때 객체(Bean)를 생성하고 의존성을 주입하는데, 의존관계 주입 후 Bean을 초기화하고, 스프링 컨테이너를 종료하기 전에 객체를 소멸시켜야 한다. 객체의 생성과 초기화 분리 객체를 초기화 한다는 것은, 객체 생성 이외에 외부 커넥션을 연결하거나, 초기값을 등록하는 등의 여러 작업을 말한다. 이 과정을 생성자에서 진행해도 되지만, 객체 생성에 비해 초기화는 비교적 무거운 일을 수행하기 때문에 객체를 생성하는 부분과 초기화하는 부분을 명확하게 나누는 것이 좋다. 빈 생명주기 스프..

Spring/Spring Boot

[Spring] 의존성 주입 방법 (DI : Dependency Injection), 생성자 주입 / 필드 주입 / setter 주입, 생성자 주입을 사용하는 이유

DI : Dependency Injection (의존성 주입) 의존성 주입은 객체 간의 의존성을 줄이고 유지보수성을 높이기 위해 사용된다. Spring 컨테이너에 여러 컴포넌트를 Bean으로 등록하여 생명주기 관리를 위임하고, 이 Bean으로 등록한 객체를 주입받아서 사용할 수 있다. DI 덕분에 개발자가 객체 생성에 대한 부분을 신경 쓰지 않고 비즈니스 로직에만 집중할 수 있게 된다. 의존성 주입 방법 의존성 주입 방법은 4가지가 있다. 생성자 주입 Setter 주입 Field 주입 일반 메서드 주입 이 중, 생성자 주입을 가장 많이 사용하고 Spring에서 권장하는 방법이다. 생성자 주입 생성자를 통해 의존성을 주입하는 방법이다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장된다. 불변, 필수 ..

Spring/Spring Boot

[Spring Boot] @RequestMapping 매핑

@RequestMapping 메서드 위에 @RequestMapping("/url") 이 붙으면 /url이 호출 됐을 때 해당 메서드를 실행하도록 매핑한다. 해당 클래스가 @Controller로 지정되어 있다면 , 메서드가 String을 반환했을 때 반환 값은 view 이름으로 인식된다. @RestController로 지정되어 있다면, Rest API요청에 대한 응답 (JSON)을 반환한다. ex1) URL 다중 설정 대부분 속성을 배열로 제공하므로 다중 설정이 가능하다. @RequestMapping("/hello","/hi") public String hello(){ log.info("hello"); return "ok"; } ex2) HTTP 메소드 매핑 @RequestMapping이 특정 HTTP 메..

Spring/Spring Boot

[Spring] DB 연동 (MariaDB), MyBatis 사용

Spring DB 연동 Spring에서 DB 연결하는 방법을 간단히 알아보자. 1. gradle 설정 build.gradle에 아래와 같이 의존성을 추가해 주자. dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' //JDBC implementation 'org.springframework.boot:spring-boot-starter-jdbc' //mariadb runtimeOnly 'org.mariadb.jdbc:mariadb-java-client' } 2. DB datasource 설정 Spring project의 application.properties에서 아래와 같이 datasource 정보를 설정해 주자..

Spring/Spring Boot

[Spring MVC] @RequestBody와 @RequestHeader로 JSON 주고받기

@RequestParam, @PathVariable 기본적으로 @RequestParam과 @PathVariable을 통해 파라미터를 주고받는 방법으로 데이터를 처리할 수 있다. 2023.04.21 - [Spring_Web/SpringBoot] - [Spring] @PathVariable과 @RequestParam - 파라미터 받기 그러나, 데이터의 양이 많거나, 데이터를 사용자에게 드러내지 않고 싶을 때는 @RequestBody와 @RequestHeader로 JSON을 받아서 데이터를 처리할 수 있다. @RequestBody, @RequestHeader Header Content-Type: application/json userAccountId: accouunt123 ====================..

Spring/Spring Boot

[Spring / Transaction] 트랜잭션 실제 적용되고 있는지 확인하는 방법

스프링 프레임워크를 이용하여 트랜잭션을 적용할 때는 @Transactional 애노테이션을 통해 선언적 트랜잭션 방식을 사용한다. 그런데 이 기능은 매우 편리하게 트랜잭션 관련 코드를 대체해 주지만, 실제로 트랜잭션 관련 코드가 눈에 보이지 않고 AOP를 기반으로 동작하기 때문에 실제 트랜잭션이 적용되고 있는지 확인하기 어렵다. 이때, 트랜잭션이 TransactionSynchronizationManager 라는 클래스를 활용하여 확인할 수 있다. 트랜잭션 적용 확인 import org.springframework.transaction.support.TransactionSynchronizationManager; 위의 패키지의 TransactionSynchronizationManager가 제공하는 메서드를 ..

HSRyuuu
'Spring/Spring Boot' 카테고리의 글 목록