WIL(5/8 ~ 5/15)

정성현·2022년 5월 15일
0

항해99

목록 보기
12/33

키워드 JWT, API

JWT란??

WT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다. 전자 서명은 JSON 의 변조를 체크 할 수 있게되어 있습니다.
JWT는 속성 정보를 JSON 데이터 구조로 표현한 토큰 표준 입니다.
JWT는 서버와 클라이언트 간 정보를 주고 받을 때 Http 리퀘스트 헤더에 JSON 토큰을 넣은 후 서버는 별도의 인증 과정없이 헤더에 포함되어 있는 JWT 정보를 통해 인증합니다.
이때 사용되는 JSON 데이터는 URL-Safe 하도록 URL에 포함할 수 있는 문자만으로 만듭니다.
JWT는 HMAC 알고리즘을 사용하여 비밀키 또는 RSA를 이용한 Public Key/ Private Key 쌍으로 서명할 수 있습니다.

HMAC 알고리즘 : 송신자와 수신자만이 공유하고 있는 key와 Message를 혼합하여 Hash값을 만드는 것
RSA : 공개키 암호시스템의 하나로, 암호화뿐만 아니라 전자서명이 가능한 최초의 알고리즘으로 알려져 있다. RSA가 갖는 전자서명 기능은 인증을 요구하는 전자 상거래 등에 RSA의 광범위한 활용을 가능하게 하였다.

API란??

API는 정의 및 프로토콜 집합을 사용하여 두 소프트웨어 구성 요소가 서로 통신할 수 있게 하는 메커니즘이다. 예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 "대화"하고 휴대폰에 매일 최신 날씨정보를 표시합니다.

API의 의미

API는 Application Programming Interface(애플리케이션 프로그램 인터페이스)의 줄임말입니다. API의 맥락에서 애플리케이션이라는 단어는 고유한 기능을 가진 모든 소프트웨어를 나타냅니다. 인터페이스는 두 애플리케이션 간의 서비스 계약이라고 할 수 있습니다. 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의합니다. API 문서에는 개발자가 이런한 요청과 응답을 구성하는 방법에 대한 정보가 들어 있습니다.

API의 작동

API 아키텍처는 일반적으로 클라이언트와 서버 측면에서 설명됩니다. 요청을 보내는 애플리케이션을 클라이언트라고 하고 응답을 보내는 애플리케이션을 서버라고 합니다. 따라서 날씨 예에서 기상청의 날씨 데이터베이스는 서버이고 모바일 앱은 클라이언트입니다.

API가 생성된 시기와 이유에 따라 API는 네 가지 방식으로 작동할 수 있습니다.

  • SOAP API : 단순 객체 접근 프로토콜을 사용, XML을 사용하여 메세지를 교환, 현재에는 잘 사용하지 않으며, 유연성이 떨어짐

  • RPC API : 원격 프로시저 호출이라고 한다. 클라이언트가 서버에서 함수나 프로시저를 완료하면 서버가 출력을 클라이언트로 다시 전송한다.

  • Websocket API : JSON 객체를 사용하여 데이터를 전달하는 또 다른 최신 웹 API 개발입니다. Websocket API는 클라이언트 앱과 서버 간의 양방향 통신을 지원합니다. 서버가 연결된 클라이언트에 콜백 메세지를 전송할 수 있어 REST API보다 효율적이라고 한다.

  • REST API : 오늘날 웹에서 볼 수 있는 가장 많이 사용되고 유연한 API입니다. 클라이언트가 서버에 요청을 데이터로 전송합니다. 서버가 이 클라이언트 입력을 사용하여 내부 함수를 시작하고 출력 데이터를 다시 클라이언트에 반환합니다.

항해를 본격적으로 시작하는 1일

웹 페이지 정하기

팀원들과 어떤 웹 페이지를 만들어 볼까?? 생각을 하던 중 공통 관심사가 리그 오브 레전드라는 게임이라서 롤 게임을 하면서 듀오를 하고싶은 사람들을 위한 웹 페이지를 만들자라고 의견이 일치하게 되었다.

항해99가 요구한 웹 페이지 기능 중 필수 포함 사항

inja2 템플릿 엔진을 이용한 서버사이드 렌더링 (어떤 장점이 있을까?)

JWT 인증 방식으로 로그인 구현하기 (쿠키/세션 방식에 비해 어떤 장점이 있을까?)

**최종 제출(5/12 18:00 까지)

기획 멘토링

팀원분들과 같이 웹 페이지를 기획한 것을 권오빈 기술 매니저님께 멘토링을 받는 시간이였다.

내가 맡은 기능들

메인 페이지 구성
게시판 목록 구성
게시판 상세 페이지 이동 구현

미니 프로젝트 2일차

2일차부터 위기가....
GET방식과 POST방식의 차이점과 서버와 클라가 어떻게 동작을 하는지 이해가 안됐다...

2일차 목표
1. DB연결
2. DB에서 데이터 가져온 것 각자 화면에 잘 뿌리기
3. API명세서 작성

클라이언트와 서버와 DB의 통신그림
팀원분들과 같이 서버와 클라이언트가 어떻게 주고 받는지 몰라서 게더에 있는 보드판으로 막 그림으로 그리면서 하였다. 좀 재미있었다. 그림으로 하니깐 이해가 조금은 됐다.

미니 프로젝트 3일차

팀원분들중 한분이 인스턴스 issue가 생겼다. 단순 카드 문제였던거 같다.

3일차 목표

  • UI 통일성
  • 부족한 기능 보완
  • 최종 제출 사항 갖추기
  • 서로가 구현한 기능과 코드 이해하고 서로 설명해주기
  • JWT와 jinja2를 왜 사용했는지 이유 알기
  • JWT를 쓴 이유
    JWT를 이용해서 로그인과 로그아웃을 구현해야하는데 JWT는 토큰을 의미하는 것이고 그 토큰을 이용해 로그인과 로그아웃을 구현한다.

  • jinja2를 쓴 이유
    jinja2를 쓰면 Flask를 구동하기 위해서는 Jinja2를 반드시 설치해야 한다. Jinja2가 필요한 이유는 Flask의 풍부한 기능 확장을 위해서이다. 확장기능은 Jinja2와 의존관계에 있을 수도 있다. 라고한다. Flask서버를 좀 더 다양하게 쓸 수 있어서 쓰는 것이라고 생각한다. 그리고 jinja2를 쓰면 데이터를 바꿔가면서 렌더링을 해주면서 수 백의 페이지들을 나타낼수가 있다고 한다.

미니프로젝트 4일차

EC2에 배포시 로그인 안되는 현상 그리고 해결
로컬 상태에서는 로그인이 잘됐지만 EC2에 배포시 갑자기 로그인이 안되는 현상이 발견됐다. 파일을 하나하나 합치면서 잘못합쳐서 그런건가 했지만 합친 파일이 로그인이 잘됐고, 우리는 이 문제를 해결하기위해 error message를 하나하나 찾아가면서 어떤 문제인지 고민을 하였다. Typeerror: Object of type bytes is not JSON serializable라는 error message를 발견했고 결국에는 이 error message가 왜 떴는지 모르겠지만 token = jwt.encode(payload, SECRET_KEY, algorithm='HS256').decode('utf-8') [.decode('utf-8)]을 붙여주면 해결이된다는 것을 알게 되었다.
이 문제를 나중에 프로젝트 회고를 하면서 기술 매니저님께 물어보았고 Typeerror: Object of type bytes is not JSON serializable라는 에러는 JSON형식에 맞지않는 데이터들이 왔고 그래서 해석 할 수가 없다. 라는 메세지이다. JSON으로 변환하기 위해서는 일반적으로 string으로 직렬화하여 전달해야 하지만, 직렬화가 정의되지 않은 byte array 로 전달하여 Type error 에러가 발생하는 것입니다. decode('utf8') 함수를 사용해서 byte array를 string으로 변환하여 문제를 해결 할 수 있었다.

미니 프로젝트 마지막날
마지막날에는 사실 코드로 구현한 부분은 별로 없다. 왜냐하면 3일차에 중요한 기능들을 팀원들 모두 거의 다 구현을 해놓은 상태였다. github를 이용해 서로의 코드를 합칠려고 했지만....로컬저장소와 원격저장소의 이해와 커밋, 풀, 푸쉬의 개념, 브런치의 개념등등 또한 오래만에 git을 이용해 협업하는거라 거의 백지 상태였다. 깃 플로우를 하지 못하였고, 이 부분이 개인적으로 너무 아쉬움이 남는다. 결국 파일로 받아서 코드를 짜집기하여 완성을 하였다. 4일동안 함께 해준 팀원들에게 고맙고 4일이 정말 하루처럼 느껴질 정도로 집중 하였다. 그리고 첫 번째 협업 프로젝트에 정말 좋은 사람들을 만나서 진짜 정말 즐겁게 했다. 그래서 나중에 우리가 구현 못한 기능과 깃 플로우를 같이 해보자고 제안했다.... 정말 다시 만났으면 하는 팀원분들이였다.

알고리즘 1일차

프로그래머스 사이트를 이용해 알고리즘을 배우는 주차이다. 쉽게 쉽게 풀리는 문제도 있었고 3시간 ~ 4시간을 고민해서 겨우 푼 문제, 또 아예 어떻게 해결해야 할 지 모르는 문제들도 있었다. 더 더 열심히 해야겠다는 생각이 들었다.

알고리즘 2일차

생각보다 알고리즘 문제들을 푸는 속도가 빨라졌다. 알고리즘 주차에는 걷기반과 달리기반이 있는데 달리기반은 걷기반보다 할당받은 문제들이 더 많은 것 같다. 하지만 걷기와 달리기는 중요하지 않다고 생각한다. 꾸준히 하자. 알고리즘도 공부도 마찬가지이다.

profile
I want to be programmer

0개의 댓글