개발바닥곰발바닥
반응형
article thumbnail
Spring Boot에서 Querydsl 5.0 Gradle 설정하기
JAVA/Spring 2022. 10. 2. 15:00

Spring Boot 2.7.3에서 Querydsl 5.0.0 gradle 설정하기 gradle에서 Querydsl 5.0 버전을 추가할 때, 올바르게 설정해주지 않으면 java.lang.NoSuchFieldError 등과 같은 에러가 발생하거나, Q클래스가 생성이 안되는 문제가 있어서 해결한 뒤 gradle 설정을 공유해본다. // QueryDSL 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'org.springframework.boot' version '2.7.3' id 'io.spring.dependency-management' version '1.0.13.RELEASE' //querydsl 추가 id "com.ewerk.gr..

article thumbnail
[Spring Boot] Swagger-ui로 API Docs 자동화하기
JAVA/Spring 2022. 9. 1. 23:12

Swagger-ui로 API Docs 자동화하기 기존에 Notion을 사용해서 API 명세서를 작성하다가, API 서버에 변경이 생기면 문서도 같이 수정해줘야 하는 번거로움에 자동화의 필요성을 느껴 Swagger를 적용하게 되었다. Spring Boot에서 Swagger를 적용하여 API 문서를 작성하는 방법에 대해 알아보도록 하자 🙉 의존성 추가 implementation 'org.springdoc:springdoc-openapi-ui:1.6.11' Swagger-ui를 사용하기 위해 gradle에 Springdoc 의존성을 추가해준다. swagger를 사용하는 다른 라이브러리로는 Springfox도 있지만, 활발히 업데이트가 이루어지는 Springdoc에 비해 2020년 이후로 업데이트가 이루어지지 ..

[Spring Boot] LocalDateTime Format 설정하기
JAVA/Spring 2022. 8. 26. 01:57

LocalDateTime Format 설정하기 Response DTO에 LocalDateTime가 포함되었을 때 포맷을 설정해주지 않으면 yyyy-MM-dd'T'HH:mm:ss 형식으로 전송하게 된다. 이걸 클라이언트에서 그대로 보여주게 되면 2022-08-26T22:00:00 처럼 사용자가 보기에 어색할 수 있는 형식이므로 Format을 변경해주는 것이 좋다. 포맷을 변경하는 방법은 아주 간단한데, LocalDateTime 변수에 @JsonFormat 어노테이션만 추가해주면 된다. 예제 코드 게시글에 대한 Response DTO가 있을 때, Response Body에 게시글 작성 일자를 포함하려고 한다. 이 때 포맷은 yyyy-MM-dd HH:mm:ss로 정하고 싶으면 @JsonFormat 어노테이션을..

[Spring Boot] DTO 유효성 검증 그룹화 및 순서 지정과 테스트하기
JAVA/Spring 2022. 7. 9. 06:38

[Spring Boot] DTO Validation 그룹화 및 TEST 오늘은 DTO 입력 값을 검증하는 방법과 Validation을 그룹화하고 Sequence를 만들어 검증 순서를 지정하여 테스트 코드까지 구현하는 방법을 작성해보려고 한다. 간단한 DTO 중에서도 회원가입 요청에 대한 DTO를 검증하는 과정을 살펴볼 것이다. 우선 사용자 입력을 받는 DTO에 유효성 검증이 없으면 ID나 패스워드, 이메일 등에 규칙과 다른 값이 들어오더라도 이를 미리 막을 수가 없다. 물론 프론트엔드에서 입력 값을 검증하긴 하지만 클라이언트에서 전송하는 값은 조작이 쉽기 때문에 백엔드 쪽에서도 이중으로 검증을 수행해야 안전하다. 시작하기에 앞서 validation을 위한 의존성 추가가 필요하다. build.gradle에..

thymeleaf + Spring MVC DELETE, PUT 메소드 사용하기
JAVA/Spring 2022. 7. 1. 02:26

thymeleaf + Spring MVC DELETE, PUT 메소드 사용하기 thymeleaf로 간단한 CRUD 기능이 있는 게시판을 MVC로 개발하는 중에 컨트롤러에서 DeleteMapping이 안되는 문제가 생겨서 해결 방법에 대해서 글을 작성하게 되었다. 일단 일반적으로 태그를 통해서 request를 전송할 때 GET, POST를 제외한 메소드는 지원하지 않는다. 그렇기 때문에 아래 코드처럼 태그를 통해서 메소드 정보를 전달해야 한다. 를 삽입하면 원하는 메소드로 요청이 잘 전송된다. 그러나 더 간단한 방법이 있다. form 에서 제공하지 않는 hidden method(PUT, DELETE 등)을 사용하기 위해 HiddenHttpMethodFilter를 추가해준 뒤 th:method를 사용하면 i..

Stomp WebSocket + JWT + Spring Security 채팅 구현
JAVA/Spring 2022. 5. 21. 23:39

Stomp WebSocket + JWT + Spring Security 채팅 구현 Spring에서 REST(또는 HTTP) API를 만들 때, WebSocket 프로토콜인 STOMP와 소켓을 연결할 때 JWT를 사용한 인증 방법에 대해 소개하겠다. 본 포스팅은 REST API 기준으로 작성하였기 때문에 프론트엔드단의 JavaScript 코드는 포함하지 않는다. STOMP란? STOMP는 Simple Text Oriented Messaging Protocol의 약자로, 메시지의 형식, 유형, 내용 등을 정의하여 메시징 전송을 효율적으로 도와주는 프로토콜이다. STOMP의 형식 COMMAND header:value Body COMMAND를 통해 SEND 또는 SUBSCRIBE, CONNECT 등의 명령을 지..

@Qualifier와 @Primary 어노테이션 사용법
JAVA/Spring 2022. 5. 13. 17:48

해당 포스팅은 인프런 김영한님의 스프링 핵심원리 - 기본편 강의 내용을 바탕으로 작성하였습니다. @Qualifier, @Primary 어노테이션 Spring Boot에서 어노테이션을 통해 자동으로 빈을 컨테이너에 설정하는 경우, 같은 인터페이스의 구현체 클래스 두 개 이상이 빈으로 등록되면 NoUniqueBeanDefinitionException: No qualifying bean of type 'test.a' available: expected single matching bean but found 2 위와 같이 1 개의 빈만 매칭되야 하지만 2개의 빈이 존재한다며 오류가 발생한다. 이럴 경우 Spring Boot가 어떤 빈을 주입해야 하는지 알려줘야 한다. Autowired된 field의 이름을 빈 ..

JPA Column Enum으로 관리하기
JAVA/Spring 2022. 5. 11. 00:14

JPA Column Enum으로 관리하기 회원 정보인 Member Entity에서 권한을 관리하는 state라는 필드가 있는데 기존에는 state를 String으로 사용했었다. 그런데 String으로 사용하면 생길 수 있는 문제점이 있는데, 현재 진행중인 프로젝트의 권한은 USER, ADMIN, ANONYMOUS(승인되지 않은 유저) 이렇게 세 개로 관리하는데 권한 변경하는 API에서 Request에 권한을 받을 때 잘 못된 값이 들어 올 수 있다는 위험이 존재한다. 이런 문제를 사전에 차단하기 위해 권한에 대한 Enum을 만들어 잘못된 입력 값이 들어오면 막아주도록 설계를 변경했다. ROLE Enum public enum Role { ROLE_USER("ROLE_USER"), ROLE_ANONYMOUS..

반응형