Activity/개발

[Back-end] 포트폴리오 공유 웹 개발 서비스 프로젝트 정리

짹짹체유 2023. 11. 5. 22:34

 

📍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 명세서 작성

 

📍개별 학습

 

📍느낀점

🔙 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