Skip to content

[윤대호] 풀스택-BE-mission10#9

Open
aowjarkwk wants to merge 36 commits intocodeit-bootcamp-nodejs:풀스택-BEfrom
aowjarkwk:풀스택-BE-mission10

Hidden character warning

The head ref may contain hidden characters: "\ud480\uc2a4\ud0dd-BE-mission10"
Open

[윤대호] 풀스택-BE-mission10#9
aowjarkwk wants to merge 36 commits intocodeit-bootcamp-nodejs:풀스택-BEfrom
aowjarkwk:풀스택-BE-mission10

Conversation

@aowjarkwk
Copy link
Collaborator

@aowjarkwk aowjarkwk commented May 29, 2024

주요 변경사항

  • 10주차 스프린트 미션의 프론트엔드 코드에 맞게 백엔드 코드를 변경

    • 상품 이미지 등록 기능을 구현합니다. 파일을 선택해 이미지를 업로드하고, preview를 볼 수 있도록 구현합니다. 이미지는 1개만 등록 가능하도록 구현해주세요.
    • "상품 등록하기" 버튼 클릭 시, 상품 정보 등록 API 엔드포인트에 요청을 보내 상품을 등록합니다.
    • 상품 등록 시 필요한 필드(이름, 설명, 가격 등)의 유효성을 검증하는 미들웨어를 구현합니다.
    • multer 미들웨어를 사용하여 상품 이미지 업로드 API를 구현해주세요.
      • 업로드된 이미지는 서버에 저장하고, 해당 이미지의 경로를 response 객체에 포함해 반환합니다.
    • 각 상품에 대한 상세 정보 조회를 위해 상품 ID별로 API 요청을 구현합니다.
    • 상품 정보 수정 및 삭제를 위한 API 요청을 구현합니다.
    • 사용자가 '좋아요' 버튼을 클릭하면, 프론트엔드는 좋아요 API 엔드포인트에 요청을 보내 좋아요 상태를 변경합니다.
    • 게시물 등록 시 필요한 필드(제목, 내용 등)의 유효성 검증하는 미들웨어를 구현합니다.
  • 백엔드 구현 요구사항

    인증

    • 사용자의 정보를 기반으로 새로운 계정을 생성하는 회원가입 기능을 구현합니다.
    • 계정의 패스워드는 해싱해 저장합니다.
    • 사용자의 신원을 확인하고, 성공적인 인증 후에는 액세스 토큰(토큰 기반) 또는 세션 ID(세션 기반)를 발급하는 로그인 기능을 구현합니다.

    권한 제어(인가)

    • 모든 API에 인가를 적용합니다. 세션 또는 토큰 인증 방식을 활용해 구현하세요.

    상품 기능 인가

    • 인가된 사용자만 상품을 등록할 수 있습니다.
    • 인가된 사용자만 해당 상품의 정보를 수정할 수 있습니다.
    • 인가된 사용자만 특정 상품을 삭제할 수 있습니다.
    • 인가된 사용자만 상품에 '좋아요'를 추가하거나 삭제할 수 있습니다.

    이미지 업로드 기능 인가

    • 인가된 사용자만 이미지 업로드 기능을 사용할 수 있습니다.

    아티클 기능 인가

    • 인가된 사용자만 아티클을 등록할 수 있습니다.
    • 인가된 사용자만 아티클 정보를 수정할 수 있습니다.
    • 인가된 사용자만 아티클을 삭제할 수 있습니다.
    • 인가된 사용자만 아티클에 '좋아요'를 추가하거나 삭제할 수 있습니다.

    댓글 기능 인가

    • 인가된 사용자만 상품에 댓글을 등록할 수 있습니다.
    • 인가된 사용자만 아티클에 댓글을 등록할 수 있습니다.
    • 인가된 사용자만 댓글을 수정하거나 삭제할 수 있습니다.

    에러 처리

    • 모든 예외 상황을 처리할 수 있는 에러 핸들러 미들웨어를 구현합니다.
    • 서버 오류(500), 사용자 입력 오류(400 시리즈), 리소스 찾을 수 없음(404) 등 상황에 맞는 상태값을 반환합니다.

    라우트 중복 제거

    • 중복되는 라우트 경로(예: /users에 대한 getpost 요청)를 app.route()로 통합해 중복을 제거합니다.

    • express.Router()를 활용하여 상품/자유게시판 관련 라우트를 별도의 모듈로 구분합니다.

    • 심화 요구사항

    • 토큰 기반 방식을 사용할 경우, 만료된 액세스 토큰을 새로 발급하는 리프레시 토큰 발급 기능을 구현합니다.(jwt sliding session 적용)

    • 구글 OAuth를 사용하여 회원가입 및 로그인 기능을 구현합니다.

    • 프로젝트의 구조와 복잡성을 관리하기 위해 MVC 패턴이나 Layered Architecture와 같은 설계 방식을 적용해 보세요.

    • morgan을 사용하여 모든 요청의 상세 정보(메소드, 경로, 응답 시간 등)를 로그로 기록합니다.

QA 의견

  • 상품 ID, ownerId 등 ID 필드를 UUID로 사용하는 것인지, Int 타입으로 사용하는 것인지 명확히 설명되어 있으면 좋겠습니다. 관계형 데이터베이스를 활용한 자바스크립트 서버 만들기 강의에서는 ID를 UUID로 사용하는 것을 보여주었는데, 이번 미션에서는 Int 타입을 사용하고 있어서 DB 구조를 변경해야 하는 스프린터 분들이 있으실 것 같고, 그 과정에서 오타나 에러 발생 등의 혼란이 발생할 것 같습니다. (저는 유저 ID는 Int, 그 외의 ID는 UUID로 구현했습니다.)

  • 7주차의 관계형 데이터베이스를 활용한 자바스크립트 서버 만들기 토픽에서 트랜잭션에 관해 배우는 부분이 있습니다. 저는 좋아요 기능을 구현할 때 트랜잭션을 적용해봤는데, 적용을 위해 공부하는 과정이 도움이 된 것 같아서 트랜잭션을 실습할 수 있도록 하는 요구사항이 포함되면 좋을 것 같습니다.

  • 라우트 경로를 통합하면서 코드 위치를 한번 옮기고, 이후 MVC 패턴 또는 Layered Architecture 적용 심화 요구사항을 진행하면서 다시 코드 위치를 옮기는 작업을 반복하게 되어 피로도가 높아지는 것 같습니다. 일부 API를 구현할 때 미리 MVC 패턴 또는 Layered Architecture로 작성하도록 하는 것은 어떨까요? 처음부터 MVC 패턴 또는 Layered Architecture로 코드를 작성해보는 연습도 될 것 같습니다.

  • Swagger 문서 작성을 한 번에 몰아서 하다 보니 시간이 오래 걸리고, 헷갈리게 되는 것 같습니다. Swagger 문서 작성을 나눠서 할 수 있도록 이전 미션에 배치하거나, 일부만 작성하고 추후 미션에서 이어서 작성하도록 하는 것은 어떨까요? 10주차에 모든 문서를 한꺼번에 작성하는 대신, 미션을 진행하면서 조금씩 작성해나가면 더 여유있고 상세하게 작성할 수 있을 것 같습니다.

  • 일반적으로 비밀번호 확인은 프론트엔드에서 처리하는 것으로 알고 있는데, https://panda-market-api.vercel.app/docs/#/Auth/SignUp에서는 회원 가입 시에도 비밀번호 확인을 받도록 되어 있어서 의도된 것인지 궁금했습니다.

  • 노션의 심화 요구사항 중 프로젝트 구조 변경 부분이 두 번 적혀져있습니다.

  • 미션 중 현재 출시된 토픽에는 나오지 않은 개념들이 있어 구글링과 GPT를 활용하여 구현했습니다. 코드가 의도하신 대로 작성되지 않았다면 말씀해주시면 수정하겠습니다.

aowjarkwk added 30 commits May 21, 2024 20:17
- 상품 목록 조회 페이지네이션 추가
- 상품 목록 조회
- 상품 상세 조회
- http, mock 데이터 위치 변경
- 상품 수정, 삭제
- 상품 댓글 등록, 수정, 삭제
@aowjarkwk aowjarkwk requested a review from a user May 29, 2024 00:15
@aowjarkwk aowjarkwk self-assigned this May 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant