Web
-
스프링 부트 애플리케이션 시작 시 코드 실행 (CommandLineRunner)Web/환경설정 관련 2024. 5. 10. 19:39
스프링 부트 애플리케이션을 시작할 때 특정 코드를 실행해야 할 때가 있다. ex) 애플리케이션 초기화 이전에 데이터 베이스 초기화 스크립트를 실행, 혹은 외부 REST 서비스를 호출해서 데이터를 가져오는 등이를 위해 CommandLineRunner와 ApplicationRunner가 있다. 둘 다 run() 메서드만 있음으로, 적절히 구현 후 빈으로 등록해서 사용하자 (ApplicationRunner와 매우 유사하므로, CommandLineRunner만 다룸)CommandLineRunner는 args파라미터에 접근할 수 있기 때문에, 초기화 작업을 편리하게 할 수 있는 장점이 있다. 스프링 부트 애플리케이션 초기화 직전에 run(String... args)이 호출 된다. - CommandLineRunn..
-
Spring boot - 설정 파일 관리 (@Profile, @ConfigurationProperties,@Value,@PropertySource)Web/환경설정 관련 2024. 5. 10. 19:22
개발 프로젝트를 진행하는 방식에 따라 동일한 어플리케이션을 개발, 테스트, 스테이징, 상용 등 여러 환경에서 배포해야하는 경우가 있다.이때 배포 환경에 따라 소스코드는 거의 변경되지 않고, 설정 정보만 다르게 해야 배포 작업이 편할 것이다.따라서, 설정 정보를 외부화해서 관리 하는 방법 들에 대해서 알아보자 Property 관리의 여러 가지 방법 1. SpringApplication 클래스 활용 SpringApplication 클래스를 사용하여 설정 정보를 정의할 수 있다. 이 클래스에는 java.util.Properties 또는 Map를 인자로 받는다. setDefaultProperties에 위 Properties나 Map으로 설정한 내용을 넣으면 된다. 위 방식은 소스코드로 정의하는 방식이므로, 한..
-
Spring boot - 정적 리소스 설정 변경Web/환경설정 관련 2024. 5. 10. 16:34
목적: 지금까지 스프링 혹은 부트를 사용하며, 여러 설정들을 적어 둔 것을 정리 하기 위해 작성 spring MVC에서 url로 들어온 클라이언트의 요청을 정적 리소스(html,css,javascript 등등) 혹은 동적 리소스(jsp 등 뷰 템플릿)를 활용해서 처리한다. 컨트롤러 메서드에 url을 맵핑하듯, 정적 리소스에도 접근 가능한 url 맵핑이 필요하다. 이에 대한 설정을 알아보자 1. classpath classpath란 빌드시 컴파일 된 class 파일들과 resources의 최상위 경로이다.설정 파일 (.yml, properties)는 해당 경로 아래 어느 곳이든 존재만 해야한다. Project Structure 탭을 통해 쉽게 확인할 수 있다. 2. 정적 리소스 기본 위치 다음 4가..
-
SpringDataJPA (1) - 공용 인터페이스, @QueryWeb/JPA 2024. 1. 30. 15:18
1. 공용 인터페이스 설정 - JavaConfig 설정 (부트 사용시 생략 가능) @Configuration @EnableJpaRepositories(basePackages = "jpabook.jpashop.repository") public class AppConfig {} - 스프링 부트 사용시 @SpringBootApplication 위치를 지정 - 만약 위치가 달라지면 @EnableJpaRepositories필요 - org.springframework.data.repository.Repository를 구현 클래스는 스캔 대상이 된다. - 프록시로 동작한다. - @Repository 어노테이션은 JPA 예외를 스프링 예외로 변환하는 과정을 처리한다. - 컴포넌트 스캔을 스프링 데이터 JPA가 자동으..
-
Querydsl (4) - 스프링 데이터 JPA + QuerydslWeb/QueryDSL 2024. 1. 24. 15:35
1. 스프링 데이터 JPA 리포지토리 생성 public interface MemberRepository extends JpaRepository { List findByUsername(String username); } 2. 사용자 정의 리포지토리 - 사용자 정의 인터페이스 작성 (이름 맘대로) - 사용자 정의 인터페이스 구현 (이름 맘대로 -> 원래는 정해져있었음) - 스프링 데이터 리포지토리에 사용자 정의 인터페이스 상속 public interface MemberRepositoryCustom { List search(MemberSearchCondition condition); } public class MemberRepositoryImpl implements MemberRepositoryCustom {..
-
Querydsl (3) - 순수 JPA와 QuerydslWeb/QueryDSL 2024. 1. 24. 15:22
- 순수 JPA 리포지토리와 Querydsl은 같은 Repository에 손쉽게 사용 가능하다. @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member) { em.persist(member); } public Optional findById(Long id) { Member findMember = e..
-
Querydsl (1) - 기본 문법Web/QueryDSL 2024. 1. 24. 15:08
1. QueryDSL 기본 사용법 public void startQuerydsl() { //member1을 찾아라. JPAQueryFactory queryFactory = new JPAQueryFactory(em); QMember m = new QMember("m"); Member findMember = queryFactory .select(m) .from(m) .where(m.username.eq("member1"))//파라미터 바인딩 처리 .fetchOne(); assertThat(findMember.getUsername()).isEqualTo("member1"); } - QMember는 querydsl 라이브러리 추가하고, 엔티티를 한번 빌드하면 생긴다. (별칭은 jpql에서 사용할 별칭 -> 내부..
-
JPA(2) - OSIVWeb/JPA 2024. 1. 22. 12:52
1. Open Session In View (Open EntityManager in View) - 영속성 컨텍스트의 범위를 설정하는 옵션이다. - 기본으로 view까지 session이 유지된다. (DB세션 의미) - 트랜잭션 시작시 영속성 컨텍스트가 DB 커넥션을 가지고오는데, OSIV가 켜져있으면, 트랜잭션 종료후에도 커넥션을 반환하지 않는다 (레이지 로딩 때문이다.) 응답이 나갈때 까지 커넥션을 유지한다. - 이 덕분에 view나 컨트롤러에서 지연 로딩이 가능했던 것이다. - 이 전략은 DB커넥션을 너무 많이 사용하기때문에 장애로 이어질 수 있다. - OSIV를 끄면 트랜잭션 종료시 영속성 컨텍스트를 닫고, DB커넥션을 반환한다. 따라서 커넥션 리소스 낭비가 없다. - OSIV를 끄면 모든 지연로딩은..