드디어 첫 미니프로젝트가 끝났다.
팀으로 진행되는 첫 end to end 프로젝트를 처음진행해 보았다.
기능들을 그 기술의 장단점을 고려하지 않고 기능을 구현하기 급급하기만 했었다.
마지막 설문에 jwt 방식이 무엇인지 쿠키/세션에 비해 jwt방식의 장점이 무엇이지? 서버사이드렌더링의 무엇이고 장점이 무엇인지 물어보는 질문에 뒤통수를 한대 맞은거 같았다.
프로젝트를 시작하며 사용할 기능들을 생각하고 그 기능에 사용되는 기술들을 찾아보고 장단점을 비교해가며 프로젝트를 진행해야 한다는 것을 느낀 미니 프로젝트였다.
Notion : https://www.notion.so/a9b85fdbf71047c7a57727fa2823f86a?v=e63d135f79b247999e5b40a3eb9fbdc0
프로젝트의 기능 구현의 경우는 깃헙으로 대체합니다.
회원 인증:
사용자가 로그인을 하면, 서버는 사용자의 정보를 기반으로한 토큰을 발급한다.
그 후, 사용자가 서버에 요청을 할 때 마다 JWT를 포함하여 전달 서버는 클라이언트에서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 한다. 사용자가 요청한 작업에 권한이 있는지 확인하여 작업을 처리한다.
서버에서는 사용자에 대한 세션을 유지 할 필요가 없습니다. 즉 사용자가 로그인되어있는지 안되어있는지 신경 쓸 필요가 없고, 사용자가 요청을 했을때 토큰만 확인하면 되므로 세션 관리가 필요 없어서 서버 자원과 비용을 절감할 수 있습니다.
참고 사이트 : http://www.opennaru.com/opennaru-blog/jwt-json-web-token/
이번 프로젝트를 진행한 형식은 flask framework를 사용한 REST(RESTful) API방식으로 진행되었다.
- 클라이언트-서버 아키텍처: 클라이언트, 서버, 리소스로 구성된 REST 아키텍처이며 HTTP를 통해 요청을 처리합니다.
스테이트리스(Statelessness): 요청 후 다음 요청이 있을 때까지 클라이언트 콘텐츠가 서버에 저장되지 않으며 그 대신 세션 상태에 대한 정보가 클라이언트에 저장됩니다.
- 캐시 가능성: 캐싱으로 일부 클라이언트-서버 간 상호 작용을 대신할 수 있습니다.
- 계층화된 시스템: 추가 계층으로 클라이언트-서버 간의 상호 작용을 조정할 수 있으며 이러한 계층은 로드 밸런싱, 공유 캐시 또는 보안과 같은 추가 기능을 제공할 수 있습니다.
- 코드 온디맨드(옵션): 서버에서 실행 가능한 코드를 전송하여 클라이언트의 기능을 확대할 수 있습니다.
- 통합된 인터페이스: 이 제약 조건은 RESTful API 설계의 핵심이며 다음과 같은 4가지 측면을 포함합니다.
- 요청에서 리소스 식별: 리소스가 요청에서 식별되며 클라이언트로 반환되는 표현으로부터 분리됩니다.
- 표현을 통한 리소스 조작: 클라이언트가 리소스를 나타내는 파일을 수신합니다. 이 표현에는 조작 또는 삭제를 허용할 수 있도록 충분한 양의 정보가 포함되어야 합니다.
- 자기 기술적(Self-descriptive) 메시지: 클라이언트에 반환되는 각 메시지에는 클라이언트가 해당 정보를 어떻게 처리해야 할지 설명하는 정보가 충분히 포함되어야 합니다.
- 애플리케이션 상태 엔진으로서의 하이퍼미디어: REST 클라이언트는 리소스에 액세스한 후 하이퍼링크를 통해 현재 사용 가능한 다른 모든 작업을 찾을 수 있어야 합니다.
참고 사이트 : https://aws.amazon.com/ko/what-is/api/, https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces