[TIL] 22.12.27 (Security, OAuth, Test, AOP)

조성현·2022년 12월 27일
1

TIL 요약 (문시해알이 무엇인가요?)

  • 문: Spring 심화강의 켠왕

  • 시: 스프링 심화강의를 먼저 한번 쭉~ 들어보고자 했다.

  • 해: Spring Security, OAuth2, Test, Aop 강의를 원리, 개념적인 부분에 집중해서 들었다.(내일, 모레에는 개인과제에 위 내용들을 적용해보며 배운 내용들을 체화할 예정)

  • 알: Spring Security, OAuth2, Test, Aop의 원리와 개념, 매커니즘 등을 배울 수 있었다. 단순히 HOW만 배운 것이 아니라, 일정부분 WHY(왜 이 기능을 사용해야 되는지)에 대해서도 생각해볼 수 있었다.


오늘 만난 문제

금일 수강한 스프링 심화강의 커리큘럼


내가 시도해본 것들 & 어떻게 해결했는가

오늘도 어김없이 등장하는 보안 글씨체와 함께 강의를 정리하며 이해해보았다.

  • ⚠️주의⚠️ 글씨체가 매우 더러우니 필기 내용을 읽으려하지 마세요! plz🙏
  • 강의에 대한 정리목적으로 작성한 것이 아니라, 이해하는 과정에서 적은 메모 느낌?
  • 내일, 모레에는 개인과제에 위 내용들을 적용할 예정이기에, 그 과정에서 강의 내용이 잘 떠오를 수 있도록 마중물역할을 해줄 메모들이다.


무엇을 알게 되었는가

1. Spring Security에서 JWT를 사용하여 인증/인가 구현하는 법

1) WHY - 왜 JWT를 같이 사용해야 하는가

  • Spring Security의 bCrypt는 적응형 단방향 함수들이 그렇듯, 내부적으로 리소스 낭비가 매우 심하다.
  • 따라서 세션, 토큰과 같은 인증방식을 사용하여 검증하는 것이 속도, 보안 측면에서 유리하다.

2) HOW - Security에 JWT를 적용하는 법

3) Domain Security 적용하는 법


2. OAuth2 (Open Standard for Authorization)

  • 개방형 Authorization 의 표준이며 API 허가(Authorize)를 목적으로 JSON 형식으로 개발된 HTTP 기반의 보안 프로토콜
  • 사용자들이 사용하고자 하는 웹사이트 및 애플리케이션에 비밀번호를 제공하지 않고 접근 권한을 부여 받을 수 있게 해주는 공통적 수단으로서 사용 되어지는 기술
  • 다양한 클라이언트 환경에 적합한 인증(Authentication) 및 인가(Authorization) 의 위임 방법을 제공하고 그 결과로 클라이언트에게 접근 토큰 (Access Token) 을 발급하는 것에 대한 구조

1) WHY - 소셜로그인이 도입된 이유/배경

  • 사용자:
    매번 번거로운 회원가입 과정을 수행해야 할 뿐 아니라, 웹 사이트마다 다른 아이디와 비밀번호를 기억해야 함.
  • 웹 운영측:
    회원들의 개인정보를 지켜야하는 역할이 부담됨, 발전하는 해킹 기술을 막기 위해 보안을 강화하는 노력이 지속적으로 필요하기 때문

2) HOW - 카카오 로그인을 내 프로젝트에 접목시키는 법


3. Spring Test

1) WHY - 왜 테스트를 해야하는가

  • 소프트웨어는 자연치유라는 개념이 없다.
  • 버그가 많아 질수록, 서비스와 회사의 신뢰도는 낮아지고 주가는 떨어진다.
  • 블랙박스 테스팅, 개발자 테스트

2) WHY - 왜 '단위 테스트'를 해야하는가

  • 버그가 늦게 발견될수록 Costs가 어마무시하게 커진다.
  • Production(배포) 단계에서 버그를 발견했다면? 수정한 다음 다시 처음부터 테스트를 진행해야한다.
  • 그래서 TDD(Test-Driven Development)를 강조하는 사람들이 나오는 추세(아직 찬반이 갈리긴 함)
  • [Given-When-Then] 테스트 코드 방법론/패턴

3) HOW - JUnit 을 이용한 단위 테스트

4) HOW - Edge 케이스를 고려한 단위 테스트

5) HOW - 단위 테스트와 Mock Object / Mockito mock

테스트와 관련한 논란, 논쟁이 많은 것은 사실이다.
그러나 테스트코드의 효용을 부정하는 경우는 없다.
테스트코드를 작성하며 "내 코드의 구조와 설계, 실제 구현을 고민하는 과정"을 경험한다는 것 자체만으로도 큰 가치를 가진다.


4. Spring AOP (Aspect Oriented Programming)

1) WHY - 왜 AOP를 사용하는가

  • 핵심기능부가기능을 분리할 수 있다.
  • 각 코드를 이해하고, 유지보수하는 등 다양한 이점을 얻을 수 있다.
  • AOP를 통해 부가기능을 모듈화할 수 있다.

2) HOW - AOP를 어떻게 쓰는가

  • 어드바이스(실행될 시점), 포인트컷(실행될 장소)를 줘야한다.

  • @Aspect는 스프링 빈(Bean) 클래스에만 적용이 가능하다 -> @Component랑 짝꿍이다.

  • @Around("execution()")에서 @Around는 어드바이스, ("execution()")는 포인트 컷

  • @Pointcut("execution()") -> 어드바이스 역할도 하면서, 해당 포인트 컷을 재사용or결합해서 사용이 가능한 어노테이션

  • AOP의 원리: DispatcherServletController 사이에 프록시가 쇽! 하고 들어가서 작동하는 구조, joinPoint.proceed()에 의해서 서블릿과 컨트롤러는 눈치도 못채고 자연스럽게 로직을 실행하게 됨.

profile
맛있는 음식과 여행을 좋아하는 당당한 뚱땡이

0개의 댓글