Open jyh7a opened 1 month ago
피드백 수정 사항입니다.
소프트웨어 디자인 패턴이 layered architecture -> mvc 입니다. controller 까지 구현 해서 mvc 패턴에 따라서 잘 구현 해주었습니다.
layered architecture패턴에서는 추가로 Repository 가 포함되는데 Repository역할은 데이터베이스나 외부 API와의 통신을 하게 됩니다. 이로써 비지니스 로직과 데이터 접근 로직을 분리하여 유지보수 및 테스트에 쉽게 코드를 작성할 수 있습니다.
layered architecture패턴이 무엇인지 간단히 찾아보고 심화 주차에서 layered architecture을 사용하니 이 패턴에 맞춰서 프로젝트를 고도화해도 좋은 경험이 될 것입니다.
과제 하시느라 수고 많으셨습니다. layered architecture 패턴을 사용해서 과제 잘 완료 하였고. README, commit message 도 굉장히 잘 작성해 주셨습니다.
아래는 프로젝트 피드백입니다.
1. 폴구 구조 수정(상수 관리 폴더 생성)
프로젝트 폴더 구조 예시에서 constants 폴더에서 auth.constant.js, env.constant.js 등 여러 상수들을 관리합니다. 이런식으로 상수들을 객체로 관리해서 내보내게 되면 process.env. 을 사용 했을때는 자동완성이 되지않아서 프로그래머가 실수가 나올 수 있지만 상수를 객체로 만들어서 관리하면 ENV_CONSTANTS. 을 사용하면 사용할 수 있는 속성들이 자동완성으로 나오기때문에 실수 없이 상수들을 관리할 수 있습니다.
수정 전)
수정 후)
2. schema 오타 수정
https://github.com/KAPUIST/Node-Recruiter/blob/e6940aed9c12dec8f100988d23627eb8ccc5d2b1/prisma/schema.prisma#L60
스키마는 전체적으로 잘 작성하였고. 필요한 부분에 검색 속도를 높이기 위해서 적절하게 index 사용도 잘 해주었습니다. user_info 에서 gender가 String으로 매핑 되어 있는데 이 부분은 오타 같네요. 수정해 주세요.
3. 트랜잭션 로직 분리
https://github.com/KAPUIST/Node-Recruiter/blob/e6940aed9c12dec8f100988d23627eb8ccc5d2b1/src/services/resume.service.js#L226-L228 트랜잭션 로직도 잘 처리하였습니다. 여기에서 추가로 비지니스 로직과 DB 트랜잭션 로직을 분리하여 코드 가독성과 유지보수를 쉽게 만들 수 있습니다.
수정 후)
4. getUserFromToken 함수 수정
https://github.com/KAPUIST/Node-Recruiter/blob/e6940aed9c12dec8f100988d23627eb8ccc5d2b1/src/middlewares/auth.middleware.js#L40-L42 토큰에서 유저 정보를 가져오는 함수도 잘 만들었습니다. return 값을 보니 user_id, role만 가져오기위해서 formattedData 객체를 만들었는데 처음부터 users 말고 user_info에서 유저 id, role을 가져오면 formattedData 객체를 만들지 않고 바로 처리 가능합니다. 이런식으로 자주 변경되거나 찾으려는 정보가 있으면 user, user_info 테이블을 나눠서 관리해도 됩니다.
5. 더 나아가기.
기본적으로 미리 layered architecture패턴을 사용하고 요구사항들을 잘 구현해 주었습니다.
추가적으로 api 문서화를 위한 swagger 캐싱(redis)을 사용해 보는걸 추천드립니다.