항해 1 주차에서는 미니 프로젝트를 진행 하였다.
미니 프로젝트를 함께 할 팀원들은 총 4명 이였다. 프로젝트 개발 환경은 아래 표와 같다.
| 개발 언어 | python |
| DB | mongoDB |
| 프레임워크 | Flask |
| 화면, 디자인 | HTML, CSS, Bootstrap |
| 웹서버 | AWS (EC2) |
개발 경험이 있었지만 위 표와 같은 개발환경은 화면, 디자인 쪽 빼고는 처음 써보는 기술이였다. 그래서 처음 써보는 언어로 미니 프로젝트를 무사히 마칠 수 있을지 걱정이 많이 되었었다. 하지만 개발 경험이 나 밖에 없었던 우리팀에게 불안감을 줄 순 없었다. 그래서 주도적으로 프로젝트 계획을 진행했고 팀원들이 부담스럽지 않도록 최대한 양보하자는 마인드를 가졌었다.
프로젝트를 진행하면서 가장 힘들었던 부분은 개발에 어려움을 느끼고 있는 팀원에게 어떻게 도와주면 좋을지 고민했던 부분이다. 마냥 내가 그 팀원의 기능을 내가 해버린다면 팀원의 마음도 불편하고 공부도 나만 하는 꼴이 되는 것 같았고, 그러자니 팀원에게 조언과 방향성만 제시하기에는 개발을 이해하고 코딩하기에 프로젝트 마감시간이 부족했었다. 그래서 나는 고민 끝내 결론을 내었고, 그 결정은 좋은 결정인지는 모르겠지만 팀원에게 최대한의 마감시간을 부여한 뒤 그래도 갈피를 잡지 못한다면 내가 그 부분을 코딩하기로 했다. 그 후 팀원에게 내가 코딩한 부분을 알려주며 다시 한 번 코딩해보는 방식으로 팀원과 팀 둘다 성공적인 프로젝트가 될 수 있도록 노력했었다.
이번 프로젝트에서는 기초적인 부분을 다시 한 번 공부 할 수 있었고, 팀원과의 조화를 잘 이룰 수 있는 경험이 되었던 것 같다.
https://github.com/yalla12/miniProjectmumu.git
이번 프로젝트에서 공부한 기술
- JWT
- JWT란
Json Web Token 약자로 모바일이나 웹의 사용자 인증을 위해 사용하는 암호화된 토큰을 의미합니다. JWT 정보를 request에 담아 사용자응 정보 열람, 수정 등 개인적인 작업 등을 수행할 수 있게한다.
-JWT에 담겨진 3가지 정보
| HEADER | 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있습니다. |
| PAYLOAD | 토큰에 담을 정보가 들어있습니다. 여기에 담은 정보의 한’조각’을 클레임(claim)이라고 부르고, 이는 name/value 의 한쌍으로 이뤄져있습니다. 클레임의 종류는 등록된(registered)클레임, 공개(public)클레임, 비공개(private)클레임 이 존재합니다. |
| SIGNATURE | 서명은 [헤더 base64 + 페이로드 base64 + SECRET_KEY ] 를 사용하여 JWT 백엔드에서 발행됩니다 각 요청시 서명이 확인됩니다. 헤더 또는 페이로드의 정보가 클라이언트에 의해 변경된 경우 서명이 무효화됩니다. |
- JWT 장점
- 무상태(stateless), 확장성이 있다. 기존 서버에 세션을 저장하는 방식에서 서버 여러대를 사용하여 요청을 분산하였다면 어떤 유저가 로그인했을 때 그 유저는 처음 로그인한 서버에만 요청을 내보내도록 설정해야합니다. 하지만 토큰을 사용하면 토큰 값만 알고 있다면 어떤 서버로 요청이 들어가던 상관이 없습니다. 즉, 세션스토리지가 필요없다!
- 보안성 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써 발생하는 취약점이 사라집니다.
- 여러 플랫폼 및 도메인 어플리케이션 규모가 커지면 여러 디바이스를 호환 시키고 더 많은 종류의 서비스를 제공합니다. 토큰을 사용한다면 그 어떤 디바이스에서도 그 어떤 도메인에서도 토큰만 유효하다면 요청이 정상적으로 처리 됩니다.
- JWT장점
- 길이 claim에 넣는 데이터가 많아질 수록 JWT토큰이 길어집니다. API호출 시 매 호출마다 토큰 데이터를 서버에 전달해야 하는데 길이가 길다는 것은 그만큼 네트워크 대역폭 낭비가 심할 수 있습니다.
- 보안 JWT는 기본적으로 Payload에 대한 정보를 암호화 하지 않습니다. 단순히 BASE64로 인코딩만 하기 때문에 중간에 패킷을 가로채거나 기타 방법으로 토큰을 취득했으면 디코딩을 통해 데이터를 볼 수 있습니다. 그래서 JWE(JSON Web Encryption)를 통해 암호화 하거나 중요데이터를 Payload에 넣지 말아야 합니다.
- API
- API란
- JWT
- API(Application Programming Interface, 응용 프로그램 프로그래밍 인터페이스)는 응용 프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.
=> 위키디피아
'Weekend I Learend' 카테고리의 다른 글
| 항해 5 주차 후기 (0) | 2022.08.21 |
|---|---|
| 항해 4 주차 후기 (0) | 2022.08.14 |
| 항해 3 주차 후기 (0) | 2022.07.31 |
| 항해 2 주차 후기 (0) | 2022.07.24 |