728x90

spring 33

영속성 전이(CASCADE)에 관해

영속성 전이 : CASCADE 특정 엔티티를 영속 상태로 만들때 연관된 엔티티도 함께 영속 상태로 만들고 싶을때 사용합니다. eg. 부모 엔티티 저장시 자식 엔티티도 저장하게끔. 언제 쓰느냐? 하나의 부모가 자식들을 관리할 때 ( 단일 엔티티에 종속적인 경우) 라이프사이클이 같을때, 단일 소유자 쓰면 안되는 케이스? 자식의 연관 관계가 2개 이상일때 예를 들어 다음과 같은 경우에는 쓰면 안된다. 그림처럼 C 라는 엔티티가 A, B 에 의해서 관리된다고 하자. 이런 경우에서는 영속성 전이를 사용해서는 안된다. 참고 CASCADE 의 옵션은 ALL, PERSIST, REMOVE, MERGE, REFRESH, DETACH 가 있지만 주로 사용되는건 ALL, PERSIST, REMOVE 정도이고 실무에서 사용되..

JPA 2022.10.06

SpringBoot JPA Multiple Databases 설정

1. 다중 DB 설정 시, 알아야 할 것 다중 DB설정은 Auto Configuration 되지 않기 때문에 설정파일(application.yml or application.properties) 값을 읽어와서 연동 할 DB 수 만큼 Datasource를 수동 설정해야함 주요 설정 내용 리소스 경로 설정 Repository basePackages 경로 설정 Entity 경로 설정 DB 정보 설정(Datasource) driver 이름 URL Id/Password Hibernate 설정 ddl-auto dialect 설정된 다중 DB는 Repository package 명으로 구분 초기 설정이 복잡한 편이나, 천천히 살펴보면 크게 어렵지 않음 2. 소스코드 이 글에서는 1개의 Entity로 2개의 Datab..

JPA 2022.10.02

map() 과 flatMap() 의 차이

.map() .map()은 단일 스트림의 원소를 매핑시킨 후 매핑시킨 값을 다시 스트림으로 반환하는 중간 연산을 담당한다. 필터가 조건을 충족시키는 새로운 스트림을 생선한다면, Map은 각각의 아이템을 변경하여 새로운 컨텐츠를 생성하는 기능이다. List list = Arrays.asList( new Person(20,"kim"), new Person(21,"moon"), new Person(22,"sub"), new Person(23,"park") ); list.stream().map(Person::getName) .forEach(System.out::println); kim moon sub park .flatMap() flatMap() 은 여러개의 스트림을 한개의 스트림으로 합쳐준다. 복잡한 스트림을..

JAVA 2022.09.22

JWT 초기 설정

프로젝트 생성 자바 버전은 11로 하였고 아래의 Dependencies를 추가해줍니다. Spring Web Spring Security Spring Data JPA H2 Database Lombok Validation 테스트 컨트롤러 생성 해당 프로젝트가 잘 작동하는지 테스트 하는 컨트롤러를 만들어줍니다. @RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public ResponseEntity hello(){ return ResponseEntity.ok("hello"); } } Postman으로 GET요청을 했을때 401인증오류가 뜨는 것을 볼수 있습니다. SecurityConfig를 생성..

JWT 인증 2022.09.16

AOP - 관점 지향 프로그래밍

스프링 AOP ( Aspect Oriented Programming ) AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. 예로들어 핵심적인 관점은 결국 우리가 적용하고자 하는 핵심 비즈니스 로직이 된다. 또한 부가적인 관점은 핵심 로직을 실행하기 위해서 행해지는 데이터베이스 연결, 로깅, 파일 입출력 등을 예로 들 수 있다. AOP에서 각 관점을 기준으로 로직을 모듈화한다는 것은 코드들을 부분적으로 나누어서 모듈화하겠다는 의미다. 이때..

Spring 2022.09.13

(Rest API 개발)PUT과 PATCH의 차이점

HTTP Method 중에 PUT와 PATCH는 리소스의 업데이트를 의미한다. 리소스를 업데이트 한다는 점에서는 같은 역할을 하는 메소드처럼 보이지만 두개의 요청에는 약간의 차이가 있다. PUT : 리소스의 모든 것을 업데이트 한다. PATCH : 리소스의 일부를 업데이트 한다. 아래와 같은 회원이라는 리소스가 있다. 회원 (member) 1 이름 (name) 애용이 나이 (age) 10 성별 (gender) M 아래와 같은 요청을 보내면 PUT /members/1 { name : "홍길동", age : 19, gender : "M" } 회원 (member) 1 이름 (name) 홍길동 나이 (age) 19 성별 (gender) M 위와 같이 변한다. 이번에는 나이와 성별를 빼고 요청을 보내면 PUT /..

Rest API 2022.08.31

@Transactional(rollbackFor = Exception.class) 에 대해

1. 서론 초반 @Transactional 어노테이션에 대해 자세히 알아보지 않고, 막연히 롤백때 사용한다고 하여 SQL C,U,D 를 할 때마다 메소드 위에 붙여서 사용하곤 하였다. 하지만, 내 코드를 보신 선임께서 단지 @Transactional 만 붙이면 롤백이 안되고, @Transactional(rollbackFor = Exception.class) 을 붙여야 된다고 알려주셨다. 여기에서 뭐 때문인지에 대해 호기심에 트랜잭션에 대해 찾아보다가 내가 생각했던 것 보다 더 많은 기능들이 존재한다는 것을 알고 정리해보려 한다. 2. 트랜잭션이 뭐지? 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, commit 을 자동으로 수행해준다. 예외 발생 시 rol..

JPA 2022.08.26

JPA에서 pageable을 통해 Paging 간단하게 구현하는 법

Paging 구현하기 가장 먼저 Controller API 에서 Pageable 인터페이스 타입으로 파라미터를 받으면 되는데요. Pageable는 어떤 인터페이스인지 내부 메소드를 간단하게 보고 가겠습니다. 인터페이스가 가진 메소드를 보면 여러가지가 있지만 getPageNumber(), getPageSize(), getOffset() 처럼 페이징을 구현할 때 필요한 값들을 편하게 구할 수 있는 메소드들을 추상화 시켜놓은 것을 볼 수 있습니다. 그래서 이제 시도해보려는 방법은 Spring Data JPA에서 메소드 이름으로 쿼리를 만들 때 페이징을 추가하는 법 입니다. 바로 고고싱! Repository 구현하기 public interface PostRepository extends JpaRepository..

JPA 2022.03.22

JUnit 4 Test 에서 get 메소드 에러 관련

스프링 부트와 AWS로 혼자 구현하는 웹서비스(p. 62, 이동욱님 저)를 따라 소스를 구현하다보니, 아래 JUnit 4 테스트의 get 부분에서 에러가 났다. package com.jojoldu.book.awsspring.springboot.web; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; import org.springframework.test.c..

Spring 2022.03.01
728x90