📖 2022년 06월 09일 ~ 6월 11일
✔️ 오늘 내가 한 일
- (9일) User Validation 코드 추가
- (9일) User 회원 탈퇴 기능 구현
- (9일) ERD 바탕으로 모든 모델 (테이블) 생성.
- (9일) 테이블 간 관계 설정
- (10일) 전체 스케줄 조회 (스케줄 테이블 정보 + 체크리스트 테이블 + 하루 영양제 테이블)
- (10일) 폴더 구조 리팩토링 (router, controller 파일 분리)
- (11일) 영양제 데이터 + 네이버 쇼핑 API
- swagger 명세
💡 TIL ( Today I Learned )
[ 타입스크립트 타입 에러 ]
JWT 토큰에서 유저 정보를 얻는 과정에서 다음과 같은 오류를 해결했다! 휴!
따로 포스팅으로 정리해두었다.
👉 [Error: TS(2339)] Express Request 확장하기
[ 폴더 구조 변경 ]
1. 기존 프로젝트에서는 Routes / Services / Middlewares 로 구성했다.
이때 프로젝트를 하면서 라우터에 여러가지 로직이 붙는 것을 보며 1) 코드의 가독성, 2) 재사용성이 좋지 않다는 것을 느꼈다.
2. 현재 프로젝트에서는 Routes / Controllers / Services 로 구성했다.
이렇게 분리하면서 로직을 이해하기 좀 더 편리해졌다.
[ 싱글톤 패턴 ]
하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴이라고 한다.
이번 프로젝트에서는 해당 패턴을 사용한다.
따로 포스팅으로 정리했다!
👉 [디자인 패턴] #1. 싱글톤 패턴 (singleton pattern)
[ DB 시간 설정 ]
(처음) MySQL 데이터베이스를 사용하고 있는데 mysql 서버시간을 한국시간으로 바꾸려고 했다.
(변경 후) DB 자체에는 utc로 넣고, 시간 데이터를 반환해줄 때 ut+9(한국시간)으로 변경했다.
(구현 방법1) : 저장할 때 +9시간
-> 이 방법보다는 DB에는 utc로 넣고 따로 함수를 만들어서 반환해주는 것이 더 좋은 방법이다!
const sequelize = new Sequelize(config.development.database, config.development.username, config.development.password, {
host: config.development.host,
dialect: "mysql",
timezone: "+09:00",
dialectOptions: { charset: "utf8mb4", dateStrings: true, typeCast: true },
define: {
timestamps: true,
},
});
(구현 방법2)
util 함수로 따로 만들어 로직을 넣어서 사용한다.
[ Sequelize 조회 ]
1. 문제 상황
- 우리 프로젝트에서는 회원 테이블과 일정 테이블이 1:N 관계를 가지고 있다.
- 즉, 1명의 회원이 n가지 일정을 가질 수 있다.
- 현재 회원 일련번호를 외래키로 가지고 있는데 일정 테이블에서 회원 일련번호가 일치하는 데이터를 가지고 오고 싶다.
- 하지만 타입스크립에서 알려지지 않은 속성은 지정되지 않았다.
- (외래키는 관계를 설정하면 자동으로 생기기 때문에)
2. 해결방법
< 시도 1 >
이 방식은 User 테이블에서 left join 으로 데이터를 가지고 오는 것이다.
하지만 나는 유저의 전체 정보도 가져오기 때문에 다른 방식을 찾았다.
const Schedule = {
findById: async (pk_user_id: string) => {
const schedule = await Users.findAll({ where: { pk_user_id: pk_user_id }, include: { model: Schedules } });
}
< 시도 2 : 이 방식으로 코드 작성 >
const Schedule = {
findById: async (pk_user_id: string) => {
const schedule = await Schedules.findAll({ include: { model: Users, where: { pk_user_id: pk_user_id } } });
return schedule;
},
}
💡 결론적으로
- 외래키를 기준으로 데이터가 필요할 때) include 안에 모델과 where 조건절로 데이터 불러온다.
- 모델 속성에 있는 칼럼이면 시도1처럼 where 조건절로 데이터를 불러온다.
💁♀️ 오늘 느낀 점
[ 신입은 기획과 시간 배분을 못한다! ] , 프로젝트에서 시간 관리
프로젝트에서 각자 생각하고 있던 목표가 달랐다는 것을 알게 되었다.
누군가의 문제가 아닌, 같은 프로젝트 완성이라는 목표에서 기한을 잘 나누지 못했다!!
깃랩의 마일스톤, 이슈를 꼼꼼하게 작성해보자!
+ 코치님이 추천해주신 아키텍쳐 확인할 수 있는 사이트
https://www.codenary.co.kr/architecture/list
📌 내일 할 일(계획)
- OAuth (카카오톡)
- 영양제 DB + 네이버 쇼핑 API (이미지 링크, 구매 링크) 완료하기
- 영양제 DB 모델 (테이블) 구축하기
'프로젝트 회고 > Pill my rhythm 💊' 카테고리의 다른 글
[인공지능 웹 서비스 프로젝트] 13~15일 차 회고 (0) | 2022.06.18 |
---|---|
[인공지능 웹 서비스 프로젝트] 11~12일 차 회고 (0) | 2022.06.16 |
[인공지능 웹 서비스 프로젝트] 6~7일 차 회고 (0) | 2022.06.08 |
[인공지능 웹 서비스 프로젝트] 4~5일 차 회고 (0) | 2022.06.05 |
댓글