반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
Tags
- #악어 #카피바라 #설치류 #카이만 #네셔널지오그래픽 #IUCNCSG.ORG
- 프랑스)#내셔널 갤러리(런던
- #선진국 대한민국 #선진국 #대한민국 #아이들 #청소년 #고민 #해결 #심리
- #스탕달 신드롬 #유럽 미술관 #우피치 미술관(피렌체
- 영국) #프라도 미술관(마드리드
- 프랑스) #바티칸 박물관(로마
- ppt) 파일 #오피스(워드
- #데일카네기 인간관계론 (고전 필독서) #인간관계론 (도서명) #인간관계개선 (가장 핵심적인 목적) #대화의기술 (실질적인 활용법) #인간관계꿀팁 (정보성) #직장생활팁 (실용성) #자기계발서 (카테고리)
- 프랑스) #오랑주리 미술관(파리
- #유럽 미술관 #오랑주리 미술관 #산 마르코 미술관# 로댕 미술관 #브레라 미술관 #샤갈 미술관 #오페라 가르니에 #귀스타브 모로 미술관 #아카데미아 갤러리 #우피치 미술관#바르베리니 궁전 #코톨드 갤러리 #스탕달 신드롬
- #자기계발 #자기성장 #자기관리 #긍정적인삶 #마인드셋 #심리학에세이 #삶의태도
- 네덜란드) #샤갈 미술관(니스
- 언론 #백업 backup #세계적으로 가장 강력한 툴
- #파이썬 #번역 프로그램 #async await #동기 비동기 #coroutine #googletrans #translator
- #평판관리 #좋은평가받는법 #관계심리학 #인간관계팁 #신뢰쌓기 #진심의힘
- #다산 정약용 #유배지에서 보낸 편지 #도덕 #용기 #염 #주역 #호연지기 #효제 #근검
- 이탈리아) #루브르 박물관(파리
- 스페인) #르네상스·바로크 조각 미술관(보르게세
- # 그리스 신화 # 로마 신화 #카오스 #가이아 #우라노스 #크로노스 #제우스 #헤라 #포세이돈 #하데스 #데메테르 #아테나 #아폴론 # 아르테미스 #헤르메스 #헤파이스토스 #계보 #그리스 로마 신화 영어 어원
- 간단한 Word 자동화 프로그램 #다산 정약용 # 유배지에서 보낸 편지 #유니코드 이스케이프
- 로마) #반 고흐 미술관(암스테르담
- 티스토리챌린지
- 파워포인트) #집(zip)파일 #아래한글(HWP) #brute-force(무차별 대입)
- #ExifTool # 메타데이터 metadata #meta information #사진
- 문서 파일 #사진 정리 #포렌식 # 출판
- 엑셀
- 오블완
- 이탈리아) #오르세 미술관(파리
- xls
- # 암호(비밀번호) 분실 # 암호(비밀번호) 찾기 #오피스(doc
Archives
- Today
- Total
아톨러브
AWS EC2 인스턴스에 설치된 백엔드(Flask + Qdrant)와 프론트엔드(React serve) 구동순서 정리 본문
AI, 클라우드, 문서, 자동화
AWS EC2 인스턴스에 설치된 백엔드(Flask + Qdrant)와 프론트엔드(React serve) 구동순서 정리
아톨 2025. 7. 25. 21:28반응형
AWS EC2 인스턴스에 설치된 백엔드(Flask + Qdrant)와 프론트엔드(React serve)를 처음부터 올바르게 구동하는 순서를 상세히 정리합니다. 현재 구동 중인 프로세스를 확인하고 종료하는 단계부터 시작하겠습니다.
AWS EC2 인스턴스에서 애플리케이션 구동 순서 (단계별)
사전 준비물:
- AWS EC2 인스턴스에 SSH로 접속 가능한 터미널 창
- sudo 권한
- 각 애플리케이션의 파일 경로 (예: /home/ec2-user/flask, /home/ec2-user/front/build)
- Flask 앱 파일명 (예: chapter5-1-3_from_4-2_from_3-7_copy.py)
1단계: 현재 실행 중인 모든 관련 프로세스 확인 및 종료
이 단계에서는 Qdrant, Flask, serve 관련 프로세스가 현재 백그라운드에서 실행 중인지 확인하고 모두 종료합니다. 그래야 깨끗한 상태에서 다시 시작할 수 있습니다.
- Qdrant Docker 컨테이너 확인 및 중지:
Bash
sudo docker ps -a
- 결과 확인: qdrant/qdrant 이미지를 사용하는 컨테이너가 Up (실행 중) 상태이거나 Exited (종료됨) 상태로 보일 수 있습니다.
- 중지 명령어: 만약 Up 상태인 Qdrant 컨테이너가 있다면, 해당 CONTAINER ID 또는 NAMES를 사용하여 중지합니다.
Bash
sudo docker stop [QDRANT_CONTAINER_ID_OR_NAME]
(예: sudo docker stop 5f7287e6328c 또는 sudo docker stop xenodochial_mendeleev) - 삭제 (선택 사항): 완전히 제거하고 새로 시작하려면 중지 후 삭제합니다. 삭제해도 데이터 볼륨은 남습니다.
Bash
sudo docker rm [QDRANT_CONTAINER_ID_OR_NAME]
- Flask 백엔드 프로세스 확인 및 중지:
Bash
ps -ef | grep python | grep "chapter5-1-3_from_4-2_from_3-7_copy.py"
- 결과 확인: 이전에 nohup으로 실행한 Flask 앱 프로세스가 보일 수 있습니다.
(예시: ec2-user 12345 1 0 10:00 ? 00:00:00 python3 chapter5-1-3_from_4-2_from_3-7_copy.py) 여기서 12345가 PID입니다. - 중지 명령어: 해당 PID를 사용하여 프로세스를 종료합니다.
Bash
sudo kill [FLASK_APP_PID]
(예: sudo kill 12345)
만약 종료되지 않으면 sudo kill -9 [FLASK_APP_PID] (강제 종료)를 시도합니다.
- 프론트엔드 serve 프로세스 확인 및 중지:
Bash
ps -ef | grep serve
- 결과 확인: serve 명령어를 사용하여 구동한 프론트엔드 앱 프로세스가 보일 수 있습니다.
(예시: ec2-user 67890 1 0 10:00 ? 00:00:00 /usr/bin/node /usr/bin/serve ...) 여기서 67890이 PID입니다. - 중지 명령어: 해당 PID를 사용하여 프로세스를 종료합니다.
Bash
sudo kill [SERVE_PID]
(예: sudo kill 67890)
만약 종료되지 않으면 sudo kill -9 [SERVE_PID] (강제 종료)를 시도합니다.

2단계: Qdrant Docker 컨테이너 구동
Qdrant는 벡터 데이터베이스로, 백엔드 Flask 앱이 의존하므로 가장 먼저 실행해야 합니다.
- Qdrant 데이터 저장소 디렉토리로 이동 (또는 확인):
Flask 앱이 있는 디렉토리(/home/ec2-user/flask)에 qdrant_storage 폴더가 위치하는 것이 일반적입니다. 해당 디렉토리로 이동합니다.
Bash
cd /home/ec2-user/flask
- 중요: 만약 qdrant_storage 폴더가 손상되었거나, 잘못된 컬렉션 차원 문제(OutputTooSmall 에러)가 계속 발생한다면, 이 폴더의 내용을 완전히 비우거나 삭제한 후 Qdrant를 재실행하세요.
Bash
sudo rm -rf qdrant_storage/* # 폴더 안의 내용만 삭제
# 또는 sudo rm -rf qdrant_storage # 폴더 자체를 삭제 (docker run 시 다시 생성됨)
- Qdrant 컨테이너 실행:
Bash
sudo docker run -d -p 6333:6333 -p 6334:6334 -v "$(pwd)/qdrant_storage:/qdrant/storage:z" --name qdrant_server qdrant/qdrant
- -d: 컨테이너를 데몬(백그라운드) 모드로 실행합니다. (터미널이 바로 해방됩니다.)
- --name qdrant_server: 컨테이너에 qdrant_server라는 식별하기 쉬운 이름을 부여합니다. (선택 사항이지만 권장)
- qdrant/qdrant: 사용할 Docker 이미지입니다.
- Qdrant 컨테이너 실행 확인:
Bash
sudo docker ps
```qdrant_server` (또는 지정한 이름) 컨테이너가 `Up` 상태로 표시되는지 확인합니다.
3단계: Flask 백엔드 애플리케이션 구동
Qdrant가 실행 중이면, Qdrant를 사용하는 Flask 백엔드 앱을 구동합니다.
- Flask 앱 디렉토리로 이동:
Bash
cd /home/ec2-user/flask - Flask 앱 백그라운드 실행:
Bash
nohup python3 chapter5-1-3_from_4-2_from_3-7_copy.py &
- nohup: 터미널 세션이 끊어져도 Flask 앱이 계속 실행됩니다.
- &: 명령어를 백그라운드로 실행합니다.
- Flask 앱 실행 확인:
Bash
ps -ef | grep python | grep "chapter5-1-3_from_4-2_from_3-7_copy.py"
Flask 앱 프로세스가 백그라운드에서 잘 실행되고 있는지 확인합니다.
- 로그 확인: Flask 앱의 초기 구동 로그는 nohup.out 파일에 기록됩니다.
Bash
tail -f nohup.out
이 명령어로 Qdrant 연결 성공 메시지(Qdrant 클라이언트 연결 및 컬렉션 정보 가져오기 성공: ...)가 뜨는지 확인합니다. (Ctrl+C로 종료)
- 데이터 재삽입 (필수):
만약 2단계에서 qdrant_storage를 초기화했다면, Qdrant test3 컬렉션에 데이터가 없습니다. Flask 앱의 /upsertPoint 엔드포인트를 호출하여 데이터를 다시 삽입해야 합니다. (예: Postman 또는 프론트엔드를 통해)
4단계: React 프론트엔드 애플리케이션 구동
이제 백엔드와 Qdrant가 모두 실행 중이므로, 사용자 인터페이스를 제공하는 React 프론트엔드 앱을 구동합니다.
- 프론트엔드 build 디렉토리로 이동:
Bash
cd /home/ec2-user/front/build
- 중요: build 디렉토리 안에 .html, .js, .css 파일들이 있는지 ls -l로 다시 한번 확인하세요. 빌드가 제대로 안 되었다면 내용이 비어있을 수 있습니다.
- serve 백그라운드 실행:
Bash
nohup serve -s . -l 3000 &
- nohup: 터미널 세션이 끊어져도 serve 프로세스가 계속 실행됩니다.
- -s .: 현재 디렉토리(build)의 정적 파일들을 서빙합니다.
- -l 3000: 3000번 포트에서 리스닝합니다. (Flask 앱의 5500번과 충돌하지 않도록 다른 포트 사용)
- &: 명령어를 백그라운드로 실행합니다.
- serve 프로세스 실행 확인:
Bash
ps -ef | grep serve
```serve` 프로세스가 백그라운드에서 잘 실행되고 있는지 확인합니다.
5단계: 최종 확인 및 AWS 보안 그룹 점검 (매우 중요)
모든 서비스가 EC2 인스턴스 내에서 실행 중이지만, 외부에서 접근하려면 AWS 보안 그룹 설정이 올바른지 확인해야 합니다.
- 웹 브라우저에서 프론트엔드 접속 시도:
http://[YOUR_EC2_PUBLIC_IP]:3000
- [YOUR_EC2_PUBLIC_IP]는 당신의 AWS EC2 인스턴스의 퍼블릭 IP 주소입니다.
- AWS 보안 그룹 인바운드 규칙 최종 점검:
- 3000번 포트 (프론트엔드 serve): 당신의 로컬 PC IP 또는 0.0.0.0/0에서 3000번 포트로의 TCP 접근이 허용되어 있는지 확인.
- 5500번 포트 (Flask 백엔드): 당신의 로컬 PC IP 또는 0.0.0.0/0에서 5500번 포트로의 TCP 접근이 허용되어 있는지 확인.
- 6333번 포트 (Qdrant gRPC): 당신의 Flask 앱이 Qdrant와 같은 EC2 인스턴스에 있으므로 이 포트는 외부에서 직접 접근할 필요는 없지만, 만약 외부에서 Qdrant에 직접 연결하는 경우가 있다면 (예: Qdrant GUI) 이 포트도 열어야 합니다. 현재 구성에서는 Flask 앱이 localhost로 Qdrant에 접속하므로 보안 그룹과 무관합니다.
이 순서대로 진행하시면 모든 컴포넌트가 올바르게 구동되고 서로 통신하여 챗봇 서비스가 웹에서 정상적으로 작동할 것입니다.
반응형
'AI, 클라우드, 문서, 자동화' 카테고리의 다른 글
| VS Code에서 API 키 관리 방법: 시스템 환경 변수 vs .env 파일 (0) | 2025.08.05 |
|---|---|
| VS Code에서 Amazon CodeWhisperer 사용하기 (0) | 2025.08.04 |
| Address already in use" (이미 사용 중인 주소) 문제 (0) | 2025.07.25 |
| React 챗봇(ChatBot) 페이지 코드 정리 (0) | 2025.07.22 |
| 간단한 RAG(Retrieval Augmented Generation) 기반 챗봇 서비스 (0) | 2025.07.20 |