2개월간의 무료한 백수 끝에(물론 마냥 놀진 않음^^) 드디어 부트캠프가 시작됬다 ! 맨날 혼자 공부하면서 이게 맞나 고민할 바에 빨리 부캠 시작해서 이것저것 많이 배우고싶다고 생각했었기 때문에 설레는 마음으로 9월 19일 월요일 아침에 지각했다
부트캠프가 시작 전에 사전 강의로 풀스택강의를 미리 제공했어서 시간이 남아 돌았던 나는 4회 완강과 함께 부수적인 다른 강의들까지 같이 들으면서 공부했었다.(✌️)
이 정도면 충분히 예습은 했으니까 "부캠 시작하면 내 여력을 보여주겠다!" 라는 포부를 갖고 첫 주차를 맡이했는데 파이썬 문법이나 조금 알던 상태로 다짜고짜 대망의 첫 프로젝트가 시작됬다.
이 때까지는 몰랐다. 내가 그렇게 잠이 없는사람이라는 것을...
처음 시작하는 날 팀 배정이 되어서 나 포함 4명이서 함께 기획부터 서버에 배포까지 해서 제출해야하는 첫 팀 프로젝트를 하게 됬다.
근데 부트캠프 시작하면서 새로 제공한 강의에서 배우는 JWT를 활용한 로그인 및 회원가입 기능 과 Jinja2 템플릿을 이용한 서버 사이드렌더링, 그리고 AWS EC2에 업로드하고 도메인을 붙여 제출하는 것이 필수로 들어가야 했다.
근데 이게 그냥 들으면 그래그래 하겠는데
상황이 어땠냐면 진짜 핑계가 아니라
정리하면 4일동안 처음 본 분들과 프로젝트 기획, 4주치 강의, 프로젝트 구현, Git 공부 인데 이게 말이 쉬운 것 같았는데 제로베이스인 입장으로써는 자다가 물벼락 맞는 기분이였다.
저 때 퇴근 전에 찍은거고 마지막 찍힌 시간 21시간,,,물론 하루^^
처음 써보는 기술 공부하랴, 기능 구현하랴, 개인 공부하랴
백수여서 시간 남아 도는 줄 알았는데 진짜 눈 붙일 시간이 없더라,, 근데 저 말고도 팀원들도 그렇고 다른 팀들도 다 똑같았습니다,,
어쨌든 여차저차 기한 내에 제출까지는 완료했지만 처음 구상했던 것들 중에서 구현해내지 못한 기술들도 있었고 프로젝트 진행 기간동안 진짜 온갖 에러들을 마주했었기 때문에 몸도 마음도 너덜너덜,,,🥺
그나마 진짜 팀원들이 너무 좋았어서 버틴거지 아니였음 탈주했을수도 있었다 진짜루진짜루진짜루
그래도 결과물을 보니까 뭔가 다 같이 오물조물 해서 뭐 하나 이렇게 만들어봤구나 라는 그 뿌듯함과 성취감은 이루 말할 수 없
분명히 설치가 됬던걸로 기억하고 서버에 run.py
올려서 다같이 기분좋게 한번 열어봅시다! 하고 들어갔는데 웬걸,
DB가 불려오질 않았다. 분명 로컬에서는 잘 됬었는데 서버에 올라가서 보는 순간 로그인도 안되고 회원가입 기능도 되질않았다.
AWS EC2서버에 pymongo
설치하는 방법 해서 온갖 구글링을 돌려서 하라는 방법은 다 해본 것 같은데 설치가 안되었다.
그러다가 mongoDB 사이트 안에 커뮤니티에서 한 글을 보는데 나와 같은 상황에 있는 외국인의 질문글에 mongoDB 측 같이 보이는 분의 답글에서 해답을 얻었다.
답글 내용은 현재 ubuntu22.04
버전이 나온지 얼마 되지 않아서 기존의 pymongo
가 대응을 못하는 것 같으니 전 버전을 사용해봐라 는 내용이였다.
바로 AWS로 뛰어가서 인스턴스 새로 만들 때 ubuntu20.04
로 설정해서 만들고 설치과정을 다시 시도했더니 언제 그랬냐는듯 너무 잘되더라. 사실 어떻게 보면 별거 아닌 문제이기도 한데 강의로 본 개발세상이 전부인 개린이에겐 정말 살벌했던 기억이였다. 뭐든 다시 깔라고 하던가 처음부터 해야된다고 하면 우리 피땀눈물 못잃어,,,
첫 날에 기술매니저님께 기획서 피드백을 받던 중에 하신 말이 있었다.
"보니까 기능이 적지는 않은데
blueprint
라는 걸 이용하면 이런 거 나눠서 잘 관리할 수 있는데... 나중에 시간되시면 구글에 검색해보세요~"
저 때는 저 말이 그냥 이런게 있으니 한번 알아봐라 정도였는데 왜였는지 나에겐 저걸 꼭 써봐라 라고 들렸던 것 같다.
강의에서도 전부 app.py
에 라우팅함수들을 때려넣었기 때문에 이 강의를 모티브로 프로젝트를 하는 수강생들 사이에서 보면 저 기능을 쓴다면 뭔가 엄청난 유니크한 프로젝트가 될 수도 있겠다라며 잠시나마 설렜던 것 같다.^^
바로 구글링해서 알아보니
플라스크의 블루프린트를 이용하면 라우팅 함수를 체계적으로 관리할 수 있다. 블루프린트(blueprint)는 보통 객체지향 프로그래밍에서 "청사진"을 뜻하는 용어인데 플라스크에서는 URL과 함수의 매핑을 관리하기 위해 사용하는 도구(클래스)이다.
점프 투 플라스크
내가 이해한 건 app.py
에 들어가는 다양한 라우팅 함수들을 기능별로 묶어서 각 기능별.py로 따로 관리할 수 있다는 것이다.
보통 app.py
에 각 기능에 필요한 라이브러리부터 시작해서 엄청 import를 하는데 그게 각 파일마다 있는게 아니라 __init__.py
에서 전체 라이브러리를 관리하고 blueprint
로 각 기능별.py들을 메인에서 import
해서 서로를 연결해주는 것이다.
그럼 협업 때도 다같이 app.py
하나에 우르르 모여서 작업하고 컨플릭날일도 적을 것이고 프로젝트 파일도 뭔가 명확하게 나뉘어지기 때문에 유지보수에도 훨씬 수월하겠다 라는 매력에 냉큼 시작했다.
하지만 기존의 폴더 구조가 아니고 프로젝트 명의 폴더를 만들어서 그 안에 __init__.py
랑 static
폴더, templates
폴더, 그리고 나머지 기능으로 나뉘어진 feature.py
들이 들어가고 그 폴더 밖에 얘네들을 묶어서 실행할 run.py
가 있다.
프로젝트 명의 폴더가 객체가 되어서 그 안에 있는 각 파일들을 __init__.py
에서 blueprint
로 연결해 준다.
그리고 프로젝트 내에서 필요한 라이브러리를 여기서 전부 import
한다.
또 각 feature.py
에서 사용할 url
들을 url_prefix
를 이용해서 지정해 줄 수 있다.
아무튼 정말 멋진 기능인데 지금이야 이 때 직접 해보고 시행착오를 겪으며 해봤으니 이렇게라도 말하지 처음에는 정말 뭐가 뭔지 몰랐다.
사실 지금도 내가 무슨말을 하고있는 건지 모르겠
무튼 내가 사용해보지 않은 기술을 공부하며 프로젝트에 대입해보는 경험은 정말 너무 힘들어서 던질 뻔 했지만 정말정말 즐거웠다
폴더 구조는 깃 주소로 👇
Input
창에서 <script>
문 실행시 실행 되는 문제이건 누군가가 임의로 <script>
문을 이용해 브라우저 내에 있는 cookie
에 접근해서 개인 사용자의 token
값을 가지고 악용할 수 있는 상황이 생길 수 있으니 서버로 데이터를 전달하는 저런 input
창 같은 곳에는 특정 내용을 필터링 해주는 코드를 작성해놔야 한다는 내용을 들었었다.
아, 들었는데 아직 못알아봤다. 당장 이번 주차도 죽고있다...
로컬에서 분명히 다 잘 되는것을 확인하고 AWS에 올리고 확인해보니 지도는 잘 로딩이 되지만 현재 내 좌표를 가지고 지도에 띄우지를 못했다.
아, 이것도 아직 못알아봤다. 당장 이번 주차 읍읍