SPRING 15

[SPRING] MOCKITO

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 2022.07.03

[SPRING] JPA 고아객체

고아 객체 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 2022.06.06

[SPRING] JPA 영속성 전이

영속성 전이 특정 엔티티를 영속 상태로 만들 경우 연관된 엔티티도 함께 영속 상태로 만들고 싶을 때 사용 예를 들자면 부모엔티티를 저장할 경우 자식엔티티도 함께 저장 (자식의 연관관계가 두개 이상인 경우 사용하면 안됨) 영속성 전이 옵션 옵션 설명 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 2022.06.06

[SPRING] WEBFLUX 리액티브 오퍼레이션 정리

리액티브 오퍼레이션 종류 생성 오퍼레이션 조합 오퍼레이션 변환 오퍼레이션 로직 오퍼레이션 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 2022.05.08

[SPRING] Bean 생명주기 콜백 (PostConstruct / PreDestory)

Bean 생명주기 콜백 스프링 빈이 생성된 후 의존관계 주입이 완료되거나 죽기 직전에 스프링 빈안에 있는 메서드를 호출해주는 기능 스프링은 3가지 방법으로 빈 생명주기 콜백을 지원함 인터페이스 (InitializingBean, DisposableBean), 설정정보 초기화 메서드 종료 메서드 지정, 어노테이션 사용 (PostConstruct, PreDestroy) Bean의 이벤트 라이프사이클 컨테이너 생성 -> 빈생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공하며 또한 컨테이너가 종료되기 직전에 소멸 콜백을 줌, 해당 과정을 통하여 안전하게 종료작업을..

SPRING 2022.03.02

[SPRING] Transaction Propagation

스플링에서는 트랜잭션 처리를 지원하는데, @Transactional 어노테이션을 통하여 선언적 트랜잭션 처리 방식을 지원함, 해당 어노테이션의 옵션엔 propagation이라는 것이 있는데 해당 옵션은 트랜잭션 전파 방식을 설정하게 해줌 Transaction Propagation (트랜잭션 전파옵션) 트랜잭션 동작 도중 다른 트랜잭션을 호출하는 상황에서 선택할 수 있는 옵션 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법에 대해 결정하는 속성을 지정하는 옵션 (트랜잭션 흐름을 컨트롤 하는 옵션) Transaction Propagation 종류 REQUIRED (default) 이미 시작된 트랜잭션이 있으면 참여하고 없으면 새로 시작 REQUIRES_NEW 항상 새로운 트랜잭션으로 시작, 진행중인 트랜..

SPRING 2021.09.22

[SPRING] AOP

AOP (Aspect Oriented Programming) 관점지향 프로그래밍, 핵심관점(업무로직) + 횡단관점(트랜잭션/로그/보안/인증 처리등)으로 관심의 분리를 실현 중복을 줄여서 적은 코드 수정으로 전체 변경을 할 수 있게 하자라는 목적에서 출발 중복되는 코드 제거, 효율적인 유지보수, 높은 생산성, 재활용성 극대화, 변화 수용이 용이 등의 장점이 있음 자바진영에서 사용되는 AOP도구로는 AspectJ, Spring AOP가 존재함 Aspect로 모듈화하여 핵심적인 비즈니스 로직에 분리하여 재사용하겠다는 것이 AOP의 취지 AOP는 횡단관심사를 깔끔하게 처리하기 어려운 OOP의 부족한 부분을 보조하려는 목적으로 나옴 AOP 개념 Joinpoint : 메소드를 호출하는 '시점', 예외가 발생하는 '..

SPRING 2021.07.31

[SPRING] Interceptor

Interceptor 정의 컨트롤러의 핸들러는 호출하기 전과 후의 요청과 응답을 참조하여 가공할 수 있게 중간에 가로채서 처리하는 기능 Interceptor 실행하는 시점 Filter는 DispatcherServlet 앞단에 처리되며, Intercepter는 그 후인 Handler와 사이 구간에서 실행이 됨 왠만하면 Spring과 관련된 작업을 구현할 때는 Intercepter를 사용하는게 좋아보임 Interceptor 구성 public interface HandlerInterceptor { boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler); void postHandle(HttpServlet..

SPRING 2021.07.11

[SPRING] DISPATCHER-SERVLET

DispatcherServlet 정의 서버로 들어오는 모든 요청(Request)을 처리하는 프론트 컨트롤러 (서블릿컨테이너의 제일 앞에서 서버로 들어오는 클라이언트의 요청을 받아서 처리해주는 컨트롤러를 프론트컨트롤러라고 정의함) 요청을 받아들여서 적절한 Controller로 요청을 위임해줌 Spring MVC 사용전에는 JSP환경에서는 서블릿 객체를 직접 생성하여 web.xml에 매핑을 해줘야 했으나 Spring MVC를 사용하면서 DispatchServlet이 모든 요청을 핸들링 처리를 해줘서 해당 작업이 필요가 없어짐 요청에 맞는 핸들러로 요청을 Dispatch하고 핸들러 실행 결과를 Http Response형태로 응답해줌 DispatcherServlet 구조 DispatcherServlet은 Ser..

SPRING 2021.06.07