[목표]
API와 DB를 재설계합니다.
벡엔드를 구축하고 프론트엔드와 PostgreSQL과 연결합니다.
백앤드와 프론트엔드에 주석을 추가하면서 이해합니다.
DB ERD모형의 DB를 가져와서 연결합니다.
CI/CD룰 구축합니다.
백앤드에 DTO를 도입합니다.
프로젝트 상세 페이지 구상합니다.
벨로그를 작성하고 있다.
어제 날짜가 시간까지 나와서 수정하고 있다. 벡엔드에서 date-fns를 통해 Controller가 가져오는 값을 수정했다.
추가로 확인 해보니 새 프로젝트 버튼 모달을 통해 POST 요청도된다. 새 프로젝트를 만들면 정상적으로 DB에 올라간다.
식사를 하고 왔습니다.

IAM EC2 문제가 있어서 엑세스를 확인해서 추가했다. (연결)
진혁이 형하고 DB를 확인하며 추가될 것들과 수정되야할 것들, 궁금한 것들에 대해 이야기했다.
이제 DB ERD 모형을 보고 수정을 하고 잘 작동하는지 확인해보겠다.
DB ERD에 따라 벡엔드와 프론트엔드를 다시 작성해보겠다.
DB테이블명 Projects → project
project_name: string → titleproject_summary: string → descritionproject_status: string → statusproject_people: number → project_member테이블에서 같은 project_id를 가진 수project_deadline: Date → due_dateproject_leader: string → project 테이블의 leader_id에 해당되는 users 테이블의 display_name일단 커서와 함께 프롬포팅을 통해 벡엔드 연결은 모두 했다. 정상적으로 5000번 포트에서 잘 작동한다.
이후에 프론트 엔드에서는 바뀐 컬럼값만 이번 새로운 값으로 바꿔주었다.
날짜 포맷 형식도 벡엔드에서 년, 월, 일로 표시하게끔 설정했다.
그러니 정상적으로 카드가 출력되었다.
Postgre SQL
NestJS 백엔드
React, NextJS 프론트 엔드
모들을 통한 POST로 생성 가능
2시간만에 새로운 우리의 새로 설계된 DB로 업데이트 완료했다.
어느정도 벡엔드도 유저가 완성되기 전까진 더 나아갈 수 없어서 나중에 편집하기 용이하게 주석을 추가했다.
해당 작업이 완료되는대로 AWS와 Github를 통해 CI/CD 환경을 구성해보겠다.
그런데 일단 프로젝트를 노션에 정리해보았다. 팀 노션도 정리해야하는데… 어케해야할지…
식사를 하고 쉬었습니다.

주제 정하고 이것저것 한다고 혼잡한 책상을 치웠습니다.
아까 하려다 못했던 코드에 주석을 추가 했습니다. 먼저 백엔드부터 시작하겠습니다.
명석이형 말대로 database를 체계적으로 관리하기위해 기존의 app.modules.ts에서 src 하위에 폴더를 하나더 만들어서 database.module.ts로 DB 연결 관련된 코드를 옮겼습니다.
최종으로 백엔드의 코드 주석과 최적화를 포함하여 커밋했다.
이제 프론트엔드를 정리해 봐야한다.
중간에 갑자기 프론트엔드가 먹통되서 놀랐지만 금방 복구했다. 각 코드에 대한 주석을 추가 했다. 필요없는 데이터가 없을때 가상 데이터를 추가하는 불필요한 코드를 삭제하고 최적화했다.
최적화하려고 Nextjs폴더 구조 app를 삭제하고 React 구조 폴더로 바꾸려다가 꼬일것 같아서 보류했다. 나중에 때가 되면 하나로 단일화 해야겠다.
API를 효율적으로 사용하기 위해서 API를 노션에 정리하고 있다.
근데 정리하다 보니 프로젝트 생성부분의 URL이 /projects로만 받고 있어서 /projects/create 로 바꿔야됨을 깨달알았다. 그리고 형식자 선언을 위해 DTO도 도입해야된다고 생각됐다.
트러블슈팅
갑자기 새 프로젝트 create가 안되서 트러블슈팅을 하게 되었다. 알고보니 백앤드에서 Post보내는 부분에 담당자 아이디를 넣는 부분이 있는데, 내가 이걸 기본값을 삭제했었다. 그러니 프론트엔드에서 담당자 아이디가 오지 않아 생성이 되지 않았다. 이부분은 그대로 두고, 명석이형 회원 연동이 완료되면 그때 해봐야겠다.
leader_id: body.leader_id || '550e8400-e29b-41d4-a716-446655440001', // 기본값 또는 실제 leader_id(추후 수정)
다시 돌아와서 projects/create로 URL를 변경해보았다. 생각보다 쉬웠다. URL부분만 create로 살짝바꾸니 바로 반영됐다.
API또한 다음과 같이 정리했다.
팀원의 추천과 보안과 효율성을 위해서 DTO를 도입하기로 했다.
커서 Ai를 통해서 백앤드 project폴더안 dto폴더에 프로젝트 dto관련 파일들을 만들었다. 그외에 기존 코드에서 DTO로 바뀌면서 바꿔야할 코드들에 대해서 추가적인 수정을 했다.
+27일자 벨로그를 정리했습니다.
팀원분들의 npm run dev에 대해 도움을 주었습니다. 프론트엔드 진행정도에 대해 이야기 했습니다. 팀원분께 NextJS와 React 이론에 대해서 조금이나마 알려드렸습니다.
숙소갔다와서 CI/CD를 구축해봐야겠다.
프로젝트 요약 페이지 구성은 팀원의 의견에 따라 구성을
숙소에 갔다왔다.
배가고파 라면먹고 왔다.

EC2 인스트럭션을 생성하고 키페어를 통해 SSH로 접속을 시도 했습니다.
ssh -i "C:\aws_key\codeplanner.pem" [ubuntu@---](mailto:ubuntu@---)
위 명령어를 통해 연결할 수 있게 되었다.
GPT에 따라 밑의 명령어로 서버를 준비해보고 있다.
sudo apt update
sudo apt install git nodejs npm nginx -y
sudo npm install -g pm2
.github/workflows/deploy.yml
yaml
복사편집
name: Deploy to EC2
on:
push:
branches: [ main ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up SSH
uses: webfactory/ssh-agent@v0.8.1
with:
ssh-private-key: ${{ secrets.EC2_SSH_KEY }}
- name: Deploy to EC2
run: |
ssh -o StrictHostKeyChecking=no ubuntu@<EC2_PUBLIC_IP> << 'EOF'
cd /home/ubuntu/your-project
git pull origin main
npm install
npm run build
pm2 restart all
EOF
Windows에서는 GitHub Secrets에 EC2 개인키(EC2_SSH_KEY)를 base64 인코딩해서 저장한 후, Actions에서 디코딩해서 쓰는 방식도 가능합니다.
Git bash에서 기존의 AWS pem 키를 base64로
base64 -w 0 /c/aws_key/codeplanner.pem > /c/aws_key/codeplanner.b64
명령어를 통해서 변환가능합니다.
이후에 해당 과정을 수행합니다.
New repository secret 클릭ENCODED_EC2_SSH_KEYcodeplanner.b64의 한 줄짜리 내용 붙여넣기요기서 Actions가 제대로 되지 않는 문제가 생겨서 아래의 방법대로 진행했다.
.ssh 디렉토리를 먼저 생성해줘야 합니다. 다음 명령어를 그 전에 실행해야 합니다:
mkdir -p ~/.ssh
그리고 나서 다시 아래 명령 실행(AWS키 값은 바꿔야합니다.)
echo "base64로된 AWS키" | base64 -d > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
이래도 안되서 Github action에 추가 스크립트를 작성했다.
- name: Set up SSH private key
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_PRIVATE_KEY }}" | base64 -d > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
줄바꿈에 주의해야한다!
그런데도 오류가 난다… 이번엔 새로운 유형의 오류이다.
나머진 내일해보겠다.
bash
복사편집
mysql -h <RDS_ENDPOINT> -u admin -p
.env 또는 config에 DB 정보 설정DB_HOST=xxx.rds.amazonaws.com
DB_USER=admin
DB_PASS=yourpassword
AmazonSESFullAccess 권한 부여ts
복사편집
import AWS from 'aws-sdk';
import nodemailer from 'nodemailer';
AWS.config.update({ region: 'ap-northeast-2' });
const transporter = nodemailer.createTransport({
SES: new AWS.SES(),
});
await transporter.sendMail({
from: 'noreply@yourdomain.com',
to: 'user@example.com',
subject: '배포 완료',
html: '<p>CI/CD 파이프라인이 성공적으로 작동했습니다.</p>'
});
SES에서 도메인 인증(SPF, DKIM)도 필수입니다.
| 항목 | 설명 |
|---|---|
| SSH 키 관리 | ~/.ssh/id_rsa와 .pem 파일은 GitHub Secrets로 관리 |
| VS Code GitHub 연동 | GitHub Pull Requests and Issues 확장 |
| GitHub Actions 디버깅 | Actions > Run Logs에서 확인 |
| 배포 로그 | EC2에서 pm2 logs 명령으로 확인 |