동석쿠
프로그래밍 공부
동석쿠
전체 방문자
오늘
어제
  • 공부 (80)
    • 공부기록 (64)
      • 웹개발 (6)
      • Java (7)
      • cs 공부 (3)
      • http 웹 기본 지식 (8)
      • 자바 스프링 (20)
      • 개인 미니프로젝트 (3)
      • 알고리즘 공부 (6)
      • 면접준비 (2)
      • 프론트공부 (8)
      • 파이썬 플라스크 (1)
    • 항해99 기록 (14)
      • 회고록 (10)
      • 팀프로젝트 (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 파이썬
  • 항해99
  • 리프레시토큰
  • 상속
  • JPA
  • 자바
  • 프로그래머스
  • Get
  • 리액트
  • API
  • lombok
  • 리프레쉬토큰
  • 리스트
  • Post
  • 문법
  • 자바스크립트
  • 스프링
  • Java
  • 알고리즘
  • 스프링부트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
동석쿠
항해99 기록/회고록

항해99 1주차 회고 (JWT와 API)

항해99 1주차 회고 (JWT와 API)
항해99 기록/회고록

항해99 1주차 회고 (JWT와 API)

2022. 1. 16. 16:49

목요일에 미니 프로젝트가 끝나고 바로 다음 알고리즘 공부를 위한 팀을 새로 배정받았다.

 

금요일부터 자바언어로 프로그래머스에서 알고리즘 공부를 하고 있는데 공부 중간에

이번 주에 새로 공부했던 다른 내용들을 정리하는 시간을 가지려 한다. 공부하게 된 것 중 다시 생각나는 건

 

JWT와 API가 있다.

 

 

JWT란

jwt는 JSON Web Token의 약자로 Json포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다

JWT는 토큰 자체를 정보로 사용하는 Self-Contained방식으로 정보를 안전하게 전달한다.

주로 회원 인증이나 정보 전달에 사용되는 JWT는 아래의 로직을 따라서 처리된다.

출처 : https://mangkyu.tistory.com/56

애플리케이션이 실행될 때, JWT를 static변수와 로컬 스토리지에 저장하게 된다. static 변수에 저장되는 이유는 HTTP통신을 할 때마다 JWT를 HTTP 헤더에 담아서 보내야 하는데, 이를 로컬 스토리지에서 계속 불러오면

오버헤드가 발생하기 때문이다. 

클라이언트에서 JWT를 포함해 요청을 보내면 서버는 허가된  JWT인지를 검사한다. 또한 로그아웃을 할 경우

로컬 스토리지에 저장된 JWT데이터를 제거한다. (실제 서비스의 경우에는 로그아웃 시, 사용했던 토큰을 blacklist라는 DB 테이블에 넣어 해당 토큰의 접근을 막는 작업을 해주어야 한다)

 

JWT Process

 

출처 : http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

1. 사용자가 id와 password를 입력하여 로그인을 시도한다.
2. 서버는 요청을 확인하고 secret key를 통해 Access token을 발급한다.
3. JWT 토큰을 클라이언트에 전달 한다.
4. 클라이언트에서 API 을 요청할때  클라이언트가 Authorization header에 Access token을 담아서 보낸다.
5. 서버는 JWT Signature를 체크하고 Payload로부터 사용자 정보를 확인해 데이터를 반환한다.
6. 클라이언트의 로그인 정보를 서버 메모리에 저장하지 않기 때문에 토큰기반 인증 메커니즘을 제공한다.
인증이 필요한 경로에 접근할 때 서버 측은 Authorization 헤더에 유효한 JWT 또는 존재하는지 확인한다.
JWT에는 필요한 모든 정보를 토큰에 포함하기 때문에 데이터베이스과 같은 서버와의 커뮤니케이션 오버 헤드를 최소화 할 수 있다.
Cross-Origin Resource Sharing (CORS)는 쿠키를 사용하지 않기 때문에 JWT를 채용 한 인증 메커니즘은 두 도메인에서 API를 제공하더라도 문제가 발생하지 않는다.
일반적으로 JWT 토큰 기반의 인증 시스템은 위와 같은 프로세스로 이루어진다.
처음 사용자를 등록할 때 Access token과 Refresh token이 모두 발급되어야 한다.
 

 

JWT 장점과 단점

JWT 장점은 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요없다는 것
분산 마이크로 서비스 환경에서 중앙 집중식 인증 서버와 데이터베이스에 의존하지 않는 쉬운 인증 및
인가 방법을 제공한다.
개별 마이크로 서비스에는 토큰 검증과 검증에 필요한 비밀키를 처리하기위한 미들웨어가 필요한데. 검증은 서명 및
클레임과 같은 몇 가지 매개변수를 검사하는 것과 토큰이 만료되는 경우로 구성된다. 토큰이 올바르게 서명되었는지 확인하는 것은 CPU 사이클 필요로 하여 IO 또는 네트워크 엑세스가 필요하지 않으며 최신 웹 서버 하드웨어에서 확장하기가 쉽다.
 
JWT 단점은 토큰이 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작하더라도 토큰에 직접 적용할 수 없다.
더 많은 필드가 추가되면 토큰이 커질 수 있다.
비상태 애플리케이션에서 토큰은 거의 모든 요청에 대해 전송되므로 데이터 트래픽 크기에 영향을 미칠 수 있다.
 
 

JWT를 사용하기에 좋은 곳

회원인증 : JWT를 사용하는 가장 흔한 이유. 사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로 한 토큰을
              발급한다. 그 후. 사용자가 서버에 요청할 때 마다 JWT를 포함하여 전달한다. 서버는 클라이언트에서 요청을
              받을때 마다 해당 토큰이 유효하고 인증됐는지 검증을 하고, 사용자가 요청한 작업에 권한이 있는지 확인하여
              작업을 처리한다.
              서버에서는 사용자에 대한 세션을 유지할 필요가 없다. 즉 사용자가 로그인 되어있는지 안되어있는지 신경을
              쓸 필요가 없고, 사용자가 요청을 했을때 토큰만 확인하면 되므로 세션관리가 필요 없어 서버 자원과 비용을
              절감할 수 있다.
 
정보 교류: JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다.
              그 이유는 정보가 서명이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지. 또 정보가 도중에 조작되지
              않았는지 검증할 수 있다.

API

출처 : http://blog.wishket.com/api%EB%9E%80-%EC%89%BD%EA%B2%8C-%EC%84%A4%EB%AA%85-%EA%B7%B8%EB%A6%B0%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8/

API를 비유를 들어 쉽게 설명해보자

음식점에서 점원이 준 메뉴판을 보고 음식을 주문하면 점원이 요리사에게  요청을 하고

그렇게 만들어진 음식을 점원이 우리에게 다시 가져다준다.

 

점원은 손님에게 메뉴를 알려주고 주방에 주문받은 요리를 요청한다. 그다음 주방에서 완성된 요리를 다시 손님께 전달하는 역할을 한다. API는 점원가 같은 역할을 한다.

 

API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고 주문(명령)을 받으면 요리사(응용프로그램)와

상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다.

쉽게 말해 API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있다.

 

API의 역할은? 

1. API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
: 데이터베이스에는 소중한 정보들이 저장되는데. 모든 사람들이 이 데이터베이스에 접근할 수 있으면 안 되므로. API는 이를 방지하기 위해 여러분이 가진 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해준다.

2. API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
: 여기서 애플리케이션이란 우리가 흔히 알고 있는 스마트폰 어플이나 프로그램을 말한다. API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 한다.

3. API는 모든 접속을 표준화한다.
API는 모든 접속을 표준화하기 때문에 기계/ 운영체제 등과 상관없이 누구나 동일한 액세스를 얻을 수 있다. 쉽게 말해, API는 범용 플러그처럼 작동한다고 볼 수 있다.

 

 

API유형은 어떤 게 있을까?

1) private API
: private API는 내부 API로, 회사 개발자가 자체 제품과 서비스를 개선하기 위해 내부적으로 발행한다. 따라서 제삼자에게 노출되지 않는다.

2) public API
: public API는 개방형 API로, 모두에게 공개된다. 누구나 제한 없이 API를 사용할 수 있는 게 특징.

3) partner API
:partner API는 기업이 데이터 공유에 동의하는 특정인들만 사용할 수 있다. 비즈니스 관계에서 사용되는 편이며, 종종 파트너 회사 간에 소프트웨어를 통합하기 위해 사용된다.

 

API를 사용하면 뭐가 좋을까?

Private API를 이용할 경우, 개발자들이 애플리케이션 코드를 작성하는 방법을 표준화 함으로써, 간소화되고

빠른 프로세스 처리를 가능하게 한다. 또한, 소프트웨어를 통합하고자 할 때 개발자들 간의 협업을 용이하게 한다.

Public API와 Partner API를 사용하면 기업은 타사 데이터를 활용하여 브랜드 인지도를 높일 수 있다.

뿐만 아니라 고객 데이터베이스를 확장하여 전환율 까지 높일 수 있다.

 

 

'항해99 기록 > 회고록' 카테고리의 다른 글

4주차 회고 정리 ORM, SQL, MVC  (0) 2022.02.06
3주차회고 DI, IOC, Bean  (0) 2022.01.30
항해99 2주차 회고 (객체지향 프로그래밍)(JVM)  (0) 2022.01.23
Chapter1 미니프로젝트를 마치며..  (0) 2022.01.13
항해99 시작 1일차  (0) 2022.01.10
  •  
  • JWT란
  • API
'항해99 기록/회고록' 카테고리의 다른 글
  • 3주차회고 DI, IOC, Bean
  • 항해99 2주차 회고 (객체지향 프로그래밍)(JVM)
  • Chapter1 미니프로젝트를 마치며..
  • 항해99 시작 1일차
동석쿠
동석쿠

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.