Spring(7)
-
flyway로 DB 관리하기(with spring boot & gradle)
이 글에서는 flyway를 어떻게 spring boot에 적용하는지에 대해 작성하겠습니다. Flyway는 DB 버전 관리 툴로, 다양한 DB를 지원하고 마이그레이션을 지원합니다. 의존성 추가 및 기본 설정plugins { ... id("org.flywaydb.flyway") version "9.0.0"}dependencies { implementation("org.flywaydb:flyway-core")} build.gradle에 이렇게 두 개의 문장을 추가해 의존성을 추가해줍니다. flyway { url = db_url user = db_user password = db_password locations = arrayOf(db_migration_file_loc) # 기본 위치는 filesyst..
2024.08.16 -
(Spring) JpaRepository는 인터페이스인데 어떻게 동작할까?
Java의 인터페이스 Java의 인터페이스는 추상 메서드를 정의할 수 있습니다. public interface Person { void walk(); void run(); } 이제는 너무나 잘 아시겠지만, Java 8버전 이후로는 기본 메서드를 작성할 수 있습니다. public interface Person { void walk(); void run(); default void sayHello() { System.out.println("Hello"); } } 또한 인터페이스의 추상메서드를 사용하기 위해서는 반드시 구현이 필요합니다. 왜냐하면 껍데기만 제공해주는 '인터페이스'이기 때문이죠. public class User implements Person { void walk() { System.out.pr..
2023.08.31 -
(Spring) JPA exists를 최적화하는 여러가지 방법들
🧐들어가며 JPA는 기본적으로 많은 메서드를 지원합니다. 특히 Spring의 Spring Data JPA는 Spring Data Repo가 사용하는 여러 리포지토리 메서드를 상속받고 있기 때문에 많은 메서드를 사용할 수 있습니다. Spring Data Repo는 이렇게 기본적으로 리포지토리 리포지토리를 상속하고 있습니다. 특히 JPA는 기본 메서드뿐만 아니라 @Query 메서드를 사용해서 JPQL을 명시하여 사용할 수 있습니다. 🧐existsById JPA에서 기본으로 제공하는 existsById는 어떤 방식으로 동작할까요? Intellij에서 제공하는 JPABuddy를 사용하면 메서드의 쿼리를 추출할 수 있는 기능이 있습니다. 그러면 위와 같은 쿼리가 추출된다. 그런데 뭔가 이상합니다. 존재를 확인만 ..
2022.11.05 -
(Spring) DI/의존 객체 주입 패턴 + Lombok
🧐 스프링의 DI 스프링의 특징이라고 할 수 있는 DI는 Dependency Injection의 준말이다. 말 그대로 의존성 주입이며, 기본적으로 의존 객체 주입 패턴으로 이루어져 있다. 스프링에서는 bean을 직접 생성하는 것이 아닌 IoC, 즉 스프링 컨테이너가 관리하고 있다. 스프링은 가장 먼저 Controller 어노테이션을 찾고 이후 wiring 되어 있는 객체를 순차적으로 생성해서 컨테이너에 등록하는데, 이때 DI, 즉 의존관계 주입이 필요하다. 의존관계 주입에는 다음과 같은 방식이 주를 이룬다. 생성자 주입 방식 setter 주입 방식 autowired 어노테이션 주입 방식 🧐 생성자 주입 방식 public class MovieController { private final MovieServ..
2022.09.20 -
(Spring) Transactional 사용법
Transactional. 이 어노테이션을 왜 붙이는 지 모른다면, 트랜잭션에 대한 이해도가 부족한 것일 수 있다. Transaction에 대한 이해가 필요하다면 아래 문서를 참고해보자. (Database) 트랜잭션(ACID)과 무결성 구글에 트랙잭션을 검색하면 가장 많이 나오는 말이 있다. "DB의 상태를 변화시키기 수행하는 단위" 그런데 이것 만으로는 트랜잭션에 관해 전혀 감이 오지 않는다. (나만 그런가?) 나는 이 문장 mirrorofcode.tistory.com 그럼 트랜잭션에 대해서 안다고 가정하고 시작하겠다! @Transactional 스프링에서는 트랜잭션 처리를 간편하게 어노테이션으로 처리할 수 있다. 아래 코드를 보자. @Service @Transactional(readOnly = tru..
2022.08.10 -
(Spring) Why Maven? Why Gradle?
Spring Initializer를 사용하거나, Intellij를 사용하면 처음 Spring Project를 만들 때, 두 가지 빌드 방법을 볼 수 있다. Maven과 Gradle 둘 다 사용해보신 분들도 있을 것이고, 하나만 사용해 보신 분들도 있으리라 생각된다. 이번 글은 둘 중 하나만 사용해보신 분들을 위해서 작성되었다. 🧐What is Maven? Maven은 아파치 재단에서 만들어진 오픈소스 툴로, 프로젝트 매니징 툴이다. Project Obejct Model(POM)을 기반으로 하고 있으며, 프로젝트 빌드, 리포트, 도큐먼트 작업까지 관리할 수 있다. Maven을 사용해보신 분들은 알겠지만, POM.xml을 기반으로 프로젝트를 빌드한다. Maven이 추구하는 목표는 다음과 같다. 빌드 프로세스..
2022.08.07