1월 10일부터 시작한 항해 99 1주차를 마무리지었다.
난생 처음으로 웹을 만들어보고, 다른 사람들과 함께 무언가를 작업하는 경험을 할 수 있었다.
혼자서 무언가를 하는 것과는 물론 차이점이 있을 것이라고 생각하긴 했지만, 실제로 해보니 체감되는 차이는 더 컸다.
기본적으로 혼자 무엇을 할 때에는, 다른 사람이 알아보기 힘든 구문도, 자신이 잘 이해하고 익숙해져 있다면 문제가 없었다. 그러나, 다른 사람들과 협업을 할 때에는 그 무엇보다 가독성이 중요함을 깨달았다. 가령, 아무리 재미있는 이야기를 떠올렸다고 할지라도 그것을 라틴어로 기록한다고 해보자. 안타깝게도 그 재미있는 이야기는 라틴어를 알고 있는 사람을 제외하면 아무도 읽지 못할 것이다. 코드에서는 이런 문제가 더 심해지는데, 가독성이 나쁜 코드에서 문제가 발생하는 경우, 이를 처음부터 끝까지 뜯어보고 해석을 해야만 문제를 해결할 수 있는 것이다. 심지어는 작성한 본인도 그 코드를 한눈에 이해할 수 없는 경우도 꽤나 있었다.
본래 처음에 파이썬을 공부하는 것으로 프로그래밍(?)과의 인연이 시작되었던지라 가독성에 대해 강조하는 글을 이따금 접할 수 있었는데, 직접 경험하지 못했을 때에는 그냥 그런가보다 하고 받아들이는 정도였다. git을 이용한 source tree를 이용해 작업을 공유하고, 함께 전체 프로젝트를 떠받드는 기둥을 쌓아갈 때에 내가 그저 지금까지 버릇처럼 해오던 사소한 형식들이 서로 충돌을 보이기도 했고, 같은 값을 나타내는 변수의 이름이 이곳저곳 다르게 적혀있어 버그를 잡기가 어렵기도 했다.
물론 처음에 프로젝트를 시작할 때 기본적인 변수명이나 그 구조에 대해서 합의를 하고 진행되긴 했지만, 중간 중간 최초에 고려하지 못한 문제들이 튀어나오면서 급하게 해결하기 위해 다듬은 부분들에서 발생한 문제였다.
이런저런 문제를 직접 겪었지만, 오히려 프로젝트를 진행할 때는 몹시 재미있었다. 조원들과 빠르게 친해져서 같이 작업을 하거나 버그를 잡기 위해 토론하는 과정이 너무 좋았고, 결국 문제를 해결했을 때에는 탄성이 절로 나왔다.
물론 이런 사람과 사람 사이의 일을 차치하더라도, 배운 점은 있었다. JWT와 API가 바로 그것이다. 내가 조원들과 함께 웹을 만듦에 있어 회원가입과 로그인을 구현하고, 서버를 만들어 브라우져와 통신을 위해 사용한 것들인데, 이런 것들에 대해서 전혀 모르던 상태에서 프로젝트를 진행하면서 정보를 찾아보고, 정리한 것을 적어볼까 한다.
우선, JWT는 JSON을 이용한 web 통신 상에 있어 암호화를 통해 안전하게 데이터를 보관하고, 다시 전송하는 것이다. 서버는 임의의 secret key를 자신이 원하는 것으로 설정하고 이를 통해 사용자가 보낸 아이디, 패스워드 등의 중요한 데이터를 클라이언트에 쿠키의 형태로 저장해둔다. 이 secret key가 존재해야 암호화와 복호화가 가능하고, 원본값이 조금만 달라져도 암호화된 형태가 전혀 새로운 형태가 되기 때문에 secret key가 서버를 떠나지 않는 이상 안전할 수 있다. 클라이언트는 항상 암호화된 형태만을 가지고 있고, 암호화된 정보를 secret key를 이용해 복호화하고 그에 합당한 데이터를 클라이언트에 전송하는 형태를 통해 다른 유저의 정보는 안전하게 유지될 수 있다.
로그인을 구현하기 위한 또 다른 방법으로는 세션이라는 방식이 있는데, 세션이란 서버의 어떤 저장소에 현재 접속 중인 클라이언트의 정보를 모두 저장하고, 클라이언트에서 요청이 들어올 때마다 세션에서 비교를 통해 클라이언트의 요청에 적확한 정보를 다시 송신하는 것이다.
JWT를 이용한 인가(Authentication) 방식과 세션을 통한 인증(Authorization)은 서로 일장일단을 가지고 있는 것 같다. JWT는 최초에 그 유효기한을 설정해줄 수 있는데, 이 유효기한 이내에는 쿠키가 적합한 대상이 아닌 외부에 유출되더라도 그 쿠키를 가진 사용자가 적합한 대상인지 서버에서 알 수 있는 방법이 없다. 세션은 쿠키가 외부로 저장되었다고 판단되는 경우, 자신이 가지고 있는 데이터 테이블에서 해당 유저의 정보를 삭제하는 방식으로 접속을 차단할 수 있다. 그러나, 해당 데이터 테이블을 항상 유지하고 있어야 하기 때문에 추가적인 리소스가 더 많이 필요한 것이다.
API란 Application Programming Interface의 약어로 간단하게 설명하자면 비서라고 할 수 있겠다. 클라이언트가 서버에 접속하면, 서버는 이를 인식하고 API를 통해 클라이언트가 접근할 수 있는 선택지를 전송해주고, 클라이언트가 선택한 옵션을 API의 형태로 서버에 송신하면 이를 서버에서 수신하여 필요한 작업을 진행하는 것이다.
서울의 대기질 정보나 따릉이 자전거 보관소의 정보 등 여러가지 OPEN API가 존재하여 이를 이용해 자신이 원하느대로 정보를 이용해볼 수 있다는 것도 알게 되었다.
'항해 99' 카테고리의 다른 글
항해 99 6주차를 끝내며 (0) | 2022.02.20 |
---|---|
항해 99 5주차를 끝내며 (0) | 2022.02.14 |
항해 99 4주차를 끝내며 (0) | 2022.02.06 |
항해 99 3주차를 끝내며 (0) | 2022.01.30 |
항해 99 2주차를 끝내며 (0) | 2022.01.23 |