/us"> /us"> /us">
# =========================
# 0. 프로젝트 폴더로 이동
# =========================
cd <프로젝트_디렉터리>
# 역할:
# - 앱 코드가 있는 폴더로 이동
# - grep, 로그 확인 등을 여기서 진행하면 편함
# =========================
# 1. 앱 프로세스가 살아있는지 확인
# =========================
ps -ef | grep uvicorn
# 역할:
# - uvicorn으로 FastAPI를 실행 중인지 확인
ps -ef | grep gunicorn
# 역할:
# - gunicorn으로 실행 중이면 여기서 확인
ps -ef | grep python
# 역할:
# - 혹시 python 프로세스로 직접 실행 중인지 넓게 확인
# =========================
# 2. 앱이 포트를 열고 있는지 확인
# =========================
sudo ss -tulpn | grep 8000
# 역할:
# - 8000 포트에서 앱이 요청을 받고 있는지 확인
sudo netstat -tulpn | grep 8000
# 역할:
# - ss가 안 될 때 대체용
# =========================
# 3. EC2 내부에서 앱 자체 헬스체크
# =========================
curl <http://127.0.0.1:8000/health>
# 역할:
# - 앱 프로세스가 정상적으로 응답하는지 확인
# - 보통 {"status":"ok"} 기대
curl <http://127.0.0.1:8000/health/db>
# 역할:
# - 앱이 실제 DB까지 연결 가능한지 확인
# - 보통 {"status":"ok","db":"connected"} 기대
# =========================
# 4. 외부(ALB) 경유 테스트
# =========================
curl http://<ALB-DNS>/users
# 역할:
# - /users 경로가 ALB를 통해 EC2로 전달되는지 확인
curl http://<ALB-DNS>/users?skip=0&limit=10
# 역할:
# - 쿼리 파라미터가 붙은 /users 요청도 정상 라우팅되는지 확인
curl -i http://<ALB-DNS>/health
# 역할:
# - 과제 요구상 /users 외 경로는 ALB에서 404여야 함
# - 200이면 리스너 규칙이 잘못된 것
curl -i http://<ALB-DNS>/abc
# 역할:
# - 비허용 경로 테스트
# - 반드시 404 기대
# =========================
# 5. 로그 실시간 확인
# =========================
tail -f app.log
# 역할:
# - 앱 로그를 실시간으로 확인
# - 직접 파일로 로그를 남기는 경우 사용
sudo journalctl -u myapp -f
# 역할:
# - systemd 서비스로 앱을 돌릴 때 실시간 로그 확인
# - myapp은 네 서비스명으로 바꿔야 함
sudo journalctl -u myapp -n 100 --no-pager
# 역할:
# - 최근 100줄 로그 한 번에 보기
# =========================
# 6. health 요청만 골라서 보기
# =========================
tail -f app.log | grep health
# 역할:
# - /health, /health/db 요청이 실제로 들어오는지 확인
sudo journalctl -u myapp -f | grep health
# 역할:
# - systemd 로그에서 health 관련 요청만 필터링
# =========================
# 7. 환경변수 / 설정 / 시크릿 이름 확인
# =========================
cat .env | grep DB
# 역할:
# - .env 안의 DB 관련 설정 확인
env | grep DB
# 역할:
# - 현재 쉘 환경변수에 DB 관련 값이 있는지 확인
grep -R "/secret/db" .
# 역할:
# - 코드 전체에서 Secrets Manager 시크릿 이름을 어디서 참조하는지 확인
grep -R "secret" .
# 역할:
# - 시크릿 관련 코드 전체 검색
grep -R "health" .
# 역할:
# - /health, /health/db 라우트 정의 위치 찾기
grep -R "users" .
# 역할:
# - /users 관련 라우트/서비스/쿼리 코드 확인
# =========================
# 8. DB 네트워크 연결만 확인
# =========================
nc -zv <RDS-ENDPOINT> 3306
# 역할:
# - EC2에서 RDS 3306 포트까지 TCP 연결이 되는지 확인
# - 성공하면 네트워크/보안그룹은 일단 통과
telnet <RDS-ENDPOINT> 3306
# 역할:
# - nc 대체용
# - telnet 설치 필요
# =========================
# 9. 실제 DB 로그인 테스트 (MySQL 기준)
# =========================
mysql -h <RDS-ENDPOINT> -P 3306 -u <DB-USERNAME> -p
# 역할:
# - 사람이 직접 DB 접속 가능한지 확인
mysql -h <RDS-ENDPOINT> -P 3306 -u <DB-USERNAME> -p <DB-NAME>
# 역할:
# - 특정 데이터베이스까지 선택해서 접속 확인
# =========================
# 10. AWS CLI로 Secrets Manager 값 확인
# =========================
aws secretsmanager get-secret-value --secret-id /secret/db --region ap-northeast-2
# 역할:
# - 시크릿이 실제로 존재하는지 확인
# - SecretString 안 JSON 구조 확인 가능
aws secretsmanager get-secret-value --secret-id /secret/db --region ap-northeast-2 --query SecretString --output text
# 역할:
# - SecretString 내용만 깔끔하게 출력
# =========================
# 11. EC2 IAM Role / 권한 확인
# =========================
curl <http://169.254.169.254/latest/meta-data/iam/security-credentials/>
# 역할:
# - EC2에 IAM Role이 붙어 있는지 확인
aws sts get-caller-identity
# 역할:
# - 현재 인스턴스가 어떤 IAM 권한으로 AWS API를 호출하는지 확인
# =========================
# 12. 자주 쓰는 빠른 점검 순서
# =========================
ps -ef | grep uvicorn
sudo ss -tulpn | grep 8000
curl <http://127.0.0.1:8000/health>
curl <http://127.0.0.1:8000/health/db>
nc -zv <RDS-ENDPOINT> 3306
curl -i http://<ALB-DNS>/users
curl -i http://<ALB-DNS>/health
# 역할:
# - 앱 실행 여부
# - 포트 리슨 여부
# - 앱 자체 정상 여부
# - 앱-DB 연결 여부
# - EC2-RDS 네트워크 여부
# - ALB /users 전달 여부
# - ALB 비허용 경로 404 여부
# =========================
# 로그 확인 명령어 모음
# =========================
# 1) systemd 서비스 로그 실시간 보기
sudo journalctl -u myapp -f
# 역할:
# - myapp 서비스 로그를 실시간으로 확인
# - 요청, 에러, DB 연결 실패 등을 바로 볼 수 있음
# - myapp은 네 서비스명으로 바꿔야 함
# 2) 최근 로그 100줄 보기
sudo journalctl -u myapp -n 100 --no-pager
# 역할:
# - 최근 로그를 한 번에 확인
# - 방금 난 에러 확인할 때 좋음
# 3) 최근 로그 200줄 보기
sudo journalctl -u myapp -n 200 --no-pager
# 역할:
# - 좀 더 넓게 최근 로그를 확인
# 4) 에러 로그만 보기
sudo journalctl -u myapp -n 200 --no-pager | grep -i error
# 역할:
# - 최근 로그 중 error 문자열만 필터링해서 확인
# 5) health 관련 로그만 실시간 보기
sudo journalctl -u myapp -f | grep health
# 역할:
# - /health, /health/db 요청이 들어오는지 확인
# 6) users 관련 로그만 실시간 보기
sudo journalctl -u myapp -f | grep users
# 역할:
# - /users 요청이 실제 앱까지 들어오는지 확인
# 7) 로그 파일을 직접 쓰는 경우 실시간 보기
tail -f app.log
# 역할:
# - 앱이 app.log 파일에 로그를 남기면 실시간 확인 가능
# 8) 로그 파일 최근 100줄 보기
tail -n 100 app.log
# 역할:
# - 파일 로그 최근 내용 확인
# 9) 로그 파일에서 error만 보기
grep -i error app.log
# 역할:
# - app.log 안에서 에러만 필터링
# 10) 서비스명 찾기
systemctl list-units --type=service | grep -E 'uvicorn|gunicorn|fastapi|python'
# 역할:
# - myapp 대신 실제 서비스명이 뭔지 찾기