TIL | WIL

[WIL] 220919-220925 (항해99 week1.)

@cony 2022. 9. 25. 21:43

9월 19일부터 시작한 항해99 드디어 첫 주가 지났다. 첫 주에는 백, 프론트 구분 없이 팀을 꾸려 미니 프로젝트를 진행했고 짧은 시간안에 기획부터 발표까지 해야해서 정신 없이 시간이 지나갔다.  미니 프로젝트가 끝나기 무섭게 알고리즘 주차로 들어갔고 코딩테스트 문제들을 조금씩 풀어보면서 JavaScript를 공부하는 방식에 대해 많은 고민을 하게 됐다. 

원래 항해를 시작하면서 간단하게라도 매일 정리를 하면서 TIL 을 꾸준히 쓰려고 했는데, 첫 주는 정말 시간도 없었고 전공자도 아닌 입장에서 주어진 과제를 따라하기에도 벅차서 무리,,, 라고 판단했다ㅠㅠ 그래도 한 주동안 배우고 느낀 것들을 주말에 정리해보면서 WIL이라도 꼭 써가려고 한다 (여유가 좀 생기면 TIL도 자주 남겨야지! )

무튼 첫 주 차 회고 시작.

 


 

JWT (JSON Web Token)

JWT(JSON Web Token)란 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.

그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다

 

JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.

따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.

 

보통 크롬 쿠키삭제로 처음 알게되는 Cookie

특정 인증 정보를 서버가 가지고 있고, 그 값을 클라이언트에게 전달함으로써 마치 키를 주고 자물쇠를 여는 방식으로 인증을 한다. 이 정보 자체를 주고받게 되면 개인정보가 그대로 노출이 되어서 보안적으로 굉장히 위험해진다.

 

이런 쿠키의 단점을 해결하기 위해서 나온 것이 Session이다.

정보 자체를 주고받는 사실은 크게 다르지 않지만 Cookie에 담겨진 인증 정보 자체를 세션 저장소에 저장하고, 클라이언트가 정보를 요청할 때마다 저장소에서 값을 꺼내서 인증하는 방식이다.

Session을 이용함으로써 보안이 조금 향상되긴 하지만 저장소를 사용하기 때문에 잦은 요청이 들어오면 서버에 굉장히 부담이 된다. 

 

이 둘의 단점을 모두 보완하자! 하고 등장한게 바로 JWT이다. 

 

JWT 장점

  1. Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있다.
  2. 인증 정보에 대한 별도의 저장소가 필요없다.
  3. JWT는 토큰에 대한 기본 정보와 전달할 정보 및 토큰이 검증됬음을 증명하는 서명 등 필요한 모든 정보를 자체적으로 지니고 있다.
  4. 클라이언트 인증 정보를 저장하는 세션과 다르게, 서버는 무상태(StateLess)가 된다.
  5. 확장성이 우수하다.
  6. 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. (쿠키와 차이)
  7. OAuth의 경우 Facebook, Google 등 소셜 계정을 이용하여 다른 웹서비스에서도 로그인을 할 수 있다.
  8. 모바일 어플리케이션 환경에서도 잘 동작한다. (모바일은 세션 사용 불가능)

JWT 단점

  1. 쿠키/세션과 다르게 JWT는 토큰의 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해진다.
  2. Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다.
  3. 토큰을 탈취당하면 대처하기 어렵다.

JWT의 Access Token / Refresh Token 방식

JWT도 탈취의 위험성이 있기 때문에, 그대로 사용하는것이 아닌 Access Token, Refresh Token 으로 이중으로 나누어 인증을 하는 방식을 현업에선 취한다.

 

 

API

 

 

 

비유를 들어보면 레스토랑 점원이 가져다준 메뉴판에서 스테이크를 고르면, 점원이 주문을 받아 요리사에게 요청을 하고 요리사는 스테이크를 만들어 점원에게 주고, 점원이 음식을 가져다준다. 

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

API는 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용 프로그램)와 상호작용하여 요청된 메뉴(요청에 대한 값)을 전달.

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

API의 역할은? 

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

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

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

API유형은 어떤게 있을까?

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

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

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

API 사용하면 뭐가 좋을까?

API를 사용하면 많은 이점들이 있는데 Private API를 이용할 경우, 개발자들이 애플리케이션 코드를 작성하는 방법을 표준화함으로써, 간소화되고 빠른 프로세스 처리를 가능하게 한다. 또한, 소프트 웨어를 통합하고자 할 때는 개발자들 간의 협업을 용이하게 만들어줄 수 있음.
public API와 partner API 를 사용하면, 기업은 타사 데이터를 활용하여 브랜드 인지도를 높일 수 있고 고객 데이터베이스를 확장하여 전환율까지 높일 수 있다.

 

Git flow의 활용

혼자 작업을 할 때는 깃이 이렇게 까다로운지 알지 못했다. 조원들도 깃 플로우를 활용해 협업을 하는게 처음이라 각자 할 일을 해서 업로드를 하는데 파일은 계속 충돌을 일으키고 처음 Git Bash를 사용해봐서 사용법에도 익숙하지 않아 하나 수정하고 올리는데도 시간이 엄청 걸렸다. 처음이다보니 어쩔 수 없다고 생각하지만 파일 충돌 부분이나 사용법을 알고 있었다면 시간을 훨씬 절약해 더 많은 기능을 구현할 수 있었을거란 아쉬움이 남는다..(- 깃과 깃헙에 대해서는 다른 포스팅에 정리할 예정 - )

 

 

알고리즘

프로그래머스 Lv.1-2 (알고리즘 폴더에 정리하기)

자바스크립트는 단순히 웹페이지를 만들 때 동적으로 활용하는 수준이었는데 map, filter, reduce 등, 이와 같은 기본적인 함수들을 이해하고 활용할 수 있는지가 중요했다. 자바스크립트를 다시 개념 위주로 정리하고 알고리즘 문제도 처음 접해봐서 미숙하지만 알고리즘 주차 동안 프로그래머스 레벨 1-2까지는 풀어보고 싶다.

 

 

다음 주 계획 👀

  • 미니 프로젝트 조원들과 코드 수정 및 시간 부족으로 구현하지 못한 기능 구현하고 프로젝트 마무리 짓기
  • 깃과 깃헙 사용법 익숙해지기
  • 자바스크립트 문법 공부 및 알고리즘 문제 풀기

 

 

 


References

 

JWT 토큰 인증이란 ?

 

JWT(Json Web Token) 알아가기

 

비개발자가 알기 쉬운 API