spring

spring/JPA

복합키

기본 Entity 클래스와 복합 기본키를 표현하기 위한 PK 클래스를 정의해야 함 public, 기본 생성자가 있어야 함 implements Serializable equals와 hashCode를 오버라이딩 해야 함 @EmbeddedId, @IdClass 둘 중 하나로 사용 가능 EmbeddedId가 IdClass 방식보다 더 객체지향적인 방식임 명시적으로 확인하기는 더 어려움 하나의 복합키만 존재 -> EmbeddedId, 매핑이 많이 존재 -> IdClass @IdClass PK 클래스 Serializable을 implements한다 복합키 사용하면 직렬화를 해줘야 함 @Data @NoArgsConstructor public class ProjectInterestRelationId implements..

spring/JPA

외래키

외래키 지정 RDB는 관계형 데이터베이스라 사용할 외래키 하나만 있으면 되지만 java는 객체지향 언어이기 때문에 객체를 전달해주는게 좋다고 한다. User의 usr_id를 Board에서 외래키로 사용하고자 할 경우, user_id만을 외래키로 사용하는 것이 아닌 User 객체 자체를 외래키로 사용하는 것이다. 연관관계 매핑 방향 단방향 관계 : 한 쪽만 참조 양방향 관계 : 서로 참조 엔티티가 서로 참조해야할 경우 양방향으로, 한쪽만 알면 될 경우에 단방향으로 매핑 다중성 @OneToOne 일대일 하나의 엔티티가 하나의 엔티티만 사용 가능 (하나의 member는 하나의 basket 사용 가능) 1:1 관계에서 대상 테이블에 외래키 저장하는 단방향 관계는 JPA에서 지원 X @OneToMany 일대다 -..

spring/JPA

update, delete

@Transactional @Modifying(clearAutomatically = true) @Query(value = "UPDATE Board b set b.title = :title, b.content = :content, b.date_time = :date_time where b.id= :id") void updateBoard(@Param("title") String title, @Param("content") String content , @Param("date_time") LocalDateTime date_time, @Param("id") int id); @Transactional @Modifying(clearAutomatically = true) @Query(value = "delete fr..

spring

[OAuth] 기존 테스트에 시큐리티 적용

시큐리티 옵션 활성화되면 인증된 사용자만 API 호출 가능함 기존의 API 테스트 코드들이 모두 인증 권한 없음 -> 테스트 코드마다 인증한 사용자가 호출한 것처럼 작동하게 수정 Gradle에서 전체 테스트 수행하는 것에서 오류남 -> Test에서 오른쪽 마우스, 전체 테스트 실행으로 하면 됨 1. CustomOAuth2UserService 찾을 수 없음 CustomOAuth2UserService를 생성하는 데 필요한 소셜 로그인 관련 설정값들이 없어서 발생함 src/test에 application.properties가 없으면 src/main에 있는 설정을 그대로 가져옴 이때 application-oauth.properties 설정은 가져오지 않음 (application.properties만 가져오기 때..

spring

[OAuth]네이버 로그인

네이버 API 등록 https://developers.naver.com/apps/#/register?api=nvlogin 애플리케이션 - NAVER Developers developers.naver.com 애플리케이션 이름, 사용 API, 사용 환경, 서비스 URL (http://localhost:8080/), callbackURL 등록 -> ClientID, ClientSecret가 생성됨 application-oauth.properties spring.security.oauth2.client.registration.naver.client-id=9V6XsAlBeeZKCnP4huO8 spring.security.oauth2.client.registration.naver.client-secret=7nbpN..

spring

세션 저장소로 데이터베이스 사용하기 - MySQL

기본적으로 세션은 실행되는 WAS의 메모리에서 저장되고 호출됨 세션이 애플리케이션 실행 시 실행되는 구조인 내장 톰켓의 메모리에 저장되어 있어 항상 초기화됨 == 배포할 때마다 톰캣이 재시작됨 2대 이상의 서버에서 서비스하고 있으면 톰캣마다 세션 동기화 설정을 해야 함 세션 저장소 톰캣 세션 일반적으로 기본으로 선택되는 방식 톰캣(WAS)에 세션 저장돼서 2대 이상의 WAS가 구동되는 환경에서는 세션 공유를 위한 추가 설정이 필요함 MySQL과 같은 데이터베이스 여러 WAS 간의 공용 세션 사용 가능한 가장 쉬운 방법 많은 설정이 필요 없지만 로그인 요청마다 DB IO가 발생해 성능 이슈 발생 가능 로그인 요청 많이 없는 백오피스, 사내 시스템 용도에서 사용됨 Redis, Memcached와 같은 메모리..

spring

어노테이션 기반으로 개선하기

같은 코드가 반복되는 부분을 어노테이션 기반으로 개선할 수 있음 IndexController에서 세션값 가져오는 부분을 메소드 인자로 세션값 바로 받을 수 있게 변경 @LoginUser 어노테이션 생성 package com.springAWS.config.auth; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface Logi..

spring

[OAuth] 구글 로그인 연동

사용자 정보 담당할 도메인 User 클래스 package com.springAWS.domain.user; import com.springAWS.domain.BaseTimeEntity; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence.*; @Getter @NoArgsConstructor @Entity public class User extends BaseTimeEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private Stri..

hahihi
'spring' 카테고리의 글 목록 (3 Page)