-
Notifications
You must be signed in to change notification settings - Fork 15
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
The head ref may contain hidden characters: "express-\uAC15\uB300\uC6D0-sprint6"
[강대원] sprint6 #12
Conversation
There was a problem hiding this 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); |
There was a problem hiding this comment.
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' }; |
There was a problem hiding this comment.
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: '상품을 찾을 수 없습니다.' }); |
There was a problem hiding this comment.
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); // 상품 삭제 |
There was a problem hiding this comment.
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); // 상품 상세 조회 |
There was a problem hiding this comment.
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 || ''; // 더 좋은 방법 없을까? |
There was a problem hiding this comment.
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; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
포트는 기본적으로 http, https가 어떤 포트를 사용하는지 확인해보세요
백엔드 구현 요구사항
중고마켓
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
를 조회합니다.name
,description
에 포함된 단어로 검색할 수 있습니다.각 API에 적절한 에러 처리를 해 주세요.
각 API 응답에 적절한 상태 코드를 리턴하도록 해 주세요.
.env 파일에 환경 변수를 설정해 주세요.
CORS를 설정해 주세요.
render.com으로 배포해 주세요.
MongoDB를 활용해 주세요.