본문 바로가기

728x90
반응형

전체 글

(78)
[Spring] Spring Boot Validation annotation 정리 @RequestBody 옆(오른쪽, 왼쪽 상관 없음)에 @Valid 어노테이션을 쓴 뒤에 해당 DTO의 필드 위에 유효성 검증을 원하는 대상에 부합하는 annotation을 써줍니다. 사용법 자세한 사용법은 아래 글을 참고해주세요~ https://yundevnote.tistory.com/64 [Spring] Spring Boot에서의 validation check Validation 올바르지 않은 데이터를 걸러내고 보안을 유지하기 위해 데이터 검증은 여러 계층에 걸쳐서 적용됩니다. Client의 데이터는 조작이 쉬울 뿐더러 모든 데이터가 정상적인 방식으로 들어오 yundevnote.tistory.com @Getter @RequiredArgsConstructor public class UserRequest..
[Spring] Spring Boot에서의 validation check Validation 올바르지 않은 데이터를 걸러내고 보안을 유지하기 위해 데이터 검증은 여러 계층에 걸쳐서 적용됩니다. Client의 데이터는 조작이 쉬울 뿐더러 모든 데이터가 정상적인 방식으로 들어오는 것은 아니기 때문에 Client Side 뿐만 아니라 Server Side에서도 데이터 유효성 검사를 해야 할 필요가 있습니다. 스프링 부트 프로젝트에서는 @Validated를 이용해 유효성을 검증할 수 있습니다. @Valid, @Validated 차이 @Valid는 Java에서 지원해주는 어노테이션이고, @Validated는 Spring에서 지원해주는 어노테이션입니다. @Validated는 @Valid의 기능을 포함하고, 유효성 검사할 그룹을 지정할 수 있는 기능을 추가로 제공합니다. 스프링에서는 애노..
[Spring] DTO의 @Builder, @RequestBody와 생성자 RestAPI를 생성 후 API 테스트를 하던 중 몇 가지 사실을 알게 되어 같은 문제로 어려움을 겪고 있는 분들께 도움이 되고자 글을 작성하였습니다. 잘못된 내용이 있다면 가감 없이 피드백 주시길 바랍니다 🙇‍♀️ 아래의 예제는 임시로 만든 DTO, Controller이니 가볍게 보고 넘어가시길 바랍니다. 오늘 포스트의 핵심은 Controller가 Client로부터 받은 request body를 DTO로 매핑시키는 방법과 @Builder 어노테이션 사용 시 주의할 점이니 이를 떠올리며 읽어주시면 좋을 것 같습니다~ 우선 모든 클라이언트 요청을 주고받을 때 사용하는 DTO 클래스를 각각 역할 별로 나누어서 작성하였습니다. 아래는 로드 밸런서 생성 시 @RequestBody로 넘어올 객체를 정의한 클래스 ..
[Swagger] Failed to load API definition 문제 단일 모듈 환경에서의 Swagger UI 정상 동작 여부를 확인 후, 멀티 모듈로 변환 후 Swagger UI를 실행 했을 경우 아래와 같은 에러가 발생했습니다. Ambiguous handler methods mapped for '/v3/api-docs' 해결 JSON 형식의 OpenAPI의 문서 경로가 중복되어 발생하는 문제라고 판단하여 application.yml 에 아래와 같은 설정을 추가해주었습니다. springdoc: api-docs: path: /api-docs/network 해당 설정 추가 후 아래와 같이 Swagger UI가 정상적으로 보입니다. OpenAPI의 api-docs의 기본 URL이 /v3/api-docs 여서 발생한 에러였습니다.
[Kafka] Kafka Consumer 컨슈머는 보통 카프카 컨슈머 API와 그것으로 구성된 애플리케이션을 말합니다. 일반적으로 컨슈머가 토픽을 구독(Subscribe) 혹은 읽는다(Read)고 하는데, 이는 컨슈머가 토픽 파티션에 저장된 메시지들을 가져오는 것을 말합니다. 컨슈머의 3가지 특징은 다음과 같습니다. Polling 구조 단일 토픽의 멀티 커슈밍 컨슈머 그룹 Polling 구조 일반적으로 다른 메시징 큐는 메시지 큐에서 메시지를 push하는데, 카프카는 컨슈머가 브로커로부터 메시지를 pull 해옵니다.push 방식의 가장 큰 단점은 메시지 큐가 컨슈머 측의 성능도 염두해야 합니다. 즉, 메시지 큐가 컨슈머로 메시지를 push 할 때, '이 정도는 할 수 있겠지'라고 컨슈머의 환경을 고려해야 합니다. 하지만 컨슈머가 브로커로부터 메..
[JAVA] Array, 자바 배열 해당 글은 남궁성님의 자바의 정석을 학습 후에 작성되었습니다. 배열이란 배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것 int[] score = new int[5]; 위와 같은 형식으로 배열을 선언하면 저장 공간이 생긴다. 위의 예제에서는 5개의 저장공간이 생기는데 해당 공간에는 자동으로 0부터 번호가 붙는데 그 숫자를 배열의 인덱스 라고 부른다. 배열의 선언과 생성 배열의 선언은 변수의 선언과는 조금 다르다 변수는 선언과 동시에 저장 공간이 만들어지는데, 배열을 선언할 경우 저장 공간이 만들어지는 것이 아닌 참조 변수가 선언 되는 것이다. 배열의 선언 - 배열을 다루기 위한 참조변수의 선언 선언 방법 타입[] 변수이름; int[] score; String[] name; 타입 변수이름[]; i..
[JAVA] break문, continue 문, 이름 붙은 break 문 해당 글은 남궁성님의 자바의 정석을 학습 후에 작성되었습니다. break 문 자신이 포함된 하나의 반복문을 벗어난다 while(true) { if(sum>100){ break; } ++i; sum += i; } System.out.println("i=" + i); System.out.println("sum=" + sum); i=14 sum=105 continue 문 자신이 포함된 반복문의 끝으로 이동 다음 반복으로 넘어간다 전체 반복 중에서 특정 조건시 반복을 건너뛸 때 유용함 for(int i=0;i
[Web] Websocket Websocket이란? Websocket은 웹 브라우저(클라이언트)와 서버 간의 full-duplex(양방향), bi-directional(전이중적), persistent connection(지속적인 연결)의 특징을 갖는 프로토콜입니다. 웹 소켓이 나오기 이전에는 클라이언트의 요청이 없을 경우, 서버로부터 응답을 받을 수 없었습니다. 대부분의 통신은 HTTP를 통해 이루어졌는데, HTTP는 Request/Response 기반의 Stateless protocol로 클라이언트에서 필요할 때 request를 할 때만 서버가 response를 하는 방법으로 통신이 되는 한방향 통신입니다. 웹 소켓은 이러한 단점을 해결하기 위해 나온 서버와 클라이언트 사이에 양방향 통신 채널을 구축할 수 있는 통신 프로토콜입니다..

728x90
반응형