TIL - 0730

[프로젝트 개발] spring-security JWT 인증과정

HTTP Only 쿠키

  • 서버에서 쿠키를 설정할 때 HTTP Only로 설정한다면 브라우저 콘솔에서는 해당 쿠키의 값을 볼 수 있지만 자바스크립트 API로 호출하면 빈 문자열이 리턴됨(설정된 것이 없음)
    • HTTP 통신 과정에서만 사용됨
  • 서버 측에서의 설정
    • application.properties에서도 설정가능하지만 쿠키 전체에 대한 설정이라 해당 쿠키에 대해서만 설정한다면 쿠키 객체에 설정해줘야함 : 각각의 상태값
Cookie cookie = new Cookie(COOKIE_NAME_AUTH, generator.generate(account));
cookie.setHttpOnly(true);
response.addCookie(cookie);

JWT 만료기간 체크

  • 현재는 씨큐리티에 많은 시간을 쏟고 있는 관계로 리프레시 토큰에 대해 설정을 해주지 않고 다음 과정으로 넘어갔지만 리프레시 토큰 사용에 대해서 고려해야함
    • 발급해준 액세스토큰(JWT)가 만료되었을 때 어떻게 할 것인가? 클라이언트가 인증서버로 바로 가게 만들 것인지, 리프레시 토큰이라는 장치를 하나 더 두어서 인증서버로 가지않고도 재인증 받을 수 있게 할 것인지 고려해봐야할 것 - 보안 상 한번 인증해준 토큰의 시간을 짧게 주되 유저 입장에서 바라보는 성능상, 사용 flow 상 인증 서버로 자주 가지 않고도 인증을 받을 수 있게 리프레시 토큰을 사용할 것

개발 순서

  • 로그인이 가장 먼저라서 생각해서 로그인 개발부터 했지만 핵심 기능부터 개발하는 것이 좋을 듯함
    • 핵심 객체를 먼저 구현하고, 권한 생각과 부여를 했으면 어떘을까 라는 생각이 듦 : 핵심 기능을 상상하면서 로그인 기능을 개발해야하므로 이후 핵심 기능을 구현할 때 생각했던 바와 다르다면 어쩔 수 없는 변경이 생길 것 같음

자료구조

BST

  • Binary Search Tree : BT에 Search 기능을 추가함
  • 중복삽입x, 왼쪽 노드는 중간 노드보다 항상 작고 오른쪽 노드는 항상 큼 : 해당 성질을 가지고 검색 기능을 만듦
  • 순회하기 : 모든 노드를 한번씩 거치는 방법
    • pre
    • in
    • post
  • 삽입/검색 최선(logn, 꽉 차 있을 때 - 포화이진트리), 최악(n, 한 쪽으로) : 높이를 낮추는게
    • Balanced Tree : 한 쪽으로 치우치는 경우가 없도록 - 삽입할 때 로테이션(높이 낮출 수 있게, 양 옆의 트리 높이 차이가 2배 나지 않도록), AVL/레드블랙 트리(성능이 더 좋음)
  • 삭제를 구현할 때 BT의 성질을 해치지 않도록 구현하면 됨 : 대부분 높이를 줄일 수 있게 아래의 것에서
  • 완전 이진트리 : 순서대로(왼 -> 오) 원소가 차있는 경우
    • 완전 포화 이진트리 : 순서대로 가장 아래 높이까지 원소가 다 차있는 경우

그래프

  • vertex(점), edge(선)로 이뤄짐
  • 방향과 가중치를 가질 수 있음(없을 수 있음)
    • 가중치 : vertex에서 vertex로 이동에 대한 비용(edge에 나타남)
    • 방향 : 하나의 vertex에서 다른 vertex로 갈 수 있냐 없냐
    • 관계를 나타낼 수 있음
  • 2차원 배열(인접 매트릭스)로 만들 수 있음 : 공간낭비가 심할 수 있음(쉽지만 낭비가 심할 수 있음)
  • 연결리스트(인접 리스트)로 만들 수 있음
    • 인접 버텍스에 대한 정보를 넣으면 됨
  • 결과를 찾는 것을 많이함 : add, delete 등 수정 작업 보다는 놓여져 있을 때 탐색에 대한 결과
  • 그래프 탐색 : 탐색할 때 탐색했다는 표시를 하지않으면 무한루프에 빠질 수 있음
    • DFS : 깊이 우선 탐색, 스택 구현
    • BFS : 너비 우선 탐색, 큐 구현

그래프를 사용하는 최단거리 알고리즘

  • 다익스트라
  • 벨만-포드 알고리즘
  • A*