Spring

    [리액티브 프로그래밍] 리액티브 스트림즈(Reactive Streams)

    [리액티브 프로그래밍] 리액티브 스트림즈(Reactive Streams)

    스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고 스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는 product.kyobobook.co.kr 리액티브 스트림즈(Reactive Streams)란? ✅ 리액티브 스트림즈 리액티브 라이브러리를 어떻게 구현할지 정의해 놓은 표준 사양. -> 데이터 스트림을 Non-Blocking이면서 비동기적인 방식으로 처리하기 위한 리액티브 라이브러리의 표준 사양 리액티브 스트림즈 구성요소 ✅ 리액티브 스트림즈 컴포넌트 컴포넌트 설명 Publisher 데이터를 생성하고 통지하는 역할. ..

    [리액티브 프로그래밍] 리액티브 시스템과 리액티브 프로그래밍

    [리액티브 프로그래밍] 리액티브 시스템과 리액티브 프로그래밍

    스프링으로 시작하는 리액티브 프로그래밍 책 정리 스프링으로 시작하는 리액티브 프로그래밍 | 황정식 - 교보문고 스프링으로 시작하는 리액티브 프로그래밍 | *리액티브 프로그래밍의 기본기를 확실하게 다진다*리액티브 프로그래밍은 적은 컴퓨팅 파워로 대량의 요청 트래픽을 효과적으로 처리할 수 있는 product.kyobobook.co.kr 리액티브 시스템(Reactive System)이란? ✅ 리액티브 시스템 반응을 잘하는 시스템. -> 클라이언트의 요청에 즉각적으로 응답함으로써 지연 시간을 최소화. 리액티브 선언문으로 리액티브 시스템 이해하기 ✅ 리액티브 선언문 리액티브 시스템 구축을 위한 일종의 설계 원칙이자 리액티브 시스템의 특징. ✅ 리액티브 설계 원칙 MEANS(수단) 리액티브 시스템은 비동기 메시지 ..

    [Spring] ControllerAdvice - 예외 처리

    개발을 하다 보면 예상 못한 예외가 발생하거나, 또는 예상 가능한 예외를 처리해줘야 하는 경우가 있다. 이처럼 여러 상황에서 발생할 수 있는 예외를 나만의 방식으로 처리하고 이를 response 형태로 반환하는 방법을 알아보자. ControllerAdvice @ControllerAdvice는 @Controller가 붙은 클래스, 즉 컨트롤러 전역에서 발생할 수 있는 예외를 잡아 처리해주는 애노테이션이다. 만약 서비스 로직에서 예외가 발생해도 상위 메서드를 타고 올라가면서 이를 호출한 컨트롤러 계층까지 예외가 넘어가게 되는데, 개발자가 해당 예외를 따로 처리해주지 않으면 인터셉터, 필터를 거쳐 WAS 영역까지 가서 예외를 터뜨리게 된다. @ControllerAdvice는 컨트롤러에서 발생한 예외를 붙잡아 ..

    [Spring] @SpringBootTest vs @DataJpaTest

    단위테스트를 작성 간에 두 애노테이션 모두 사용해보면서 알게 된 내용을 기록한다. @SpringBootTest @SpringBootTest는 ApplicationContext(스프링 컨테이너)의 모든 Bean들을 등록한다. 즉 스프링 부트를 사용해 테스트를 한다는 말인데, 1. 쉽게 말해 @Configuration을 통해 수동으로 등록한 Bean들과, 2. 컴포넌트 스캔을 통해 @Component가 달려있는 모든 Bean들을 등록한다는 뜻이다. 설정 파일의 경우 test 폴더 내에 application.yml을 사용한다. 만약 test 폴더 내에 따로 설정 파일을 지정하지 않았다면, 기본 java 폴더 내에 application.yml 설정을 따른다. datasource는 in-memory, 로컬, 외부..

    [SpringMVC] 타임리프 - 기본기능

    [SpringMVC] 타임리프 - 기본기능

    스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원 www.inflearn.com 강의를 들으며 생각 정리 프로젝트 생성 스프링 부트 스타터(https://start.spring.io/) 에서 프로젝트를 생성한다. 간단하게 테스트(애플리케이션 실행 등) 해서 정상 작동하는지 확인한다. +) 롬복의 경우 다음 링크를 참고해서 설치한다. gksdudrb922.tistory.com/65 스프링 - 롬복(lombok) 라이브러리 설치 롬복 라이브러리는 ..

    [Spring] DTO의 사용 범위

    DTO DTO(Data Transfer Object)란 계층간 데이터 교환을 위해 사용하는 객체다. MVC 패턴에서 컨트롤러가 뷰와 모델의 데이터를 주고 받을 때 보통 DTO를 사용한다. 도메인 객체(모델)을 뷰에 직접 전달할 수도 있지만, 뷰에 불필요한 민감한 도메인의 정보가 노출될 수도 있고, 도메인이 뷰에 의존하게 되는 경우도 있다. DTO의 범위 모델과 뷰 사이에 DTO를 사용한다는 것은 알겠는데, 일반적으로 사용하는 레이어드 아키텍처 (Controller - Service - Repository)에서 DTO는 어떻게 다뤄야 할까? 조금 더 간단하게 말하자면, 결국 뷰와 같은 화면과, 비즈니스 로직의 데이터 교환은 DTO를 통해 이루어지는데, 도메인 → DTO, DTO → 도메인을 변환하는 작업은..

    [Spring] Service - 인터페이스 도입과 버저닝

    [Spring] Service - 인터페이스 도입과 버저닝

    예전에 프로젝트를 하다 보면 Controller가 Service 구체 클래스를 의존하는 방식을 많이 사용했었는데, 이러한 설계 방식은 Controller가 Service 클래스 단 하나만 의존하기 때문에 다형성이 부족하다. 따라서 객체 지향 설계(DIP)와 향후 다음 버전에 대한 확장성을 위해 Service 계층에 인터페이스를 도입했다. 기존 설계 방식 @RestController @RequiredArgsConstructor public class Controller { private final Service service; // 클래스 직접 주입 } @Service @RequiredArgsConstructor public class Service { private final Repository repo..

    [Spring] 의존성 역정 원리(DIP) 관련 용어

    예전에 어떤 시니어 분이 공유해준 글(참고자료)을 나에게 맞게 쉽게 정리해봤다. 평소 겉으로 알고 있던 개념이지만, 이번 기회에 조금 더 명확히 이해할 수 있었다. IoC(Inversion of Control, 제어 역전) 전통적인 방식에 반대되는 흐름으로 코드가 진행되는 것을 말하는 일반적인 용어이다. IoC를 설명하는 단골 예시는 바로 라이브러리와 프레임워크이다. 라이브러리는 내 코드가 라이브러리 코드(외부 코드)를 호출하지만, 프레임워크는 프레임워크(외부 코드)가 내 코드를 호출한다. → IoC는 프레임워크의 일반적인 특성이다. Dependency Inversion Principle(DIP, 의존성 역전 원리) 의존관계를 갖는 인스턴스의 구성이 추상화에 의존하는 것을 뜻한다. 다음과 같이 인스턴스 ..