Coding History/Team Project

팀플) API 오류 해결, 서버 재배포

BlackBirdIT 2024. 11. 12. 14:03


위 이미지와 같이 갑자기 API 요청들이 먹통이 됐는데, 처음엔 왜이러지 싶어서 파이썬 서버를 열어서 다시 확인해봤다.



똑같다.

곰곰이 생각해보니까 아마 MAP API를 지금 스프링에서도 연결하면서 문제가 된 것 같다는 생각이 들었다.

그래서 설정을 추가함.

위가 내 원래 서버, 도커서버인데.. 안되네?

그래서 도커 컴포즈에서 url을 고정 시킬 방법을 찾아봄.


아 그럴 필요없네 알아서 컨테이너 이름으로 url이 설정된다고 한다.


걍 설정 지워서 해결함.

보니까 내 API에서 보내는 요청은 IP 주소 형식이고 Spring에서는 웹사이트 url인데 이거 설정하기 귀찮다,,


근데 또 별게로 항상 켜두고 테스트를 해서 몰랐는데

배포한 서버에서는 리소스 관리 때문에 일정시간 접근이 없을시에 서버를 끄는데 이 때 DB 접근이 필요한 요청을 보내면

이런 문제가 생김.

한번 더 요청하면 잘 뜸.

그래서 DB 커넥션에 대한 코드를 추가함.

# db_utils.py

import logging
import time
from sqlalchemy.exc import OperationalError


def retry_query(session, query, retries=3, delay=5):
    """
    데이터베이스 쿼리를 재시도하는 함수

    Args:
        session: SQLAlchemy 세션
        query: 실행할 쿼리
        retries: 재시도 횟수
        delay: 재시도 전 대기 시간 (초 단위)

    Returns:
        쿼리 결과 또는 예외 발생 시 None 반환
    """
    for i in range(retries):
        try:
            return query.all()
        except OperationalError as e:
            if i < retries - 1:
                logging.warning(f"Query failed with error: {e}. Retrying in {delay} seconds...")
                time.sleep(delay)
            else:
                logging.error(f"All retries failed for query: {e}")
                return None

이렇게 추가했다.

제대로 작동하는 것 까지 확인하고.

이제 재배포 하면 됨.


재배포 와중에 도커 메모리 공간 부족하다고 해서 싹 정리한번 했다.

빌드 푸쉬 했고,

삭제하고 다시 가져오는중

pull 완료했고 테스트해봤는데 DB 접근을 못해서 둘 다 껐다가 다시 켜봄

그래도 안되네

두개 네트워크가 다른걸 확인.

통합시키고 테스트 해보니까 이제 잘 된다. 굳 다시 쓰고 있던 포스팅으로 가서 Spring 구현하면 될듯