WIL - 220509 ~ 220515

Jason Moon·2022년 5월 13일
0

TIL

목록 보기
5/47

📖 일주일을 돌아보자

5월 9일 ~ 5월 12일 : 미니프로젝트
5월 13일 ~ 5월 14일 : 프로그래밍 기초(알고리즘)
5월 15일 : 휴식 및 개인 공부

항해99 7기가 이번주 월요일부터 시작했다.
시작하는 날 바로 팀을 나누고 간단한 미니 프로젝트 만들기에 들어갔다.
대학 이후 처음으로 팀 프로젝트를 하는데 낯설고 처음에는 의사소통하는게 어색했다.
코딩에 익숙하지 않았고 서버 쪽에 대해서는 거의 무지했기 때문에 프로젝트 내내 힘든 시간을 보냈다.
그래도 짧은 프로젝트였지만 팀 단위로 프로젝트 하며 소통하는 법과 모르면 찾아서 배우고 해결하는 법을 배운 시간이었다.

금요일 부터는 알고리즘 풀이를 시작했는데 한 달정도 미리 자바스크립트 문법을 공부한게 많이 도움이 되었다.
아직 for문, if문으로 기본적인 문제를 풀고 있는데 다른 분들의 풀이를 보면서 기존에 익숙하지 않았던 map, reduce, for Each등 배열 함수에 익숙해지는 시간을 가졌다.

일주일간 오로지 코딩에만 몰입하는 시간을 가졌다. 중간 중간 어깨가 너무 아파 힘들었지만 공부하고 프로젝트를 진행하는데는 전혀 힘들지 않았고 재밌었다. 기본 개념을 좀 더 공부해서 팀에 도움이 되는 사람이 되고 싶다는 생각을 많이 했다.
항해 기간 동안 너무 빨리 가려하지 말고 기본 개념을 충분히 익히면서 다져가고 싶다.
다음주도 기대가 된다.

📝 느낀점

프로젝트

  • 서버에 데이터를 요청하고 받아와서 메인 화면에 리스팅하는 팀원들에 비해 비교적 쉬운 기능을 구현했다.
  • 서버와 통신하는 부분에 대한 지식이 거의 없었기 때문에 강의 및 구글링 코드를 따라 치면서도 무슨 의미인지 제대로 이해하지 못했다. 기본 개념들을 확실히 익히고 시작했더라면 팀원들과 의사소통하는데도 더 도움이 됐을거 같다.
  • 내 실력이 안되다 보니 팀원들의 문제에 적극적으로 해결책을 같이 찾지 못해 아쉬운 점이 많았다. 그래도 좋은 팀원들을 만나 무사히 프로젝트를 마무리 할 수 있었다.
  • 메인 페이지에 검색기능을 추가하려 했다. 검색하려는 대상을 찾아서 화면에 보이기까지는 성공했는데 검색 후 결과 페이지에서 다른 검색어를 치면 다른 대상이 나와야하는데 거기까지는 구현하지 못했다. 검색 이벤트가 발생했을 때 검색 대상을 제외하고 나머지 대상들은 CSS로 display: none처리를 해준게 문제였다. 이 부분은 추가로 공부하고 다시 도전해봐야겠다.

프로그래밍, 알고리즘

  • 처음에는 알고리즘 문제를 빨리 많이 풀어야지 생각했다. 그런데 내가 푼 문제를 팀원들에게 설명하는데 제대로 이해하지 않고 문제 푸는 것에만 집중해서인지 쉽게 설명을 못했다. 많이 푸는게 중요한게 아니라 한 문제를 풀더라도 정확하게 이해하고 넘어가자 생각했다. 다른 분들이 빨리 가는게 한 편으로는 초조하지만 어차피 나도 잘 하는 날이 올꺼라 생각하고 천천히 소화하면서 꾸준히 달려가야겠다는 생각을 많이 했다.

🗄 배운 것

JWT(JSON Web Token)

JWT는 뭘까?

JSON을 이용한 Web Token, 인터넷 표준 인증 방식이다. 인증에 필요한 정보들을 Token에 담아 암호화시켜 사용하는 토큰
JWT는 자가 수용적(self-contained)이다. 이 말은 필요한 모든 정보를 자체적으로 지니고 있다는 말로 JWT 시스템에서 발급된 토큰은 토큰에 대한 기본정보, 전달 할 정보(예, 로그인 시스템의 유저정보) 그리고 토큰이 검증됐다는걸 증명하는 signagure을 포함하고 있다.

기본적인 인증을 진행하는 구조는 쿠키를 이용할 떄와 크게 다르지 않다. 다만 JWT는 서명된 토큰이라는 점이다. 공개/개인 키를 쌍으로 사용하여 토큰에 서명할 경우 서명된 토큰은 개인 키를 보유한 서버가 이 서명된 토큰이 정상적인 토큰인지 인증할 수 있다.

어떤 상황에서 쓸까?

회원 인증에서 가장 많이 쓰인다. 유저가 로그인 하면 서버는 유저의 정보에 기반한 토큰을 발급하여 유저에게 전달, 그 후 유저가 서버에게 요청을 할 때 마다 JWT를 포함해서 전달한다. 서버가 클라이언트에게서 요청을 받을때 마다, 해당 토큰이 유효하고 인증됐는지 검증을 하고, 유저가 요청한 작업에 권한이 있는지 확인하여 작업을 처리한다. 그렇기 때문에 서버측에서 유저의 세션을 유지 할 필요가 없다.

JWT는 .을 구분자로 3가지 문자열로 구성된다.

헤더(header) . 내용(payload) . 서명(signature)
1. Header
header에는 보통 토큰의 타입이나, 서명 생성에 어떤 알고리즘이 사용되었는지 저장
2. Payload
토큰에 담을 정보가 들어있다. 정보의 한 단위를 claim이라 말하고 key/value 한 쌍으로 이루어져있다. 클레임의 종류는 registered claim, public claim, private claim 세 가지가 있다
3. Signature
Header 와 Payload를 Base64 인코딩한 값으로 합친 후, 비밀키를 통해 해쉬하여 생성한 값

JWT의 장점

  • 이미 토큰 자체가 인증된 정보이므로 세션 저장소와 같은 별도의 인증 저장소가 '필수적'으로 필요하지 않다.
  • 세션과 다르게 클라이언트의 상태를 서버가 저장해 두지 않아도 된다.
  • signature을 고통키 개인키 암화화를 통해 막아두었기 때문에 데이터에 대한 보안이 늘어난다.
  • 다른 서비스에 이용할 수 있는 공통적인 스펙으로써 사용할 수 있다.

JWT의 단점

  • 쿠키, 세션 때와는 다르게 base64 인코딩을 통한 정보를 전달하므로 전달량이 많다. 따라서 네트워크 전달 시 많은 데이터양으로 부하가 생길 수 있다.
  • Payload에는 암호화가 되어있지 않기 때문에 민감 정보를 저장할 수 없다.
  • 토큰이 탈취당하면 만료될 때까지 대처가 불가능하다.

📄참고

API(Application Programing Interface)

API란 뭘까?

API는 Application Programing Interface라는 용어로써, 어떠한 응용프로그램에서 데이터를 주고 받기 위한 방법을 의미, 어떤 특정 사이트에서 특정 데이터를 공유할 경우 어떠한 방식으로 정보를 요청해야 하는지, 그리고 어떠한 데이터를 제공 받을 수 있을지에 대한 규격들을 API라고 한다.
API는 프로그램들이 서로 상호작용하는 것을 도와주는 매개체로 볼 수 있다.
API를 레스토랑의 점원에 예로 들 수 있는데 손님(프로그램)이 주문할 수 있게 메뉴(명령 목록)를 정리하고, 주문(명령)을 받으면 요리사(응용프로그램)와 상호작용하여 요청된 메뉴(명령에 대한 값)를 전달한다.

API의 역할

  • 서버와 데이터베이스에 대한 출입구 역할
  • 애플리케이션과 기기가 원활하게 통신할 수 있도록 함
  • 모든 접속을 표준화 함

📄참고

profile
어려워 보여도 시간을 들여서 해보면 누구나 할 수 있는 일이다

0개의 댓글