Spring/Rest API

    아파치 카프카 (Kafka)

    Kafka 아파치 카프카는 가장 새로운 메시징 시스템으로, ActiveMQ, Artemis, RabbitMQ와 유사하면서도 특유의 아키텍처를 가지고 있다. 카프카는 높은 확장성을 제공하는 클러스터로 실행되도록 설계되었으며, 클러스터의 모든 카프카 인스턴스에 걸쳐 토픽을 파티션으로 분할하여 메시지를 관리한다. 카프카의 토픽은 클러스터의 모든 브로커에 걸쳐 복제된다. 클러스터의 각 노드는 하나 이상의 토픽에 대한 리더로 동작하고, 토픽 데이터를 관리하고, 클러스터의 다른 노드로 데이터를 복제한다. 각 토픽은 여러 개의 파티션으로 분할될 수 있으며, 클러스터의 각 노드는 한 토픽의 하나 이상의 파티션의 리더가 된다. 설정 implementation 'org.springframework.kafka:spring-..

    비동기 메시지 전송 (JMS, RabbitMQ)

    비동기 메시징은 애플리케이션 간에 응답을 기다리지 않고 간접적으로 메시지를 전송하는 방법으로, 통신하는 애플리케이션 간의 결합도를 낮추고 확장성을 높일 수 있다. 스프링이 제공하는 비동기 메시징으로는 JMS, RabbitMQ, AMQP, 아프치 카프카가 있다. JMS JMS는 두 개 이상의 클라이언트 간에 메시지 통신을 위한 공통 API를 정의하는 자바 표준이다. 자바로 비동기 메시징을 처리하는 가장 좋은 방법으로, 모든 구현 코드가 공통 인터페이스를 통해 함께 동작할 수 있게 해준다. 스프링은 JmsTemplate라는 템플릿 기반의 클래스를 통해 JMS를 지원하며, 메시지 기반의 POJO도 지원한다. JmsTemplate를 사용하면 프로듀서가 큐와 토픽에 메시지를 전송하고 컨슈머는 그 메시지들을 받을 ..

    REST 서비스 사용

    스프링 애플리케이션은 아래와 같은 방법을 통해 REST API를 사용할 수 있다. RestTemplate: 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트 Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트 WebClient: 반응형 비동기 REST 클라이언트 RestTemplate 클라이언트 입장에서 REST 리소스와 상호작용하려면, 클라이언트 인스턴스와 요청 객체를 생성하고, 해당 요청을 실행하고, 응답을 분석하여 관련 도메인 객체와 연관시켜 처리하면서, 도중에 발생할 수 있는 예외까지 처리해야 한다. 이러한 장황한 코드를 피하기 위해 스프링은 RestTemplate을 제공하며, RestTemplate은 REST 리소스를 사용하는 ..

    스프링 데이터 REST

    스프링 데이터 REST 스프링 데이터는 코드에 정의한 인터페이스를 기반으로 Repository를 자동으로 생성하고 필요한 기능을 수행한다. 스프링 데이터 REST는 스프링 데이터의 모듈 중 하나로, 스프링 데이터가 생성하는 Repository의 REST API를 자동으로 생성한다. 따라서, 스프링 데이터 REST를 빌드에 추가하면 정의한 각 리포지토리 인터페이스를 사용하는 API를 얻을 수 있다. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-rest' 빌드에 해당 의존성만 지정해주면 이미 스프링 데이터를 사용 중인 프로젝트에서 REST API를 노출시킬 수 있다. 스프링 데이터 REST가 생성하는 REST 엔드포인트를 ..

    REST 엔드포인트 정의

    SPA 스프링 MVC를 사용해서 전통적인 MPA(Multi-Page Application)로 개발했던 것들을 앵귤러 기반의 SPA로 대체해보자! SPA에서는 프레젠테이션 계층이 백엔드 처리와 거의 독립적이므로, 백엔드 기능은 같으면서 사용자 인터페이스만 다르게 개발할 수 있다. 또한, 이런 API를 사용할 수 있는 다른 애플리케이션과 통합할 수 있는 기회를 제공한다. REST 컨트롤러 @RestController @RequiredArgsConstructor @RequestMapping(path = "/orders", produces = "application/json") @CrossOrigin(origins = "*") // 서로 다른 도메인 간의 요청 허용 public class MemberContro..

    RestContoller 요청과 응답 방법

    HTTP는 GET/POST/PUT/DELETE/OPTIONS 등과 같은 메서드와 URI를 이용해 서버에 HTTP 요청을 보낸다. 서버는 자기 주소를 제외한 /{리소스} 부분을 해석하고, 이 요청이 어떤 HTTP 메서드를 이용했는지 확인 후, 해당 리소스의 HTTP 메서드에 연결된 메서드를 실행한다. @RestController @RestController @RequestMapping("/test") // 리소스 public class TestController { @GetMapping public String testController() { return "hello"; } } @RestController 어노테이션은 해당 컨트롤러가 RestController 임을 명시하고, 스프링은 HTTP와 관련된 ..

    REST API 인증 기법

    ※ 인증은 사용자가 누구냐에 관한 것이고, 인가는 사용자가 사용할 수 있는 자원을 말한다. Basic 인증 상태가 없는 웹 애플리케이션에서 인증을 구현하는 가장 간단한 방법으로, 모든 HTTP 요청에 아이디와 비밀번호를 같이 보낸다. 최초 로그인한 후 HTTP 요청 헤더의 Authorization: 부분에 Basic : 처럼 아이디와 비밀번호를 콜론으로 이어붙인 Base64로 인코딩한 문자열을 함께 보낸다. HTTP 요청을 수신한 서버는 인코딩된 문자열을 디코딩해 아이디와 비밀번호를 찾아낸 후 사용자 정보가 저장된 데이터베이스 또는 인증 서버의 레코드와 비교한다. 만약 데이터베이스의 레코드와 아이디와 비밀번호가 일치하면 요청받은 일을 수행하고, 아니면 거부한다. 문제점 Basic 인증 방법은 아이디와 비..

    REST 아키텍처 패턴

    레이어드 아키텍처 패턴 스프링 프로젝트 내부에서 어떻게 코드를 적절히 분리하고 관리할 것이냐에 대한 것으로, 애플리케이션을 구성하는 요소들을 수평으로 나눠 관리하는 것 레이어로 나눈다는 것은 메서드를 클래스 또는 인터페이스로 쪼개는 것으로, 각 레이어 사이에는 계층이 있고 레이어는 자기보다 한 단계 하위의 레이어만을 사용한다. 보통 자바로 된 비즈니스 애플리케이션의 클래스는 비즈니스 로직을 수행하는 클래스와, 데이터를 담는 클래스로 나눌 수 있다. 비즈니스 로직을 수행하는 클래스는 컨트롤러, 서비스, 리포지토리처럼 로직을 수행한다. 데이터를 담는 클래스는 아무 기능 없이 데이터베이스에서 반환된 비즈니스 데이터를 담고 있으며, 기능에 따라 엔티티, 모델, DTO 등으로 부른다. 모델, 엔티티, DTO 모델..