초코딩(chocoding)

[Project - 게시판 / spring boot] 게시판 db 설계 / JPQL과 Querydsl 차이점, 장단점 / 스프링부트 게시판 구현 본문

Project

[Project - 게시판 / spring boot] 게시판 db 설계 / JPQL과 Querydsl 차이점, 장단점 / 스프링부트 게시판 구현

sweetychocoding 2024. 2. 15. 10:44
728x90

 

이제 마지막으로 개인 프로젝트로 게시판을 만들려고 한다.

게시판은 쇼핑몰 웹 사이트를 구현했을 때 이미 한 번 해본 적이 있다.

하지만 그 형식은 100% 게시판 형식은 아니고..

오직 판매자와 소비자가 1:1 문의를 할 수 있는?? 그런 형태였다.

이번에 구현하고자 하는 게시판은 조금 다르다.

 

내가 구현하고 싶은 것은 크게 세가지 이다.

1. 무한 댓글 가능

2. 좋아요

3. 조회수

 

 

테이블 설계는 다음과 같다.

 

 

 

- Board 

 

 

- Comments

 

 

- User


 

그리고 나는 원래 JPQL을 사용하여 팀 프로젝트를 진행했었는데

이번에는 Querydsl을 사용해보고 싶어서

하는 방법을 구글링 해봤다.

 

먼저 JPQL과 Querydsl의 장단점은 다음과 같다.

 

- JPQL

JPQL(Java Persistence Query Language)은 자바 표준 ORM(Object-Relational Mapping) 기술인 JPA(Java Persistence API)에서 사용되는 쿼리 언어

: 엔티티 객체를 대상으로 쿼리를 작성하며, 데이터베이스 종류에 상관없이 동일한 쿼리를 사용할 수 있음

 

-> 장점

: 객체지향적인 접근 방식으로 쿼리를 작성할 수 있어서 객체 간의 관계를 이해하기 쉽고, 유지보수가 용이

 

-> 단점

: 문자열 기반으로 쿼리를 작성하므로 컴파일 타임에 문법 오류를 확인할 수 없음

: 복잡한 쿼리를 작성할 때 가독성이 떨어질 수 있음

 

=> 객체지향적인 쿼리 작성이 가능하고 간단한 쿼리에 적합하지만, 가독성이 떨어지고 컴파일 타임 오류를 확인할 수 없다는 단점

 

 

- Querydsl

: QueryDSL은 JPQL의 대안으로 개발된 자바 기반의 쿼리 언어

 

-> 장점

: 자바 코드로 쿼리를 작성하기 때문에 컴파일 타임에 문법 오류를 확인 가능

: IDE의 지원을 받아 코드 자동완성과 리팩토링 등의 기능을 활용할 수 있음

: 타입 안정성을 제공하므로 오타나 잘못된 속성명으로 인한 버그를 줄일 수 있음

 

-> 단점

: QueryDSL을 사용하려면 해당 도메인에 대한 메타모델을 생성해야 하고, JPQL에 비해 학습 곡선이 높을 수 있

 

=> QueryDSL은 타입 안정성과 IDE의 지원을 통한 편리한 개발 환경을 제공하지만, 학습 곡선이 높고 초기 설정이 필요

 

 

 

 

 

 

 

위에서 말했던과 같이 Querydsl을 사용하기 위해서는 초기 설정이 필요하다.

나는 아래 블로그를 참고하였다.

 

https://smpark1020.tistory.com/185

 

SpringBoot, SpringDataJpa, Maven 환경에 QueryDsl 적용하기

1. Maven 설정 의존성 추가 com.querydsl querydsl-apt com.querydsl querydsl-jpa 플러그인 추가 com.mysema.maven apt-maven-plugin 1.1.3 process src/main/generated com.querydsl.apt.jpa.JPAAnnotationProcessor 2. Java Config 설정 JPAQueryFactory를

smpark1020.tistory.com

 

 

 

어제 entity 만들고 controller, service, repository 등등 ... 다 만들고

처음으로 querydsl을 써봤다.

 

일단 느낀점은

1. 가독성이 훨씬 좋음.

2. 컴파일 오류를 알 수 있어서 좋음

3. 확실히 복잡한 쿼리문 작성할 때 좋을 것 같다는 생각이 듦

 

이정도?????

 

 

 

 

 

 

이제 하나하나 기능을 구현해나가야겠다.!!!!

 

이번주~ 다음주 초까지 구현 완료를 목표로 잡고....

파이팅!!!!

728x90