본문 바로가기
반응형

스프링34

[스프링] @ConstructorProperties 활용하기 (feat. Jackson 라이브러리) POST 형식의 REST API 를 작성할 때, 요청 값을 주로 JSON 형태로 전달받는다. 이 데이터를 내부에서 사용할 수 있도록 맵핑 DTO 가 필요하고 주로 @RequestBody 어노테이션을 활용하여 전달받게 된다. 다음과 같이 코드를 작성할 수 있다. @Getter public class SampleRequestBody { private final String sampleName; private final Long sampleNumber; public SampleRequestBody(String sampleName, Long sampleNumber) { this.sampleName = sampleName; this.sampleNumber = sampleNumber; } } @PostMapping.. 2023. 3. 5.
[스프링] @PostMapping 의 속성 알아보기 (headers, produces) 회사에서 코드리뷰를 하다가 @PostMapping 의 파라미터로 headers 와 produces 가 포함된 코드를 확인한 적이 있습니다. 얼핏 알기로는 headers 는 전달받는 headers 에 대한 정보를 담고 있고, produces 는 응답값의 타입을 정의하기 위해 사용한다고 알고 있습니다. 정확하지가 않아 이번 기회에 한번 알아보고자 합니다. HTTP 메시지 구조 @PostMapping 은 HTTP 통신에 있어 필요한 어노테이션이기 때문에 먼저 HTTP 메시지 구조에 대해 알아보자. HTTP 메시지는 클라이언트와 서버 사이에서 데이터가 교환되는 방식을 의미하며, 요청 (Request) 과 응답 (Response) 의 두 가지 유형이 존재한다. 요청과 응답은 Start line, Http head.. 2023. 2. 27.
[스프링] AOP 와 @RestControllerAdvice 지금 회사에 들어오면서 처음 봤던 코드 중 하나가 @RestControllerAdvice 였습니다. 이전 회사에서는 예외 처리를 가장 앞단의 try-catch 로 묶어서 했었는데, 여기서는 Advice 를 적극적으로 활용하고 있어 이에 대해 정리해두고자 합니다. 스프링 AOP AOP 는 Aspect-Oriented Programming 의 약자로 관점 지향 프로그래밍이다. 처음에 관점 지향 프로그래밍? 이라고 하길래 객체 지향 프로그래밍, 절차 지향 프로그래밍 등 뭔 그놈의 지향이 많은지 싶었다. 평소에 잘 작성하지 않는 메커니즘으로 구현하는 방식이다 보니 잘 와닿지 않았고, 이해하는데도 시간이 좀 걸렸었다. AOP 을 통해 이루고자 하는 것은 관심사의 분리이다. 위 그림처럼 "사용자 정보 관리", "주.. 2023. 2. 22.
[Gradle] Kotlin DSL 과 buildSrc 를 통한 버전 관리 Gradle 빌드 스크립트를 작성할 때 Groovy 언어로 많이 작성을 했었는데, Kotlin 으로도 작성할 수 있다는 것을 알게 되어 관련 내용을 정리해보고자 한다. 그리고 buildSrc 모듈을 활용해서 버전 관리를 하는 방법에 대해서도 같이 정리하려고 한다. Gradle 빌드 스크립트 Gradle 은 빌드 스크립트 작성을 위해 Groovy 기반 또는 Kotlin 기반의 DSL (Domain-Specific Language) 을 지원한다. Gradle 5.0 버전부터 지원한다. (릴리즈 노트) DSL 이란 "도메인 전용 언어"로써 특정 목적을 달성하기 위해 사용되며 코드의 내부 로직을 숨기고 재사용성을 높여주는 장점이 있다. Kotlin DSL vs. Groovy DSL Kotlin DSL 은 Gro.. 2023. 2. 20.
[Gradle] Build Lifecycle Gradle 이 빌드되는 과정이 궁금하여 찾아보던 중 공식 문서를 접하게 되었고 번역을 해두면 좋겠다는 생각이 들었다. 들어가며 Gradle 은 tasks 와 tasks 간 의존성을 정의하는 의존 기반 프로그래밍 (dependency based programming) 의 예시이다. Gradle 은 작성된 빌드 스크립트와 플러그인의 의존성들이 서로 순서에 맞게 실행되도록 보장한다. Gradle is an example of dependency based programming: you define tasks and dependencies between tasks. Gradle guarantees that these tasks execute in the order of their dependencies. Yo.. 2023. 2. 16.
[스프링] @CircuitBreaker 적용하기 MSA 환경에서는 작은 규모의 서비스가 상호작용하며 서로 연결되어 있다. 이런 환경에서 하나의 서비스가 장애가 나 서비스가 중단되면 다른 서비스들로 그 장애가 전파될 수 있다. 장애 전파를 막을 수 있는 여러 가지 방법들이 존재하는데, 그 중 하나는 "서킷 브레이커" 이다. "서킷 브레이커" 라는 용어는 원래 전기 회로에서 과열된 회로를 차단하는 장치를 의미하는데, 보통 주식에서 많이 접한다. 주가가 특정 % 이상 급락하는 경우 발동하며 매매를 일시 정지할 수 있는 제도이다. 마찬가지로 MSA 환경에서의 서킷 브레이커는 발생한 장애를 다른 서비스로 전파하지 않도록 하기 위한 장치라고 보면 된다. 서킷 브레이커 종류 Netflix Hystrix. 넷플릭스에서 만든 서킷 브레이커로 SpringBoot 2.4.. 2023. 2. 16.
[스프링] Executable jar 파일 만들어서 실행해보기 사이드 프로젝트 개발을 마무리하고 다른 환경에서 실행을 시켜보고 싶어졌다. 개발은 MacOS 노트북에서 진행했고, 만든 어플리케이션을 항상 켜두고 싶어서 집에 있는 데스크톱 Windows PC 에서 실행시켜보고 싶었다. 그 과정을 기록해보고자 한다. Executable jar 가 뭐지? 핵심은 executable jar (실행가능한 jar) 파일을 개발한 환경에서 만들고 그 파일을 다른 환경에서 실행하는 것이다. Executable jar 파일은 메인 클래스와 어플리케이션이 의존하고 있는 다양한 라이브러리, 의존성들을 함께 포함하고 있는 파일이다. 다른 용어로는 fat jar 라고도 불린다. 생성은 어떻게 하지? 스프링부트 환경에서 어플리케이션을 실행하는 클래스 (예: SampleApplication.j.. 2023. 2. 10.
[스프링] H2 데이터베이스 사용하기 H2 데이터베이스는? 빠르고, 오픈소스이며, JDBC API 를 지원 자바로 작성된 관계형 (relational) 데이터베이스 인메모리 테이블 또는 디스크 기반 테이블 둘 다 지원 인메모리 (In-memory): 어플리케이션이 종료될 때 DB 가 초기화 됨 디스크 기반 (Disk): 어플리케이션이 종료되어도 데이터가 디스크에 저장되어 재사용 가능 브라우저 기반 콘솔 지원 (브라우저에서 쿼리를 날릴 수 있음) 표준 SQL 대부분 지원 주로 로컬 또는 테스트 환경에서 사용 다양한 기능 지원: 트랜잭션, Fulltext search, 암호화된 테이블 등 자세한 내용은 공식 홈페이지를 참고하자. 의존성 implementation("org.springframework.boot:spring-boot-starter-.. 2023. 2. 9.
반응형