WEEK 17 나만무 MVP TIL(7월5일 토요일)

Devkty·2025년 7월 7일

[목표]
프로젝트 흐름/진행도 구성(파이프 라인)(진행중)
어제 했던 내용들 회고 작성(트러블슈팅)
노션과 벨로그 정리하기(진행중)
AWS 오토스케일링 적용하기(ALB)
프로젝트 전체 흐름 정리하고 멘토님께 보여드릴 문서 작성
진행 장표 작성

11:30 ~ 12:00

어제 하다 못한 AWS 설정중이다.
CI/CD에서 EC2와 Git 명령어들을 정리했다. 앞으로 수월하게 조작가능할 것이다. 노션 페이지 따로 정리했다.

12:00 ~ 13:00

식사를 하고 집안일을 하고 왔다.

13:00 ~ 15:00

어제 AWS ALB 관련 설정을 이어서 하겠다.

AutoScaling 트러블 슈팅

오토스케일링을 하고, 헬스 체크가 되지 않는다.

이 과정에서 EC2 상태를 확인하고 바로 삭제하고 다음 EC2를 켜버리므로 확인 상태 확인 유예 기간을 50분으로 늘려줬다. 유예기간 늘리고 로그로 확인중이다.

애플리케이션, 네트워크 또는 게이트웨이 로드 밸런서 대상 그룹도 해제해서 디버깅중이다. 애플리케이션, 네트워크 또는 게이트웨이 로드 밸런서 대상 그룹도 봐야한다.

1. User Data 실행 로그 확인

Amazon Linux, Ubuntu 모두 공통적으로 /var/log/cloud-init-output.log 파일에 User Data의 출력 결과가 기록됩니다.

cat /var/log/cloud-init-output.log

또는 실시간으로 모니터링:

tail -f /var/log/cloud-init-output.log

여기에서 확인할 수 있는 항목

항목예시
git clone 성공 여부Cloning into ...
npm install 오류npm ERR!
빌드 성공 여부Build complete, Build failed
PM2 시작 여부pm2 started, App [name] launched

2. cloud-init 로그 확인 (상세 흐름 추적)

less /var/log/cloud-init.log
  • 스크립트가 어느 단계에서 실행되었는지, 오류가 있었는지를 더 자세히 확인할 수 있음
  • Python traceback, permission error 등도 여기에 기록됨

3. PM2 프로세스 상태 확인

pm2 status
항목의미
online앱이 정상적으로 실행 중
stopped / errored앱이 크래시 났거나 실행 실패
restarts부팅 후 자동 재시작 여부 확인 가능

4. PM2 로그 확인

실시간 로그 확인:

pm2 logs

특정 앱 로그만 보고 싶다면:

pm2 logs codeplanner-backend
pm2 logs codeplanner-frontend

5. 포트 상태 확인 (앱이 실제로 떠 있는지)

예: 백엔드가 5000번 포트에 리스닝 중인지

sudo lsof -i -P -n | grep LISTE

예상 출력:

node    1234 ubuntu  ...  LISTEN  0.0.0.0:5000

6. 직접 API 호출로 확인

앱이 정상 리스닝 중이고, /health 같은 엔드포인트가 있다면:

curl -i http://localhost:5000/health
curl -i http://localhost:3000/

200 OK 응답이 나오면 서비스가 정상적으로 기동된 상태입니다.


7. 기타 로그 위치 (필요 시)

로그 파일설명
/var/log/syslog or /var/log/messages시스템 전반 로그
/home/ubuntu/.pm2/logsPM2 개별 로그 파일 디렉토리

유예기간 늘리고 로그도 확인을 해봤지만, 나중에 가서는 EC2가 정상이라고는 뜨는데 연결이 되지 않는다.

그러므로 세션 매니저를 우선적으로 설치하여 접속 시도를 해야할 것 같다.

ubuntu@ip-172-31-15-13:~$ tail -f /var/log/cloud-init-output.log
2025-07-05 05:49:26 - Repository configured successfully.
2025-07-05 05:49:26 - To install Node.js, run: apt-get install nodejs -y
2025-07-05 05:49:26 - You can use N|solid Runtime as a node.js alternative
2025-07-05 05:49:26 - To install N|solid Runtime, run: apt-get install nsolid -y

Reading package lists...
Building dependency tree...
Reading state information...
The following NEW packages will be installed:
nodejs
0 upgraded, 1 newly installed, 0 to remove and 34 not upgraded.
Need to get 29.7 MB of archives.
After this operation, 187 MB of additional disk space will be used.
Get:1 https://deb.nodesource.com/node_18.x nodistro/main amd64 nodejs amd64 18.20.6-1nodesource1 [29.7 MB]
dpkg-preconfigure: unable to re-open stdin: No such file or directory
Fetched 29.7 MB in 1s (29.5 MB/s)
Selecting previously unselected package nodejs.
(Reading database ... 70685 files and directories currently installed.)
Preparing to unpack .../nodejs_18.20.6-1nodesource1_amd64.deb ...
Unpacking nodejs (18.20.6-1nodesource1) ...
Setting up nodejs (18.20.6-1nodesource1) ...
Processing triggers for man-db (2.12.0-4build2) ...

Running kernel seems to be up-to-date.

No services need to be restarted.

No containers need to be restarted.

No user sessions are running outdated binaries.

No VM guests are running outdated hypervisor (qemu) binaries on this host.

added 135 packages in 11s

13 packages are looking for funding
run `npm fund` for details
npm notice
npm notice New major version of npm available! 10.8.2 -> 11.4.2
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.4.2
npm notice To update run: npm install -g npm@11.4.2
npm notice
Cloning into 'Codeplanner_Backend'...
Cloning into 'Codeplanner_Frontend'...
npm warn EBADENGINE Unsupported engine {
...
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported

added 931 packages, and audited 932 packages in 43s

168 packages are looking for funding
run `npm fund` for details

found 0 vulnerabilities

> codeplanner_backend@0.0.1 build
nest build
> 

npm warn deprecated react-beautiful-dnd@13.1.1: react-beautiful-dnd is now deprecated. Context and options: https://github.com/atlassian/react-beautiful-dnd/issues/2672

added 304 packages, and audited 305 packages in 31s

48 packages are looking for funding
run `npm fund` for details

found 0 vulnerabilities

> code-planner@0.1.0 build
next build
> 

Attention: Next.js now collects completely anonymous telemetry regarding usage.
This information is used to shape Next.js' roadmap and prioritize features.
You can learn more, including how to opt-out if you'd not like to participate in this anonymous program, by visiting the following URL:
https://nextjs.org/telemetry

▲ Next.js 15.2.4

- Environments: .env.production

Creating an optimized production build ...

15:00 ~ 19:00

health 체크를 위한 코드 추가 완료

EC2 오토밸런스를 위해서 테스트를 health를 통해 한다. 그래서 해당 코드들을 추가해서 백과 프론트에서 정상적으로 응답하는지 확인하고 로드밸런서가 연결을 해준다. 그러므로 그 응답에 답하기 위해 다음과 같은 코드를 추가한다.

백엔드

  @Get('health')
  getHealth(): string {
    return 'OK';
  }
}

프론트엔드

// 백엔드 서버 헬스체크 함수
export const checkBackendHealth = async (): Promise<boolean> => {
  try {
    // 환경변수에서 직접 URL 구성하여 중복 방지
    const baseUrl = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:5000';
    
    // /api가 이미 포함되어 있으면 제거하고 다시 추가
    const cleanBaseUrl = baseUrl.replace(/\/api$/, '');
    const healthUrl = `${cleanBaseUrl}/api/health`;
    
    const response = await fetch(healthUrl, {
      method: 'GET',
      headers: {
        'Content-Type': 'application/json',
      },
    });
    
    if (response.ok) {
      console.log('✅ 백엔드 서버 정상 동작');
      return true;
    } else {
      console.error('❌ 백엔드 서버 응답 오류:', response.status);
      return false;
    }
  } catch (error) {
    console.error('❌ 백엔드 서버 연결 실패:', error);
    return false;
  }

EC2 시작 템플릿 수정 (사양 업)

조사결과 EC2 서버가 터져서 인스턴스 유형을 t2.small로 바꿨다.

또한 정상적으로 pm2 프로세스가 실행되지 않는 문제가 있어서 다음과 같이 사용자 데이터 스크립트를 수정했다.

#!/bin/bash
# 1. 기본 패키지 설치
sudo apt-get update -y
sudo apt-get install -y git curl

# 1. 기본 패키지 설치
sudo apt-get update -y
sudo apt-get install -y curl git build-essential

# 2. Node.js 22.16.0 설치
NODE_VERSION=22.16.0
ARCH=$(uname -m)
if [ "$ARCH" == "x86_64" ]; then
  ARCH="x64"
elif [ "$ARCH" == "aarch64" ]; then
  ARCH="arm64"
else
  echo "Unsupported architecture: $ARCH"
  exit 1
fi

curl -O https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz
sudo tar -C /usr/local --strip-components=1 -xJf node-v$NODE_VERSION-linux-$ARCH.tar.xz
rm node-v$NODE_VERSION-linux-$ARCH.tar.xz

# 3. 확인
node -v  # v22.16.0
npm -v

# 4. pm2 설치
sudo npm install -g pm2

# 3. 프로젝트 클론 (이미 있다면 git pull)
if [ ! -d "/home/ubuntu/codeplanner/Codeplanner_Backend" ]; then
  sudo mkdir -p /home/ubuntu/codeplanner
  sudo chown ubuntu:ubuntu /home/ubuntu/codeplanner
  cd /home/ubuntu/codeplanner
  git clone https://github.com/Krafton-Jungle-Weight/Codeplanner_Backend.git
else
  cd /home/ubuntu/codeplanner/Codeplanner_Backend
  git pull origin main
fi

if [ ! -d "/home/ubuntu/codeplanner/Codeplanner_Frontend" ]; then
  cd /home/ubuntu/codeplanner
  git clone https://github.com/Krafton-Jungle-Weight/Codeplanner_Frontend.git
else
  cd /home/ubuntu/codeplanner/Codeplanner_Frontend
  git pull origin main
fi

# 4. 환경 변수 파일(.env) 준비 (필요시 S3 등에서 다운로드)
# 예시: aws s3 cp s3://your-bucket/.env .env
# 나같은 경우 이미 프로젝트 파일에 있어 준비 X

# 5. 백엔드 의존성 설치 및 빌드
sudo chown -R ubuntu:ubuntu /home/ubuntu/codeplanner/Codeplanner_Backend
cd /home/ubuntu/codeplanner/Codeplanner_Backend
sudo npm install
npm run build
pm2 start ecosystem.config.js --env production

# 6. 프론트엔드 의존성 설치 및 빌드
sudo chown -R ubuntu:ubuntu /home/ubuntu/codeplanner/Codeplanner_Frontend
cd /home/ubuntu/codeplanner/Codeplanner_Frontend
sudo npm install
npm run build
pm2 start ecosystem.config.js --env production

# 7. pm2로 서버 실행 (포트는 필요에 따라 조정)
export NODE_ENV=production

# 백엔드 실행 (예: 5000번 포트)
pm2 start dist/src/main.js --name codeplanner-backend || pm2 restart codeplanner-backend

# 프론트엔드 실행 (Next.js, 예: 3000번 포트)
pm2 start npm --name codeplanner-frontend -- start || pm2 restart codeplanner-frontend

pm2 save

nivo의 bar 패키지 삭제 및 메모리 모니터링 코드 추가

일단 @nivo/bar 패키지가 너무 무거워서 사용하지 않는 패키지임을 확인해서 지워버렸다.
이걸 main으로 잘 올려서 로드밸런싱을 다시 구축해보겠다.

scripts/monitor-memory.sh

#!/bin/bash

echo "=== 메모리 사용량 모니터링 ==="
echo "시간: $(date)"
echo ""

# 전체 메모리 정보
echo "전체 메모리 정보:"
free -h
echo ""

# Node.js 프로세스 메모리 사용량
echo "Node.js 프로세스 메모리 사용량:"
ps aux | grep node | grep -v grep | awk '{print $2, $3, $4, $11}' | head -10
echo ""

# PM2 프로세스 정보
echo "PM2 프로세스 정보:"
pm2 list
echo ""

# 디스크 사용량
echo "디스크 사용량:"
df -h
echo ""

# 스왑 사용량
echo "스왑 사용량:"
swapon --show
echo "" 

필요없는 패키지를 제거하고 main에 다시 올렸다. 시작 템플릿도 t2.small로 올렸으니, 되길 바라야 된다

npm uninstall @nivo/bar 해당코드로 관련 패키지 삭제 가능

현재 새로 로드밸런스를 위해 올린서버가 노드js 18.11로 설치 되어 관련 깃허브 연동 웹훅 오류가 떠서 22버전 이상으로 올리고 있다.

# n 전역 설치
sudo npm install -g n

# 버전 확인
n --version

# 또는 특정 버전 설치
sudo n 22.16.0

# 설치된 버전 확인
n list

# 22.16.0으로 전환
sudo n 22.16.0

# 버전 확인
node --version
npm --version

이후에 PATH 업데이트를 통해 22.16으로 전환한다.

# .bashrc에 PATH 추가
echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.bashrc

# 환경변수 다시 로드
source ~/.bashrc

# 또는 새 터미널 세션 시작
exec bash

그 이후에는

  1. 전역 패키지를 재설치해준다.
# PM2 재설치
sudo npm install -g pm2
  1. 프로젝트 의존성 재설치
# 백엔드
cd /home/ubuntu/codeplanner/Codeplanner_Backend
rm -rf .next node_modules package-lock.json
npm install
npm run build

# 프론트엔드
cd /home/ubuntu/codeplanner/Codeplanner_Frontend
rm -rf .next node_modules package-lock.json
npm install
npm run build

3. PM2 재시작

# PM2 프로세스 재시작
pm2 restart all

# 상태 확인
pm2 status
pm2 logs

윤호형 패키지
정적 분석 도구들 (Ubuntu)

sudo apt update
sudo apt install cppcheck -y
sudo apt install clang-tools -y

계속해서 오토스케일링 트러블 슈팅을 하고 있다. 패키지 설치하는데 권한 문제가 있어 sudo를 통해 올렸다. 노드 버전이 18 버전으로 깔아져서 22.16으로 깔리도록 설정했다.

PostgreSQL 설치문 추가!!!!!!!!!!!!!!
nginx 설치문 추가!!!!!!!!

부하발생기? → 오토스케일링을 증명할수 있다.
부하가 발생할때 스케일 업되는 것을 증명할 수 있어야한다.

할일들
목적: 월요일날 멘토님과 진행장표를 제출해야하므로
지금까지 배포에 구현된것. (각자 구현한 기능)
앞으로 구현할 것.
기술적 챌린지 종합.
진행장표 PPT 확인하고 정리해야되는것 확인
각자의 역할 확인

[팀원 질문들]
1. 프로젝트에서의 자신의 역할. 즉, 담당 업무는 무엇인가요?
2. 기술 및 구현방법, 핵심 기능, 기술적 챌린지, 구현결과 에 따라 본인의 구현한 기능의 대해서 설명해주세요. (지금까지 구현된것)
3. 현재 구현중인 기능은 무엇인가요?
4. 앞으로 구현할 것은 무엇인가요?

19:00 ~

비공개 일정

profile
모든걸 기록하며 성장하고 싶은 개발자입니다. 현재 크래프톤 정글 8기를 수료하고 구직활동 중입니다.

0개의 댓글