본문 바로가기

전체 글

(104)
SpringBoot의 Querydsl을 이용하여 동적쿼리(Dynamic SQL) 작성하기 안녕하세요! 이번 포스팅에서는 SpringBoot의 QueryDSL을 이용해서 동적쿼리(Dynamic SQL)를 사용해보도록 하겠습니다. 모든 코드는 Github에서 확인이 가능합니다. 📚 사전 준비 프로젝트 설명 여러 더미 데이터들을 넣고 동적으로 조건절을 생성하는 프로젝트를 작성해보겠습니다. 개발 환경 IntelliJ Ultimate Gradle 6.0.1 / Maven Java 1.8 SpringBoot 2.2.2 Window 🔎 구현 1. 의존성 추가 가장 먼저 QueryDSL을 사용하기 위해 필요한 의존성을 추가해줍니다. build.gradle plugins { id "com.ewerk.gradle.plugins.querydsl" version "1.0.10" } dependencies { co..
[Spring Boot] @ResponseBody 사용해서 객체를 json으로 반환할 때 No converter found for return value of type 오류 해결 방법 문제 발생 @ResponseBody를 사용해서 객체를 json으로 사용했는데 갑자기 No converter found for return value of type : class xxx... 오류가 발생했다. 구글링을 해보니까 jackson-databind 의존성을 추가하라는 내용도 있었고, jackson-core 의존성을 추가하라는 내용도 있었다. 하지만 다 따라 해봐도 오류가 사라지지 않았다. 아래는 오류가 발생한 코드이다. public class Person { private String name; public Person(String name) { this.name = name; } } @ResponseBody @GetMapping("/builder/2") public Person builderTe..
SpringBoot의 ControllerAdvice를 이용하여 JSON 형태로 예외처리하기 안녕하세요! 이번 포스팅에서는 SpringBoot의 Optionl과 @RestControllerAdvice를 이용해서 예외를 만들어보고 예외를 발생시켜보도록 하겠습니다. 사전 준비 프로젝트 설명 JSON 형태로 POST 요청을 보내면 요청 값에 따라 응답을 보내는 프로젝트를 작성해보겠습니다. 값이 있는 경우 → 값 그대로 리턴 값이 없는 경우(null) → 경고 메세지 리턴 개발 환경 IntelliJ Ultimate Gradle Java 1.8 SpringBoot 의존성 spring-boot-starter-test 구현 1. VO & ResponseDto 만들기 가장 먼저 POST로 요청을 받을 때 데이터를 전달받을 Person VO와 응답을 보낼 때 사용할 ResponseDto를 작성해보도록 하겠습니다..
[Spring Boot] Entity 자료형으로 Enum 사용시 Out of range value for column 오류 해결 방법 문제 발생 Entity를 만들고 DB를 연결하여 조회를 하려고 했는데 Out of range value for column 에러가 발생했다. 더보기 java.sql.SQLException: Out of range value for column 'service54_7_0_' : value A at org.mariadb.jdbc.internal.com.read.resultset.rowprotocol.TextRowProtocol.getInternalLong(TextRowProtocol.java:338) at org.mariadb.jdbc.internal.com.read.resultset.rowprotocol.TextRowProtocol.getInternalInt(TextRowProtocol.java:257) ..
SpringBoot의 MockMvc를 사용하여 GET, POST 응답 테스트하기 안녕하세요! 이번 포스팅에서는 SpringBoot 프레임워크에서 제공해주는 MockMvc를 만들고 테스트하는 방법을 알아보도록 하겠습니다. 전체 코드는 Github에서 확인이 가능합니다. ✍️ 📚 개념 정리 1. MockMvc란? 실제 객체와 비슷하지만 테스트에 필요한 기능만 가지는 가짜 객체를 만들어서 애플리케이션 서버에 배포하지 않고도 스프링 MVC 동작을 재현할 수 있는 클래스를 의미합니다. 2. 사용방법 Junit4를 사용하기 위해 의존성에 spring-boot-starter-test를 추가해줍니다. build.gradle testCompile("org.springframework.boot:spring-boot-starter-test") pom.xml org.springframework.boot ..
SpringBoot의 @IdClass를 사용해서 복합 Primary Key 적용하기 안녕하세요! 이번 포스팅에서는 SpringBoot의 @IdClass을 이용해서 복합키 매핑하는 방법에 대해 알아보도록 하겠습니다. @IdClass를 사용하는 이유 DB를 설계하다 보면 PK가 여러 개가 되는 경우가 종종 발생하곤 합니다. 그럴 때는 Primary Key에게 모두 @Id 어노테이션을 주면 되는데, 무작정 어노테이션을 붙이면 오류를 출력하게 됩니다. 이때 @IdClass를 사용하게 되면 복합키 매핑이 가능합니다. 프로젝트 설명 class라는 수강 현황을 저장해놓는 테이블이 있습니다. 이 테이블의 구조는 아래와 같습니다. 이 테이블과 매핑을 하기 위한 엔티티를 작성해보겠습니다. XXXid Class 추가 @IdClass를 사용하기 위해서는 PK 속성을 가지고 있는 컬럼들을 모아놓은 클래스가 필..
SpringBoot로 캐싱(Caching)하기 안녕하세요! 이번 포스팅에서는 SpringBoot의 spring-boot-starter-cache를 이용해서 메소드에 캐싱을 추가해보도록 하겠습니다. 코드는 Github에서 확인이 가능합니다. 캐싱? 캐싱을 사용해보기 전에 간단하게 캐싱에 대해 정리하자면, 들어오는 값을 기억해뒀다가 추후에 같은 값이 들어오게 되면 메소드를 돌지 않고 바로 결과값을 내놓는 것을 의미합니다. 캐싱에 대한 정확한 의미는 이곳을 참조하시면 됩니다! 이런 상황에서 캐싱을 유용하게 사용할 수 있습니다. 사용빈도가 높은 단순 반복 작업 결과가 자주 변경되지 않는 데이터 사전준비 프로젝트 설명 제가 캐싱을 할 메소드는 특정 코드를 문자열 값으로 바꿔서 리턴해주는 메소드입니다. S → "과자" D → "음료수" G → "껌" 이런 식으..
Java DateTimeFormatter을 사용하여 요일, 오전/오후 구하기 (+ 다른 나라 언어로 포맷팅 변경하는 방법) 안녕하세요! 이번 포스팅에는 자바의 LocalDateTime과 DateTimeFormatter을 사용해서 요일과 오전/오후를 구하는 방법을 알아보겠습니다. 종종 한글로 요일이나 오전/오후를 출력해야 할 때가 있는데, 생각처럼 잘되지 않아서 생각보다 엄청난 삽질을 한끝에 얻은 방법을 공유하려고 합니다! 현재 시간 구하기 LocalDateTime now = LocalDateTime.now(); 포맷을 하기 위해 LocalDateTime의 now() 메소드를 사용해서 현재 시간을 구해줍니다. 출력을 해보면 잘 출력되는 것을 확인할 수 있습니다. 요일 구하기 제가 사용한 포맷팅 형식은 ~월 ~일 (요일)입니다. now.format(DateTimeFormatter.ofPattern("MM월 dd일(E)")); 정..