거누의 개발노트
[항해] Chapter 1 - 웹개발 미니 프로젝트 회고록 본문
1일차 회고
항해가 시작되었다.
웹개발 종합반에서 배운 python, flask, dbmongo, aws 로 미니 프로젝트를 진행하는 Chapter 이다.
4명의 팀으로 구성해서 협업으로 프로젝트를 진행한다.
처음에 간략히 인사를 나누고 어떤 아이디어로 웹 프로젝트를 만들지 정했다.
우리 팀은 주식관련 웹 프로젝트로 결정되었다.
팀장 분이 사전에 혼자서 작업하던 작업물이 있어서 그 작업물을 기준으로 깃에 올리기로 했다.
처음에는 내가 레포지토리를 올려서 팀원들을 초대해 주었다.
( 초대하는 기능 있겠거니 했는데 써보는건 처음 인 것 같다. )
하다보니 branch, Pull Request, Merge.. 등 깃에 대해 모르는 부분이 많았다.
팀원중 한분이 이미 Git도 그렇고 CI/CD 등 아는 부분이 많으셔서 작업해 보신다고 하셨다.
Git으로 자동 배포를 하려고 하다보니 팀원분의 개인 AWS 정보가 노출 될 수 있어서 팀원분의 깃으로 넘겨주었다.
이미지 처럼 권한이 깃을 만든사람에 정책, 권한관리 등의 권한이 있어서 이렇게 결정하게 되었다.
별로 한 거 없이 시간이 훌쩍 가버린것 같다. 물론 회의도하고, 아이템도 정하고, 깃은 어떻게 할건지
중간에 TIL 관련한 강의도 들어서 진짜 시간이 금방이었다.
혼자 Git이 좀 부족 한 것 같아서 항해에서 제공해주는 Git 강의 영상을 밤늦게 까지 공부했다.
2일차 회고
2일차에는 그래도 나름 적응도 되었고 머릿속으로 멀 할지 정해놔서 그런지 편안했다.
회의 중에 나는 로그인, 회원가입을 진행하겠다고 했다. ( 개인적으로 회원 부분부터 진행되는게 좋아서 내가 빠르게 작업한다고 했다. )
초기 파일만 만들고 유효성 검사나 아이디 중복체크는 제외한 작업을 했고 밤늦게 까지 공부한 보람을 빛을 볼 때가 왔다.
branch를 만들어서 했고, 작업이 된후에는 커밋 -> 내 브랜치 푸쉬 -> pull request 요청 -> 팀원들이랑 커밋내용 이야기하고 -> merge 까지! 뿌듯했다!! 드디어 먼가 정상적으로 된 것 같다는 생각이 들었다.
기능을 만들고 세부적으로 유효성검사랑 중복체크 기능을 만들어 놓았다.
그런데 팀에서 app.py를 다같이 고치게 되고 라인수도 너무 길어져서 코드를 수정하고 확인하는데 어려움이 있었다. ( 머지 컨플리트도 계속 났다 ㅠㅠ )
그래서 app.py를 분리하기로 했다!! 이 작업은 같이 보면서 혼자 작업해야하는 부분이라 팀원 한 분이 주도적으로 하게 되었다.
Flask - Layerd Architecture 이 부분을 참고해서 보셨다고 한다.
https://velog.io/@inyong_pang/Flask-Layered-Architecture-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
작업 하시는걸 화면공유로 보여주면서 했는데 내가 혼자 개발하다보면 항상 같은 방법을 생각하고 다른관점에서 못보는 경향이 있는데 이번에 다른 사람이 개발하는걸 보면서 진짜 좋은경험이 된 것 같다.
3일차 회고
3일 차에는 레이어드 아키텍처 구분이 어느정도 되어서 변경된 소스들이 무진장 많았다.
내 로컬 레포지토리에 Pull 해서 쭉 ~ 살펴 보았다. MVC 패턴이랑 비스무리 한 것 같다. (팀 잘 만난것 같닼ㅋㅋㅋ)
그리고 회원탈퇴 API, 마이페이지 상세 API 그리고 화면을 구현했다.
회원 탈퇴 기능을 만드고 테스트 하는 와중에 같은 아이디로 또 회원가입을 하면 등록했던 정보들이 삭제 안되는 상황이 있었다.
이 오류는 회원탈퇴 할 때 User 정보만 삭제하는게 아니라 등록했던 정보 모두 삭제 되어야한다. delete_one 만쓰다가 처음으로 delete_many를 써봤다.
4일차 회고
프로젝트가 거의 마무리 단계에 들어섰다.
한가지 문제점에 대해서 이야기가 나왔었는데...
마이페이지나, 회원이 등록한 정보들을 볼 때 회원정보를 보내줘야 하는지에 대한 문제였다.
우리 프로젝트는 현재 JWT 방식으로 로그인이 구현되있었고,
[JWT 인증 방식]
1. 클라이언트 로그인 요청이 들어오면, 서버는 검증 후 클라이언트 고유 ID 등의 정보를 Payload에 담는다.
2. 암호화할 비밀키를 사용해 Access Token(JWT)을 발급한다.
3. 클라이언트는 전달받은 토큰을 저장해두고, 서버에 요청할 때 마다 토큰을 요청 헤더에 포함시켜 함께 전달한다.
4. 서버는 토큰의 서명을 비밀키로 복호화한 다음, 위변조 여부 및 유효 기간 등을 확인한다.
5. 유효한 토큰이라면 요청에 응답한다.
이러한 방식으로 구현되어 있다.
결론적으로는 마이페이지 정보를 볼 때 회원정보를 보내줄 필요 없이 요청 헤더에 포함된 정보를 확인해서 로그인 유무나 회원정보를 활용하면 된다.
https://velog.io/@jinyoungchoi95/JWTJson-Web-Token-%EC%9D%B8%EC%A6%9D%EB%B0%A9%EC%8B%9D
위 페이지에 설명이 잘 되어있다.
마지막으로 이번 미니 팀 프로젝트 대한 회고를 진행하고 첫번째 챕터는 마무리 될 것 같다.
제대로 깃을 써보고 처음 써보는 Python 언어에 다양한 패키지들 그리고 mongoDB도 처음 썼지만 Spring으로 Web 프로젝트 만드는 것과 유사한 것 같다. 1일차 때는 모르는것도 있고 어색하기도하고 적응도 못하고 있었는데 2일차 되니까 또 금방 적응되서 벌써 4일차가 지나가는걸 보니 앞으로 시간이 더 빠르게 흐를 것 같다.
[프로젝트 Git 주소]
https://github.com/SangHoonly/stock_team4