오늘부터는 스프링 플러스 주차의 시작으로, 새로운 강의를 듣기 시작했다!
이번 주차에는 강의가 총 4개나 있고, 개인 프로젝트도 진행되는데,, 빠르게 듣고 정리해가야겠다.
이번 강의는 총 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 확인하기
코드카타.. 어제 안했더니 오늘도 너무 너무 하기 싫어졌다.
그래도 내일부터는 다시 정신차리고 알고리즘 문제를 풀기 시작해야겠다.
이제 정말 최종 프로젝트 전에 진행하는 마지막 단계인데, 아직까지 나는 제대로 할 줄 아는게 없는데 어떻게 최종 프로젝트를 하겠나 싶다.
그 전까지 최대한 많이 배우고, 많이 연습해봐야겠다.