728x90
반응형

Spring 58

[Protocol] STOMP Protocol

기본적으로 채팅 서비스를 구현하기 위해서는 Half Duplex 방식의 HTTP보다 Full Duplex 방식의 Socket 통신을 기반으로 구현한다. 그리고 이 위에 메시징 전송을 효율적으로 하기 위해 프로토콜 STOMP Protocol이 존재한다. 채팅 서비스를 개발하기 이전에 STOMP Protocol이 무엇인지 알아보자. ▶ STOMP란 ? STOMP는 Simple / Stream Text Oriented Messaging Protocol 의 약자이다. 말 그대로 간단한 문자 기반 메세징 프로토콜이다. STOMP는 웹 상에서 텍스트 송 / 수신을 위해 미리 정의된 특정한 규칙이다. STOMP에서 정의한 규칙을 준수하면 여러 언어, 여러 플랫폼 간 메세지를 상호 운영할 수 있다. 기본적인 구조는 P..

Spring/Chat 2023.10.09

Spring Boot OpenAPI 3.0 + Swagger version 3 적용 및 설정하기, Swagger에 JWT 기능 설정하기

이번 프로젝트를 진행하면서 API 문서 정리가 요구되었고 Swagger 3.0 버전을 적용하여 개발한 API를 정리하고 테스트할 수 있도록 설정하였다. 그에 대한 과정을 정리해보고자 한다. ▶ build.gradle Swagger dependency 적용해주기 implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.0.2' ▶ OpenAPI 3.0 + Swagger 3.0 Spring Boot에 설정하기 : @OpenAPIDefinition info : 해당 Swagger 페이지가 무엇을 나타내는지 알려주기 위해 작성해준다. @OpenAPIDefinition( info = @Info(title = "User-Service API 명세서",..

Spring/API 2023.06.21

[스프링의 이해와 원리] 2.2 테스트

▶ 스프링의 테스트 적용 지난 게시글에서 정리했듯이, JUnit은 독립적인 테스트를 지원하기 위해 매 번 새로운 애플리케이션 컨텍스트 오브젝트를 만들게 했다. 따라서 @Before 메소드가 테스트 메소드 개수만큼 반복되기 때문에 애플리케이션 컨텍스트도 그 개수만큼 생성된다. 설정도 간단하고 빈도 몇 개 없는 경우에는 별 문제가 되지 않지만, 빈이 많아지고 복잡해지면 애플리케이션 컨텍스트 생성에 적지 않은 시간이 걸릴 수 있다. 애플리케이션 컨텍스트가 만들어질 때는 모든 싱글톤 빈 프로젝트를 초기화한다. 어떤 빈은 오브젝트가 생성될 때 자체적인 초기화 작업을 진행해서 제법 많은 시간을 필요로 할 수 있다. 또, 애플리케이션 컨텍스트가 초기화될 때 어떤 빈은 독자적으로 많은 리소스를 할당하거나 독립적인 스레..

[스프링의 이해와 원리] 2.1 테스트

Spring에서 개발자에게 제공하는 가장 중요한 가치는 객체지향과 테스트이다. 스프링의 핵심인 IoC와 DI는 오브젝트의 설계와 생성, 관계, 사용에 관환 기술이다. Spring은 IoC/DI를 이용해 객체지향 프로그래밍 언어의 근본과 가치를 개발자가 손쉽게 적용하고 사용할 수 있게 도와주는 기술이다. 개발을 진행하다보면 애플리케이션은 계속 변하고 복잡해져 간다. 그 변화에 대응하는 첫 번째 전략이 확장과 변화를 고려한 객체지향적 설계와 그것을 효과적으로 담아낼 수 있는 IoC/DI 같은 기술이라면, 두 번째 전략은 만들어진 코드를 확실할 수 있게 해주고, 변화에 유연하게 대처할 수 있는 테스트 기술이다. ▶ 웹을 통한 테스트 방법의 문제점 테스트 코드를 사용하지 않고 웹을 통해 테스트하는 것은 매우 불..

스프링의 디자인 패턴

※ 디자인 패턴 디자인 패턴은 소프트웨어 설계 시 특정 상황에서 자주 만나는 문제를 해결하기 위해 사용할 수 있는 재사용 가능한 솔루션을 말한다. 모든 패턴에는 간결한 이름이 있어서 잘 알려진 패턴을 적용하고자 할 때 간단히 패턴 이름을 언급하는 것만으로도 설계의 의도와 해결책을 함께 설명할 수 있다는 장점이 있다. 디자인 패턴은 주로 객체지향 설계에 관한 것이고, 대부분 객체지향적 설계 원칙을 이용해 문제를 해결한다. 패턴의 설계 구조를 보면 대부분 비슷한데, 그 이유는 객체지향적인 설계로부터 문제를 해결하기 위해 적용할 수 있는 확장성 추구 방법이 대부분 두 가지 구조로 정리되기 때문이다. 하나는 클래스 상속이고 다른 하나는 오브젝트 합성이다. 따라서 패턴의 결과로 나온 코드나 설계 구조만 보면 대부..

@RequestParam, @ModelAttribute

@RequestParam과 @ModelAttribute 모두 클라이언트로부터의 전달값을 핸들러의 매개변수로 매핑할 때 사용한다. 각각의 차이가 무엇인지 알아야한다. @RequestParam @RequestParam은 클라이언트에서 전송하는 전달값을 1:1로 매핑한다고 생각하면 된다. 예를 들어, http://localhost:8080/name=kim?age=20 이런 식으로 전달값이 넘어왔다고 가정해보자. 우리는 HTTP Body에서 2개의 전달값을 추출할 수 있다. { "name" : "kim"과 "age" : 20 }이다. 이것들을 하나 하나 추출할 때 @RequestParam을 사용하는 것이다. 사용법을 확인해보면 @Controller public class testController{ @GetMa..

Spring/Lombok 2022.08.01

오브젝트와 의존관계 - 싱글톤 패턴과 스프링에서의 싱글톤

스프링은 기본적으로 별다른 설정을 하지 않으면 내부에서 생성하는 빈 오브젝트를 모두 싱글톤으로 만든다. 여기서 싱글톤이라는 것은 디자인 패턴에서 나오는 싱그톤 패턴과 비슷한 개념이지만 구현 방법은 확연히 다르다. 싱글톤 패턴의 원리는 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만 만들어서 사용하는 것이다. 매번 클라이언트에서 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들어서 사용한다고 가정하면 요청 한 번에 5개의 오브젝트가 새로 만들어지고 초당 500개의 요청이 들어오면 초당 2500개의 새로운 오브젝트가 생성된다. 아무리 환경이 좋아졌다고 한들 이렇게 부하가 걸리면 서버가 감당하기 힘들어진다. 따라서 서버환경엣는 서비스 싱글톤의 사용이 권장된다. 하지만 디자인 패턴에 소개된 싱글..

[Spring] ResponseEntity란?

ResponseEntity가 무엇인지 알기 위해서 사전 지식으로 REST API가 무엇인지 알아야 한다. REST API에 대해 정리한 글이 존재하니 무엇인지 보고 오면 좋을 듯하다. https://wonsjung.tistory.com/418 API란? REST API란? API란 무엇인가? API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다. 예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 wonsjung.tistory.com 1. ResponseEntity란? Spring Framework에서 제공하는 클래스 중 HttpEntity라는 클래스가 존재한다. 이것은 HTTP 요청(Request) 또는 응답(Response)에 해당하는..

Spring/API 2022.07.25

오브젝트와 의존관계 - 3. DB 커넥션 독립 / 디자인 패턴

UserDao의 커넥션 만들기를 관심사의 분리를 통해 변화에 좀 더 유연하게 대처할 수 있는 코드를 만들었다. 근데 만약 다른 환경에서 위 코드를 사용하고 싶은데 각 환경마다 DB가 달라 매 번 커넥션을 가져올 때마다 변경될 가능성이 존재하면 어떻게 해야할까? 상속을 통한 확장 기존 UserDao 코드에서 한 단계 더 분리해보자. getConnection()을 추상 메소드로 만들어놓는다. 추상 메소드라서 메소드 코드는 없지만 메소드 자체는 존재한다. public abstract Connection getConnection() throws ClassNotFoundException, SQLException; 위와 같은 추상 메소드를 만들어놓고 public class AUserDao extends UserDa..

HTTP 요청 메시지 - JSON

이번에는 HTTP API에서 주로 사용하는 JSON 데이터 형식을 조회해보자. requestBodyJsonV2 - @RequestBody 문자 변환 /** * @RequestBody * HttpMessageConverter 사용 -> StringHttpMessageConverter 적용 * * @ResponseBody * - 모든 메서드에 @ResponseBody 적용 * - 메시지 바디 정보 직접 반환(view 조회X) * - HttpMessageConverter 사용 -> StringHttpMessageConverter 적용 */ @ResponseBody @PostMapping("/request-body-json-v2") public String requestBodyJsonV2(@RequestBody..

Spring/MVC 2022.07.07
728x90
반응형