Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[강대원] sprint6 #12

Conversation

Daewony
Copy link
Collaborator

@Daewony Daewony commented Nov 3, 2024

백엔드 구현 요구사항

중고마켓

  • Product 스키마를 작성해 주세요.

    • id, name, description, price, tags, createdAt, updatedAt 필드를 가집니다.
    • 필요한 필드가 있다면 자유롭게 추가해 주세요.
  • 상품 등록 API를 만들어 주세요.

    • name, description, price, tags를 입력하여 상품을 등록합니다.
  • 상품 상세 조회 API를 만들어 주세요.

    • id, name, description, price, tags, createdAt를 조회합니다.
  • 상품 수정 API를 만들어 주세요.

    • PATCH 메서드를 사용해 주세요.
  • 상품 삭제 API를 만들어 주세요.

  • 상품 목록 조회 API를 만들어 주세요.

    • id, name, price, createdAt를 조회합니다.
    • offset 방식의 페이지네이션 기능을 포함해 주세요.
    • 최신순(recent)으로 정렬할 수 있습니다.
    • name, description에 포함된 단어로 검색할 수 있습니다.
  • 각 API에 적절한 에러 처리를 해 주세요.

  • 각 API 응답에 적절한 상태 코드를 리턴하도록 해 주세요.

  • .env 파일에 환경 변수를 설정해 주세요.

  • CORS를 설정해 주세요.

  • render.com으로 배포해 주세요.

  • MongoDB를 활용해 주세요.

@Daewony Daewony self-assigned this Nov 3, 2024
Copy link
Collaborator

@kimjong95 kimjong95 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

대체적으로 잘 구성해주신 것 같습니다.
백엔드에서 API를 구성해주실때 REST API형태를 사용해주셨는데, 그럼 과연 RESTFUL이 무엇인지 고민해보셔야 합니다.

또한 지금은 이 서비스를 이용하는 유저가 적지만, 트래픽이 증가할때, 또는 같은작업을 반복할때 DB의 부하를 어떻게 줄이며, 어떻게 DB에 접근하는 횟수를 줄이며 최적화 할지 차차 고민이 필요할 것 같습니다.

또한 정확한 에러처리가 필요할 수 있습니다. 현재 사용해주시는 mongoDB에서 findByIdAndUpdate와 같이 찾고, 업데이트하는 이 과정처럼 여러개의 DB처리가 필요할때 중간에 실패하는 지점에서 어떻게 대처해야하는가가 필요할 수 있습니다.

}
);

const Task = mongoose.model('Task', TaskSchema);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

이 스키마의 이름은 아마도 Product가 되야할 것 같네요. 스펙에 대하여 포함하지않는 프로퍼티가 있는지 확인해보세요.

// offset을 어떻게 해야할지 감이 안잡힘
const searchConditions: Record<string, any> = {};

if (name) searchConditions.name = { $regex: name as string, $option: 'i' };
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

request로 부터 받아온 name을 as로 단언하는것과 같이 타입을 단언하는것은 매우 위험합니다.

request로부터 받아오는 정보의 타입을 구성할 수 있게 asyncHandler가 제네릭타입을 가지고 컨트롤할 수 있게 수정해주세요.

const { id } = req.params;
const product = await Task.findById(id);
if (!product) {
res.status(404).send({ message: '상품을 찾을 수 없습니다.' });
Copy link
Collaborator

@kimjong95 kimjong95 Nov 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

404에러의 정확한 의미를 확인해보시는게 좋을 것 같습니다.
비어있는 값을 리턴하고싶다면 상태코드로는 200가 적절하고 빈 리스트를 리턴하는것이 옳바른 방법입니다.
404는 해당 라우팅이 존재하지 않을때 사용해야합니다.


router.patch('/:id', service.patchProduct); // 상품 수정

router.delete('/', service.deleteProduct); // 상품 삭제
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REST형식으로 구성해주신것 같네요. DELETE의 REST 규칙을 확인해보시면 좋을 것 같습니다.

const router = express.Router();

router.get('/', service.getProductList); // 상품 목록 조회
router.get(':id', service.getProductDetail); // 상품 상세 조회
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

여기도 REST의 리스트조회 규칙을 살펴보면 좋을것 같습니다.

dotenv.config();

export const PORT = process.env.PORT;
export const MONGO_URI = process.env.MONGO_URI || ''; // 더 좋은 방법 없을까?
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

잘 설정해주셨습니다. 다만 로컬에서, 실제환경에서 동작할때 해당 환경변수는 주입되어야 할것 같아요.


dotenv.config();

export const PORT = process.env.PORT;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

포트는 기본적으로 http, https가 어떤 포트를 사용하는지 확인해보세요

@kimjong95 kimjong95 merged commit b83f31e into codeit-sprint-fullstack:express-강대원 Nov 9, 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.

2 participants