[인프런 워밍업 클럽 스터디1기] BE 2주차 회고록

[인프런 워밍업 클럽 스터디1기] BE 2주차 회고록

강의 수강

  • 6일차 - 스프링 컨테이너의 의미와 사용 방법

    • 우리가 설정해줘야 하는 부분들이 설정을 안 해줬는데도 작동하는 신기한 현상을 볼 수 있다.


      물론 정답은 스프링 부트에서 제공해주는 매우 편리한 기능(스프링 빈, 컨테이너)에 의한거지만


      (개발자는 반복을 싫어한다.)

      또한 기기 자체에서 모듈방식을 채택하는 경우가 많은데 그것과 유사하게 스프링 내에서는
      Repository를 어떤 전략을 취할 것인지 선택하여 많은 변경이 없이 구조를 효과적으로 바꾸게 된다.
      스프링 컨테이너가 이 역할을 해주고 컨테이너가 서비스를 대신 인스턴스화하고, 그때마다 레포지토리를 결정해주는데
      이 방식 자체를 IoC라고 한다.
      @Configuration과 @Component등 스프링에서 자주 쓰이는 어노테이션에 대해서 배우게 되는 시간이었던 것 같다.

  • 7일차 - Spring Data JPA를 사용한 데이터베이스 조작

    • SQL에서 벗어나 드디어 JPA를 본격적으로 사용하게 되는 부분이다.


      JPA를 사용하기 위한 사전 설정과 Entity 클래스, 그리고 JPA를 사용할 때 가장 중요한
      ddl_auto 이 부분이 실무에서는 매우 중요하다고 생각한다.


      (실무 데이터에서 validate빼고 사용한다면 데이터가, 변형 또는 날라가버리니까)

      가끔 일반적인 SQL 명령어에서 정밀하게 다루고자 할 때 JPA를 확장시켜둔 Repository에
      JPA 쿼리를 이용하여 다양한 쿼리를 작성해줄 수 있다. (조금 더 정밀하게 작동시키려면 JPQL이 답)

  • 8일차 - 트랜잭션과 영속성 컨텍스트

    • 트랜잭션의 개념에 대해 알아가는 구간, 영속성 컨텍스트 특징 (변경 감지, 쓰기 지연, 1차 캐싱, 지연로딩, 동일성 보장)

  • 9일차 - 조금 더 복잡한 기능을 API로 구성하기

    • User에서 벗어나 대출과 반납이라는 개념을 들어간다. 새로운 테이블을 만들고 두 테이블을 연결해서 사용하는 방법을 알게 되었다.
      그리고 마지막으로 JPA에서 연관관계 매핑에 관한 떡밥을 남기시며 다음 주 월요일을 기대하게 된다.


      미션

  • 6일차 과제 - 4일차 과제 API 분리, Controller - Service - Repository 계층에 익숙해지기

    • 기존코드를 JPA를 이용하여리팩토링을 해나가는 과정이다.

      문제1 에서는 컨트롤러가 너무 많은 역할을 하고 있어 Controller(HTTP 관련 역할) - Service(분기 처리, 로직) - Repository(DB와 접근 담당)로 나누는 과정이며,

      문제2는 Repository를 인터페이스화 해서 메모리에 저장하는 부분과 MySql 저장하는 것을 선택하게끔 하는 것이었다.



      문제1은 기존 코드를 Controller에서 Service로 우선 나누고 그 다음에 Service에서 DB와 접근에 관련된 부분을 분리하여 Repository에 나누는등 3개로 분리하였다. 이 과정에서 JdbcTemplate를 Repository만 접근하므로 코드의 가독성을 늘리기 위해
      Repository를 제외하고는 JdbcTemplate 관련 설정을 지워줬다.

      문제2는 DIP에 관련된 내용으로 스프링에서 클래스에 의존하는 것이 아니라 인터페이스에 의존하게끔 만들어 의존성 역전 원칙을 만들게 하기 위함이다. (+ IoC)

  • 7일차 과제 - JPA 연습

    • 문제1은 6일차 과제에서 만든 과제를 JdbcTemplate에서 Spring Data JPA를 사용하는 환경으로 바꿔주는 과정이다.
      JPA를 처음 접할 때 이걸 왜 사용하고 어떻게 사용해야하는지 몰랐다. 오히려 SQL 내용을 배우고나서 JPA로 천천히 넘어오니 사용방법과 필요성을 뼈저리게 느꼈다. 부트캠프에서는 처음 접하는 내용을 바로 활용하는 입장에 있어서 이해를 하지 못하고 급하게 넘어왔던 부분이었는데 지금 JPA를 다시 공부하면 깊게 배우면서 조금 더 내 실력을 늘릴 수 있을 것 같다. 자연스럽게 테이블에 대한 개념도 배우면서 어떤 곳에서 어떤 코드를 짜고 그 의문점에 대해서 해소 할 수 있는 과제 였다.

      문제2는 JPA를 적용해 놨다면 이제 새로운 기능을 JPA를 이용하여 만드는 것이다.
      조금 의아한거라면 JPA를 깊게 배워갈 수록 SQL의 필요성을 느끼게 되는 것 같다.

      문제3은 2가지 쿼리를 받아서 2가지 갈래로 분기를 만들어 값을 리턴하는 기능을 만드는 것이었다.
      처음에 dto 설계를 잘 못해서 객체를 객체로 감싸서 List 자체만이 나오는 것이 아니라 dto에서 설정한 이름이
      한번 더 포장되어서 결과가 반환되었다. API에서 디버그를 사용하면 요청이 보내졌을 때 변해지는 과정을 알 수 있으면 좋겠다. 아니면 내가 알지 못하는 사용법이 있는 것 같다.

  • 8일차 과제 - 미니프로젝트 도입

    • 아직은 특별하게 작업물을 만들지는 않았다. 5월 23일까지 제출해야하는 것이므로 프로젝트 전체적으로 크게 보고나서 설계하고 만들어가는 것도 늦지 않다고 생각을 하고, 강의를 들어가면서 구축해나가야 할 것 같다.
      본격적인 내용은 3주차 회고에서 나오게 될 것 같다.


기존 구조에서 새로운 것을 추가하고 JPA를 다양하게 사용해보고 이제 연관관계 매핑이나 백엔드를 살짝 벗어나는 내용도 나오게 될 것 같다. 특히 배포 부분에 관련된 내용 같은데 이 부분은 아는게 많이 없어서 접해보는 걸로 만족하는 계기가 되지 않을까?

댓글을 작성해보세요.

채널톡 아이콘