개발

    JPA에서 지연로딩(LAZY LOADING)이란

    JPA 공부를 하다가 아래와 같은 오류를 만났다. org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: com.study.chapter05.entity.Ch05Team.memberList, could not initialize proxy - no Session 팀과 회원 객체의 양방향 연관관계 테스트를 하다가 만난 오류인데 팀을 조회할때 팀에 소속된 회원 리스트까지 함께 조회를 하는 과정에서 발생하였다. // 팀 엔티티 @Entity @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Table(name = "Ch05_TEAM") public c..

    JPA에서 save할때 select 쿼리가 먼저 실행되는 이유

    스프링 데이터 JPA의 JpaRepository로 save를 해보다가 이상한 점을 발견했다. MEMBER 테이블에 회원 객체를 저장하는 테스트 코드를 작성했다. @Test @DisplayName("회원 객체 등록 테스트") void insertMemberTest() { // given Member member = Member.builder().id("id1").username("초원").age(26).build(); // when Member saveMember = memberRepository.save(member); // then assertEquals(saveMember.getUsername(), "초원"); } 쿼리 로그를 출력해보니 insert 쿼리 전에 select 쿼리가 선실행되고 있었다. ..

    mac에 H2 데이터베이스 설치하기

    mac에 H2 데이터베이스 설치하기

    구글링하면 보편적으로 나오는 H2 사이트 접속하여 zip파일 풀어 실행하는 방법을 따라하니 브라우저에서 아래와 같은 에러가 나왔다. (ㅇㅅㅇ...?) 찾아보니 맥이 카탈리나(Catalina, 10.15.5ver)로 올라가면서 권한 문제에 따른 에러라고 한다. 맞다, 현재 내 맥 OS는 카탈리나다!!! 그래서 위에 방법 싹 다 무시... 새로운 방법을 찾아나섰다. 🌈내가 성공한 H2 데이터베이스 설치하기⭐️ 1. homebrew로 h2를 설치한다. kimchowon@gimchowon-ui-MacBookPro ~ % brew install h2 2. h2를 실행한다. kimchowon@gimchowon-ui-MacBookPro ~ % h2 -web Web Console server running at htt..

    QueryDSL + multi data source 연동하기

    1.QueryDSL + single data source 인 경우 DataSourceConfiguration - entityManagerFactory 생성 메서드 - 데이터소스 클래스를 생성하는 것이 주 내용이 아니기 때문에 entityManagerFactory 생성 메소드만 올린다. @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory( @Qualifier("dataSource") DataSource dataSource) { LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean(); en..

    webflux + reactive redis cache 적용하기

    webflux + reactive redis cache 적용하기

    webflux + reactive redis cache redis는 캐시로 사용할 수 있음. AOP에서 redis에 원하는 데이터가 있으면 바로 get, 없으면 set하는 로직. 기존 mvc 모델에서는 캐시 어노테이션과 AOP로 캐시를 쉽게 구현할 수 있음. 그런데 webflux 모델에서는 캐시를 구현할 수 가 없었다. mvc 모델 @RedisCacheable(DEAL) public Deal getDeal(final long dealNo, ...) { // 실제 데이터를 리턴 } webflux 모델 webflux는 데이터를 get하면 Mono/Flux 체인이 리턴된다. Mono/Flux는 Reactive Streams에서 데이터를 제공하는 발행자 역할을 하는 Publisher의 구현체이다. 구독자가 su..

    IntelliJ 프로젝트 github에 올리기

    IntelliJ 프로젝트 github에 올리기

    1. 자신의 github 계정으로 로그인 하여 접속한다. 2. 오른쪽 상단 프로필 사진 옆에 + 버튼을 클릭하여 "New repository"를 클릭하여 원격 저장소를 먼저 생성한다. 3. 원격 레파지토리 기본 정보들을 설정한다. Repository Name, public/private 여부 등등.. 나는 아래 사진과 같이 설정하였다. 이후 "Create Repository" 버튼을 클릭하여 레파지토리를 생성한다. 4. 레파지토리 생성이 완료되었다. Https 또는 SSH 원격 github 레파지토리 주소를 복사해놓는다. 5. git 원격 저장소에 올릴 IntelliJ 프로젝트를 생성한다. 6. 이제 해당 IntelliJ 프로젝트와 원격 저장소를 연결해준다. git init: 해당 프로젝트를 로컬 저장소..