본문 바로가기

분류 전체보기

(180)
Spring Data JPA N:N 매핑 참고사항 [N:N 관계] N:N 테이블의 관계에서는 를 생성하여 1:N, N:1 관계로 만든다. 는 양쪽의 객체를 FK로 가지고 있다. 1. N:1 관계 먼저 매핑 N클래스 @ManyToOne : N클래스에서 1클래스 객체를 필드로 작성 = N:1 관계 명시 @JoinColumn(name="1 테이블의 PK 컬럼명") 1클래스 @OneToMany (mappedby="N클래스에서 가지고있는 1클래스의 필드명") N:1 관계에서 1클래스에서 작성하며, N클래스를 List/Set 형태로 필드 선언 후 애너테이션 추가. 2. N:1 매핑이 종료된 이후, 1쪽에서 N쪽의 정보를 참조할 기능이 필요하다면 1:N 추가하여 양방향 처리. 1클래스 @OneToMany (mapped ="N클래스에서 필드로 선언한 1클래스의 객체명..
#4. @Value 애너테이션 미인식 에러 Spring Boot에서는 개발을 진행할 때 OAuth2 ClientId, ClientSecret, RedirectUri, JwtSecret 등과 같이 개인 정보와 관련된 민감한 정보들은 application.yml에 특정 변수를 작성하고 실제 값들은 시스템-환경 변수 혹은 AWS-parameterStore 같은 웹 서비스에 담아 보관하며, 애플리케이션을 실행할 때, 내부 로직에 의해 환경 변수에 보관하는 실제 값들을 호출하여 사용한다. application.yml에 등록해둔 환경 변수의 이름들은 클래스 내부에서 필드로 생성하고 해당 필드에 @Value 애너테이션을 붙여서 application.yml 내의 경로를 입력하면 시스템-환경 변수 혹은 AWS ParameterStore 웹 서비스에 저장된 실제 ..
#3. Spring Security 순환 참조 에러 프로젝트를 수행하며, SecurityConfiguration 클래스를 생성하여 하위 4가지 기능을 구현. 1. 로그인 방식(OAuth2, JWT), 2. Request에 담기는 JWT의 검증하는 역할, 2. 인증 실패 시 응답 할 클래스 설정, 3. CORS 설정, 4. HTTP Method 별 권한 설정 등을 처리했었다. 하지만 SecurityConfiguration 하나의 클래스에서 여러 역할을 맡은 클래스들을 모두 사용하다보니 Security Configuration 클래스에서 [순환 참조] 에러가 발생 [원인] 최초 패키지 구조를 설계할 당시, Spring Bean 으로 등록한다는 것이 무슨 의미인지 모르는 채로 학습 컨텐츠에 있는 애너테이션을 무지성으로 사용한 것이 원인이 되었다. 즉, Bean..
#2. OAuth2 구현시 CORS 에러 프로젝트 진행시 인증 부분을 담당했었는데, 그 중 Google의 OAuth2 기능을 구현하고자 했다. 이 과정에서 2차례 마주쳤었던 CORS 에러에 대해 정리를 하고자 한다. 1. 최초 Google OAuth2 로 로그인 할 때, 위의 순서상 #1. 에서 [사용자]가 Google 로그인 링크가 있는 버튼을 클릭할 경우, #2. FE 측에서는 BE 서버의 Login URL로 GET 요청을 보내고, #3. BE 서버에서는 그 GET 요청의 응답으로 Google 로그인 페이지 + 인증 성공 시 '인증 코드'를 전달받을 Redirect URL을 보내게 되어 있다. 그래서 BE서버 입장에서 자신의 서버로 요청을 보낼 FE의 URL을 허가된 URL이라는 의미로 Google OAuth2 설정 페이지에서 [승인된 자바..
Synchronized 키워드의 이해 [Synchronized 키워드] Java 언어에서 '동시성'은 필수 요소 이다. 여러 스레드가 공유 리소스에 액세스 할 때, 기타 동기화 관련 문제를 피하기 위해, 한 번에 하나의 스레드만 리소스에 액세스 할 수 있도록 하는 것이 중요하다. Java에서 이를 가능하게 하는 한 가지 방법은 synchronized 키워드를 사용하는 것이다. 이처럼 공유된 리소스의 '동시성' 문제와 동기화 관련 문제를 방지하는 synchronized 키워드의 대상은 instance method와 static method 가 된다. 이 글에서는 이 synchronized 키워드가 어떻게 동작하는지, 해당 키워드를 instance method와 static method에 적용하면 무엇이 다른지에 대해 알아볼 예정이다. 1. 스..
얕은 복사 VS 깊은 복사 얕은 복사 (Swallow Copy) 원본 객체의 non-static 필드를 복사하여 새로운 객체로 생성하는 것. 새로운 객체를 생성할 때 원본 객체의 필드 타입으로 나뉜다. 1. 원본 객체가 non-primitive 타입의 필드를 가지고 있을 때. 2. 원본 객체가 primitive 타입의 필드를 가지고 있을 때. *primitive 타입 : int, float, double, char, byte, short, long, boolean* 1. 원본 객체가 non-primitives 타입의 필드(변수)를 가질 경우, 원본 객체의 non-primitive 타입의 필드들을 복사하여 새로운 객체를 생성한다. 그 결과, 원본 객체와 얕은 복사의 결과인 새로운 객체는 동일한 non-primitive 타입 필드들을..
JDBC, Spring Data JDBC, JPA, Spring JPA 데이터 엑세스 기술 Spring에서 사용할 수 있는 데이터 액세스 기술에는 mybatis, Spring JDBC, Spring Data JDBC, JPA, Spring Data JPA 등이 있다. A. SQL 중심 기술 애플리케이션에서 DB에 접근하기 위해 SQL 쿼리문을 애플리케이션 내부에 직접적으로 작성하는 것. 즉, SQL 쿼리문을 기반으로 DB의 특정 테이블에서 데이터를 조회 후, Java 객체로 변환 mybatis, Spring JDBC가 대표적인 SQL 중심 기술. B. 객체(Object) 중심 기술 ( Object Relational Mapping ) 데이터를 SQL 쿼리문 위주로 다루는 것이 아니라, 모든 데이터를 객체의 관점으로 다루는 기술. 즉, DB에 접근하기 위해 SQL 쿼리문을 직..
DTO #DTO (데이터 전송객체 = Data Transfer Object)란 ? 계층간 데이터 교환을 위해 사용하는 객체(Java Bean)이다. MVC에서 View와 Model 사이에 상호작용을 하는 Controller에서 데이터를 다루는데 사용하는 객체. #DTO 역할 클라이언트에서 서버 쪽으로 전송하는 요청 데이터들을 하나의 객체로 전달받는 역할. 서버 쪽에서 유효한 데이터를 전달받기 위해 데이터를 검증하는 유효성 검증을 진행하는 역할. #DTO 장점 1. 간결한 통신 과정 Client와 Server 간 통신에서 필요한 데이터들을 주고 받는 과정에서 그 통신의 양은 필요 데이터의 양에 따라 여러번의 통신이 발생할 수 있다. 하지만 DTO를 사용한다면 통신에 필요한 데이터를 DTO 한 객체에 담아 통신을 ..