Querydsl을 사용하게 되면 상황에 따라 다르게 적용을 할 수 있는 동적쿼리를 손쉽게 짤 수 있습니다. 동적쿼리를 짜는 방식은 대표적으로 두 가지가 있습니다. 지금부터 알아보도록 하겠습니다. BooleanBuilder 사용 방식 BooleanBuilder란 아래와 같이 BooleanBuilder 생성자를 생성 후, 아래와 같이 if문을 통해서 각 데이터의 조건에 맞게 코드를 작성하는 것입니다. 아래 코드와 같이 데이터가 많지 않아 작성해야 할 if문이 많지 않다면 쿼리문이 깔끔하게 보이겠지만, 데이터가 많아진다면 추가해야 할 조건문이 많아져 쿼리문을 추적하기 어려울 것입니다. public List searchByBuilder(MemberSearchCondition condition) { Boolean..
Querydsl 5.0.0 버전 세팅 방법 Querydsl 초기 세팅을 해주던 도중 버전이 맞지 않아 기존의 세팅 방식을 적용하면 에러가 발생하였다. 현재 나의 프로젝트 버전은 'org.springframework.boot-2.7.14', 'Gradle-8.2.1'이고 Querydsl은 5.0.0 버전을 사용하고자 하였다. build.gradle 파일 세팅 //querydsl 버전 정보 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.1.2' //query..
BaseEntity란? Spring Boot 내에서 코드를 작성하다 보면 정보가 중복되는 경우가 종종 발생합니다. 이러한 경우를 손쉽게 해결해 주는 방법이 바로 BaseEntity입니다. 아래 코드를 보면 Student와 Professor 클래스 내 정보를 살펴보면, createdBy와 createdDate에서 공통 정보가 발생합니다. 물론 하나하나씩 별도로 작성해 주어도 문제는 없지만, 중복된 것처럼 보일 수 있기에 이를 한 곳에 공통으로 매핑해 주는 것이 좋습니다. @Entity public class Student { @Id @GeneratedValue private Long id; private String name; // 공통 컬럼 private String createdBy; private L..
문제점 Junit5를 사용하여 테스트 코드를 작성하던 도중 assertThat과 equalTo를 사용하기 위해 선언을 했으나 아래와 같이 선언할 수 없다는 에러가 발생했다. 이는 적절한 import 문을 선언하지 않았기에 발생하는 에러이다. 그렇다면 어떻게 해야 이러한 에러를 해결할 수 있을까? 해결방안 아래와 같이 해당 import 문을 직접 작성해 주면 쉽게 해결이 된다. import static org.hamcrest.CoreMatchers.equalTo import static org.hamcrest.MatcherAssert.assertThat;
Spring Boot에서 데이터 조회 API를 제작하는 방법은 대표적으로 두 가지가 있다. 1. http://localhost:8080/board?id=1 2. http://localhost:8080/board/id/1 예시로 보다시피, 둘 다 같은 데이터를 받아오지만 전반적으로 봤을 때 가장 큰 차이점은 쿼리스트링의 사용 여부라고 볼 수 있다. 아래부터는 둘의 차이를 좀 더 자세하게 분석을 해보도록 하겠다. @RequestParam 이란? @RequestParam의 파라미터 종류는 4가지이다. defaultValue : 값을 설정하지 않았을 때 설정할 기본값 name : 바인딩할 파라미터의 이름 value : name의 별칭 required : 필수 값 사용 여부 설정 (무조건 설정을 해주어야 함) @..
개발을 할 때 가장 중요한 과정 중 하나인 테스트 주도 개발(Test-Driven Development, TDD) 이라는 용어를 개발자라면 어디선가 한 번쯤 들어봤을 것이다. 기능이 제대로 작동하는지 테스트할 수 있는 방법 중 하나기에 매우 중요한 과정이라고 말할 수 있다. 그러나, 언제까지 TDD 양식을 맨날 일일이 타이핑해 가면서 작업할 것인가? 그럴 수 없기에 우리는 IntelliJ의 Live Template 을 활용하여 해당 양식을 편리하게 불러올 수 있도록 설정해 보도록 하겠다. 설명 기준은 MacOS 입니다. 1. MacOS 기준으로는 Preferences, Windows 기준으로는 Settings에 들어간다. 2. Editor -> Live Templates을 클릭한 후, Java를 선택한 ..
문제의 시작 이번에 진행하게 된 프로젝트 내에서도 회원가입 및 로그인 기능 구현이 있어, 저번에 진행했던 방식대로 Spring Security와 JWT를 사용하여 구현을 시작하려는데 위와 같이 WebSecurityConfigurerAdapter가 적용이 안 되는 현상이 발생했다. 제대로 된 코드를 작성하려면 이러한 상황이 발생하면 안 되기에 열심히 알아본 결과! 공식 문서로 이동하기 Spring | Home Cloud Your code, any cloud—we’ve got you covered. Connect and scale your services, whatever your platform. spring.io 공식 문서에 따른 결과로는, Spring Security 5.7.0-M2부터는 내가 사용했던..
문제점 Spring을 실행하던 도중 [JPA] No serializer found for class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor and no properties discovered to create BeanSerializer와 같은 에러문이 발생했다. 이러한 에러문이 발생하는 이유는 @ManyToOne의 Fetch 타입을 Lazy로 사용했을 때 나타나는 문제점이라고 한다. 여기서 비어있는 객체를 Serialize 하려다 에러가 발생하는 것이다. 해결방안 위와 같은 에러를 해결하는 방법 중 하나가 바로 @JsonIgnore 어노테이션이다. 직렬화 시 해당 필드를 포함시키고 싶지 않을 때 선언하는 어노테이션이다. 해당 어노테이션을 사용하..
Spring Security + JWT를 이용해서 로그인 구현을 하고 기능이 잘 동작되는지 테스트하기 위해 Postman을 켰으나, 한 가지 불편한 점이 있었다. 내가 만든 API들은 토큰이 없으면 접근을 못하도록 만들어 놓았는데, 위와 같이 발급된 Bearer 긴 토큰값을 일일이 Request를 만들 때마다 넣어주어야 했기 때문이다. 이러한 불편점을 해소할 방법이 없을까 하고 구글링을 한 결과, 해결책을 발견했다. 해결방안 Postman 내에 Tests라는 란에 위와 같은 코드를 입력한 후 Authorization에서 Token의 Type과 변수명을 입력해 주고, Send를 할 경우 Token을 발급하는 동시에 자동으로 Authorization의 token 값을 변경해 준다. 위와 같이 세팅을 해놓으면..
문제점 H2에서 table을 생성하기 위해 create 문을 작성하고 실행을 했더니 Sorry, remote connections ('webAllowOthers') are disabled on this server. 와 같은 에러가 발생했다. 해결방안 terminal에서 H2를 실행할 때, h2 -webAllowOthers을 입력하고 실행해 줘야 위와 같은 에러가 뜨지 않는다. 또한, 내 mac은 가끔 brew 명령어가 먹지 않는데 이 때는, eval $(/opt/homebrew/bin/brew shellenv)를 입력해주면 된다. 이렇게 하면 H2가 문제없이 작동할 것이다.