curl http://192.168.17.90:5000/sendMessage
# Failed to connect: Timeout was reached
이를 해결 하기 위해 AWS 보안그룹 확인

해당 문제는 따로 설정해둔 보안그룹을 내가 쓰고 있는 서비스에서는 사용하지 않는 문제였음을 확인
해결하기 위해 기존에 사용중이던 보안 그룹에 설정을 추가함
AWS 보안 그룹 설정:
Type: Custom TCP
Port: 5001
Source: 0.0.0.0/0
Description: Flask API
실제 내 서비스에서 사용하는 보안 그룹

OpenAI Assistant 컨텍스트 혼동 문제
사용자: "서울 날씨 알려줘"
AI: "현재 실시간 날씨 정보를 제공할 수 없습니다..."
사용자: "나이에 대하여 알려줘"
AI: "현재 실시간 날씨 정보를 제공할 수 없습니다..." (잘못된 답변)
어시스턴트 스레드가 이전 대화의 맥락에서 현재 질문의 해석을 이해하지 못하는 상황 발생
OpenAI Assistant Instructions 개선

reversed() 사용의 논리적 오류
messages = client.beta.threads.messages.list(thread_id=thread_id)
# messages.data는 이미 최신순으로 정렬됨
# [0]: 가장 최신 메시지
# [1]: 두 번째 최신 메시지
# [2]: 가장 오래된 메시지
문제가 된 이유
for msg in reversed(messages.data): # ← 최신순을 역순으로 뒤집음
if msg.role == "assistant":
# 첫 번째로 만나는 = 가장 오래된 Assistant 응답!
return msg # ← 항상 "현재 실시간 날씨 정보를 제공할 수 없습니다..." 반환
메시지 구조
Thread 내 메시지 순서 (API 반환):
[0] Assistant: "반도체는 ...." (최신 - 이력 답변)
[1] User: "반도체"
[2] Assistant: "기술은 ...." (성별 답변)
[3] User: "기술"
[4] Assistant: "현재 실시간 날씨 정보를 제공할 수 없습니다..." (가장 오래된 - 나이 답변)
[5] User: "날씨"
reversed() 사용 시 순회: [5]→[4]→[3]→[2]→[1]→[0]
첫 번째 assistant = [4] = "현재 실시간 날씨 정보를 제공할 수 없습니다..." ← 항상 이것만!
그래서 현재의 구조를 reversed() 제거 및 올바른 순회를 하게 바꾸었고 메시지 추출 로직을 현재의 run_id를 우선 사용하게 수정했다.
git pull origin master
# ❌ error: Your local changes to the following files would be overwritten by merge:
# backend_last_final_realfinal.py
# Please commit your changes or stash them before you merge.
git add backend_last_final_realfinal.py
git commit -m "서버에서의 로컬 변경사항"
# ✅ [master 3191876] 서버에서의 로컬 변경사항
# 1 file changed, 9 insertions(+), 1 deletion(-)
git pull origin master
# ❌ fatal: Need to specify how to reconcile divergent branches.
git config pull.rebase false # merge 방식 설정
git pull origin master
# ✅ Auto-merging backend_last_final_realfinal.py
# ✅ Merge made by the 'ort' strategy.
# backend_last_final_realfinal.py | 39 +++++++++++++++++++++++++++++----------
# 1 file changed, 29 insertions(+), 10 deletions(-)
- 요청에 대한 흐름
1. 인터넷 → AWS Security Group
임의 포트 → 포트 80, 443 (허용된 포트만 통과)
2. 포트 80 (nginx:HTTP)
HTTP 요청 수신
↓
301 Redirect 응답: "https://..."로 이동하세요
3. 포트 443 (nginx:HTTPS)
HTTPS 요청 수신
SSL 인증서로 암호화 해제
↓
proxy_pass로 내부 전달
4. 포트 5001 (Flask 앱)
실제 비즈니스 로직 처리
API 응답 생성 (/, /hello, /sendMessage)
- 응답에 대한 흐름
4. 포트 5001 (Flask 앱)
JSON/HTML 응답 생성
↓
3. 포트 443 (nginx:HTTPS)
SSL로 응답 암호화
클라이언트로 전달
↓
2. AWS Security Group
아웃바운드 트래픽 허용
↓
1. 인터넷 → 사용자
암호화된 HTTPS 응답 수신
- https 요청 시
사용자:임의포트 → 80 → 443 → 5001 → 443 → 사용자:임의포트
- http 요청 시
사용자:임의포트 → 80 → 사용자:임의포트 (301 응답)
사용자:임의포트 → 443 → 5001 → 443 → 사용자:임의포트
위의 과정이 이해가 안가는 경우를 위한 부연 설명
1. 사용자가 80 포트로 http 요청을 한다.
사용자 → 포트 80: "http://example.com 접속하고 싶어요"
포트 80 → 사용자: "301 응답 - https://example.com으로 다시 요청하세요"
해서 한번의 요청이 끝나고 다음으로 진행되는게
2. 사용자가 443 포트로 https 요청을 한다.
사용자 → 포트 443: "https://example.com 접속하고 싶어요" (새로운 요청)
포트 443 → 포트 5001 → 포트 443 → 사용자: "실제 웹페이지 응답"
하게 진행된다.