우리 학교는 졸업 조건에 [현장 실습] 이라는 제도가 있다.
관련 회사에 실습을 나가 실무 능력을 기르겠다는 취지인 것 같다.
졸업 전에 현장 실습을 1회 이상 해야하는데, 사실 다른 루트로 이수하는 방법도 있다.
기존의 프로젝트와 다른 점은, 현업에 종사하고 계시는 분의 교육을 통해 학습 후 결과물로 프로젝트를 해내는 교육 과정이다. 현장 실습보다 현장프로젝트를 선호하는 학우들이 많다.
어쨌든, 나는 3학년 겨울학기에 [Node.js/Flutter 기반 실무형 웹 서비스 개발]이라는 수업을 수강했다.
엄연히 따지면 Node.js / Flutter를 수강한 날은 9일이다.
9일 동안 수업을 들으며, 동시에 프로젝트도 완성해 내야하는 실무형 교과이다.
그래서 웹 서비스 구축에 딱 필요한 부분만 배우게 된다. 근데 사실 그냥 이론만 배우면 재미 없잖아. 당근 마켓 클론 코딩을 통해, 빠르게 필요한 부분만 배웠다.
[Backend - Node.js]
MVC 패턴
/ JWT MiddleWare 사용
(로그인된 사용자만 API 호출 가능)Mysql 사용
JWT Token
/ Password Encoding
이미지 저장 및 다운로드
(multer module
)[Frontend - Flutter]
get
image_picker
등등..
빠른 시간 내에 배우고, 제안서 발표 후 일주일 만에 개발했다.
언제까지 맛 없는 학식만 먹을건데? 주변 맛집을 공유하고, 리뷰를 남겨보세요~
2024-01-17 (수)
~ 2024-01-25 (목)
음식 카테고리 별 검색 기능
검색어를 통한 음식점 검색
별점과 댓글을 통한 다양한 의견 공유
인기 게시글과 최근 게시글 순서로 조회
1. JWT로 보안 강화
JWT MiddleWare
JWT로 사용자를 식별 할 수 있습니다. 각 API에 MiddleWare에 JWT를 식별하는 기능을 넣고, Token이 있는 사람에게만 API 호출이 가능하도록 코딩했습니다.
Token을 소유하고 있지 않은 사람은 403 Authroization을 반환합니다.
또한 JWT의 유효기간 설정할 수 있는데요. 저는 6시간으로 설정했습니다.
6시간이 지나면, 다시 토큰을 재발급 받아야 합니다.
그리고 회원이 바로 로그아웃 한다면, 토큰을 즉시 폐기 해야겠죠?
토큰 즉시 폐기하는 방법은 고전적으로 생각해보면, 쓰레기 통에 버려야 하겠죠?
그래서 저는 쓰레기 통을 만들었습니다. 그냥 텍스트 파일에 관리 해도 되고, 로컬 저장소에 관리해도 되지만, 저는 데이터베이스에 저장해서 관리했습니다.
Swagger 사용
이전에 작성한 글들을 참고하시라.
[Swagger] JavaScript에서 Swagger를 사용해보자
데이터베이스와 서버 운영
팀원 간의 효율적인 데이터 관리를 위해 데이터베이스는 외부 서버에 운영했는데, nodeJS를 외부 서버에서 돌리는 방법은,
- 만들어진 코드를 Github PR 생성하여 main으로 머지한다.
- ssh로 우분투 서버에 접속한다.
- 우분투 서버에서 github pull 해서 파일들을 불러온다.
- 다시 nodejs 서버를 켠다.
항상 프로젝트 할 때마다 이 단계를 거쳤는데, 테스트를 할 때마다 이렇게 운영해야 하니, 비효울적이라고 인지했다.
프로젝트를 마치며 KPT(Keep, Problem, Try)방식으로 회고해 보려 한다.
비록 초단기 프로젝트라 마지막 날에는 꼬박 밤을 샜지만,, 이렇게 빠른 시간에 프로젝트를 하나 할 수 있었던 게 좋았다. 나중에는 해커톤도 해보고 싶다.
Flutter를 빠른 시간에 배워 적용해 볼 수 있어서 좋았다.
코틀린보다 더 호환성이 좋고, 디자인도 깔끔한듯
Swagger를 사용한 API문서 적용 좋음
팀장의 역할 부족
사실 팀장을 가위바위보로 뽑았다. 프로젝트를 더 잘 파악하고 있는 사람이 하는게 맞는데, 팀장의 리드가 매우 부족했던게 안타까웠다. 사실상 마지막에서는 거의 내가 팀장이 되어 나를 주축으로 개발하고, 업무를 분배하고 있었다.
일정 부족
프로젝트를 미리미리 시작했으면 더 좋았을 텐데, 백엔드는 2일만에 다 끝내놨는데, 프론트엔드는 처음에 진도가 안나가더니 결국 모두 다 같이 했다. 프론트엔드의 할일이 굉장히 많았다는 것..
미완성된 기능
개인적으로 추가하고 싶은 기능들이 너무 많다. 지도 API 연동
/ 여러 이미지 등록
/ 검색 기능 개선
/ 프론트엔드 디자인
검색 기능 고민하기 (메타데이터로 검색할 것인지? / 성능 고민)
현재는 그냥 쿼리 방식인데, 여러 검색 기능을 공부해보아야겠다.
Flutter를 계속 공부하고 현재 서비스 중인 어플 수준의 코딩해보기
다른 개발자와 여러 경험 쌓아보기. (항상 학교 안에서만 하니, 많은 성장이 안보이는 것 같음)
CI/CD 또는 Docker 공부해서 자동 배포 방식 공부하기