WIL (항해 4주차 회고)

김형준·2022년 6월 5일
0

TIL&WIL

목록 보기
28/45
post-thumbnail

Week4 TIL 리스트업


1. 회고


1) 22일차

  • Spring Security 로그인 과정에 대해 학습했다.
  • 필수적인 부분만 구현한 것이기 때문에, 전체적인 흐름을 파악하는 것에 집중했다.
  • JPA에 대해 학습하며, 영속성 컨텍스트, 1차 캐시, JPA 연관관계 구현 등의 주제를 학습했다. -> 심화 주차 과제에서 적용하며 복습했다.
  • Spring Data JPA는 스프링 진영에서 JPA를 사용하기 편하게 도와주는 친구다.

2) 23일차

  • JPA가 제공하는 Pagination을 사용했다.
  • 직접 구현하려면 꽤나 복잡한 코드를 작성해야 했을텐데, 사용하기 편리하게 만든 것 같다.
  • JPA 연관관계를 이용하여 웹에 menu bar (폴더) 기능을 추가했다.
  • 숙련 주차 과제를 마무리하며 로그인 시 아이디 혹은 비밀번호가 유효한 값이 아닐 경우 오류를 뱉어주는 AuthenticationFailureHandler를 구현했다.
  • 스프링 시큐리티는 로그인 과정에서 굉장히 다양한 기능들이 수행되고 있고, 위와 같이 커스터마이징하여 사용하기 위해서, 스프링 시큐리티의 전체 흐름 및 구체적인 코드 이해까지가 선행되어야 함을 깨달았다.
  • 추가적으로 공부할 예정이다. (아마도 인프런 강의??)

3) 24일차

  • WebSecurityConfigureAdapter(Deprecated): 22년 2월 21일 부로 Deprecated 되었다.
  • 스프링 공식 홈페이지에서 발표한 글을 읽어봤는데, 사실 새로운 방식이 어떠한 이점을 지니는지 까지는 이해하지 못했다.
  • 일단은 Deprecated 되었으니 새로운 방식으로 코드를 수정하긴 했지만, 조금 더 공부해보고 왜 바꾸게 되었는지 이해해볼것!
  • 스프링 AOP 어노테이션에 대해 학습했다.
  • AOP는 부가 기능의 모듈화로, OOP와 반대되는 개념이 아닌 OOP를 보완하는 개념으로 접근해야한다.
  • 사실 AOP는 이미 은연중에 많이 사용하고 있었다는게 놀라웠다. (ExceptonHandling, @Transactional 등등)

4) 25일차

  • 현업에서는 보통 DB를 딱 한개만 두는 경우는 없다고 한다.
  • Primary와 Replica로 구분하여 사용한다고 한다.
    • Primary는 쓰기 전용, Replica는 읽기 전용
  • 스프링 AOP 어노테이션을 활용하여 Global Exception Handler를 구현해봤다. 편하기도 하고, 유지보수성과 재사용성을 향상시키는 AOP.. 구현해보며 익숙해지자!
  • Spring Security를 추가 학습하며 SecurityContext-Authentication-UserDetails 의 포함관계를 공부했다.

5) 26일차

  • OAuth2.0 방식으로 구글, 페이스북, 네이버 로그인을 구현했다.
  • OAuth2.0Client 라이브러리를 사용하면, 구글/페이스북/트위터 등 스프링이 지원하는 provider의 로그인 구현은 굉장히 간단했다.
  • 반면 카카오, 네이버 등 스프링이 지원하지 않는 provider는 조금 더 작성해야하는 코드들이 많았다.
  • JWT를 본격적으로 구현하기 전에 세션, 통신, 보안, RSA에 대한 학습이 이뤄졌다.
  • 개념적인 학습으로 JWT를 왜 사용해야 하는가에 대한 해답을 조금은 얻은 것 같다.
  • 그러나 실제 구현부에서 JWT 발급, 검증 등 JWT와 관련된 코드는 간단했으나, 역시나 스프링 시큐리티 구조 (필터 체인) 가 어떻게 이루어지는 지에 대한 지식이 필요했다. 얼른 공부하자..

6) 27일차

  • JWT 로그인 구현 과정을 학습했다.
    • 사실 JWT 보단 스프링 시큐리티 체인이 어떻게 이루어져있는지를 먼저 학습해야겠다는 생각이 들었다.
  • 스프링 심화 주차 과제를 구현했다.
    • DB Table 설계에 따른 JPA 연관관계 사용이 핵심이었던 것 같다.

2. ORM, SQL, MVC

ORM

  • 🔗 ORM 관련 학습

  • ORM은 Object Relational Mapping의 약자로, 객체와 RDBMS를 매핑하는 기술을 의미한다.

  • 인기 있는 언어마다 ORM이 구현되어 있고, 우리가 사용하는 Java에도 JPA라는 ORM이 있다.

SQL

  • 만약 우리가 JPA를 사용하지 않고, MyBatis와 같이 자바 퍼시스턴스 프레임워크를 사용하였다면 현재 SQL 공부에 한창이었을 것 같다.
  • 물론 SQL은 백엔드 개발자가 필수적으로 학습해야할 부분이지만, 항해에서는 99일 간 자바영역(비즈니스 로직) 구현에만 전념할 수 있도록 JPA를 통해 이를 대체한 것 같다.
  • JPA 보다 raw한 SQL문을 사용하는 경우가 성능면에서도 뛰어나다고 한다. 또한 JPA를 사용하다가 오류가 발생했거나 JPA로 구현을 못하는 부분들은 실행된 SQL 쿼리문을 검토할 수 있어야 처리가 가능하기 때문에, SQL은 나중에 꼭 공부해야할 부분이다.

MVC


3. TIL

  • 어제 까지 추가적인 강의를 다 듣고, 오늘은 쉬엄쉬엄 과제만 구현했다.
  • 과제를 구현해보며 느낀 점은, 스프링 입문 주차의 나와 지금의 나를 비교했을 때 꽤 많이 성장했다는 것이다.
  • 사실 이번 주도 평균적으로 새벽 3시쯤에 잠들면서 공부할 정도로 공부할 것이 굉장히 많았고, 앞으로 공부해야할 양은 훨씬 훨씬 많을테지만.. 당장 2주 전의 나와 비교해봐도 열심히 한 만큼 성장해가는 것 같다는 생각이 들었다.
  • 항해 선원들은 아침 9시 부터 새벽 1시까지 공부한다는 설을 들었을 때 너무 어려운 것 아닌가라는 생각이 들었는데, 지금은 새벽 1시도 부족하다는 생각이 든다.
  • 하루종일 집에만 있고 휴일 같지 않은 휴일을 보내다 보니 점점 피폐해져가는 것 같지만, 오늘 느꼈던 이 감정을 토대로 앞으로 남은 항해 기간도 긍정적으로 버텨보자. 이번주도 고생 많았다. 화이팅! 💥
profile
BackEnd Developer

0개의 댓글