본문 바로가기

Development

(98)
[Spring] 서버 간 통신하기: WebClient WebClient 일반적으로 실제 운영환경에 적용되는 애플리케이션은 정식 버전으로 출시된 스프링 부트의 버전보다 낮은 경우가 많기 때문에 RestTemplate을 많이 사용하고있다. 하지만 최신 버전에서는 RestTemplate이 지원 중단되어 WebClient를 사용할 것을 권고하고 있다. Spring WebFlux는 HTTP 요청을 수행하는 클라이언트로 WebClient를 제공한다. WebClient는 리액터(Reactor) 기반으로 동작하는 API이다. 리액터 기반이므로 스레드와 동시성 문제를 벗어나 비동기 형식으로 사용할 수 있다. WebClient 특징 논블로킹(Non-Blocking) I/O를 지원 리액티브 스트림(Reactive Streams)의 백 프레셔(Back Pressure)를 지원 ..
[Spring] 서버 간 통신하기: RestTemplate 스프링에서 다른 서버로 웹 요청 보내기: RestTemplate과 WebClient 최근에 개발되는 서비스들은 마이크로서비스 아키텍처(MSA) 를 주로 채택하고 있습니다. MSA는 말 그대로 애플리케이션이 가지고 있는 기능(서비스)이 하나의 비즈니스 범위만 가지는 형태입니다. 각 애플리케이션은 자신이 가진 기능을 API로 외부에 노출하고, 다른 서버가 그러한 API를 호출해서 사용할 수 있게 구성되므로 각 서버가 다른 서버의 클라이언트가 되는 경우도 많습니다. 스프링에서는 다른 서버로 웹 요청을 보내고 응답을 받을 수 있게 도와주는 RestTemplate 와 WebClient가 있습니다. 이 글에선 RestTemplate에 대해 살펴보겠습니다. RestTemplate RestTemplate은 스프링에서 ..
[Spring] 스프링 액추에이터(Actuator) 스프링 부트 액추에이터 스프링 부트 액추에이터는 HTTP 엔드포인트나 JMX(Java Management Extensions)를 활용해 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다. JMX(Java Management Extensions)는 실행 중인 애플리케이션의 상태를 모니터링하고 설정을 변경할 수 있게 해주는 API 액추에이터를 사용하려면 다음과 같이 spring-boot-starter-actuator의존성을 추가해야 한다. Maven org.springframework.boot spring-boot-starter-actuator Gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-actu..
[Tip] Github README에 내가 작성한 블로그 최신 글 가져오기 나의 Github README에 블로그 최근 글 작성하기 1. 자신을 소개하는 README.md에 블로그 글 목록이 들어갈 자리에 다음 코드 넣기 2. README.md가 위치하는 Repository에 .github 폴더를 만들고, 그 안에다가 또 workflows 라는 폴더 만들기 3. blog-post-workflow.yml 라는 파일에 아래 코드 붙여넣기 name: Latest blog post workflow on: schedule: # Run workflow automatically - cron: '0 * * * *' # Runs every hour, on the hour workflow_dispatch: # Run workflow manually (without waiting for the c..
[Spring] 스프링 부트의 예외 처리 방식 스프링 부트의 예외 처리 방식 웹 서비스 애플리케이션에서는 외부에서 들어오는 요청에 담긴 데이터를 처리하는 경우가 많다. 그 과정에서 예외가 발생하면 예외를 복구해서 정상으로 처리하기보다는 요청을 보낸 클라이언트에 어떤 문제가 발생했는지 전달하는 경우가 많다. 예외가 발생했을 때 클라이언트에 오류 메시지를 전달하려면 각 레이어에서 발생한 예외를 엔드포인트 레벨인 컨트롤러로 전달해야 한다. 이렇게 전달받은 예외를 스프링 부트에서 처리하는 방식으로 크게 두 가지가 있다. (Rest)ControllerAdvice와 @ExceptionHandler를 통해 모든 컨트롤러의 예외를 처리 ExceptionHandler를 통해 특정 컨트롤러의 예외를 처리 @RestControllerAdvice @RestControll..
[이분 탐색] 프로그래머스 Level 3 입국심사 Java 풀이 https://school.programmers.co.kr/learn/courses/30/lessons/43238 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 풀이 times를 오름차순 정렬한다. 가장 큰 시간(times의 마지막 인덱스)에다가 n을 곱해서 가장 오래 걸리는 경우의 시간을 구한다. 즉, 모든 사람이 가장 오래 걸리는 시간의 입국심사대를 가는 상황이다. 시작 시간(start)과 가장 오래 걸리는 시간(end)을 반으로 나눈 값을 mid라는 변수에 저장한다. times 배열을 순회하며 mid 변수를 times 배열의 요소로 나누어서 c..
[Spring] 유효성 검사와 Hibernate Validator 유효성 검사(validation) 애플리케이션의 비즈니스 로직이 올바르게 동작하는지 검증하는 작업을 유효성 검사라고 한다. 유효성 검사의 예로는 여러 계층에서 들어오는 데이터에 대해 의도한 형식대로 값이 들어오는지 체크하는 과정이 있다. 특히 자바에서 가장 신경 써야 하는 것 중 하나로 NullPointException이 있다. Bean Validation 계층별로 진행하는 유효성 검사는 검증 로직이 각 클래스별로 분산돼 있어 관리하기가 어렵다. 그리고 검증 로직에 의외로 중복이 많아 여러 곳에 유사한 기능의 코드가 존재할 수 있다. 검증해야 할 값이 많다면 검증하는 코드가 길어진다. 이러한 문제로 코드가 복잡해지고 가독성이 떨어지는 문제가 있다. 이 같은 문제를 해결하기 위해 자바 진영에서는 2009년..
[Spring] 영속성 전이(Cascade)와 고아 객체(Orphan) 영속성 전이(Cascade) 영속성 전이란 특정 엔티티의 영속성 상태를 변경할 때 그 엔티티와 연관된 엔티티의 영속성에도 영향을 미쳐 영속성 상태를 변경하는 것 예를 들어 아래 코드에서 @OneToMany 어노테이션의 인터페이스를 살펴보면 cascade()라는 요소를 볼 수 있다. public @interface OneToMany { Class targetEntity() default void.class; CascadeType[] cascade() default {}; FetchType fetch() default FetchType.LAZY; String mappedBy() default ""; boolean orphanRemoval() default false; } 영속성 전이에 사용되는 타입은 엔티티..