정글은 목요일부터 한주를 시작하기 때문에, 입소날이었던 월요일부터 수요일까지는 0주차, 목요일부터 1주차 시작이다.
0주차에는 "정글 입성"으로 미니 프로젝트를 진행하였다.
참고사이트를 둘러보던 중, 심리테스트가 있어 정글 8기만을 위한 심리테스트를 만들어서 공유할 수 있으면 좋겠다는 생각으로 "정글러를 위한 나와 닮은 개발자 찾기" 주제가 선정되었다.
프로젝트의 골격인 '와이어 프레임'을 작성하고 주제 발표를 통해 피드백을 받았다.
Q. jwt를 공부하려고 하는데 어떤 순서로 공부해야할까?
1-1. 기본 개념 이해
jwt란?
JWT(Json Web Token)은 Json 객체에 인증에 필요한 정보들을 담은 후 비밀키로 서명한 토큰으로, 인터넷 표준 인증 방식이다.
공식적으로 인증(Authentication) & 권한허가(Authorization) 방식으로 사용된다.
구성 요소
JWT는 Header, Payload, Signature 3개로 구성되어 있다.
1-2. JWT의 구조 이해
✔️ 헤더(Header):
헤더는 JSON 형식으로 되어 있으며, 일반적으로 두 가지 정보를 포함한다.
헤더는 Base64로 인코딩되어 토큰의 첫 번째 세그먼트로 나타난다.
✔️ 페이로드(Payload):
페이로드는 토큰에 담겨 있는 클레임(claim) 정보를 포함한다.
✔️서명(Signature):
서명은 헤더와 페이로드를 기반으로 생성된다.
서명은 비밀 키를 사용하여 생성되며, 이는 토큰의 무결성을 보장한다.
서명은 토큰의 마지막 세그먼트로 나타나며, 페이로드와 헤더의 정보가 변경되었는지 여부를 검증하는 데 사용된다.
1-3. 암호화 및 서명
<대칭 암호화와 비대칭 암호화의 차이>
대칭 암호화(Symmetric Encryption): 대칭 암호화는 동일한 키를 사용하여 데이터를 암호화하고 복호화하는 방식. 토큰을 생성하고 검증하는 데 동일한 키가 사용된다.
장점은 암호화 및 복호화 속도가 빠르며 구현이 간단하다.
단점은 키 관리가 어렵다. 키를 안전하게 관리하지 않을 경우 보안이 손상될 수 있다.
비대칭 암호화(Asymmetric Encryption): 비대칭 암호화는 서로 다른 공개 키와 개인 키를 사용하여 데이터를 암호화하고 복호화하는 방식. 토큰을 생성하는 데 개인 키를 사용하고, 검증하는 데는 해당 토큰의 공개 키가 사용된다.
장점은 키 관리가 간단하고 안전하다. 개인 키는 안전한 서버에만 저장되고 공개 키는 공유될 수 있다.
단점은 대칭 암호화에 비해 암호화 및 복호화 속도가 느리고, 구현이 복잡하다.
1-4. JWT 사용 시나리오
로그인 시에 세션과 JWT를 모두 사용할 수 있지만, JWT를 선택해야 할 때?
세션 기반 인증은 서버에 상태를 저장해야하기에 확장성이 떨어진다. 하지만 jwt는 상태를 저장하지 않고 토큰 자체에 정보를 포함하므로 서버의 부담을 줄일 수 있다.
서버의 부담을 줄이고 싶을 때, 여러 서버를 사용할때, 클라이언트와 서버 간의 통신이 자주 발생하는 경우에 jwt를 선택한다.
1-5. 보안 고려 사항
아직 완벽하게 이해하지 못해 내용을 가져온 링크를 추가한다!
https://iam.furo.one/post/jwt-security
1-6. 실전 예제
2-1. SSR(Server Side Rendering)
- CSR과 달리 서버에서 사용자의 요청에 따른 페이지를 렌더링 하여 사용자에게 반환하는 방식
4. 기능 구현
4-1. 회원가입 및 로그인
4-2. 테스트 진행
- 클라이언트에서 서버로 사용자의 답변을 리스트로 전달 한 후, 각 질문에 따른 개발자에 점수를 더하고 빼는 로직을 구현하여 최종 점수가 가장 높은 개발자를 결과 페이지로 보낸다.
4-3. 결과 페이지 공유
- 카카오 개발자 api를 사용하여 개발하였다. (리소스가 많아서 문제 없었음)