리꾸므

1주차_회고(feat.JWT/API) 본문

발걸음/일지

1주차_회고(feat.JWT/API)

리꾸므 2022. 8. 7. 22:01

Mini_Project01

기간: 2022.8.1(월) ~ 2022.8.4(목) 

팀원 4명과 함께 미니프로젝트 만들기

 ㅇ jinja2 템플릿 활용하기

 ㅇ JWT 인증 방식으로 로그인 구현

 

위의 2가지 필수 사항 포함하여 웹사이트 만들어야 했다.

 

: 아무지식도 없이 시작했다.

 우리 팀은 전공자2명 비전공자3명으로 구성이되었다. 우리는 구상단계에서 많은 기능을 생각했고, 아름다우면서도 실질적인 웹서비스를 목표로 잡았다. 그리고 그 생각이 깨지는데는 하루도 걸리지 않았다. 진작끝나야 할 프론트 단계가 우리 모두 생각보다 오래걸렸고 4일이라는 짧은 시간안에 영상을 보면서 새로운 지식을 넣으려다보니 시간은 매우 부족했다. 우리는 그것을 제출 전날 깨달았다. 수요일, 프론트를 대충 마무리 짓고 기능 구현에 들어갔지만 저녁이 늦도록 자신이 맡은 파트의 기능구현을 다한사람이 없었다. 매니저님께서는 보시고 내일아침까지 기능구현이 되지않으면 각자 쪼개진 내용을 합치는데 시간이 걸려서 프로젝트가 실패할 수 있다고 말씀하셨다. 그말을 듣는 순간 무서웠다. 첫 프로젝트가 실패로 끝날 수 있다는 것도, 밥먹는 시간 자는 시간 줄이며 온종일 매달려도 이것밖에 못할 수 있다는게, 비전공자가 아니라 개발자로서의 내 한계가 지어지는 것 같았다. 결국 우리는 매니저님 말을 듣고 정신을 차리고 일단 목표 사항에서 필요없는 기능을 칼같이 쳐냈다. 그리고 나 또한 막히던 부분도 구글링과 팀원분들의 도움으로 결국 기능을 구현해낼수 있었고, 다행히 내가 막히던 부분이 다른분의 막히는 곳과 일맥상통했기에 생각보다 수월하게, 물론 다음날 제출할때까지 잠을 못잤지만,  팀원들과의 협력으로 미니 프로젝트가 실패로 끝나지 않을 수 있었다.

 

: 많은 것을 느꼈다.

 짧은 기간이었지만 많은것을 느끼고 배웠다.

 

 ㅇ 협업 방식

 ㅇ 역할, 시간 분배 중요성

 ㅇ API설계

 ㅇ jinja2을 이용한 서버 사이드 렌더링의 장점

 ㅇ JWT토큰을 이용한 회원가입/로그인 기능

 

 처음보는 사람끼리 모여 짧은 기간동안 주제를 선정하고 업무를 분배하여 함께 같은 목표를 향해 나아가는 것은 좋은 경험있었다. 지금와서 돌이켜보면 시간분배, 기능구상등 부족한 부분이 많았지만 그랬기에 중요한걸 깨달았던 것 같다. 목표 설정과 역할분배의 중요성을 말이다.

 

 물론 가장 크게 느낀건 무섭지만 그만큼 재미있었다는 느낌이었다. 장교로 복무하고, 전역 후 아버지 일을 도와드릴때도 큰 성취감이나 재밌다라는 감정을 느낀적이 별로없었다. 근데 프로젝트를 만드는 그 시간이 화가 나지만 한편으로 너무도 재미가 있었다. 그덕에 온전히 매달릴 수 있었던게 아닐까 싶다. 

 

 ㅇ 이번 글에선 스파르타 코딩클럽에서 1주차 목표로 잡아준  API와 JWT에대해 포스팅하고자 한다.

 

1. JWT(Json Web Token)

 JWT : JSON 웹 토큰(JSON Web Token)은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로, 페이로드는 몇몇 클레임(claim) 표명(assert)을 처리하는 JSON을 보관하고 있다.

 

 언제사용하는가?

  • 로그인
    • 사용자 로그인 -> 서버가 해당 유저의 토큰을 유저에게 전달 (JWT)
      -> 유저가 유청을 할때 토큰을 포함해서 전달
      -> 서버는 해당 토큰일 권한이 있는지 유효하고 인증이 되었는지 확인하고 작업을 진행
    • 서버는 유저의 세션을 유지할 필요가 없다.
      유저가 보낸 토큰만 확인하면 된다.
      서버의 자원을 아낄수 있다.
  • 정보교류
    • JWT는 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다.
      그 이유는, 정보가 sign 이 되어있기 때문에 정보를 보낸이가 바뀌진 않았는지,
      또 정보가 도중에 조작되지는 않았는지 검증할 수 있다.

 

JWT의 장점

  • JWT 의 주요한 이점은 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함하기 때문에 별도의 인증 저장소가 필요 없습니다.
  • 쿠키를 전달하지 않아도 되므로 쿠키를 사용함으로써 발생하는 취약점이 사라집니다.
  • URL 파라미터와 헤더로 사용
  • 트래픽 대한 부담이 낮음
  • REST 서비스로 제공 가능
  • 내장된 만료
  • 독립적인 JWT

JWT의 단점

  • Self-contained: 토큰 자체에 정보를 담고 있으므로 양날의 검이 될 수 있습니다.
  • 토큰 길이: 토큰의 페이로드(Payload)에 3종류의 클레임을 저장하기 때문에, 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있습니다.
  • Payload 인코딩: 페이로드(Payload) 자체는 암호화 된 것이 아니라, BASE64로 인코딩 된 것입니다. 중간에 Payload를 탈취하여 디코딩하면 데이터를 볼 수 있으므로, JWE로 암호화하거나 Payload에 중요 데이터를 넣지 않아야 합니다.
  • Stateless: JWT는 상태를 저장하지 않기 때문에 한번 만들어지면 제어가 불가능합니다. 즉, 토큰을 임의로 삭제하는 것이 불가능하므로 토큰 만료 시간을 꼭 넣어주어야 합니다.
  • Tore Token: 토큰은 클라이언트 측에서 관리해야 하기 때문에, 토큰을 저장해야 합니다.

 

2. API(Application Programming Interface)

 API는 응용프로그램에서 사용할 수 있도록, 운영 체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다.

 

  • API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
    • 데이터베이스에는 소중한 정보들이 저장된다. 그래서 모든 사람들이 이 데이터베이스에 접근하면 정보가 유출 될 수 있다. API는 이를 방지하기 위해 서버와 데이터베이스에 대한 출입구 역할을 하며, 허용된 사람들에게만 접근성을 부여해준다.
  • API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
    • API는 애플리케이션과 기기가 데이터를 원활히 주고받을 수 있도록 돕는 역할을 한다.

 

:마무리

 알고리즘을 하고 있는 지금, 지금도 두렵다. 자바를 새로 공부하면서 알고리즘을 풀고 있는데 28문제까지 풀면서 순수하게 내가 풀 수 있었던 문제는 6문제 밖에 안된다. 그렇지만 그런만큼 매달릴 수 있다는건 좋은것 같다. 결국 언젠가는 일정수준에 이르면 다시 기쁨을 느낄 수 있다고 믿고 있기 때문이다. 

 

 

 

'발걸음 > 일지' 카테고리의 다른 글

2주차_회고(feat.객체지향,JVM)  (0) 2022.08.14
9번째 발자국_Spring jpa localtime between  (0) 2022.08.14
8번째 발자국_H2 연결오류  (0) 2022.08.13
7번째 발자국_ArrayList  (0) 2022.08.11
발자국  (0) 2022.08.05