API ( 애플리케이션 프로그래밍 인터페이스(Application Programming Interface) )
Interface : 자바에서는 다중 상속이 가능한 하나의 기능 ( 우연히 찾은 유투버는 자격증이라고 했다. 요리 자격증, 변호사 자격증 등 어떤 기능을 구체적으로 정의한 것 )
API를 레스토랑의 점원(메뉴판을 든, 다양한 인터페이스를 가지고 있는 설명서)에 비유를 많이한다.
포인트는 손님은( 내 애플리케이션 = 클라이언트)는 주방에서 도대체 어떻게 처리하는지까지는 알 필요가 없다는 것이다.
조금 더 자세하게 설명하자면 데이터를 주고 받기 위한 방법과 그 규격을 뜻한다고도 할 수 있다.
열쇠라는 비유도 있다. 결국 API는 데이터베이스에 접근할 수 있는 서버와, 데이터를 가져다 쓰기 위해 요청하는 클라이언트 사이 문이 있고, 함부로 접근하지 못하게 하려는 목적(데이터를 불특정 클라이언트에게 무분별하게 뿌릴 수 없으니) API라는 열쇠를 가진 자에게만 요청한 데이터를 가져다 주는 것으로 이해했다.
쿠키&세션 VS JWT 토큰
로그인은 접속한 웹사이트에서 인증을 받은 것이다.
웹사이트는 로그인 후에 제공할 서비스와 그렇지 않은 서비스로 구분 되어 있다.
웹사이트 이용자 중에는 로그인을 한 이용자와 그렇지 않고 방문만 한 이용자가 있다. 서버는 이걸 어떻게 구분해야할까 ?
일반인 관점에서는 하나의 웹사이트에 여러 기능을 제공하는 페이지가 있다는 것을 구분하지 못한다. 필요한 기능(검색, 블로그, 카페, 지도 등)을 할 때마다 로그인을 해서 인증을 하기에는 너무 번거롭다 ( 수많은 사람들의 동시다발적으로 요청을 했는데 그 때마다 데이터베이스에 있는 정보와 로그인 시도 때 입력한 값을 매치시키는 작업 )
세션
세션은 전통적인 방법으로, 영화 티켓으로 비유한다. 로그인이 성공하면 반쪽을 뚝 잘라서 하나는 사용자의 브라우저에 보내고, 반 쪽은 하드디스크 혹은 데이터베이스에 저장한다.
로그인 이후 서비스를 이용할 때마다, 브라우저는 호주머니에 넣어둔 티켓을 매번 요청 내용과 함께 보낸다.
서버는 나머지 반쪽이 저장된걸 꺼내서 브라우저가 보낸 티켓과 이어붙여보고 맞는지 확인한다. ( 로그인을 한 이용자 식별 )
문제 1) 서버는 어쨋든 반쪽짜리 티켓을 저장할 공간이 필요하다 ( = 이용자가 많을 수록 저장공간 자원을 많이 요구 받게 된다 )
문제 2) 서버가 먹통이된다거나 하는 경우가 있을 경우, 해당 정보는 모두 불타버리며 흔적도 없이 사라지게 된다.
JWT 토큰
JWT 토큰은 1번헤더 , 2번페이로드, 3번 시그니쳐로 구분된다.
2번 페이로드 : 1) 누구에게 발급했는지, 2) 이 토큰은 언제까지 유효한지
1번 헤더 1) type이 들어간다 type 값은 항상 JWT이다. 2) Alg(알고리즘) : 시그니쳐가 어떤 알고리즘 방식으로 서명할지에 대한 값이 있다 ( ex : HS256)
1번 헤더와 2번 페이로드 마지막으로 서버에 감춰놓은(회원가입 했을 때) 감춰놓은 비밀값을 알고리즘으로 암호화하면 3번 시그니처 값이 나온다.
3번 시그니처 : 클라이언트가 토큰을 보내면, 서버에서는 1번 헤더와 2번페이로드에 해당하는 숨겨둔 비밀값을 꺼내와 정해놓은 알고리즘 방식으로 계산해서 시그니처값이 나오면(이 값으로 서명해서 일치하면) 그때서야 인증이 완료된다.
한 주 요약
1. 7/11 : 항해99을 첫 시작하였다. 그리고 바로 시작하게 되는 미니 프로젝트
프로젝트는 바로 시작하게 되었다. 새로운 팀원이 생겼다. 이들과 함께 4일동안 진행해야한다. 각자의 실력도 천차만별이였고 상대를 알아갈 시간은 없다. 만난지 5분도 안된 사람들과 무엇을 만들지 고민하고 분배해야했다. 우리는 MBTI 성향에 맞는 동물을 추천하는 페이지를 만들기로 했다.
내가 낸 기획은 신입 개발자가 도대체 어떤 게 도움이 되는 정보들인지도 알기 힘드니, 신입 개발자 혹은 희망자를 위한 개발관련 기술블로그 / 사이트를 수집하는 사이트를 만들자고 얘기는 했다. ( ㅎ 물론 팀원들의 동의는 받지 못했지만, 이걸 작성하는 지금 시점에서는 얘기라도 한게 어딘가!? 라는 생각이 든다. )
로그인 페이지를 만들어야한다. JWT 토큰은 무엇인가? 어떻게 입력한 값을 DB몽고에 저장해야하는가? 나는 누구인가? 이게 맞는건가?
2. 7/12 : 로그인 페이지를 만들었다. 근데 이게 맞나 싶다.
항해99가 시작되고서 준 강의가 있다. 거기에는 물론 로그인 페이지를 만드는 부분도 있다. 공부시간이라고 따로 두지 않는다. 프로젝트를 만들어가면서 모르면 찾아보는거다. 이걸 얘기하고 싶었나보다. 근데 자연스럽게?도 나는 강의에 이미 구현된 코드를 가져쓰게 된다. 이게 맞는건가 싶은 생각이 들었다. 그래서 강의에서는 로그인과 비밀번호를 만드는 코드를 알려줬는데, 하나 추가하기로 했다. 닉네임도 같이 만드는거다! 딱 한개 추가한건데도 쩔쩔맸다. 어째서 ? 아이디 만드는 것처럼 만들면되는거 아닌가 ? 이때부터 나는 아이디와 비밀번호가 어떻게 만들어지는건지 닉네임을 만들기 위해서 코드 하나를 짚어보며 이해해야만 했다.
3. 7/13 : 로그인 이후 페이지 경로 정하기
로그인 이후 페이지는 두가지로 정해져 있다. 우리가 정한 MBTI 간단한 (1)설문지 페이지와 (2)MBTI결과에 따라 추천하는 동물소개 및 댓글페이지이다. 여기서 쫌 확실하게 알면서 복붙하게 되었다. MBTI 설문지가 끝나면 해당 값을 DB 몽고에 저장하려고 하는 시도에서 쫌 보이기 시작했다.
4. 7/14 : 미니 프로젝트 제출 ( = 해방감 )
수정페이지 만들기를 했다. 로그인한 정보값을 변경하는건데, 패스워드까지는 못갔다. 요게 쫌 아쉽네... 생각보다 수정페이지에서 굉장히 먼가 진행이 안됐다. 결국 팀원에게 요청했는데, 팀원이 생각보다 빠르게 구현하길래 굉장히 욕심이 생겼다. 같이 작업한 그 팀원은 맡은 기능에서도 꽤나 빠르게 만들어가길래 그 팀원의 코드도 유심히 봤다. 닉네임 변경까지는 열심히 쫒아갔고, 아직 부족한 마음에 프로필 사진 변경까지도 만들어냈다.(= 물론 강의 내용의 코드를 열심히 가져다 쓰긴 했다 )
생각보다 촉박하게 흘러갔다. 16시 경 쯤에 CSS작업을 마무리 짓고, 깃 허브에 푸쉬를 했다. 팀장은 충돌난 부분을 검토했고, 나는 AWS에 연결을 했다. 1분을 남겨두고 17시 59분 제출 완료했다.
발표가 끝나고 열심히 달려온 나에게 친구와 간단한 맥주 마시는 시간을 주었다.
같이 일한 팀원분들 고생하셨습니다!
5. 7/15 : 새로운 시작 알고리즘과의 싸움
두 가지 미션이다. 알고리즘 걷기반을 선택했고, 자바 언어를 이용한 과제도 생겼다. 모두 7월 21일(목)까지 끝내야한다.
팀원들이 모두 자바를 어느정도 아는 모양이다. 심지어 난이도가 가장 낮은 알고리즘 문제에서도 척척 풀어내길래 조바심이 생겼다.
7. 7/16 : 두마리 토끼 ( 자바와 알고리즘 )
쉽지가 않다. 걷기반의 알고리즘 문제가 28개이다. 팀원과 하루에 한개씩을 기본으로 한다고 했지만, 목요일 시험을 대비하려면 나는 무조건 최소 28개의 문제에 대한 이해가 있어야한다. 근데 차라리 맨땅의 헤딩이더라도 코딩을 할 때가 괜찮았다. 알고리즘은 정말 계속 나 스스로 풀지 못해서, 구글링해서 소스를 가져와 분석하는 방향으로 공부하고 있다. 여기서 이 공부가 맞는지 계속 회의감이 들었다.
인텔리제이 부터 자바 언어까지 모든게 낯설었다. 알고리즘도 썩 좋게 흘러가지 않는 상황에서, 자바를 설치하고 인텔리제이라는 걸 쓰는 것부터 자바까지 어색한 것 천지다.
한 주 느낀점
1. 깃 허브 전략을 알아야 한다.
어떤 식으로 브랜치를 만들고 푸쉬하고 머지를 할 건지를 알아야겠다. 이건 시간을 어떻게 쪼개서라도 알아보자.
2. 미니 프로젝트는 기뻤다.
솔직히 칭찬 엄청하고 싶다. 뭐 어떻게 한건지도 모르겠지만 기어이 맡은 기능을 구현해서 기분이 너무 좋았다.
3. 좋은 기분은 오래 가지 않았다.
자바로 할 프로젝트가 걱정이다 -> 사실 미니 프로젝트 때도 그랬다.
알고리즘이 걱정이다 -> 이건 근데 내가 일단 모방해서 분석하고 어떻게 돌아가는건지 이해하는걸로도 공부가 되는건가?
한 주 아쉬웠던 것
1. 일요일날 내려놨다.
일요일날은 쉬었다. 정말 푹... 근데 막상 열심히 쉬고 나니까 또 불안한 마음이 들더라. 그래서 월요일로 넘어온 새벽에 들어와서 늦었지만 WIL로 작성하고 다시금 다짐하고자 한다.
2. 차주에 목표
주특기 프로젝트 진행하면서 틈틈히 부족한 자바 부분 공부하기 ( 미니 프로젝트처럼 배수진치면 더 빨리 익힐꺼 같긴하다 )
알고리즘 10개로 늘려야한다. ( 얘가 세상 불안하다. 이건 개인플레이라 신경이 더 쏠릴 수 밖에 없다. )
[WIL] 0717 (0717이라 쓰고 사실 18일 새벽에 쓴 ) 첫 WIL #1
작성 시간을 정해두면 좋지 않을까?
목표가 필요하다
육하원칙
내가 기억하고 싶은 or 트러블슈팅과 같은 기술적인 부분을 작성하거나
회고 성격의 가벼운 느낌으로 작성해도 괜찮다
TIL : 오늘 배운 것 / 느낀 것 / 아쉬웠던 것 -> 보완할 점 / 칭찬 한마디
WIL : 한주 동안 배운 것 / 느낀 것 / 아쉬웠던 것 -> 보완할 점 / 칭찬 한마디
JWT, API에 대해서 정리하기
API ( 애플리케이션 프로그래밍 인터페이스(Application Programming Interface) )
쿠키&세션 VS JWT 토큰
세션
JWT 토큰
한 주 요약
1. 7/11 : 항해99을 첫 시작하였다. 그리고 바로 시작하게 되는 미니 프로젝트
2. 7/12 : 로그인 페이지를 만들었다. 근데 이게 맞나 싶다.
3. 7/13 : 로그인 이후 페이지 경로 정하기
4. 7/14 : 미니 프로젝트 제출 ( = 해방감 )
5. 7/15 : 새로운 시작 알고리즘과의 싸움
7. 7/16 : 두마리 토끼 ( 자바와 알고리즘 )
한 주 느낀점
1. 깃 허브 전략을 알아야 한다.
2. 미니 프로젝트는 기뻤다.
3. 좋은 기분은 오래 가지 않았다.
한 주 아쉬웠던 것
1. 일요일날 내려놨다.
2. 차주에 목표
3. 운동을 3일에 한번 나간다.