[SPRING] MOCKITO
·
SPRING
Mockito Mock : 진짜 객체와 비슷하게 동작하지만 프로그래머가 직접 그 객체의 행동을 관리하는 객체 Mockito : Mock 객체를 쉽게 만들고면서 관리하고 검증하는 방법을 제공하는 것 Mock 활용하여 테스트 작성시 방법 Mock을 만드는 방법 Mock을 조작하는 방법 Mock을 확인하는 방법 Mock을 만드는 방법 @ExtendWith(MockitoExtension.class) class UserServiceTest { @Mock UserService userService; @Mock userRepository userRepository; @Test void createStudyService() { UserService userService = new userService(userRepos..
[SPRING] JPA 고아객체
·
SPRING
고아 객체 JPA에서 부모와 연관관계가 끊어진 자식엔티티를 고아 객체라 하며 JPA에서는 orphanRemoval 옵션을 통해서 고아객체를 자동으로 삭제하는 기능을 제공함 orphanRemoval 옵션 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue @Column(name = "parent_id") private Long id; @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST, orphanRemoval = true) private List childs = new ArrayList(); public void addChild(Child child) { this.childs.ad..
[SPRING] JPA 영속성 전이
·
SPRING
영속성 전이 특정 엔티티를 영속 상태로 만들 경우 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용 예를 들자면 부모엔티티를 저장할 경우 자식엔티티도 함께 저장 (자식의 연관관계가 두개 이상인 경우 사용하면 안됨) 영속성 전이 옵션 옵션 설명 CascadeType.ALL 모두 적용 CascadeType.PERSIST 영속 CascadeType.MERGE 병합 CascadeType.REMOVE 삭제 CascadeType.REFRESH 리프레쉬 CascadeType.DETACH DETACH 실무에서는 보통 ALL / PERSIST / REMOVE 옵션을 사용 Persist 옵션 @Entity @Getter @Setter public class Parent { @Id @GeneratedValue @Col..
[SPRING] WEBFLUX 리액티브 오퍼레이션 정리
·
SPRING
리액티브 오퍼레이션 종류 생성 오퍼레이션 조합 오퍼레이션 변환 오퍼레이션 로직 오퍼레이션 Flux와 Mono가 제공하는 오퍼레이션을 통하여 데이터를 전달하는 파이프 라인을 생성함 생성 오퍼레이션 //하나 이상의 객체 데이터 생성 Flux numberFlux = Flux.just(1,2,3,4,5); numberFlux.subscribe(System.out::println); //list 데이터 Flux List fruits = List.of("사과", "딸기", "배"); Flux flux = Flux.fromIterable(fruits); flux.subscribe(System.out::println); just() : 하나 이상의 객체 데이터 생성 fromArray() : 배열 생성 fromItera..
[SPRING] JPA 쿼리메소드 요약
·
SPRING
JPA 쿼리메소드 요약 키워드 예제 JPQL Distinct findDistinctByLastnameAndFirstname select distinct …​ where x.lastname = ?1 and x.firstname = ?2 And findByLastnameAndFirstname … where x.lastname = ?1 and x.firstname = ?2 Or findByLastnameOrFirstname … where x.lastname = ?1 or x.firstname = ?2 Is, Equals findByFirstname,findByFirstnameIs,findByFirstnameEquals … where x.firstname = ?1 Between findByStartDateBet..
[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory)
·
SPRING
Bean 생명주기 콜백 스프링 빈이 생성된 후 의존관계 주입이 완료되거나 죽기 직전에 스프링 빈안에 있는 메서드를 호출해주는 기능 스프링은 3가지 방법으로 빈 생명주기 콜백을 지원함 인터페이스 (InitializingBean, DisposableBean), 설정정보 초기화 메서드 종료 메서드 지정, 어노테이션 사용 (PostConstruct, PreDestroy) Bean의 이벤트 라이프사이클 컨테이너 생성 -> 빈생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공하며 또한 컨테이너가 종료되기 직전에 소멸 콜백을 줌, 해당 과정을 통하여 안전하게 종료작업을..
[SPRING] Transaction Propagation
·
SPRING
스플링에서는 트랜잭션 처리를 지원하는데, @Transactional 어노테이션을 통하여 선언적 트랜잭션 처리 방식을 지원함, 해당 어노테이션의 옵션엔 propagation이라는 것이 있는데 해당 옵션은 트랜잭션 전파 방식을 설정하게 해줌 Transaction Propagation (트랜잭션 전파옵션) 트랜잭션 동작 도중 다른 트랜잭션을 호출하는 상황에서 선택할 수 있는 옵션 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법에 대해 결정하는 속성을 지정하는 옵션 (트랜잭션 흐름을 컨트롤 하는 옵션) Transaction Propagation 종류 REQUIRED (default) 이미 시작된 트랜잭션이 있으면 참여하고 없으면 새로 시작 REQUIRES_NEW 항상 새로운 트랜잭션으로 시작, 진행중인 트랜..
[SPRING] AOP
·
SPRING
AOP (Aspect Oriented Programming) 관점지향 프로그래밍, 핵심관점(업무로직) + 횡단관점(트랜잭션/로그/보안/인증 처리등)으로 관심의 분리를 실현 중복을 줄여서 적은 코드 수정으로 전체 변경을 할 수 있게 하자라는 목적에서 출발 중복되는 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용이 용이 등의 장점이 있음 자바진영에서 사용되는 AOP도구로는 AspectJ, Spring AOP가 존재함 Aspect로 모듈화하여 핵심적인 비즈니스 로직에 분리하여 재사용하겠다는 것이 AOP의 취지 AOP는 횡단관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하려는 목적으로 나옴 AOP 개념 Joinpoint : 메소드를 호출하는 '시점', 예외가 발생하는 '..
[SPRING] Interceptor
·
SPRING
Interceptor 정의 컨트롤러의 핸들러는 호출하기 전과 후의 요청과 응답을 참조하여 가공할 수 있게 중간에 가로채서 처리하는 기능 Interceptor 실행하는 시점 Filter는 DispatcherServlet 앞단에 처리되며, Intercepter는 그 후인 Handler와 사이 구간에서 실행이 됨 왠만하면 Spring과 관련된 작업을 구현할 때는 Intercepter를 사용하는게 좋아보임 Interceptor 구성 public interface HandlerInterceptor { boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler); void postHandle(HttpServlet..