ASAC 6기/Streamlit

[Streamlit] 3. config와 secrets

helena1129 2025. 1. 25. 14:43

Streamlit에서 일반 설정은 config와 secrets로 관리할 수 있다.

 

config에서는 테마, 서버 설정 등을 관리,

secrets에서는 민감한 개인 정보를 관리한다.

 

나는 프로젝트에서 각각 다음과 같은 방식으로 활용했다.

config theme, server, browser
secrets databricks, api

 

 

설정을 위해서는 실행 파일과 같은 위치에 .streamlit 폴더를 만들고 그 안에 config와 secrets를 넣으면 된다.

확장자는 toml로 설정해 줘야 한다.

 

참고로 toml 파일은 터미널에서 생성할 수 있다.

[terminal]

# cd 스트림릿 파일 경로
mkdir .streamlit
echo. > .streamlit\secrets.toml

 

그렇게 구성된 경로는 다음과 같이 만들어진다.

 

[directory]

app.py
.streamlit
|--- config.toml
|--- secrets.toml
.gitignore

1. config

 

streamlit에서는 config의 테마 설정을 통해 css 적용 없이도 간단한 테마 적용이 가능하다.

사용법은 간단하다. 

config.toml 파일 내에서 다음과 같이 구성해 주면 된다.

 

[config.toml]

[theme]
primaryColor = "#2c436f"
backgroundColor = "#ffffff"
secondaryBackgroundColor = "#b5cfe4"
textColor = "#2d2d2d"

 

config theme설정을 통해서는 간단하게 주색, 배경색, 보조배경색, 글자색 적용이 가능하다.

그 외에도 base 변수로 라이트/다크 테마 설정, font 변수로 디폴트 폰트 변경 등이 가능하다.

예시와 같은 테마를 적용할 시 사이드바 테마는 이렇게 바뀐다.

 

 

 

다음으로 config에서는 서버, 브라우저 설정도 가능하다.

이건 서버 세팅 포스트에서 다시 다루도록 하겠다.

 


 

2. secrets

secrets는 외부에 노출되지 않아야 하는 개인정보를 관리할 때 사용한다.

나는 api 키, 데이터브릭스 연동 코드 관리 등을 목적으로 활용했다.

 

secrets.toml 파일 구성은 다음과 같다.

api_key='키값' 식으로 넣어주면 된다.

 

[secrets.toml]

[databricks]
host
http_path
personal_access_token

[api]
api_key

 

config와는 달리 형식은 자유롭고, 외부 노출 방지 목적이므로 깃 푸쉬를 방지하기 위해 경로를 .gitignore 파일에 추가해 줘야 한다.

 

[.gitignore]

.streamlit/secrets.toml

 

이후 코드에서의 활용은 다음과 같이 st.secrets[구분][변수명]으로 호출해서 사용하면 된다.

다음 예시는 데이터브릭스 연동을 위한 모듈 코드이다.

 

[db_connector.py]

import databricks.sql as sql
import streamlit as st

def connect_to_databricks():
    try:
        host = st.secrets["databricks"]["host"]
        http_path = st.secrets["databricks"]["http_path"]
        access_token = st.secrets["databricks"]["personal_access_token"]

        connection = sql.connect(
            server_hostname=host,
            http_path=http_path,
            access_token=access_token
        )

        st.success("✅ Databricks에 성공적으로 연결되었습니다.")
        return connection

    except Exception as e:
        st.error(f"❌ Databricks 연결에 실패했습니다.: {e}")
        return None