이노베이션 캠프 1주차 회고(1 Week I Learned )

yesolog·2022년 8월 9일
0

TIL,WIL

목록 보기
1/6

1주차 회고 (미니프로젝트 만들기)

- 배운점

가장 기억에 남는 것은 get메서드,post메서드입니다. 미니 프로젝트를 진행하며 삭제하는 기능을 설명하면서 기술매니저님께 Rest API를 알아보라는 조언을 듣게되었고 그것을 검색하면서 HTTP methods인 get, post, put, delete에 대하여 조금이나마 알게 되었습니다. 특히 이번 주차의 메인 키워드인 API와 JWT는 조금 더 적극적으로 유튜브 영상을 찾아가며 공부했습니다.

<API란>

API는 프로그램들이 서로 소통하는 방법(데이터를 주고 받기 위한 방법)입니다. 이때 주의점은 인간이 아닌 코드들끼리 서로 소통하는 것입니다.

저는 해당 개념은 유튜브 영상을 참고해서 배웠습니다. 해당 영상에서 API는 일종의 메뉴판 같은 역할을 합니다. 예를 들어 우리가 식당에 가서 음식을 먹고싶을때 메뉴판을 보고 거기서 어떤 데이터가 있는지, 서비스가 있는지를 확인하고 종업원에게 요청하죠. 여기서 서비스나 데이터는 우리가 요청하는 데이터고 그 주문을 받는 종업원이 서버이며 그 주문을 하는 우리가 클라이언트라고 생각하면 해당 내용이 조금 이해하기 수월해집니다.

웹툰서비스를 제공하기 위해 서버를 제작했을때 웹툰리스트가 있어야 유저는 특정 웹툰을 선택해서 볼 수 가 있죠. 이때 웹툰리스트가 바로 API입니다. 그리고 서버에서는 API를 작성하게 되는데 예를 들어 "get요청하면 이 코드를 실행해주세요~"라고 만든 이것 자체가 API가 됩니다. 우리가 사용하는 웹브라우저의 주소록 이 자체가 get요청을 보내는 대표적인 API입니다.

API가 가져가야할 내용은 크게 네가지입니다. ①요청방식(methods), ②무슨자료인지(endpoint), ③자료요청에 필요한 추가정보(ex. id, 유저이름 등의 파라미터) + Rest api 참고하면 더 좋음.

<JWT란>

JWT를 알기 위해서는 다양한 개념들을 알아야합니다. 세션과 쿠키, 토큰 등 여러 부가적인 정보를 학습해야했습니다. 먼저 클라이언트는 웹브라우저에서 서버에 요청을하게되면 서버로부터 응답을 받게 됩니다. 그리고 이때 서버로부터 받은 응답에는 쿠키가 포함되어있을수있죠. HTTP웹사이트를 이요할 때 쓰는 프로토콜인 stateless로 인해 이 요청들간에는 연결이 없습니다. 즉 메모리를 기억하고있지 않게되고 이때문에 요청이 끝나면 서버는 내가 누군지 까먹습니다. 그리고 요청할 때마다 우리가 누군지 서버에게 알려줘야합니다. 이것을 해결하는 첫번째 방법이 바로 세션입니다. 먼저 브라우저에서 사용자가 서버에게 id,pw를 주고 이것을 서버가 확인하게 되면 서버는 세션D.B에서 id를 찾게됩니다. 그리고 세션id를 받아서 그것을 쿠키안에 넣어서 브라우저에게 전달하게됩니다.

이후에 클라이언트가 페이지를 이동하나면 브라우저는 세션 id를 갖고 잇는 쿠키를 서버에게 보낼것이고 서버는 세션id와 함께 들어오는 쿠키를 확인하게 됩니다. 하지만 여전히 서버는 우리가 누군지 모릅니다. 서버는 해당 세션id를 통해 세션DB를 확인할것이고 거기서 해당id와 일치하는 유저를 찾아 해당 유저라는 것을 알게됩니다. 그리고 이때 무엇인가 응답을 주게됩니다.

이 과정이 끝나고 다른 페이지로 이동할 경우 위의 과정은 그대로 반복합니다.

하지만 쿠키는 웹브라우저에서만 사용이 가능하며 ios나 android에도 적용가능한 토큰이라는 것이 있습니다. 토큰은 매우 이상한 string입니다. 이것은 서버로부터 사용자가 토큰을 받아서 무언가 요청할때마다 토큰을 주고 서버는 세선DB에서 해당 토큰과 일치하는 유저를 찾게됩니다.

위의 과정에서 유저의 resource가 늘어날수록 D.B는 더욱 더 커지고 그에 따른 비용도 늘어나게 됩니다. 이것을 해결하는 것이 바로 JWT입니다.

JWT는 토큰형식으로 세션의 D.B가 필요하지 않습니다. 따라서 유저인증을 위한 많은 일도 필요하지 않습니다. 로그인시 id와 pw가 필요한것은 동일하지만 D.B를 건드리는 대신 id와 pw가 맞으면 서버는 D.B에 무언가를 생성하지 않고 유저의 id를 가져가서 사인 알고리즘을 이용하여 사인합니다. 그리고 그 사인된 정보를 string의 형태로 유저에게 보냅니다.

요청시에 user는 jwt토큰을 보내게되고 서버는 해당 사인의 유효성을 검사한 뒤 유효하다면 유저로 인정하게 됩니다.

- 느낀점

1주차 회고를 하자면 정말 힘들었습니다... 사실 예상하긴 했지만 이렇게 갑자기 미니프로젝트에 던져질 줄 몰랐기 때문에... 진짜 너무 너무 힘들고 괴로운 일주일이고 둘째날에는 정말 계속 울었던것같아요 ㅋㅋㅋ...

저를 제일 괴롭게 한 것은 바로 저의 무능력함이었습니다ㅎㅎ 비전공자들 힘든게 당연하다지만 그 당연한 상황에서 당연하고 싶지 않은게 제 욕심이고 성격이거든요... 정말 뭐라도 하고 싶은데 제가 예습하고 들어온 HTML, CSS, JavaScript만으로는 해당 프로젝트에 기여를 1도 할 수 없었습니다.

진짜 포기할까 말까 하는 생각도 들었는데 다행히 팀원분들이 제 상황을 고려해주셔서 여차저차 끝마칠 수 있었습니다. 또, 한편으로는 js리액트를 주특기로 선택했는데 파이썬때문에 하차하기는 너무 억울했어요. 적어도 리액트는 듣고 포기를 하던가 말던가 해야지 이대로 포기하기는 너무 싫어서 버텼습니다.

1주차 끝나고 5일부터는 2주차 팀원들은 만나게 되었고 알고리즘을 시작하게 되었습니다. 2주차에 대한 내용은 2주차 WIL에서 작성할 예정이라 더 많은 말은 못하지만 정말 버티길 잘했다는 생각이 들었습니다. 예습이 조금 효과를 봤거든요. 자세한 얘기는 다음 WIL에서 진행하겠습니다.

참고동영상(시청 추천)

<API파트>
https://youtu.be/ckSdPNKM2pY
https://youtu.be/iyFHfzCRHA8
<JWT파트>
https://youtu.be/tosLBcAX1vk

0개의 댓글