📍Project 개요
Subject: 포트폴리오 공유 웹 서비스
My Role: Back-end
Project Duration: 23.10.16 - 23.10.27
📍사용 Tool & Library 요약
- Node js와 프레임워크인 Express를 기반으로 개발
- MongoDB와 MongoDB를 Node.js로 사용할 수 있도록 하는 mongoose 라이브러리 사용
- cors 에러 방지를 위한 cors 라이브러리 사용
- 이미지 업로드 및 aws s3에 저장을 위해 multer, aws-sdk 라이브러리 사용
- JWT 토큰 발급을 위한 jsonwebtoken 라이브러리 사용
📍파일 구조
▶️ DB
▶️ models
- MVP 별로 구분
- User.js
- 가장 최하단에서 모델의 메서드(create, findOne 등)를 통해 class 내에 async/await으로 함수들 구현
- 이메일을 통해 동일 유저 있는지 확인 함수
- 리프레시 토큰 검색 함수
- Project.js, Education.js, Certificate.js, Award.js
- 가장 최하단에서 모델의 메서드(create, findOne 등)를 통해 class 내에 async/await으로 함수들 구현
▶️ schemas
- user, award, certificate, education, project
- user의 경우 탈퇴한 회원의 탈퇴 시간을 기록해서, 탈퇴한 회원의 정보를 삭제하지 않고 남겨두지만 deletedAt 필드명을 통해 구분
- refreshToken
- refresh 토큰을 DB에 저장해두었다가 필요할 때만 비교하기 위해
- index.js
- 각 모델들을 import 및 export 함으로써 모델 사용이 가능하도록 함.
▶️ middlewares
- awssdkMiddleware.js
- aws s3에 이미지 저장하기 위한 미들웨어
- 파일 확장자 확인
- errorHandlingMiddleware.js
- 404, 401, 400 에러로 구분해서 name과 statusCode 지정
- errorMiddleware.js
- 모든 에러를 동일한 형태로 전송하기 위한 미들웨어
- statusCode와 message 전송
- jwtMiddleware.js
- 액세스 토큰 발급 및 유효기간 설정
- 액세스 토큰 검증
- 리프레시 토큰 발급 및 유효기간, 알고리즘 설정
- requireMiddleware.js
- deleted_checked 미들웨어로 탈퇴한 회원인지 확인
- login_required 현재 상태가 로그인되어 있는 상태인지 확인
- 만약 액세스 토큰이 만료된 경우 리프레시 토큰으로 검증한 후 새로운 액세스 토큰 발급
- userId_checked 미들웨어로 현재 접속중인 유저와 동일한 유저인지 확인하고 수정 및 삭제 권한 있는지 확인
- request_checked 미들웨어로 요청값 있는지 확인
▶️ routers
- userRouter.js
- 각종 미들웨어와 service import
- 라우터 마다, 로그인 되어있는지, 권한 있는지, 요청값 있는지 확인
- 로그인 시에는 쿠키 및 엑세스/리프레시 토큰 생성 후 토큰을 쿠키에 담아서 client로 전송
- 로그아웃 시 쿠키 삭제
- 탈퇴 시 DB에 탈퇴 시간 저장 및 쿠키 삭제
- projectRouter.js, educationRouter.js, certificateRouter.js, awardRouter.js
- 각종 미들웨어와 service import
▶️ services
- userService.js
- 모델 모듈로 불러와서 함수 사용
- 비밀번호 해쉬화를 위해 bcrypt 라이브러리 사용
- id를 랜덤으로 생성하기 위해 uuid 라이브러리 사용
- jwt 생성을 위해 jwt 미들웨어 import 및 호출
- projectService.js, educationService.js, certificateService.js, awardService.js
- 모델 모듈로 불러와서 함수 사용
- id를 랜덤으로 생성하기 위해 uuid 라이브러리 사용
- app.js
- 각 종 라우터와 미들웨어 import
- cors 에러 방지를 위해 corsOption use
- 기존 버전에서는 body-parser 라이브러리가 따로 있었으나 업그레이드 되면서 express 내에서 처리 해줌
// express.json(): POST 등의 요청과 함께 오는 json형태의 데이터를 인식하고 핸들링할 수 있게 함. // express.urlencoded: 주로 Form submit 에 의해 만들어지는 URL-Encoded 형태의 데이터를 인식하고 핸들링할 수 있게 함. app.use(express.json()); app.use(express.urlencode
- userRouter를 가장 상단에 두고 모든 라우터들 use
- errorMiddleware를 가장 마지막에서 use
📍Team 소통 및 진행 방식
- 디스코드를 통한 파일 공유 및 대화
- Gitlab을 통한 개발 코드 공유
- 스크럼 회의실을 통한 실시간 소통
- 구글 스프레드 시트를 통해, API 명세서 작성
📍개별 학습
- CORS 에러와 CORS 옵션
- 쿠키 vs 세션 vs 토큰
- Stateful vs Stateless
- 로컬 스토리지 vs 세션 스토리
📍느낀점
🔙 About Back-End
- 기술 하나를 선택할 때에도 고민의 시간이 필요함 → 현업에서는 모든 것이 비용이기 때문에 ex. 쿠키, 세션 중 쿠키 사용한 이유, 현재 우리의 플랫폼에서 리프레시 토큰 구현이 필요할지 괜한 낭비가 아닐지 등
- 클라이언트와의 통신에서 필요없는 데이터는 보내지 않음으로써 낭비를 줄여야함 ex. 클라이언트에서는 id만 필요한데 name, 비번 등 모두 전송하는 경우, 포트폴리오가 몇 백개 된다면 그걸 모두 한 번에 클라이언트로 전송할 것인지 등
🗣️ About Communication
- 명확하게 정의 및 명시하고 시작하는 것이 효율적 → API 명세서에 상세하게
- 각자가 노트북 앞에 앉아있을 수 있는 시간을 서로 확인할 수 있으면 좋을 듯 → When2meet or 구글 스프레드 시트 등을 사용해서 서로 공유하기
- 대면으로 진행하는 프로젝트가 제일 Best다
📍After Action
✅ 이미지 업로드 aws s3와 연동해서 client-server 연결
-> 프로젝트 이미지 & 프로필 이미지
✅ 페이징
✅ OAuth 구현
✅ Flask로 개발
#엘리스트랙 #엘리스트랙후기 #온라인코딩부트캠프 #온라인코딩학원 #개발자국비지원 #온라인코딩 #개발자부트캠프 #내일배움카드코딩 #국비지원부트캠프 #풀스택 #자바스크립트 #React #Express #Nodejs #데이터분석 #파이썬 #SQL #인공지능 #Tensorflow #딥러닝
반응형
'Activity > 개발' 카테고리의 다른 글
[Front-end] 웹개발 프로젝트 코드 리뷰 정리 및 Study (0) | 2023.12.12 |
---|