스프링 부트에서는 @Transactional 어노테이션을 이용하여 복잡한 트랜잭션 처리를 단순화한다. 클래스, 메서드 단위로 어노테이션을 추가할 수 있고, 스프링이 AOP를 통해 프락시를 도입하여 트랜잭션 처리를 모두 해결해 준다. @Transactional 세부 설정 트랜잭션의 세부 설정을 통해 상황별로 적절한 설정을 하여 성능을 최적화할 수 있다. @Transactional 세부 설정 종류 Isolation (격리 수준 설정) Propagation(전파 수준 설정) readOnly 속성 트랜잭션 롤백 예외 설정 time-out 설정 1. Isolation(격리 수준) 일관성이 깨지는 것을 어느 정도까지 허용하느냐에 대한 설정이다. 기본 설정은 DEFAULT이다. @Transactional(isolat..
빈 스코프란? 스프링 빈은 기본적으로 싱글톤으로 관리된다. 그래서 스프링 컨테이너는 스프링 싱글톤 컨테이너라고 불리기도 한다. 그러나 이것은 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 때문이다. "스코프"는 빈이 존재할 수 있는 범위를 뜻한다. 한마디로 빈 스코프는 빈이 존재할 수 있는 범위 또는 빈의 라이프사이클의 범위라고 생각할 수 있을 것 같다. 스프링은 아래와 같이 다양한 빈 스코프를 지원한다. 싱글톤 : default, 스프링 컨테이너의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 : 스프링 컨테이너는 빈의 생성과 의존성 주입까지만 관여하고, 더 이상 관리하지 않는 짧은 범위의 스코프 웹 관련 스코프 : request, session, application 등 여러 스코프..
Spring Bean LifeCycle Spring DI 컨테이너는 Bean으로 등록된 객체의 생명주기 관리를 위임받아서 관리하고, 객체가 필요한 곳에서 이 Bean을 의존성 주입받아서 사용할 수 있다. 스프링 컨테이너가 생성될 때 객체(Bean)를 생성하고 의존성을 주입하는데, 의존관계 주입 후 Bean을 초기화하고, 스프링 컨테이너를 종료하기 전에 객체를 소멸시켜야 한다. 객체의 생성과 초기화 분리 객체를 초기화 한다는 것은, 객체 생성 이외에 외부 커넥션을 연결하거나, 초기값을 등록하는 등의 여러 작업을 말한다. 이 과정을 생성자에서 진행해도 되지만, 객체 생성에 비해 초기화는 비교적 무거운 일을 수행하기 때문에 객체를 생성하는 부분과 초기화하는 부분을 명확하게 나누는 것이 좋다. 빈 생명주기 스프..
DI : Dependency Injection (의존성 주입) 의존성 주입은 객체 간의 의존성을 줄이고 유지보수성을 높이기 위해 사용된다. Spring 컨테이너에 여러 컴포넌트를 Bean으로 등록하여 생명주기 관리를 위임하고, 이 Bean으로 등록한 객체를 주입받아서 사용할 수 있다. DI 덕분에 개발자가 객체 생성에 대한 부분을 신경 쓰지 않고 비즈니스 로직에만 집중할 수 있게 된다. 의존성 주입 방법 의존성 주입 방법은 4가지가 있다. 생성자 주입 Setter 주입 Field 주입 일반 메서드 주입 이 중, 생성자 주입을 가장 많이 사용하고 Spring에서 권장하는 방법이다. 생성자 주입 생성자를 통해 의존성을 주입하는 방법이다. 생성자 호출 시점에 딱 한 번만 호출되는 것이 보장된다. 불변, 필수 ..
@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 메..
.properties / .yml application.properties와 application.yml 두 가지 방식은 사실 똑같다. (크게 다르지 않다.) 두가지 방식 모두 프로젝트의 설정을 담당하는 파일이다. IntelliJ에서 기본적으로 Spring Initializr를 통해 Spring Boot 프로젝트를 생성하면 application.properties가 생성되지만, application.yml도 많이 사용되는 것 같다. 차이점 두가지 모두 똑같은 설정 정보를 입력하지만, 구조가 다르다. properties는 key=value의 형태로 이루어져 있고, yml은 계층 구조로 이루어져 있다. 아래 예제로 간단하게 확인해 보자. yml group1: group2: group3: message1: h..
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 정보를 설정해 주자..
@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 ====================..