김영한 님의 스프링 DB 2편 - 데이터 접근 활용 기술 강의를 보고 작성한 내용입니다.
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2/dashboard
개발자는 SQL만 작성하면 된다
SQL을 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다
JDBC를 직접 사용할 때 발생하는 중복을 제거해주고 여러 편리한 기능을 제공
SQL Mapper 기술과 다르게 JPA는 기본적인 SQL을 대신 작성하고 처리해준다
개발자가 저장하고 싶은 객체를 자바 컬렉션에 저장하고 조회하듯이 사용하면 된다
ORM 기술이 데이터베이스에 해당 객체를 저장하고 조회해준다
자바에서 ORM을 사용할 때는 JPA 인터페이스를 사용하고 구현체로 Hibernate를 사용
스프링 데이터 JPA, Querydsl은 JPA를 편리하게 사용할 수 있도록 도와주는 프로젝트
Data Transfer Object
기능은 없고 데이터만 전달하는 용도로 사용되는 데이터 전송 객체
DTO의 위치는 DTO를 최종적으로 호출하는( 사용하는 ) 클래스가 있는 패키지
따로 DTO 패키지를 만들어도 괜찮다
ApplicationReadyEvent.class
: 스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트
@EventListener(ApplicationReadyEvent.class)
: 위 이벤트가 발생하면 스프링이 해당 어노테이션이 붙은 메서드를 호출
@PostConstruct
는, AOP 같은 부분이 아직 다 처리되지 않은 시점에 호출될 수도 있다
@EventListener
는 AOP를 포함한 스프링 컨테이너가 완전히 초기화된 후에 호출된다
스프링이 자동으로 수행하게 하려면 메서드를 가진 클래스가 스프링 빈으로 등록되어 있어야한다
@Import(MemoryConfig.class)
@SpringBootApplication(scanBasePackages = "hello.itemservice.web")
public class ItemServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ItemServiceApplication.class, args);
}
@Bean
@Profile("local")
public TestDataInit testDataInit(ItemRepository itemRepository) {
return new TestDataInit(itemRepository);
}
}
@Import
: 설정 파일 지정
scanBasePackages
: 컴포넌트 스캔 범위 지정
@Profile
특정 프로필인 경우에만 동작한다
위의 코드는 프로필이 local 인 경우에만 스프링 빈을 등록한다
스프링은 로딩 시점에 application.properties
의 spring.profiles.active
속성을 읽어서 프로필로 사용
ex> spring.profiles.active=local
: 스프링이 local 이라는 프로필로 동작
설정 하지 않으면 "default" 로 프로필이 실행된다
경로에 따른 차이
/src/main/resources
하위의 application.properties
는 /src/main
하위의 자바 객체를 실행할 때 동작하는 스프링 설정
/src/test/resources
하위의 application.properties
는 /src/test
하위의 자바 객체를 실행할 때 동작하는 스프링 설정