BackEnd/spring 20

WebSocket + STOMP로 채팅 구현하기

STOMP란?Simple Text Oriented Messaging Protocol의 약자로 메시지를 전송하기 위한 프로토콜이다.메시지 브로커와 publisher - subscriber 방식을 사용하고, 메시지 브로커는 발행자가 전송하는 메시지를 구독자들에게 전송한다. 왜 STOMP를 사용 했는가?Spring WebSocket은 단순히 양방향 연결 채널일 뿐, 메시지를 어디로, 누가, 무엇을 보내는지 구조적으로 정의되어있지 않다. 하지만 STOMP를 WebSocket위에서 동작시키면 채널 구독, 메시지 목적지(채팅방) 구분, 구독 관리 등 실시간 채팅에 맞는 다양한 기능을 사용 가능하다. 따라서 이번에 구현한 채팅은 WebSocket 위에서 STOMP를 사용하여 채팅방 생성, 채팅방 구독, 전송, 읽..

BackEnd/spring 2025.05.30

Spring Webocket을 이용한 실시간 채팅 구현(+ JWT 인증)

GitHub - yangwoohyeon/OAuth2_9oormthonUNIVContribute to yangwoohyeon/OAuth2_9oormthonUNIV development by creating an account on GitHub.github.com WebSocket이란?서버와 클라이언트 간에 Socket Connection을 유지해서 언제든 양방향 통신 또는 데이터 전송이 가능하도록 하는 기술로써, sns, 화상 채팅, 증권 거래 등에서 널리 사용되고 있다. 왜 WebSocket을 사용하는가? HTTP를 사용하여 실시간 양방향 통신을 구현하기 위해서는 다음과 같은 방법을 사용할 수 있다. 백엔드에서 변경 사항이 생길 때마다 프론트엔드에게 응답을 보내주는 방식 : Server-Sent-Eve..

BackEnd/spring 2025.05.14

@Controller와 @RestController의 차이점

스프링 MVC에서 빠질 수 없는 애노테이션이 바로 @Controller이다. @Controller는 주로 HTML과 같은 뷰를 렌더링 할때 사용된다. @Controllerpublic class MyController { @RequestMapping("/greeting") public String greeting(Model model) { model.addAttribute("message", "Hello, World!"); return "greeting"; // greeting.jsp 또는 greeting.html과 같이 뷰를 찾아 렌더링 } }  하지만 뷰를 렌더링하는것 이 아닌 Data(또는 객체)를 반환해야 하는 경우도 존재한다. 이럴때는 @Respons..

BackEnd/spring 2025.02.23

SpringBean

스프링 빈이란 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트이다.즉, 스프링 컨테이너가 관리하는 자바 객체를 뜻하며, 하나 이상의 빈(Bean)을 관리한다.  스프링 빈(Bean)의 필요성 스프링빈을 사용하는 이유는 크게 객체 관리의 효율성, 의존성 주입(DI), 객체의 생명주기 관리, 애플리케이션의 유지보수성 향상 때문이다. 1. 객체 생성을 자동으로 관리해준다. 스프링을 사용하지 않은 경우public class Main { public static void main(String[] args) { MyService myService = new MyService(); System.out.println(myService.getMessage()); }}..

BackEnd/spring 2025.02.11

회원가입 로그인 구현

우선 맴버를 정의 해준다( 로그인 아이디, 패스워드를 가짐)package hello.login.domain.member;import lombok.Data;import javax.validation.constraints.NotEmpty;@Datapublic class Member { private Long id; @NotEmpty private String loginId; //로그인 아이디 @NotEmpty private String name; @NotEmpty private String password;}@NotEmpty를 넣어 줌으로써 아이디 비밀번호의 공백을 방지해준다.  @Controller@RequiredArg..

BackEnd/spring 2024.08.19

BeanValidation-Form 전송 객체 분리

검증시 등록할때의 객체와 수정할때의 객체가 다르면 groups를 이용하여 데이터를 검증하기가 어려워진다. 간단한 프로젝트를 통해 이해할 수 있었다. 프로젝트 요구사항Item 등록시 1) 상품이름 = NULL(X)2) 가격 = 1000이상, 1000000이하, NULL(X)3) 상품 수량 = 최대 9999 Item 수정시1) 상품id = NULL(X)2) 상품이름 = NULL(X)3) 가격 = 1000이상, 1000000이하, NULL(X)4) 상품수량 = 수정할때는 수량의 제한이 없음  이러한 제한사항을 구현하기 위해 Form 전송 객체를 분리 하였다.  - 상품 등록 시 사용package hello.itemservice.web.validation.form;import lombok.Data;import ..

BackEnd/spring 2024.08.05

검증 - 개선

지금까지 개발한것은 필드오류가 발생하면 입력값이 남아있지 않고 지워진다.하지만 FieldError부분을 약간만 손봐주면 오류 발생시 입력값을 남아있도록 해줄 수 있다. @PostMapping("/add") public String addItemV2(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) { //검증 로직 if(!StringUtils.hasText(item.getItemName())){// errors.put("itemName","상품 이름은 필수입니다."); bindingResult...

BackEnd/spring 2024.07.26

검증 - BindingResult

BindingResult이란 ==> 스프링이 제공하는 검증 오류를 보관하는 객체이다. 앞선 실습에서는 검증 오류를 HashMap에 보관했지만 이번에는 BindingResult를 이용해 보았다.  @PostMapping("/add") public String addItemV1(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redirectAttributes, Model model) {// //검증 오류 결과를 보관// Map errors = new HashMap(); //검증 로직 if(!StringUtils.hasText(item.getItemName())){// ..

BackEnd/spring 2024.07.26