전체 글

Spring

[Spring] 구글 OAuth2.0 이용 소셜 로그인 구현

구글 OAuth2.0을 이용한 소셜 로그인 구현 구글에서 제공하는 OAuth2.0을 이용해야 하기에, 관련 로그인 기능 사용 신청을 위해 구글 계정 로그인후 구글 클라우드 플랫폼 콘솔로 이동한다. https://console.cloud.google.com/ Google 클라우드 플랫폼 로그인 Google 클라우드 플랫폼으로 이동 accounts.google.com 구글 클라우드 플랫폼에서 새로운 프로젝트를 생성한다. 프로젝트 생성 완료이후, API 및 서비스 탭의 OAuth 동의 화면으로 이동하여 필요한 설정을 진행한다. OAuth 동의 화면에서 앱 이름, 이메일등 필수 값을 입력후 '저장 후 계속' 버튼을 클릭한다. API 및 서비스 - 사용자 인증 정보 탭으로 이동하여 OAuth2.0 클라이언트를 생..

Spring

[JPA]연관관계 - 다대다(N:M)

JPA 연관관계 다대다(N:M) 실무에선 보통 사용하지 않는것을 권장한다. 관계형 데이터베이스에서 정규화된 2개의 테이블로 다대다를 표현할 수 없다. 관계형 데이터베이스에서 다대다를 표현하기 위해서는 중간 테이블을 통해 일대다, 다대일로 나누어서 표현해야한다. JPA에서는 관계형 데이터베이스가 중간 테이블을 만드는 것과 달리 @ManyToMany 어노테이션을 통해 별도의 중간 테이블에 해당하는 엔티티를 만들지 않고도 다대다를 표현할 수 있다. 단방향 다대다 다대다 관계를 JPA를 통한 단방향 구현시 아래와 같이 코드 작성이 가능하다. Member (연관관계의 주인) @Entity @Table(name = "member") @Getter public class MemberEntity { @Id @Gener..

Spring

[JPA]연관관계 - 일대일 관계

JPA 1:1(일대일) 관계 일대일 관계는 주 테이블혹은 대상 테이블 중에 외래 키를 넣을 테이블 선택이 가능하다. 일대일 관계에서는 반대도 일대일 관계가 된다. 다대일 관계에서는 다(N)에 해당하는 곳이 외래 키를 가지고 있지만(연관관계의 주인) 일대일 관계에서는 주 테이블이나 대상 테이블에 외래 키를 둘 수 있어서 선택 해야 한다. 일대일 관계에서는 외래 키를 주 테이블에 둘지, 대상 테이블에 둘지에 따라 약간의 차이가 있다. 1. 주 테이블에 외래 키가 있는 경우 주 테이블에 외래 키를 둘 경우, 주 테이블에 매핑되는 주 객체에도 객체 참조를 두는 구조를 만들게 된다. 일대일 단방향 주 테이블 Parent에 단방향 일대일 관계에 해당하는 Child 객체필드를 만든후, @OneToOne 어노테이션 선..

나혼자삽질

[QueryDsl] No Source Given 에러

이슈 Exception : No sources given; nested exception is java.lang.IllegalArgumentException: No sources given org.springframework.dao.InvalidDataAccessApiUsageException: No sources given; nested exception is java.lang.IllegalArgumentException: No sources given at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:374) at org.sprin..

혼자 묻고, 답하기

[GIT] Git, GitHub 사용 및 문법 정리

얄코님의 제대로 파는 Git & GitHub 을 기반으로 작성하였습니다. GUI와 CLI를 적절하게 섞어서 사용하기를 권장한다. CLI로는 git을 다루고 시각적인 브랜치 혹은 히스토리를 확인하기 위해서는 SourceTree와 같은 GUI를 사용하는것이 편하다. ( 개인적인 취향 ) Git의 최초 설정 Gitd에는 누가 어떤 작업을 했고, 어떻게 연락할지를 명시해주어야한다. 1. Git 전역으로 사용자 이름과 이메일 주소를 설정 git config --global user.name "(본인 이름)" git config --global user.email "(본인 이메일)"아래의 명령어로 확인할 수 있다. git config --global user.name git config --global user.e..

Spring

[JPA] 연관관계 조회 방식별(Fetch, Lazy) 성능 차이 테스트

개요 N+1 문제와 해결 방법 JPA를 이용해 별도의 옵션 없이 엔티티를 조회할 경우, 엔티티에 연결되어 있는 연관관계들이 함께 조회된다. 함께 조회되는 시점에 부모 엔티티를 조회 하는 쿼리(1) + 연결되어 있는 연관관계 엔티티들에 대한 조회 쿼리(N)가 DB 요청으로 날아가게 된다. 예를들어 4개의 연관관계를 가지고 있는 엔티티 100개를 조회할 경우 100 + 400, 총 500회의 조회 쿼리가 날아가게 됨으로 성능에 큰 영향을 미치게된다. 이런 문제는 완벽하지는 않으나 Fetch Join, Entity Graph, Batch_Size를 통해 해결 할 수 있다. 보통 연관관계 엔티티들에 대해 FetchType을 통해 연관관계 엔티티를 즉시 조회(Eager)할지, 지연 조회(Lazy)할 지 정할 수 ..

Spring

[Spring] MapStruct 사용 주의 사항

DTO Entity 변환을 위해 자주 사용하는 MapStruct를 사용하며 겪은 주의 사항들을 정리 1. MapStruct는 Getter, Setter, Builder 기반으로 동작 MapStruct가 클래스간 매핑 코드를 만들때 타겟 클래스의 Getter, Setter를 기반으로 코드를 생성한다. 다만 MapStruct 사용을 위해 클래스에 Setter를 만드는것이 꺼림칙 하다면, Builder로 대체할 수 있다ㅡ. 2. Spring에서 Mapper 생성시 @Mapper 옵션으로 componentModel = "spring" 선언으로 해당 Mapper가 Bean으로 등록될 수 있도록 해야 동작한다. @Mapper(componentModel = "spring") public interface Member..

Docker

[Docker] 이미지 및 컨테이너 삭제 명령어

컨테이너 삭제 실행중인 컨테이너 리스트 $ docker ps 정지된 컨테이너 리스트 $ docker ps -a 컨테이너 삭제 $ docker rm [Container Id] // 단건 삭제 $ docker rm [Container Id],[Container Id],[Container Id] // 여러개 삭제 이미지 삭제 이미지 리스트 $ docker images 이미지 삭제 $ docker rmi [Image Id] 컨테이너와 이미지 함께 삭제 $ docker rmi -f [Image Id]

turtleDev
거북한 개발자의 기록