전체 글
-
Spring Boot 핵심 기능 1 - 내장 톰캣BackEnd/Spring Boot 2023. 3. 25. 11:30
이전에는 웹 애플리케이션을 구동하고 싶으면 웹 애플리케이션 서버(WAS)를 별도로 설치하고, 웹 애플리케이션 빌드 파일(WAR)을 배포해야 했습니다. WAR 배포 방식의 단점 톰캣 같은 WAS를 별도로 설치해야 합니다. 개발 환경 설정이 복잡합니다. 배포 과정이 복잡합니다. 톰캣의 버전을 변경하려면 톰캣을 다시 설치해야 합니다. 이런 문제를 해결하기 위해 톰캣을 라이브러리로 제공하는 내장 톰캣(embed tomcat) 기능을 제공합니다. 외장 서버 vs 내장 서버 외장 서버: 웹 애플리케이션 서버에 WAR 파일을 배포하는 방식으로 WAS를 실행해서 동작합니다. 내장 서버: 애플리케이션 JAR 안에 다양한 라이브러리들과 WAS 라이브러리가 포함되는 방식으로 main() 메서드를 실행해서 동작합니다. 스프링..
-
Item 37. ordinal 인덱싱 대신 EnumMap을 사용하라Book/Effective Java 3E 2023. 2. 24. 19:00
package effectivejava.chapter6.item37; import java.util.*; import static java.util.stream.Collectors.groupingBy; import static java.util.stream.Collectors.toSet; // EnumMap을 사용해 열거 타입에 데이터를 연관시키기 // 식물을 아주 단순하게 표현한 클래스 class Plant { enum LifeCycle { ANNUAL, PERENNIAL, BIENNIAL } final String name; final LifeCycle lifeCycle; Plant(String name, LifeCycle lifeCycle) { this.name = name; this.lifeCyc..
-
트랜잭션 전파(propagation)BackEnd/Spring DB 2023. 2. 15. 22:00
스프링 트랜잭션 전파 옵션 REQUIRED 전파 옵션에 별도의 설정을 하지 않으면 기본으로 사용되는 설정으로, 기존 트랜잭션이 없으면 생성하고 있으면 참여합니다. 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다. 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다. REQUIRES_NEW 항상 새로운 트랜잭션을 생성합니다. 기존 트랜잭션 없음: 새로운 트랜잭션을 생성한다. 기존 트랜잭션 있음: 새로운 트랜잭션을 생성한다. SUPPORT 트랜잭션을 지원한다는 뜻으로 기존 트랜잭션이 없으면 없는대로 진행하고, 있으면 참여합니다. 기존 트랜잭션 없음: 트랜잭션 없이 진행한다. 기존 트랜잭션 있음: 기존 트랜잭션에 참여한다. NOT_SUPPORT 트랜잭션을 지원하지 않는다는 의미입니다. 기존 트랜잭션 없음: 트랜잭션..
-
트랜잭션(Transaction) 심화BackEnd/Spring DB 2023. 2. 11. 08:50
이번 포스팅부터는 다음 프로젝트를 참고하시면 됩니다. Spring Transaction 트랜잭션 적용 확인 @Transactional을 통한 선언적 트랜잭션 방식에서 스프링 트랜잭션은 AOP를 기반으로 동작합니다. @Transactional을 메서드나 클래스에 붙이면 해당 객체는 트랜잭션 AOP 적용의 대상이 되고, 결과적으로 실제 객체 대신에 트랜잭션을 처리해주는 프록시 객체가 스프링 빈에 등록됩니다. 그리고 주입을 받을 때도 실제 객체 대신에 프록시 객체가 주입됩니다. 트랜잭션 프록시가 호출하는 트랜잭션의 시작과 종료를 명확하게 로그로 확인하기 위해서는 application.properties에 다음을 추가합니다. logging.level.org.springframework.transaction.in..
-
데이터 접근 기술- 활용BackEnd/Spring DB 2023. 2. 9. 01:00
Querydsl을 사용한 리포지토리는 스프링 데이터 JPA를 사용하지 않았습니다. 이번에는 스프링 데이터 JPA와 Querydsl을 함께 사용하는 구조에 대해 알아보겠습니다. 복잡한 쿼리 분리 ItemRepositoryV2는 기본 CRUD 기능을 제공하는 스프링 데이터 JPA 리포지토리이고, ItemQueryRepositoryV2는 복잡한 쿼리 기능을 제공하는 Querydsl 리포지토리입니다. package hello.itemservice.repository.v2; import hello.itemservice.domain.Item; import org.springframework.data.jpa.repository.JpaRepository; public interface ItemRepositoryV2 e..
-
데이터 접근 기술- QueryDSLBackEnd/Spring DB 2023. 2. 4. 09:11
QueryDSL Query + Domain + Specific + Language 쿼리에 특화된 프로그래밍 언어 단순, 간결, 유창 다양한 저장소 쿼리 기능 통합 QueryDSL 장단점 장점 동적 쿼리 문제를 해결합니다. 쿼리 문장에 오타가 있어도 컴파일 시점에 오류를 막을 수 있습니다. 메서드 추출을 통해서 코드를 재사용할 수 있습니다. 자바 코드로 쿼리를 작성할 수 있습니다. 단점 Q코드 생성을 위한 APT를 설정해야 합니다. 복잡한 쿼리의 경우 쿼리 분석이 어렵습니다. 전체 쿼리를 DBMS 툴로 조회하기 위해서는 실행되는 쿼리를 로깅하는 등의 방식으로 확인해야 합니다. QueryDSL 이전 정리 글 01. Querydsl 레퍼런스 문서 02. Querydsl 설정 03. Querydsl 기본 문법 ..