ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WIL - WEEK 1 (JWT, API)
    삐약이 성장기 2022. 9. 25. 13:02

    정신없는 첫 주차가 지나고 오늘은 이번 주에 배웠던 내용을 회고하는 시간을 가져보겠다.

     

    이번 주 WIL의 키워드는 JWT와 API 두 가지로 나누어서 서술할 예정이다.

     

    1. JWT


    아마 첫 주차 프로젝트를 진행하면서 공부했던 개념 중에 가장 어려웠던 개념을 

    한 가지 고르라고 하면 JWT를 선택하고 싶다.

     

    로그인과 회원가입 기능을 구현하는 데에 있어 JWT는 필수적으로 들어가는 요소였기 때문에 

    JWT가 웹사이트 안에서 어떤 영향을 주는지 정확하게 알 필요가 있었다.

     

    JWT 는 JSON Web Token의 약자로 전자 서명된 URL-safe (URL로 이용할 수 있는 문자만 구성된)의 JSON이다.
    전자 서명은 JSON 의 변조를 체크할 수 있게 되어 있고,

    JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준입니다.
    JWT는 서버와 클라이언트 간 정보를 주고받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후

    서버는 별도의 인증 과정 없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.
    이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만듭니다.
    JWT는 HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.

     

    JWT는 header, payload, signature 세 가지로 나누어지며 각 파트는 점(.)으로 구분된다.

     

    header

    Header는 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다.

    첫째는 토큰의 유형 (JWT)을 나타내고, 두 번째는 HMAC, SHA256 또는 RSA와 같은 해시 알고리즘을 나타내는 부분이다.

     

    payload

    Payload는 토큰에 담을 클레임(claim) 정보를 포함하고 있다.

    Payload에 담는 정보의 한 ‘조각’을 클레임이라고 부르고, 이는 name / value의 한 쌍으로 이루어져 있다.

    토큰에는 여러 개의 클레임들을 넣을 수 있다.

     

    signature

    secret key를 포함하여 암호화되어 있다.

     

    항상 웹페이지에서 로그인을 하고 페이지를 새로고침을 해도 다시 로그인을 하지 않는 것을 보면서

    어렴풋이 어딘가에 저장되어 있다고 생각만 하고찾아볼 생각은 하지 못했는데

    이번 기회에 웹페이지를 배포하면서 알 수 있게 되었다.

     

    무엇보다 JWT라는 개념을 인지하고 난 뒤에는 로그인과 회원가입 기능을 구현하면서 사용자가 로그인을 할 때,

    서버가 사용자의 정보를 기반으로 한 토큰을 발급하는 과정이 굉장히 유용하다는 것을 배울 수 있었다.

    그 후에 사용자가 서버에 요청, 즉 새로고침이나 페이지 내 다른 페이지로 넘어갈 때마다 JWT를 포함해 전달하게 되면

    토큰이 유효한지, 인증이 되었는지 그리고 사용자가 요청한 작업에 권한이 있는지확인해서 작업을 처리하기 때문에

    서버가 일일이 로그인되어있는지 확인할 필요가 없고 토큰만 확인하면 되기 때문에 여러 가지로 간편하다는 것을 배웠다.

     

    1. API

     

    두 번째로 회고할 내용은 API다.

    첫 프로젝트 때, 데이터베이스에 저장된 데이터를 페이지에 나타내는 일을 하고 싶었는데

    데이터베이스와 페이지를 이어주는 다리에는 어떤 것이 있을지 찾던 도중 

    API라는 것을 찾을 수 있었다.

     

    먼저 API란 애플리케이션 소프트웨어를 빌드하고 통합하기 위한

    정의 및 프로토콜 세트인 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)를 의미한다.

    컴퓨터와 인간을 연결시키는 사용자 인터페이스와 반대로, API는 컴퓨터나 소프트웨어를 서로 연결한다.

    직접 사람(최종 사용자)에 의해 사용되도록 고안된 것이 아니며, 대신 소프트웨어에 이를 통합하고자 하는 

    컴퓨터 프로그래머가 사용하도록 고안되었다.

     

    첫 프로젝트에서는 전국의 서핑할 수 있는 해수욕장의 정보를 데이터베이스에 저장 후

    페이지에 나타내 주는 작업을 하였는데 이런 작업을 위해서는 API가 필수적으로 들어가야만 했다.

     

    API를 올바르게 쓰기 위해 좀 더 알아보니 API를 사용하면 구현 방식을 알지 못해도

    제품 또는 서비스가 서로 커뮤니케이션을 할 수 있으며 애플리케이션 개발을 간소화하여 시간과 비용을 절약할 수 있다고 말한다.

    개발을 간소화한다는 말을 이해하는 데에는 시간이 좀 필요했는데,

    결국 데이터베이스와 데이터베이스를 연결하는 코드가 있다면

    누구나 정보를 가지고 자신의 페이지를 만들 수 있다는 점이 장점인 것이 아닐까 생각을 해보았다.

     

    확실히 프로젝트를 진행하면서 제일 먼저 진행했던 것이 페이지에 나타내 줄 데이터를 가져오는 작업이었고

    데이터를 얻기 위해 웹 페이지를 크롤링하는 것도 시간과 노력을 요하는 작업이었기 때문에

    데이터베이스가 처음부터 제공되었다면 더욱 진행하기에 편했을 것 같다.

     

    첫 주차를 마치면서 타이트한 시간 안에 최대한 많은 경험과 정보를 접하려고 했기 때문에 정신없이

    흘러간 일주일이었지만 이러한 경험과 정보가 첫 발자국을 떼는데 긍정적인 영향을 주었다고 생각한다.

    배운 내용은 더 많지만 가장 중요하다고 생각한 JWT와 API를 다시 한번 상기하면서 마치도록 하겠다.

    '삐약이 성장기' 카테고리의 다른 글

    WIL - WEEK 3 (Restful API, package.json)  (1) 2022.10.09
    WIL - WEEK 2 (ES)  (0) 2022.10.02
    Javascript 알아보기  (0) 2022.09.23
    개발 바다 위에서 쓰는 항해일지 5  (1) 2022.09.02
    개발 바다 위에서 쓰는 항해일지 4  (0) 2022.08.31
Designed by Tistory.