ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 7/4 ~ 7/12 이 전의 날들을 돌아보기
    회고/WIL 2023. 7. 12. 21:37
    728x90

    어떻게 지냈는가?

    간단하게 말하자면, 약 9일간 정말 바쁘게 지내왔다. 9일 동안 나는 순수 JPA, Spring data JPA, JPQL, Querydsl 등을 학습하였고, 기존에 공부해온 Spring framework의 다양한 기능들을 연습하기 위해 게시판 CRUD를 만들면서 JWT 인증, Spring Security, Spring data JPA를 통한 다양한 연관관계를 풀어내보는 등의 작업을 해왔다. 다양한 기술들을 배우고 사용하고 원리를 알아가면서 의미 있는 시간을 보내긴 했지만, 한편으로는 나의 위치가 아직은 더 많은 것들을 배워야한다는 생각에 조금은 좋아만 할 수는 없는 차분해지는 시간도 많았다.

     대학원을 다니다가 내가 정말로 하고 싶은 일이 무엇인지 고민하다 개발의 세계에 들어온지 1년이 조금 넘은 시점에서, 바쁘게 지내오며 많은 것들을 익히면서 보람있는 시간을 보내고 있다는 생각이 든다.

     

     

     

     

    구체적으로 어떤 공부를 해왔는가?

    ORM

    내가 이번주에 많은 시간을 쏟은 것은 바로 ORM 기술 중 JPA이다.

    ORM이란, 객체지향의 세계와 RDBMS를 연결해주는 것을 말한다. 나는 JPA와 MySQL를 사용하면서, 자바와 같은 객체지향 세계에서는 참조를 통해 관계를 맺는데 반해, MySQL과 같은 RDBMS는 foreign key로 관계를 맺으므로서 그 두 세계의 차이에서 발생하는 문제들을 JPA가 어떻게 해결해 내는지에 집중하며 공부를 하였다. MySQL를 공부하면서 그래도 데이터베이스의 테이블들이 관계를 어떻게 맺는지를 알고 있는 상태에서 JPA를 공부하니 매우 재밌었다. 이전에 내가 경험해본 MyBatis의 경우, 일일이 모든 쿼리문을 만들어야 한다는 단점이 있었지만, JPA는 기본적으로 자바 코드와 연관관계로 이러한 문제들을 쉽게 해결할 수 있다는게 큰 매력이었다.

     

    Spring data JPA + JPQL + Querydsl

    Spring 으로 프로잭트를 한다고하면 많은 기업들이 Spring data jpa를 활용한다고 들었다. 나는 그래서 순수 JPA가 어떻게 동작하는지를 먼저 이해하려고 노력했던 것 같다. 그러면서 단순히 코드를 몇 줄 더 타이핑하기 보다는 JPA에서 중요한 개념인 영속성 컨텍스트가 어떻게 활용되는지, 내가 입력한 코드로 인해서 어떠한 쿼리문이 쓰기지연저장소에서 DB로 날라가는지 확인하고 예상하며 공부를 했다.

    내가 JPA를 공부하면서 가장 놀란건, Method의 이름으로 Spring data JPA가 쿼리문을 만들어 낸다는 것이었다. 즉, 복잡한 쿼리문을 생성하기 위해선 Query method, JPQL를 잘 활용해야 한다는 것을 알고 JPQL을 공부하기 시작했다. 내가 글을 쓰는 타입은 아니지만, 기록을 남기는 것을 좋아하기에 나중에 내가 공부한 내용을 보고 싶을 때 꺼내보기 위해 깃에 올려좋은 것들이 있다.

    https://github.com/hongsh429/Spring-data-jpa

     

    GitHub - hongsh429/Spring-data-jpa: 스프링데이터 jpa 공부!

    스프링데이터 jpa 공부! Contribute to hongsh429/Spring-data-jpa development by creating an account on GitHub.

    github.com

    공부의 방향은 순수 JPA와 Spring data JPA로 보다 복잡한 쿼리문을 만들어보면서 비교하며 공부를 했다. JPA에 기본 원리를 나름대로 정리를 하고 해당 내용을 공부해서 그런지 당장 "너 이거 딱 말해봐! "이러면 못할 순 있겠으나, 공부를 하면서 막힘없이 나갔다. 무엇보다 재밌었다. 하지만 결국, 동적 쿼리를 만들어내는 작업을 위해선 Querydsl을 공부하는게 맞겠다라는 생각이 들어 Querydsl을 또 공부하였다.

     

    Querydsl은 기본적으로 자바의 코드로 쿼리문을 만들어내는 장점이 있었다. 즉, 내가 뭔가 입력을 잘못했을 경우, JPQL에서는 해당 메서드가 호출된 시점에서 문제를 알 수 있지만 Querydsl은 자바코드이기 때문에 문법오류를 내어 어느정도 쿼리를 완성하는데 보다 쉬웠다. 정말 새로운 세계를 경험하는 기분이 들었다ㅋㅋ

     

    Querydsl로 페이징 및 동적쿼리를 만들어본 것인데, 코드 자체가 길 순 있지만, 그래도 "내가 어떤 동작을 하려고 하는 구나"를 명확하게 알 수 있었다. 이런 페이징 처리에서 불필요한 시간을 줄이기 위해선 totalCount를 내는 쿼리를 최소한의 동작으로 만들어내야하는데, 이부분도 결국 Spring framework가 util로 제공하는 클래스의 도움을 받아 훨씬 좋은 성능을 내도록 하는 쿼리문을 만들어내보기도 했다.

     

    공부하고 Test code로 확인도 하였으니, 이젠 복습하면서 한번 더 살펴보자!

    '회고 > WIL' 카테고리의 다른 글

    IoC - DI - Bean 의 관계  (0) 2023.07.04
    HTTP와 MVC  (0) 2023.06.25
    1주차 - 자바  (0) 2023.06.18
Designed by Tistory.