📚 2년차 프론트엔드 개발자의 12주 기초 챌린지
Week 2: 배포 환경 이해하기 (Day 6-10) — 마지막!
레스토랑에서 손님이 "음식이 안 나와요!" 클레임을 걸었다.
그러면 어떻게 원인을 찾나? CCTV를 돌려본다!
이 CCTV 기록이 바로 로그(Log)다.
로그 = 서버에서 일어난 일을 시간순으로 기록한 텍스트 파일
로그 한 줄 예시:
[2026-04-27 14:23:05] ERROR - Cannot read property 'name' of undefined
| 부분 | 의미 | 비유 |
|---|---|---|
2026-04-27 14:23:05 | 언제 발생했나 | CCTV 타임스탬프 |
ERROR | 심각도 (레벨) | 사고 등급 |
Cannot read property... | 무슨 일이 일어났나 | CCTV 영상 내용 |
| 레벨 | 의미 | 비유 |
|---|---|---|
| DEBUG | 개발 확인용 상세 정보 | 셰프의 혼잣말 |
| INFO | 정상 동작 기록 | 주문 접수 기록 |
| WARN | 당장 문제는 아니지만 주의 | "냉장고 온도 살짝 높아지는 중" |
| ERROR | 문제 발생! 특정 요청 실패 | "소스가 없어서 주문 실패" |
| FATAL | 심각! 앱 전체가 멈출 수 있음 | "가스가 샜다! 주방 폐쇄!" |
실무에서 가장 많이 보는 건 ERROR와 WARN.
pm2 logs # 모든 앱 로그 실시간 보기
pm2 logs prod-app # prod-app 로그만 보기
pm2 logs --lines 100 # 최근 100줄 보기
코드에서 에러가 나면 여기서 확인. 문제 생기면 일단 이것부터 보자!
cat /var/log/nginx/access.log # 누가 뭘 요청했나
cat /var/log/nginx/error.log # Nginx 단에서 실패한 것
상태 코드가 500이면 서버 에러, 404면 페이지를 못 찾은 것.
sudo tail -f /var/log/syslog
메모리 부족, 디스크 꽉 참 등 큰 문제가 생겼을 때 확인.
1단계: pm2 logs → 코드 에러인지 확인 (대부분 여기서 해결!)
↓
2단계: Nginx error.log → 요청이 앱까지 도달했는지 확인
↓
3단계: 시스템 로그 → 서버 컴퓨터 자체 문제인지 확인
pm2 logs | grep "ERROR"
| (파이프) = "왼쪽 결과에서 오른쪽 조건에 맞는 것만 골라줘"
| 명령어 | 의미 | 비유 |
|---|---|---|
tail -f | 실시간으로 새 로그 보기 | CCTV 실시간 모니터링 |
tail -n 50 | 마지막 50줄만 보기 | 최근 50컷만 돌려보기 |
grep "ERROR" | 특정 단어 포함된 줄만 보기 | 사고 장면만 골라보기 |
# 1. SSH로 서버 접속
ssh -i my-key.pem ubuntu@서버IP
# 2. 앱 상태 확인
pm2 list
# 3. 에러 로그 확인
pm2 logs prod-app --lines 50
# 4. 앱은 정상인데 접속 안 되면 Nginx 확인
cat /var/log/nginx/error.log | grep "502"
# 5. 원인 파악 후 재시작
pm2 restart prod-app
| 핵심 | 한 줄 정리 |
|---|---|
| 로그가 뭔지 | 서버에서 일어난 일의 기록 (CCTV) |
| 뭘 먼저 볼지 | pm2 logs (이것만 기억해도 OK) |
| 로그가 많을 때 | pm2 logs \| grep "ERROR" |
Day 6~10에서 배운 것을 한 문장으로:
서버(Day 6)에 SSH(Day 7)로 접속해서, pm2(Day 8)로 앱을 관리하고, Nginx(Day 9)로 요청을 분배하고, 문제가 생기면 로그(Day 10)로 원인을 찾는다.
| 역할 | 담당 | 비유 |
|---|---|---|
| 서버 | 컴퓨터 | 주방 건물 |
| SSH | 원격 접속 | 전화선 |
| pm2 | 프로세스 관리 | 주방 매니저 |
| Nginx | 요청 분배 | 홀 매니저 |
| 로그 | 기록 확인 | CCTV |
🔮 다음 Week 3: 실전 배포 흐름
- Day 11: CI/CD란? (GitHub Actions) — git push만 하면 자동 배포!
- Day 12-13: Docker — "내 컴퓨터에서는 되는데 서버에서 안 돼요" 해결