BackEnd/Spring Boot 48

채팅 만들기_1(basic)

개요 웹 개발을 하면서 꼭 해봐야 하지만 잘 안해보는 2가지 기술중 하나였습니다. 채팅은 심심치 않게 볼수있는데 웹 서비스 기술이였지만 내가 한 회사, 외부 프로젝트에서는 적용한 적이 없는 기술이였습니다. 그래서 이번에 어디서든 쉽게 적용 할수있게 프로젝트를 하나 만들어 봤습니다. 스펙 Spring Boot2.7.7 Java 17 jsp 사용 dependencies // Spring Boot Web Server Dependency implementation 'org.springframework.boot:spring-boot-starter-web' // Spring Web Socket implementation 'org.springframework.boot:spring-boot-sta..

BackEnd/Spring Boot 2023.04.16

Request PathVariable Enum Converter

개요 API 개발 도중 @PathVariable를 enum Type으로 설정 하였다. 이러다 보니 한가지 오류가 발생했는데 Enum에 없는 데이터가 넘어 오면 Exception이 발생 하였습니다. 이를 해결하기 위해 Spring Boot Converter를 사용하였습니다. 이는 @PathVariable 뿐만 아니라 @ModelAttribute, @RequestParam에서도 동작 한다고 되어 있다. 따라서 외부에서 날라오는 데이터를 바인딩 하는데 Header에 있는 데이터 뿐만 아니라 Body에 있는 데이터도 되는지 한번 확인해 봐야 할꺼 같다.(Stack Over Flow에서 비슷한 질문인데 확인 해봐 야 할거 같습니다.) Spring Boot Document Spring 3.0 Document에는 이..

BackEnd/Spring Boot 2023.04.16

Enum 등록된 값 이외에 값 등록시

개요 Enum에 잘못된 값을 넣게 되면 오류가 뜨게 되므로 이를 방지 하기 위해 @JsonCreator을 사용 코드 public enum LangCode { KO, JA, EN; // Enum에 데이터를 입력 하면 실행이된다. // 원하는 데이터가 없으면 null이 입력이 된다. @JsonCreator(mode = JsonCreator.Mode.DELEGATING) public static LangCode findByCode(String name) { return Stream.of(LangCode.values()) .filter(c -> c.name().equals(name.toUpperCase())) .findFirst() .orElse(null); } }

BackEnd/Spring Boot 2023.04.16

TypeHandler

개요 Mysql 과 Mybatis로 개발을 진행 하였습니다. Paging 처리된 List를 불러오는 도중 하나의 Row에 특정 code list를 한번에 불러 왔어야 했습니다. 그러다 보니 Left Join과 Limit을 처리 하면 code list 별로 짤린후 resultMap이 되어 Collection을 사용해도 정확한 Paging 데이터를 가져올수 없었습니다. 그래서 서브쿼리에 GROUP_CONCAT을 사용하여 Code List를 한번에 문자로 받아 왔습니다. 하지만 이는 String으로 넘어 오기 때문에 List Type 으로 각각 쪼갤려면 서버에서 for문을 돌려서 하나하나 split 하여야 했습니다. 이러한 동작을 별도로 하기 전에 TypeHandler를 사용하여 resultMap에서 데이터를..

BackEnd/Spring Boot 2023.04.16

Exception Handler

개요 RestAPI 개발을 하다가 외부 에서 API요청시 잘못된 Path로 MissingPathVariableException이 발생할때가 있었다. Exception이 뜨는건 좋은데 Log에 Exception이 같이 기록 되는데 매우 보기 안 좋았다. 그래서 ExceptionHandler를 사용하여 잘못된 요청이라는 Json을 Return하도록 설정 하였다. 수정 코드 // Exception이 발생하면 CustomExceptionHandler을 체크 하겠다는 어노테이션입니다. @RestControllerAdvice public class CustomExceptionHandler { // ()안에 작성되는 Exception을 Handler역활을 하겠다는 어노테이션입니다. @ExceptionHandler({..

BackEnd/Spring Boot 2023.04.16

War VS Jar

War, Jar 차이 Archive 직역 : 보관소 서버 에서의 뜻 : 참고용 데이터 보관소 Applet 플러그인의 하나로서 전용 위젯 엔진이나 더 큰 프로그램 범위 내에서 실행되는 특정한 작업을 수행하는 조그마한 응용 프로그램을 말한다. What is JAR. Java Archive Zip 파일 형식 기반으로 압축을 풀지 않아도 사용 가능 하며 파일 사이즈도 작다 .jar 확장자 파일에는 Class와 같은 Java 리소스와 속성 파일, 라이브러리 및 액세서리 파일이 포함되어 있습니다. JAR 파일은 원하는 구조로 구성이 가능하며 JDK(Java Development Kit)에 포함하고 있는 JRE(Java Runtime Environment)만 가지고도 실행이 가능합니다. JAR 파일은 서버가 포함된 ..

BackEnd/Spring Boot 2023.04.16

AOP란?

정의 및 용어 설명 AOP(Aspect-Oriented Programming)는 프로그램 구조에 대한 또 다른 사고 방식을 제공하여 객체 지향 프로그래밍(OOP)을 보완합니다. OOP에서 모듈화의 핵심 단위는 클래스인 반면, AOP에서 모듈화의 단위는 측면입니다. Aspect는 여러 유형과 객체를 가로지르는 관심사(트랜잭션 관리 등)의 모듈화를 가능하게 합니다. (이러한 문제는 종종 AOP 문헌에서 "crosscutting" 문제라고 합니다.) Spring FrameWork에서 AOP AOP 용어 설명 영문을 구글 번역이나 직역으로 하면 이해 하기 어렵기 때문에 영문을 보고 이해한 내용으로 해석 하였습니다. 필히 참고시 영문 문서를 확인해 주세요 Aspect A modularization of a con..

BackEnd/Spring Boot 2023.04.15

Spring boot Test Case

개발을 하다 보면 Service 기능별 테스트를 해야 할 때가 있다.그렇다고 테스트 할때마다 서버를 동작시켜 서비스가 실행되는 동작까지 가기에는 은근히 시간을 잡아먹게 된다.이때 Spring Boot 의 Test 기능을 사용하면 시간이 단축되며 수많은 TestCase를 실행할 수 있다.한번 간단하게만 사용해 보면 끊을 수 없다.Spring Boot 테스트 가이드✅ Import DependencytestImplementation 'org.springframework.boot:spring-boot-starter-test'JUnit 기반이며 별도로 JUnit import도 가능✅ 기본 테스트 방법@SpringBootTest를 사용하면 아래와 같이 properties를 설정할 수 있다.@SpringBootTes..

BackEnd/Spring Boot 2023.04.15

Spring Request Flow

Spring을 사용하면서 Client에서 Request 요청 시 어떤 동작을 하는지에 대해 정리한 내용입니다.📌 Spring MVC 요청 흐름 정리1. 주요 구성요소 설명📥 Request / ResponseRequest: 클라이언트가 서버에 보내는 요청Response: 서버가 클라이언트에게 반환하는 응답🎯 DispatcherServletFront Controller 역할을 하며 모든 요청의 진입점입니다.요청을 받아서 처리할 Handler(Controller)로 전달하고, 결과를 View로 매핑하여 응답합니다.내부에 HandlerMapping, HandlerAdapter, ViewResolver 등을 포함합니다.🔗 Url Handler Mapping클라이언트 요청 URL을 어떤 Controller와..

BackEnd/Spring Boot 2023.04.15