개인 프로젝트를 하며 작성한 내용을 깃허브에 '공개' 상태로 올리고 싶은데, 위와 같이 민감한 키가 함께 올라가면 개인 프로젝트든 팀 프로젝트든 무척 큰 문제가 된다. 나중에 알아채고 지운 뒤 커밋을 하여도 아무튼 로그에는 남기 때문에 꽤나 머리가 아픈 상황.
파이썬 등의 경우, '.env' 라는 이름의 파일을 두어 민감한 정보 등을 모아 읽어들여 사용하고, 해당 파일은 깃에 올리지 않는다.
그리고 배포 시에는 플랫폼에서 해당 환경변수들을 직접 사용자가 입력하여 사용하는 등의 지원이 잘 되어있다.
유니티에서는 스크립트를 읽을 수 있는 배포환경에서 민감한 내용을 따로 숨기는 방식은 찾지 못했기 때문에, '.env'와 같은 방식을 유니티에서도 사용하면 되겠다.
1. env 파일 생성 (예: Assets/.env)
WEB_SOCKET_URL=wss://ssyoutube.****
CHANNEL_ID=UCOU****
PAGE_IDX=mNzL****
1+. env 작성 가이드 파일 생성(예: Assets/.env_template)
다른 사용자가 작성하기 용이하도록 탬플릿을 작성 해 놓자.
".env"파일을 ignore 되기 전에 미리 커밋 해 두는 방식도 생각할 수 있지만, 프로젝트의 진행에 따라 필요한 내용이 많아질 수 있어 아래와 같은 방식이 좋을 듯 하다.
WEB_SOCKET_URL=
CHANNEL_ID=
PAGE_IDX=
2. .gitignore에 내용 추가.
/Assets/.env
3. Unity에서 .env 파일 파싱 클래스 작성
using System.Collections.Generic;
using System.IO;
using UnityEngine;
public static class EnvLoader
{
private static Dictionary<string, string> envValues = new Dictionary<string, string>();
public static void LoadEnv(string path)
{
envValues.Clear();
if (!File.Exists(path))
{
Debug.LogWarning($".env 파일이 존재하지 않습니다: {path}");
return;
}
var lines = File.ReadAllLines(path);
foreach (var line in lines)
{
if (string.IsNullOrWhiteSpace(line) || line.StartsWith("#")) continue;
var parts = line.Split('=');
if (parts.Length != 2) continue;
var key = parts[0].Trim();
var value = parts[1].Trim();
envValues[key] = value;
}
Debug.Log(".env 파일 로드 완료");
}
public static string Get(string key, string defaultValue = "")
{
return envValues.TryGetValue(key, out var value) ? value : defaultValue;
}
}
4. 외부 클래스에서 사용하기
public class UnityWebSocketClient : MonoBehaviour
{
private static string WebSocketUrl;
private static string ChannelId;
private static string PageIdx;
void Awake()
{
EnvLoader.LoadEnv(Application.dataPath + "/.env");
WebSocketUrl = EnvLoader.Get("WEB_SOCKET_URL", "웹 소켓 URL을 여기에 입력하세요");
ChannelId = EnvLoader.Get("CHANNEL_ID", "채널 ID를 여기에 입력하세요");
PageIdx = EnvLoader.Get("PAGE_IDX", "페이지 인덱스를 여기에 입력하세요");
Debug.Log($"WebSocket URL: {WebSocketUrl}");
}
}
기타 주의사항
위 방식과 다르게 .env를 Resources 폴더에 넣고, Resources.Load() 를 통해 파싱할 생각이라면, 정상적으로 읽어들이기 위해 마침표를 지우고 확장자를 txt나 json으로 두어야 할 것이다. (ex. "Resoruces/env.txt")
'Dev > Unity(C#)' 카테고리의 다른 글
유니티 VFX Mesh 의 인스펙터에서 Surface Options가 보이지 않는 문제 (0) | 2024.11.11 |
---|---|
유니티 vfx graph 에서 셰이더 그래프를 사용할 수 없는 문제 (1) | 2024.11.11 |
[UI Toolkit] 일반적으로 런타임 중 UXML(VisualTreeAsset)의 동적 생성은 불가능 (0) | 2024.08.17 |
UI Toolkit, Height 사이즈 조정이 안되는 문제 (0) | 2024.07.20 |
MonoBehaviour < 이름에 대해 (0) | 2024.07.01 |