컴공생의 발자취

[내일배움캠프 32일차 TIL] JWT 활용 과제 제출 본문

🤝 활동/내배캠TIL

[내일배움캠프 32일차 TIL] JWT 활용 과제 제출

MNY 2024. 6. 1. 14:29
728x90
반응형
오늘의 진도 : 개인과제 제출까지...

드디어 과제 제출했당~ 😆😆😆
오늘의/지난 날의 궁금증, 개인과제, 오늘의 회고 이렇게 4개의 큰 틀로 나누어 정리할 것이다.

 

지난 날의 궁금증

  • Q : PUT vs PATCH ? // UPDATE는 없었네?ㅠ
    • PUT : 자원의 전체 교체, 자원교체 시 모든 필드 필요
      * 만약 전체가 아닌 일부만 전달할 경우, 전달한 필드외 모두 null or 초기값 처리된다.
    • PATCH : 자원의 부분 교체, 자원교체 시 일부 필드 필요

 

* 참고한 블로그

 

[HTTP METHOD] PUT vs PATCH 차이점

HTTP 메소드 중 PUT 과 PATCH가 있다. 뭔 차이여... 결론 PUT : 자원의 전체 교체, 자원교체 시 모든 필드 필요 (만약 전체가 아닌 일부만 전달할 경우, 전달한 필드외 모두 null or 초기값 처리되니 주의!!

papababo.tistory.com

 

  • Q : Cookie + JWT 같이 사용하는 이유?
    • A : JWT의 인증방식 중 Cookie vs Header을 비교하는 글을 보면 대략적인 이유를 알 수 있다. 각 장단점이 존재!

 

* 이전 발행 글

 

[내일배움캠프 30일차 TIL] JWT(Cookie vs Header)

오늘의 진도 : 아직 개인과제 5단계 진행 중...JWT 너란 녀석 내가 후까 패주마..오늘의 학습, 오늘의/지난 날의 궁금증, 면담, 오늘의 회고 이렇게 4개의 큰 틀로 나누어 정리할 것이다. 💡 오늘

moonnight0.tistory.com

 


개인과제

  • 내가 구현한 단계(6단계)
    • 1단계 : 일정과 댓글의 연관 관계
    • 2 - 4단계 : 댓글 등록/수정/삭제
    • 5 - 7단계( 공통 조건 ) : @validation 활용
    • 5단계 : JWT
    • 6단계 : 회원가입

 

📚 과제 제출하면서 작성한 기술 질문

  • Q : 처음 설계한 API 명세서에 변경 사항이 있었나요? 변경 되었다면 어떤 점 때문 일까요?

현재 설계된 API 명세서에서 큰 변동사항은 없었습니다. 초기 설계 단계에서 어떻게 작성해야 RESTful한 API를 작성할지 특히 Param vs Query 방식에 대해 충분히 고민해보았던 경험이 도움이 되었습니다. 다만, Body 부분에서 놓친 부분들이 있어서 추가했습니다. 추가하는 과정에서 유효성 검사 관련된 부분도 함께 정리해놔야겠다고 생각하였습니다.

 

  • Q : ERD를 먼저 설계한 후 Entity를 개발했을 때 어떤 점이 도움이 되셨나요?

ERD를 먼저 설계하고 Entity를 개발함으로써 도움이 된 것은 크게 두 가지입니다.
첫 째는 명확한 데이터 구조 파악입니다. ERD를 통해서 데이터베이스의 구조를 시각적으로 표현해놓음으로써 명확하게 이해할 수 있어 entity간의 관계에 대한 혼란을 줄일 수 있었습니다.
두 번째는 일관성 유지 입니다. 먼저 ERD에 명시해놓고 entity를 개발함으로써 데이터베이스와 코드 간의 일관성을 유지할 수 있었습니다. 

 

  • Q : JWT를 사용하여 인증/인가를 구현 했을 때의 장점은 무엇일까요?

쿠키는 서버 부하가 적지만 보안성에 취약하고, 세션은 보안성이 높지만 확장성에 한계가 있습니다.
반면, JWT는 서버엣 세션 데이터를 저장할 필요가 없어 확장성이 뛰어나고, 서명된 토큰으로 무결성이 보장되며, 다양한 방식으로 유연하게 전송할 수 있습니다.

 

  • Q : 반대로 JWT를 사용한 인증/인가의 한계점은 무엇일까요?

JWT의 한계점은 토큰이 클수록 네트워크 성능에 영향을 미치고, 만료 시간까지 유효해 탈취 시 악용될 수 있습니다.
JWT의 무상태(stateless) 특성 때문에 서버에서 즉시 무효화할 수 없습니다. JWT는 토큰을 발급한 후에는 서버에서 해당 토큰을 추적하거나 관리하지 않기 때문입니다.서버에서 즉시 무효화를 위해서는 토큰 검증을 하는 비밀 키를 변경하거나, 취약한 토큰을 관리하여 차단하는 등의 방법을 사용해야 합니다. 하지만 이러한 과정을 추가적인 복잡성을 동반하며, 실시간으로 토큰을 무효화하는 데에 어려움을 가지고 있습니다.

 

  • Q : 댓글이 여러개 달려있는 할 일을 삭제하려고 한다면 무슨 문제가 발생할까요? Database 테이블 관점에서 해결 방법이 무엇일까요?

데이터 일관성 문제와 외래 키 제약 위반에 대한 문제가 생깁니다. 할 일과 댓글은 일대다 관계이므로, 할 일을 삭제하면 댓글도 삭제되어야 하는데 그렇지 않으면 데이터베이스에서 일관성이 깨집니다. 또한, 댓글 테이블에는 할 일의 외래 키가 존재할텐데 댓글이 존재하는 상태에서 할 일을 삭제하려고 하면 외래 키 제약 위반 에러가 발생할 수 있습니다. 연관된 관계에서 참조 대상이 사라진다면 이에 해당합니다.
해결하기 위해 댓글에 대한 캐스케이드 삭제 설정을 통해 할 일이 삭제 될 때 댓글도 자동으로 삭제되도록 설정하여 일과성을 유지할 수 있습니다. 또는 데이터베이스 관점에서 트랜잭션을 사용하여 할 일을 삭제하기 전에 관련된 모든 댓글을 먼저 삭제하는 방법을 이용할 수 있습니다.

 

  • Q : IoC / DI 에 대해 간략하게 설명해 주세요!

IoC(Inversion of Control)는 제어의 역전을 의미하며, 소프트웨어 컴포넌트의 제어 권한이 개발자가 아닌 프레임워크나 컨테이너에게 넘어가는 것을 가리킵니다. 일반적으로 프레임워크가 애플리케이션의 흐름을 제어하고, 개발자는 프레임워크에 필요한 구현을 제공하는 방식입니다.

DI(Dependency Injection)는 의존성 주입을 의미하며, 객체가 필요로 하는 의존성을 직접 생성하는 것이 아니라 외부에서 주입받는 것을 의미합니다. 이를 통해 객체 간의 결합도를 낮추고 코드의 재사용성과 유지보수성을 높일 수 있습니다. DI는 주로 IoC의 구현 방법 중 하나로 사용됩니다.

 

  • 숙제 제출 후 고촬

숙제를 하면서 예외처리에 대한 것에 대해 다시 생각해보게 되었다. 지난 과제에서 exceptionHandler을 사용해서 예외처리를 했었는데 이걸 어떻게 하면 잘 활용할지 모르겠다. 이번 과제도 RESTful한 API에 중점을 맞춰서 URL을 작성했다.

이번 과제를 통해 JWT가 무엇인지 그리고 쿠키와 헤더 방식은 어떤 과정을 거치고 어떻게 코드로 구현하는지에 대해 정말 세부적으로 이해하게 되었다. 또한, 쿠키와 세션, JWT가 무엇인지 어떻게 동작하는지에 대해 계속 찾아보고 공부하면서 드디어 이해를 어느정도 한 것 같다. 하지만, 어려운 건 마찬가지...

 

* 제출한 내 레파지토리

 

GitHub - ysy56/agendaAppServer: 개인과제 두 번째 : 나만의 일정 관리 앱 서버

개인과제 두 번째 : 나만의 일정 관리 앱 서버. Contribute to ysy56/agendaAppServer development by creating an account on GitHub.

github.com

 


오늘의 회고

  • 12시간 중 얼마나 몰입했는가?

과제 제출 전 2시간이 가장 열정적으로 몰입한 시간이지 않나 싶다.

 

  • 오늘의 생각

TIL.. 예시로 NoSQL과 RDBMS의 차이를 작성하고 그래서 나는 무엇을 사용하였는지? 이런 글도 잘 작성한 글!

그리고 캠프 수료 후 꾸준한 커밋과 블로그 작성이 중요하다!

수업 마친 이후 남아계셨던 튜터님으로 부터 들은 조언...

 

이제부터 정말 잘 작성한 글 계속 써놔야겠다!

 

  • 내일 학습할 것은 무엇인지

주말동안 과제 제출 이후 못했던 로그인 부분 구현 후 예외처리가 제대로 안된 것이 있다면 수정하고

전체적인 코드의 일과성을 맞춰주려고 한다.

728x90
반응형