인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

뱅준님의 프로필 이미지

작성한 질문수

실전! FastAPI 입문

질문 있습니다.

해결된 질문

작성

·

72

0

안녕하세요. FastAPI로 개발한 어플리케이션을 Rocky 서버에 올려서 실행시키려고 합니다.

그런데, Sqlalchemy를 통해 DB와 연결하는 부분에서

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb8 in position 61: invalid start byte

위와 같은 에러가 계속 발생하는데요.

env에서 받아오는게 잘못됐나 싶어서 직접 스트링으로 넣어봐도 똑같은 에러가 계속 발생하고 있습니다.

서버의 locale도 찍어보면

LANG=ko_KR.UTF-8
LC_CTYPE="ko_KR.UTF-8"
LC_NUMERIC="ko_KR.UTF-8"
LC_TIME="ko_KR.UTF-8"
LC_COLLATE="ko_KR.UTF-8"
LC_MONETARY="ko_KR.UTF-8"
LC_MESSAGES="ko_KR.UTF-8"
LC_PAPER="ko_KR.UTF-8"
LC_NAME="ko_KR.UTF-8"
LC_ADDRESS="ko_KR.UTF-8"
LC_TELEPHONE="ko_KR.UTF-8"
LC_MEASUREMENT="ko_KR.UTF-8"
LC_IDENTIFICATION="ko_KR.UTF-8"
LC_ALL=

잘 설정되어있는데, 뭐가 문제일까요?

 

아래는 DB 연결하는 부분 코드입니다.

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

from core.settings.settings import settings

DATABASE_URL = f"postgresql://{settings.DB_USER}:{settings.DB_PASSWORD}@{settings.DB_HOST}:{settings.DB_PORT}/{settings.DB_NAME}"
print(f"DB: {DATABASE_URL}")

engine = create_engine(
    DATABASE_URL, echo=True, connect_args={"options": "-c search_path=schema"}
)
SessionFactory = sessionmaker(autoflush=False, autocommit=False, bind=engine)


def get_db():
    session = SessionFactory()
    try:
        yield session
    finally:
        session.close()

답변 2

0

신동현님의 프로필 이미지
신동현
지식공유자

안녕하세요, 데이터베이스의 인코딩이나 locale 값도 확인 부탁드립니다!

뱅준님의 프로필 이미지
뱅준
질문자

DB 인코딩은 UTF-8

DB locale은
datcollate: ko_KR.UTF-8

datctype: ko_KR.UTF-8

이렇게 설정되어 있습니다.

신동현님의 프로필 이미지
신동현
지식공유자

에러가 정확히 어디서 발생하는걸까요? 에러 메세지 전체를 보여주실래요?

신동현님의 프로필 이미지
신동현
지식공유자

데이터베이스 연결 부분이 문제가 되는 것 같은데 연결 접속 정보를 확인해보셔야 할 것 같습니다. 환경변수는 잘 읽어오고 있는지, 환경변수 안에 잘못된 문자열이 들어가 있지는 않은지 확인 부탁 드립니다.

뱅준님의 프로필 이미지
뱅준
질문자

환경 변수 값이 잘못되어있나 싶어 직접 스트링으로 넣어봐도 같은 에러가 발생하고 있습니다.

DB 연결정보를 똑같이 해서 로컬에서 실행했을때는 잘 연결되고 있습니다.

 

리눅스 서버를 Rocky 9.5를 사용하고 있는데 이와 관련된 문제일까요?

신동현님의 프로필 이미지
신동현
지식공유자

네, 데이터베이스나 운영체제에 때문에 발생하는 문제 같은데 그 부분 설정 값을 확인해보시라는 말씀 밖에 드릴 수가 없네요.

뱅준님의 프로필 이미지
뱅준
질문자

방화벽 때문에 막혀있었던 것 같아요 ㅜ ㅜ 감사합니다.

0

인프런 AI 인턴님의 프로필 이미지

안녕하세요, 인프런 AI 인턴입니다. 뱅준님.

우선, UnicodeDecodeError는 문자열 처리 중에 비유니코드 문자가 발견되어 발생하는 오류입니다. 해당 오류는 일반적으로 데이터 소스에서 유효하지 않은 바이트 시퀀스를 유니코드로 변환하려고 할 때 발생하게 됩니다. 몇 가지 확인해 볼 사항들을 아래에 정리했습니다.

  1. 환경 변수 인코딩 확인: settings에서 환경 변수를 가져올 때, 인코딩 정보가 잘못된 경우 이런 문제가 발생할 수 있습니다. 환경 변수에서 가져온 값에 한글이나 특수문자가 포함되어 있는지, 또는 알 수 없는 인코딩 문제는 없는지 확인해 보세요.

  2. 데이터베이스 연결 문자열: DATABASE_URL에 포함된 값들을 직접적으로 입력했을 때도 에러가 발생한다는 점에서 디코딩 문제일 가능성이 높습니다. 데이터베이스 연결 문자열이 올바르게 설정되어 있는지 확인 후, 각 구성 요소(DB_USER, DB_PASSWORD, 등)가 정확하게 유니코드로 인코딩되어 있는지도 체크해 보세요.

  3. PostgreSQL 설정 확인: 서버 설정에서 인코딩이 utf-8로 설정되어 있는지를 PostgreSQL의 설정 파일에서 확인하세요. SHOW SERVER_ENCODING; 명령어를 통해 현재 설정된 인코딩 정보를 조회할 수 있습니다.

추가적으로, 다음 URL에서 유사한 질문과 해결 방법을 참고하실 수 있습니다:
SQLAlchemy로 PostgreSQL에 연결 시 Unicode 에러 해결하기

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

뱅준님의 프로필 이미지

작성한 질문수

질문하기