[패스트 캠퍼스] MegaByte School 벡엔드 4기 7번째 회고록

jaegeunsong97·2023년 6월 15일
0

TIL

목록 보기
134/156

파이널 프로젝트과정에 대해서


지금 미니 프로젝트가 끝나고 6월 중순에 접어들고 있다. 파이널 프로젝트를 하는 과정인데, 확실히 마음이 싱숭생숭하다.

현재 하고 있는 프로젝트에 기여를 얼마나 했는가.

확실하게 이전 미니 프로젝트보다는 기본적인 CRUD는 스스로 해결할 수 있다. 하지만 요번에 우리 팀원들은 QueryDSL을 도입을 하기로 해서, 코드를 모두 같이 맞추기로 했다.

따라서 내가 맡은 API 8개 중에서 4개는 끝냈고 나머지 기능들은 아직 구현만 하고 나오는 형태가 구현이 되지 않는다.

현 시점으로 지훈님도 취업이 되어서 5일뒤 부터 교육 시작이라 빠진시점에 프로젝트가 완수가 될수 있을까 하는 걱정이 있기는 하다.

다시 돌아와서 QueryDSL을 사용하기 앞서 공부한 내용을 정리를 해볼려고한다.

QueryDSL에 익숙하게 하기


QueryDSL을 사용한 쿼리 작성

	QEntityA entityA = QEntityA.entityA;

jpaQueryFactory
            .select(entityA) 
						//.select(entityA.name, entityA.description, entityA.creator)
            .from(entityA)
            .where(entityA.id.eq("test id"))
            //.where(entityA.id.eq("test id"), entityA.description.contains("test description"))
            //.where(entityA.id.eq("test id").or(entityA.description.contains("test description")))
            .fetchOne();
						//.fetch();
  • select
    • 어떤 데이터를 가져올지
    • Entity의 모든 데이터를 읽거나 클래스 접근자를 사용하여 Entity 내의 일부 정보만 가져오도록 할 수 있습니다.
  • from
    • 어떤 테이블에서 조회할지
    • Entity를 파라메터로 전달하여 조회할 테이블을 지정 가능
  • where
    • 어떤 조건으로 검색?
    • 주어진 값과 동일할 때, 주어진 문자열을 포함할 떄. 주어진 범위 내에 포함될 때 등등 다양한 조건 지원
    • 파라메터를 여러 개 전달할 경우 자동으로 AND연산 적용
    • OR연산은 선행한 비교조건에 체이닝하여 적용 가능
  • fetch/execute
    • fetchOne(), fetch()와 같이 하나의 레코드만 가져올지, 여러개의 레코드를 가져올지 지정하여 쿼리를 실행할 수 있습니다.
    • 조회 쿼리가 아닌 경우 execute() 호출하여 실행합니다.

아직 join에 대한 이해가 부족한 것 같기도 해서, join에 관한 내용을 찾아보았다.

이렇게 QueryDSL로 받은 것을 entity가 아닌 객체에 바로 mapping하는 방법이 있었다.

EntityANameAndDescriptionDto queryResult = jpaQueryFactory
            .select(Projections.constructor(EntityANameAndDescriptionDto.class, entityA.name, entityA.description)
            .from(entityA)
            .where(entityA.id.eq("test ID"))
            .fetchOne();

Entity A의 이름과 설명만을 저장하는 클래스가 존재한다고 가정할 때, 해당 클래스에 쿼리 결과를 저장하여 반환할 수 있습니다.

select 함수 내에 Projections 결과를 파라메터로 전달하며, Projection 방법은 다음과 같은 방법을 제공하고 있습니다.

· Projections.constructor

  • 생성자를 사용하여 저장하는 방법입니다.
  • 시그니쳐가 일치하는 생성자가 존재해야합니다.

· Projections.beans

  • Setter 메소드를 사용하여 저장하는 방법입니다.
  • 클래스의 멤버변수들과 entity의 멤버 변수의 이름이 일치해야합니다.

· Projections.fields

  • 클래스 내 필드에 직접 저장하는 방법입니다.
  • 클래스의 멤버변수들과 entity의 멤버 변수의 이름이 일치해야합니다.

그래도 아직 DTO 부분에 Mapping하는 부분에서 계속해서 에러가 나지만 오늘 해결이 가능할 것 같다.

패스트 캠퍼스 백엔드 마무리 하며


이곳에서 있으면서 여러 사람들을 만난 것 같다.

프론트 분들도 포함해서 백엔드 등등 5월 중순까지만 해도 zoom으로만 봤던 사람들을 현재는 프로젝트 때문에 강의장에서 뵈면서 많이 친해지고, 좋은 사람들을 알아간 것 같아서 막상 기간이 얼마 남지않아 아쉬움이 생긴다.

물론 다들 개발자로 일을 하면, 분명 3년이든 5년이든 어디선가는 만나서 일을 하거나 커피챗 타임을 가질 거라고 생각한다.

얼마 남지않은 기간동안 다 끝나고 후회없이 했다라고 생각이 들도록 하자.

profile
블로그 이전 : https://medium.com/@jaegeunsong97

0개의 댓글