스프링 DB 2편 - 데이터 접근 활용 기술 (1)
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-2
데이터 접근 기술 진행 방식
SQLMapper
- JdbcTemplate
- MyBatis
ORM 관련 기술
- JPA, Hibernate
- 스프링 데이터 JPA
- Querydsl
SQL Mapper 주요 기능
- 개발자는 SQL만 작성하면 해당 SQL의 결과를 객체로 편리하게 매핑해준다.
ORM 주요 기능
- 기본적인 SQL은 JPA가 대신 작성하고 처리해준다. 개발자는 저장하고 싶은 객체를 마치 자바 컬렉션에 저장하고 조회하듯이 사용하면 ORM 기술이 데이터베이스에 해당 객체를 저장하고 조회해준다.
- JPA는 자바 진영의 ORM 표준이고, Hibernate는 JPA에서 가장 많이 사용하는 구현체이다.
- 스프링 데이터 JPA , Querydsl은 JAP를 더 편리하게 사용할 수 있게 도와주는 프로젝트이다.
DB를 사용하지않고 메모리에서 테스트 데이터를 사용하는 경우
@EventListener : 스프링 컨테이너가 완전히 초기화를 다 끝내고, 실행 준비가 되었을 때 발생하는 이벤트이다. 스프링이 이 시점에 해당 애노테이션이 붙은 initData() 메서드를 호출해준다.
이 기능 대신 @PostConstruct 를 사용할 경우 AOP 같은 부분이 아직 다 처리되지 않은 시점에 호출될 수 있기 때문에, 간혹 문제가 발생할 수 있다.
@EventListener는 AOP를 포함한 스프링 컨테이너가 완전히 초기화 된 이후에 호출되기 때문에 이런 문제가 발생하지 않는다.
프로필(Profile)
스프링은 로딩 시점에 application.properties 의 spring.profiles.active 속성을 읽어서 프로필로 사용한다.
이 프로필은 로컬 , 운영 환경, 테스트 실행 등등 다양한 환경에 따라서 다른 설정을 할 때 사용하는 정보이다.
spring.profiles.active=local
/src/main/resources 하위의 application.properties 는 /src/main 하위의 자바 객체를 실행할 때 동작하는 스프링 설정이다.
스프링은 local 이라는 프로필로 동작한다. 따라서 @Profile("local)가 동작하고, testDataInit가 스프링 빈으로 등록된다.
실행하면 위와 같은 로그가 보인다.
test 프로필
/src/test/resources 하위의 application.properties
이 위치의 프로퍼티스는 /src/test 하위의 자바 객체를 실행할 때 동작하는 스프링 설정이다.
주로 테스트 케이스를 실행할 때 동작한다.
spring.profiles.active=test
test라는 프로필로 동작하게 된다. 이 경우에는 @Profile("local")는 동작하지 않는다.
따라서 testDataInit 이라는 스프링 빈도 등록되지 않고, 초기 데이터도 추가하지 않는다.