V-logue

[항해99] 항해 Week 1 본문

항해 99/Week I learned(WIL)

[항해99] 항해 Week 1

보그 2022. 5. 15. 19:11

항해 1주차

솔직히 무엇을 배웠느냐고 물어본다면, 아무것도 배웠다고 할 수 없다라고 말하겠다.

 

웹개발 5주차 강의를 듣고 바로 미니 프로젝트를 진행하게 된 입장에서 일정한 호흡을 가지고 공부하는 것이 아닌

 

마구잡이 식으로 이것저것 뜯어보고 베껴서 내것으로 체화하는 과정이 완벽하게 이뤄진 것은 아니기 때문에

 

오히려 같은 팀원분들의 발목을 잡지는 않을까 걱정했던 한주의 시작이었다.

 

Mini Project / 떡볶이 없이 못사는 사람들

떡못사 웹사이트 소개 영상 - YouTube

대충 이런걸 일주일 동안 만들었는데,

python 플라스크로 서버를 구현하고 jwt토큰을 이용해 로그인기능을 만들었다.

사실 만든 것은 아니고 옆에서 응원을 열심히 한 것 같다.

어떻게 보면, 응원단장으로서 역할은 소임을 다한 것이니 1인분은 한게 아닐까?

앞서 나가는 누군가를 뒤에서 바라보는 것은

정말 쉽지 않았다.


API

우선 api에 대해서 설명해야 하는데, api는

더보기

Application Programing Interface의 약자로, API는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

위키피디아에서 설명하는 api는 이런 뜻인데, 결국 api란 어떤 프로그램을 사용하는 사람들끼리 어떻게

데이터를 주고받게 만들지 정하는 것이 api라고도 할 수 있다.

 

예를들면 웹개발 5주차 강의를 들을 때 기상청의 미세먼지 api를 사용했었는데, 기상청 미세먼지 api를 사용하니

기상청에서 수집하고 있는 미세먼지 정보를 쉽게 제공받아 사용할 수 있었다.

 

한주동안 api에 대해서도 공부를 진행한 결과 이것 저것 알게됐다. 한주동안 진행한 것이

Python언어와 함께 api서버로 사용하기 좋은 기본적인 웹 프레임워크인 flask를 이용하여 api서버를 만들었다.

(물론 위와같이 사실 만들었다고 할 수는 없다.)

 

POST에서 만들고 DB로 저장시킨 정보를 GET에서 URI주소에 파라미터를 추가하여 서버에 요청한 data를 READ하고

GET 방식은 URL 형태로 표현되므로, 특정 페이지를 다른 접속자들에게 POST로 만든 데이터를 노출시킨다.

 

우리는 파일을 데이터베이스에 전송하여 메인 페이지에 노출시켜야 했기 때문에 form-data방식을 채용했다.

 

참고로 GET, POST방식을 알려면 우선 HTTP 프로토콜에 대해서 알고 있어야 하는데,

더보기

HTTP 프로토콜은 웹 클라이언트와 웹 서버간 데이터 전송을 하는 프로토콜이다.

(※ 프로토콜은 컴퓨터 내부에서, 또는 컴퓨터 사이에서 데이터의 교환 방식을 정의하는 규칙 체계입니다. 기기 간 통신은 교환되는 데이터의 형식에 대해 상호 합의를 요구한다. 이런 형식을 정의하는 규칙의 집합을 프로토콜이라고 한다.

출처 : https://developer.mozilla.org/ko/docs/Glossary/Protocol )

 

GET방식과 POST방식 모두 서버에 요청을 하는 메서드로,

 

REST api설계시 자원에 대한 행위로서 HTTP 메서드로 표현하기 위해서 사용했다.


JWT

더보기

JSON 웹 토큰(JSON Web Token, JWT, "jot”)은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로, 페이로드는 몇몇 클레임(claim) 표명(assert)을 처리하는 JSON을 보관하고 있다. 토큰은 비공개 시크릿 키 또는 공개/비공개 키를 사용하여 서명된다. 이를테면 서버는 "관리자로 로그인됨"이라는 클레임이 있는 토큰을 생성하여 이를 클라이언트에 제공할 수 있다. 그러면 클라이언트는 해당 토큰을 사용하여 관리자로 로그인됨을 증명한다. 이 토큰들은 한쪽 당사자의 비공개 키(일반적으로 서버의 비공개 키)에 의해 서명이 가능하며 이로써 해당 당사자는 최종적으로 토큰이 적법한지를 확인할 수 있다. 일부 적절하고 신뢰할만한 수단을 통해 다른 당사자가 상응하는 공개키를 소유하는 경우 이 경우 또한 토큰의 적법성 확인이 가능하다. 토큰은 크기가 작고 URL 안전으로 설계되어 있으며 특히 웹 브라우저 통합 인증(SSO) 컨텍스트에 유용하다. JWT 클레임은 아이덴티티 제공자와 서비스 제공자 간(또는 비즈니스 프로세스에 필요한 클레임)의 인가된 사용자의 아이덴티티를 전달하기 위해 보통 사용할 수 있다.

 

출처: https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0

간단하게 설명하면 JSON 객체를 사용해, 정보를 보다 더 안정성있게 전달하는 웹 표준을 의미한다.

 

이 jwt를 언제 썻냐면, 이번에 로그인 기능을 구현하는데 사용했다.

 

사용자가 회원가입을 통해 db에 저장된 데이터를 로그인할 때 불러와 로그인하게 되면, 서버가 해당 사용자에게 사용자의 토큰을 사용자 전달하고 로그인 상태를 계속해서 유지시킬 수 있게 만들기 위해서 사용했다.

 

jwt를 사용하면, 일단 서버가

유저 자체의 세션을 유지할 필요가 없고, 유저의 토큰만 유효성 검사와 인증 절차를 통해 부여한 후 유저가 어떤 동작을

진행할때마다 확인만 해주면되므로 이전에 쓰이던 방식보다 가성비가 좋다고 한다.

 

jwt는 3가지 요소가 필요하다.

 

Header / Payload / Signature

 

Header는 두가지 정보를 가지고 있다 ( typ , alg(해싱알고리즘) )

 

Payload에는 토큰에 담을 정보들이 담겨있다. ( 토큰 발급자 , 토큰 제목, 토큰 대상자 등)

 

Signature는 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.


jwt 의 장점으로는

  • JWT 의 주요한 장점은 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함되서 별도의 저장소가 필요 없다.
  • 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써 발생하는 취약점이 사라집니다.
  • 트래픽 대한 부담이 낮음
  • REST 서비스로 제공 가능
  • 내장된 만료
  • 독립적인 JWT

jwt의 단점으로는

  • 토큰에 대부분의 정보를 저장하기 때문에 토큰의 길이가 늘어날 수록 트래픽이 증가한다.
  • 위와 결을 같이하는 말로, 토큰에 정보가 담겨있기 때문에 토큰을 해킹의 취약점에 노출되있다.
  • 토큰의 임의 삭제가 불가능 하기때문에 exp시간을 꼭 넣어줘야한다.

정도가 있다.


그리고 미니 프로젝트가 끝난 이후로는 프로그래머스에서 알고리즘 문제를 풀고 있는데, 너무나 막막한 상황과

도저히 감을 잡을 수 없었던 첫날과 비교하면 그래도 지금은 어느정도 생각은 할 수 있는 단계라고 본다.

 

문제를 하나하나 풀어가면서, 자바스크립트의 메서드와 함수들을 하나씩 배우고 다음에 사용하는 과정이

무척 즐겁다고 말할 수 있다.

'항해 99 > Week I learned(WIL)' 카테고리의 다른 글

[항해99] WIL(Week I Learn) - 13주차  (1) 2022.08.08
[항해99] WIL(Week I Learn) - 8주차  (0) 2022.07.04
Comments