본문 바로가기

Backend/SpringBoot

(29)
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..
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를 작성해보도록 하겠습니다..
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 → "껌" 이런 식으..
SpringBoot로 JSON 응답 보내는 방법 (GSON JsonObject, @ResponseBody, @RestController) 안녕하세요! 이번에는 Spring Boot에서 JSON 형태로 return을 해주는 방법에 대해 알아보겠습니다. 정말 간단하기 때문에 쉽게 따라오실 수 있습니다! 💃 준비 - DTO 만들기 예시를 보여주기 위해 간단한 DTO를 만들어줍니다. @Setter @Getter public class Blog { private String title; private String content; } 👀 어노테이션 사용하기 컨트롤러 단에서 JSON 객체를 문자열로 간편하게 직렬화 할 수 있게 도와주는 두 어노테이션을 소개합니다. @RestController 데이터를 전송하기 위한 컨트롤러로 사용하며,@RestController를 사용하면 기본으로 하위에 있는 메소드들은 모두 @ResponseBody를 가지게 됩니다...
SpringBoot와 Thymeleaf를 이용하여 페이징하기 안녕하세요. SpringBoot로 만든 게시판 소스에 Thymeleaf를 사용하여 페이징 기능을 추가해보겠습니다. 목록을 가져오는 서비스 메소드 구현 먼저, 목록을 가져오는 서비스 메소드를 구현해보도록 하겠습니다. Service /** * 방명록을 모두 가져오는 메소드 * @param startAt 현재 가져온 페이지 * @return */ @Override public Page findAllPage(int startAt) { Pageable pageable = PageRequest.of(startAt, 10); return guestBookRepository.findAll(pageable); } startAt은 현재 페이지를 말합니다. 주소창에서 파라미터로 가져온 후 넘겨줍니다. (좀 이따 컨트롤러에서..
Spring Boot Map Struct Gradle 사용해보기 Map Struct? Map Struct란 자바 빈의 매핑(Entity - DAO)을 쉽게 하도록 도와주는 프래임워크 자세한 설명은 아래 링크를 참고해주세요! (공식 사이트) MapStruct - Java bean mappings, the easy way! MapStruct – Java bean mappings, the easy way! Java bean mappings, the easy way! Get started Download mapstruct.org Gradle 환경에서 Map Struct을 사용한 Spring Boot 예제 Map Struct를 사용하면서 삽질을 많이 했기 때문에, 다른 분들은 저 같은 삽질은 하지 않았으면 좋겠는 마음으로 예제를 만들었습니다! 예제를 작성하다보니 본의아니게 예..