본문 바로가기

spring23

JPA - Cascade(영속성 전이) 영속성 전이 JPA에서 처리하는 Entity의 상태에 따라 종속적인 객체들의 영속성도 함께 처리되는 것이며 총 5개의 옵션이 있다. 이번 게시글에서는 PERSIST와 REMOVE에 대해 테스트해보려 한다. 테스트에 사용할 Entity들은 Team과 Member이며 OneToMany로 양방향 매핑되어있다. @Entity public class Team { @Id @GeneratedValue @Column(name = "team_id") private Long id; private String name; @OneToMany(mappedBy = "team") List members = new ArrayList(); ... } @Entity public class Member { @Id @GeneratedVal.. 2021. 6. 10.
Custom HandlerMethodArgumentResolver HandlerMethodArgumentResolver HandlerMethodArgumentResolver는 API가 호출될 때 매개 변수를 입력받기 위해 사용하는 Spring에서 제공하는 기능이다. 해당 인터페이스로 가보면 "지정된 요청의 컨텍스트에서 메서드 매개 변수를 인수 값으로 만들기 위한 전략 인터페이스" 라고 설명이 되있다. 즉 우리가 Controller에서 매개 변수를 받기 위해 사용하는 @PathVariable, @RequestParam, @RequestBody 등이 이 인터페이스를 이용해 원하는 값을 얻게 해주는 것이다. HandlerMethodArgumentResolver는 두개의 추상 메소드를 가지고 있다. supportsParameter : 이 Resolver가 지원하는 매개 변수인.. 2021. 6. 8.
JWT를 이용한 인증 처리 JWT Json Web Token의 약자로 클라이언트와 서버간 인증을 사용할 때 사용한다. Server에 사용자 정보를 보관하지 않고 stateless한 서버를 만들기 위해 Client에 사용자 정보를 저장하는데 데이터를 암호화 하여 저장하기 위해 사용 Header와 Payload를 사용해 Signature를 계산하기에 내용이 변조되지 않았는지 확인 가능 Header, Payload, Signature로 구성이 된며 '.'로구분된다. Header : 암호화 알고리즘 및 토큰 type 저장 Payload : 토큰에 넣을 데이터 저장 Signature : 헤더의 인코딩 값과 기타 정보를 Secret Key로 암호화한 정보 JWT 동작 절차 인증을 위해 클라이언트에서 ID, PW를 서버에 전달한다. 서버는 I.. 2021. 5. 29.
toMany 관계에서 필터링 걸기 새로운 회사 프로젝트를 하며 JPA를 도입하며 생겼던 이슈를 해결한 방법을 소개하려 한다. 프로젝트 개발 초기 기본적인 CRUD api들을 만들며 생겼던 일인데 당시 난 아래 코드처럼 조회 api에 여러 필터를 걸며 테스트하고 있었다. Team과 Member는 OneToMany 관계이다. @Test void test2() { QTeam team = QTeam.team; QMember member = QMember.member; JPAQueryFactory query = new JPAQueryFactory(em); List result = query.selectFrom(team) .join(team.members, member) .where(member.age.eq(10)) .fetch(); result... 2021. 5. 13.
테스트 코드 커버리지 확인하기 (jacoco) tutorial 기본 환경 세팅 Dependency plugins { id 'org.springframework.boot' version '2.4.5' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' id 'jacoco' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' developmentOnly 'org.springframework.boot:sprin.. 2021. 5. 1.