프로젝트 작업 기록 - 예시코드 clone, 동작 확인 (docker, DB 세팅)
프로젝트 진행에 관한 예시코드를 클론 받은 뒤 명령어 실행으로 프로젝트 동작하는 것부터 실습 해봤습니다. 패키지 설치부터 구동까지 초기 설치 작업하는 데서 헤매다가 설치 과정을 구글링하며 진행했습니다.
프로젝트 작업 기록
오늘 배운 내용
- 프로젝트 초기 설정 : clone 이후 프로젝트 동작을 위한 전반적인 설치, 설정 진행
- Docker 동작, 기초 사용법 : docker 네트워크 생성 및 docker 빌드 과정 명령어 수행
- 시스템 리소스 관리 : PC 용량 문제로 발생한 docker 문제 경험
- 데이터베이스 설정과 관리 : PostgreSQL 설치 및 설정 수행, pgAdmin4의 설치와 데이터 관리 방법 경험
- TypeScript와 Entity 관계 설정 : TypeScript에서 발생한 오류를 해결하는 과정을 통해, 엔티티 간의 관계 설정 방법과 TypeScript의 타입 시스템에 대한 이해 경험
오늘 진행한 내용
프로젝트 진행간에 참고할 예시코드는 아래와 같습니다.
스파르타코딩클럽 데브캠프 교육에서 제공한 github 자료로, 프로젝트에서 요구하는 로그인, 회원가입, 결제 기능에 대한 전반적인 예시코드가 있습니다. 프로젝트 클론 후 진행해야 하는 명령어는 다음과 같습니다.
# 패키지 설치
yarn install
# pre-commit hook 설치 (꼭 설치해주세요!)
brew install pre-commit
pre-commit install -t commit-msg
# 구동
cd docker
sh create-network.sh
make build env=local
make run env=local
pre-commit hook 설치부터해서 brew install pre-commit, pre-commit install -t commit-msg 까지 마치고 docker 폴더에 들어가 create-network.sh 실행한 다음 docker를 열어두어 build 하는데 까지 진행했습니다.
failed to fetch metadata: signal: bus error
docker build 하다가 failed to fetch metadata: signal: bus error 발생하여 재부팅했습니다. 그래도 안되서 원인 찾아보다가 PC 용량 문제로 docker 오류 발생했다는 걸 알게 되었습니다. 이후 용량 정리했습니다.
"/.env": not found
용량 정리를 마치고 다시 docker build를 했습니다. 그런데 이번엔 아래 오류가 발생했습니다. ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref e43c7d12-3417-40e9-a813-1b8fda25266f::4wzz5xcm85jek8yobq70j5e4s: "/.env": not found
원인은 .env 파일 누락으로 app.module.ts에서 .env에 등록된 변수 파악했습니다. 찾아보니 DB_HOST, DB_PORT, DB_USERNAME, DB_PASSWORD, DB_DATABASE 의 DB 설정정보와 RUNTIME의 애플리케이션 실행환경 지정 변수가 있다는 걸 알 수 있었습니다.
//app.module.ts
...
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get<string>('DB_HOST'),
port: configService.get<number>('DB_PORT'),
username: configService.get<string>('DB_USERNAME'),
password: configService.get<string>('DB_PASSWORD'),
database: configService.get<string>('DB_DATABASE'),
autoLoadEntities: true,
synchronize: configService.get<string>('RUNTIME') !== 'prod',
logging: configService.get<string>('RUNTIME') !== 'prod',
}),
...
PostgreSQL설치
그래서 프로젝트에 사용된 DB인 PostgreSQL설치부터 진행하였습니다.
PostgreSQL와 함께 pgAdmin4도 설치했습니다. 설치 후 pgAdmin4 실행하려고 보니 화면이 안나오는 오류 발생했습니다.
찾아보니 PostgreSQL 설치시 추가로 pgAdmin4 설치하는 방법보다 직접 설치하는게 더 낫다는 정보를 참고하여 :\Users\%USERNAME%\AppData\Roaming\pgAdmin 경로에 있는 데이터를 지우고, pgAdmin 4 설치파일을 직접 실행하는 방법을 사용했습니다.
▼ 설치한 파일 경로▼
pgAdmin4 실행 후 database 생성
정상 동작하는 걸 확인하고 build 진행해보니 ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref e43c7d12-3417-40e9-a813-1b8fda25266f::4wzz5xcm85jek8yobq70j5e4s: "/.env": not found 그래도 동일한 오류 발생했습니다.
docker Desktop 재설치
.env 파일을 docker 디렉토리에 넣고 해도 소용이 없었습니다. 다시 구글링 해보니 docker Desktop 버전 문제일 수도 있다는 자료를 보았습니다. 그래서 버전 4.26.1 -> 4.28.0로 재설치 진행했습니다.
entity 관계 설정 오류
설치 후 .env 파일 다시 루트 디렉토리에 넣고 build 돌리니까 위 오류 사라졌습니다. 대신 src 안 order.entity.ts에서 error TS2339: Property 'orders' does not exist on type 'User'. 오류, point.entity.ts에서 error TS2339: Property 'point' does not exist on type 'User'. 오류가 발생했습니다.
둘 다 user.entity.ts에서 발생한 것을 보고 파일을 확인해보니 user.entity.ts에 order와 point 관계 설정이 안되어 있었습니다. 그래서 해당 파일에 관계 설정하였습니다.
// user.entity.ts 에 추가한 코드
@OneToOne(() => Point, (point) => point.user)
@JoinColumn()
point: Relation<Point>;
@OneToMany(() => Order, (orders) => orders.user)
orders: Relation<Order[]>;
관계 수정 후 build 성공했습니다.
하지만 make run env=local 명령어는 진행하지 못했습니다. 그리고 코드 분석도 하지 못했습니다. 위처럼 설치와 설정을 하다보니 시간이 오래 걸려서 못했습니다. 다음날에 run 동작과 함께 코드 분석을 할 예정입니다.
▼ 전날 작업 기록 ▼
'사이드 프로젝트 > 로그인 & 회원가입 & 결제' 카테고리의 다른 글
로그인 & 회원가입 & 결재 프로젝트 KPT (0) | 2024.03.29 |
---|---|
온라인 쇼핑몰에서의 할인 전략, 쿠폰과 포인트의 최적 적용 순서 (0) | 2024.03.27 |
클라우드타입(Cloudtype)으로 프로젝트 무료 배포, 장점, 방법, DB 접속 (1) | 2024.03.24 |
로그인, 회원가입, 결제 기능 프로젝트 기획, NestJS와 TypeORM 채택 (0) | 2024.03.18 |