[TIL] 52일차 _ 플러스 Spring #1

Seoyeon Lee·2025년 12월 16일

Today I Learned ...

오늘부터는 스프링 플러스 주차의 시작으로, 새로운 강의를 듣기 시작했다!
이번 주차에는 강의가 총 4개나 있고, 개인 프로젝트도 진행되는데,, 빠르게 듣고 정리해가야겠다.


📚 플러스 Spring #1

이번 강의는 총 5개 주차로 구성되어 있는데, 오늘은 그 중에서 2개 주차의 강의를 들었다!

그 중 첫 번째는 QueryDSL에 관한 내용이었는데, 매번 말로만 듣다가 처음으로 사용해본다!

늘 그렇듯 새로운 기술은 이전 기술의 한계 때문에 등장하는데, QueryDSL이 등장하게 된 배경에는 JPQL의 한계가 있다.
JPQL는 문자열 기반의 쿼리 언어이기 때문에 개발자가 잘못 작성해도 컴파일 시점에 검증할 수 없고, 유지보수가 어렵다는 한계가 있다.

그래서 쿼리를 안전하게 작성하기 위한 목적으로 QueryDSL이 등장하게 된 것이다.
QueryDSL은 JPA 위에서 동작하는 쿼리 빌더이기 때문에 IDE의 자동완성 기능의 도움을 받을 수도 있고, 컴파일 시에 검증을 할 수도 있다.
또, 동적 쿼리를 작성할 때도 훨씬 간결하게 사용할 수 있으며 코드의 가독성과 유지보수성이 매우 많이 향상된다.

QueryDSL도 SQL과 굉장히 비슷하게 사용할 수 있는데,

queryFactory
    .select(조회 대상)
    .from(대상 엔티티)
    .where(조건)
    .orderBy(정렬)
    .fetch();

위와 같은 구조로 사용한다.
하지만, 위에 작성한 내용 외에도 join, group by, having 등 다양한 것들을 사용할 수 있다.

이때, QueryDSL은 내가 생성한 엔티티가 아니라 Q-Type 클래스를 기반으로 동작하는데,

public class QUser extends EntityPathBase<User> {
    public static final QUser user = new QUser("user");
    public final StringPath username = createString("username");
    public final StringPath email = createString("email");
    public final EnumPath<UserRoleEnum> roleEnum = createEnum("roleEnum", UserRoleEnum.class);
}

Q타입 클래스는 내가 생성한 엔티티와 같은 내용을 담고 있다.
컴파일 시점에 Q타입 클래스가 자동으로 생성되어 이 부분에 대해 내가 신경 쓸 부분은 없었다.
이렇게 Q타입 클래스를 사용하면, 오탈자나 잘못된 필드명 사용 시에 컴파일 시점에 오류를 잡아낼 수 있고, 엔티티의 메타데이터를 기반으로 생성되기에 타입 불일치에 대한 오류도 감지할 수 있다는 장점이 있다.

QueryDSL을 프로젝트에서 사용할 때는 CustomRepository 인터페이스를 생성하고, 이 인터페이스의 구현체인 CustomRepositoryImpl 클래스를 생성해야 한다.
CustomRepository 인터페이스는 기존에 JPA에서 사용하던 것처럼 메서드를 만들어두고,
CustomRepositoryImpl 클래스에서 그 메서드가 어떻게 동작하게 할 것인지 쿼리를 만들면 된다.

QueryDSL을 사용하게 되면 동적 쿼리를 다루기에도 편리하고, 엔티티 간의 연관관계를 관리하기에도 편리해진다고 한다.

자세한 설명과 실습 내용들은 노션을 통해 기록해두었다.
Notion 확인하기

오늘 다룬 두 번째 내용은 도커였다! 드디어 도커!

먼저, 도커에 대해 간단히 정리해보자면, 도커는 애플리케이션과 그 실행 환경을 하나로 묶어서 어디에서든 동일하게 실행되고, 동작할 수 있게 해주는 기술이다.
실행 환경과 코드를 저장한 도커 이미지를 만들면, 그 이미지를 컨테이너로 실행해서 확인할 수 있다.

사실 오늘 다룬 내용들은 정말 도커에 대한 간단하고 기초적인 지식들 뿐이었다.
도커 이미지를 어떻게 Pull 받는지, 어떤 명령어로 컨테이너를 실행하고, 어떻게 확인할 수 있는지에 대한 내용들 뿐이었다.
이후에 다른 강의에서 도커를 통한 CI/CD를 배운다고 했기에, 도커에 대해서는 그때 더 자세히 정리해보도록 하겠다.

강의의 자세한 설명과 실습 내용은 노션에 정리해두었다.
Notion 확인하기


🙃 오늘의 느낀점

코드카타.. 어제 안했더니 오늘도 너무 너무 하기 싫어졌다.
그래도 내일부터는 다시 정신차리고 알고리즘 문제를 풀기 시작해야겠다.

이제 정말 최종 프로젝트 전에 진행하는 마지막 단계인데, 아직까지 나는 제대로 할 줄 아는게 없는데 어떻게 최종 프로젝트를 하겠나 싶다.
그 전까지 최대한 많이 배우고, 많이 연습해봐야겠다.

profile
백엔드 개발자 지망생

0개의 댓글