결론부터 말씀드리면, Lib_StockMart 폴더를 굳이 Stock-Agent 아래로 이동시키지 않아도 외부 폴더 상태 그대로 Codex CLI에 주입할 수 있는 방법이 있습니다.
현재 /home/qkboo/Projects/Lib_StockMart의 소스코드를 볼 수 없는 이유는, Codex CLI가 실행될 때 기본적으로 현재 터미널이 위치한 디렉터리(Stock-Agent)와 그 하위 폴더만 자동으로 컨텍스트에 스캔(인덱싱)하도록 설계되어 있기 때문입니다. 프로필에 등록하는 행위는 ‘이 경로를 신뢰한다’는 허가 선언일 뿐, 실행 시 자동으로 멀리 떨어진 다른 폴더를 끌고 오지는 않습니다.
이 구조적 한계를 깨고 독립된 두 폴더를 유기적으로 탐색하게 만드는 2가지 확실한 해결책을 제시해 드립니다.
해결책 1: 심볼릭 링크(Symbolic Link) 생성 (가장 추천)
리눅스(WSL)의 심볼릭 링크 기능을 사용하면, Lib_StockMart 폴더를 원래 위치에 그대로 둔 채 Stock-Agent 내부에 바로가기(폴더 링크)를 심을 수 있습니다. 이렇게 하면 Codex는 해당 링크를 일반 하위 디렉터리로 인식하여 완벽하게 파일을 읽고 @ 검색 대상에 포함시킵니다.
터미널을 열고 다음 명령어를 실행하세요:
1 2 3 4 5 6
# Stock-Agent 디렉터리로 이동 cd /home/qkboo/Projects/Stock-Agent
# 원래 위치에 있는 Lib_StockMart를 현재 폴더에 'lib'라는 이름의 링크로 연결 ln -s /home/qkboo/Projects/Lib_StockMart ./lib
이렇게 세팅하면 구조는 아래와 같이 유지되며, Lib_StockMart 내부 코드를 수정하면 양쪽 모두 실시간으로 반영됩니다:
💡 중요 조치 사항: 심볼릭 링크를 생성한 후, Codex 대화창에서 /reload 명령어를 입력하거나 터미널에서 **codex --profile goyangi_coder --refresh**를 실행해 새롭게 연결된 외부 라이브러리 폴더의 인덱싱을 강제로 갱신해 주어야 @ 검색에 나타나기 시작합니다.
해결책 2: 실행 시점에 다중 파일/디렉터리 명시적 주입
만약 폴더 내부에 바로가기를 심는 구조가 마음에 들지 않는다면, Codex CLI를 실행하는 스크립트 단에서 두 디렉터리를 강제로 병합하여 인덱싱하도록 명령하는 방법이 있습니다.
현재 사용 중이신 단축어(alias cx="...") 설정을 아래와 같이 변경해 보세요.
1 2 3
# 임시 인덱싱 경로로 외부 라이브러리 폴더를 추가 주입하는 단축어 예시 alias cx="codex --profile goyangi_coder --file /home/qkboo/Projects/Lib_StockMart"
동작 원리: 이렇게 실행하면 현재 위치한 Stock-Agent 소스 코드뿐만 아니라, --file 옵션으로 전달된 공통 라이브러리(Lib_StockMart) 내부의 소스 트리까지 통째로 로컬 모델(gemma-4)의 기억(Context) 속에 밀어 넣어주게 됩니다.
🧐 요약 및 퀀트 개발 환경 제언
가장 깔끔하고 현업 표준에 맞는 방식은 [해결책 1 (심볼릭 링크)]입니다. 주식 데이터 분석 엔진(Stock-Agent)을 개발하다가 공통 마켓 데이터 라이브러리(Lib_StockMart)의 내부 클래스나 유틸리티 함수를 호출해야 할 때, 코드를 물리적으로 복사할 필요 없이 @lib/ 형식으로 참조하여 곧바로 퀀트 로직 최적화 팁을 얻을 수 있습니다.
max_context_tokens: 서버의 한계치보다 약 1,000~2,000 토큰 정도 낮게 설정
autodetect_capabilities: 클라이언트가 서버의 기능을 자동으로 탐지하는 옵션입니다. 로컬 서버의 경우 가끔 툴 콜(Tool Call)이나 모델 스펙을 잘못 오인하여 맞지 않는 API 규격을 찔러넣을 수 있으므로, 기능을 끄고 명시적으로 수동 제어하는 것이 안정적입니다.
"■ {"error":{"code":400,"message":"request (24592 tokens) exceeds the available context size (24576 tokens), try increasing it","type":"exceed_context_size_error","n_prompt_tokens":24592,"n_ctx":24576}}" 에러가 나면 /clear 를 해야 하는지 아니면 서버를 재시작 해야 한느지
결과 백업하기
Codex(또는 Cline 등) 채팅창에서 /clear를 입력하면 이전 대화 기억이 완전히 포맷(초기화)되기 때문에, 말 그대로 ‘기존 대화 흐름을 완벽히 이어서’ 진행하는 것은 불가능합니다.
하지만 에이전트가 이전에 어디까지 작업했는지 컨텍스트(문맥)의 핵심 요약본만 찔러 넣어주면 바로 다음 단계부터 자연스럽게 이어서 작업하게 만들 수 있습니다.
1단계: 에이전트에게 상황 요약 요청하기 (최후의 유언)
에러가 나서 멈춘 바로 그 상태에서(아직 /clear를 치기 전), 채팅창에 아래와 같이 입력하여 에이전트 스스로 현재까지의 진행 상황을 요약하게 만듭니다. (토큰이 넘쳐도 짧은 단답형 요청은 서버가 처리해 줄 가능성이 높습니다.)
“우리가 지금까지 바꾼 파일 목록, 수정한 핵심 내용, 그리고 바로 다음에 진행해야 했던 ‘남은 작업 단계’를 리스트로 간결하게 요약해 줘.”
2단계: 요약본 복사 및 세션 초기화
에이전트가 출력해 준 요약본(진행 상황 + 남은 작업)을 마우스로 드래그하여 복사(Ctrl + C)해 둡니다.
이제 안심하고 채팅창에 /clear를 입력하여 무거워진 토큰 메모리를 완전히 비워줍니다. (컨텍스트가 0으로 리셋됩니다.)
3단계: 복사한 요약본을 주입하며 이어서 진행
초기화된 새 대화창에 복사해 둔 요약본과 함께 컨텍스트를 주입하는 프롬프트를 던집니다.
“방금 세션을 리셋했어. 이전 세션의 작업 문맥을 이어받아줘. [이전 세션 요약]
수정한 파일:src/models/trading.py
수정 내용: GARCH 모델 인디케이터 연산 로직 추가 완료
남은 작업: 변경된 로직을 기반으로 KRX API 연동 테스트 코드 작성하기
위 내용 이어서 다음 남은 작업을 바로 진행해 줘.”
💡 현실적인 추가 팁
만약 1단계에서조차 토큰이 완전히 꽉 막혀 에이전트가 대답을 아예 안 뱉는다면, 요약 요청을 건너뛰고 질문자님이 눈으로 보시던 마지막 작업 상태(예: “어떤 파일 가중치 수정하다가 멈춤”)를 기억하셨다가 3단계 형식처럼 직접 적어서 주입하시면 됩니다.
로컬 LLM을 활용한 에이전트 코딩 시에는 이처럼 “대화가 길어지면 요약본을 챙겨서 /clear 후 재주입한다”는 매커니즘을 기억해 두시면 흐름을 잃지 않고 쾌적하게 작업을 이어가실 수 있습니다.
Turn it on: type /caveman or say “talk like caveman”. Turn it off: say “normal mode”. On Claude Code, Codex, and Gemini it’s already on from message one. No command needed.
Available Commands: serve Start Ollama create Create a model show Show information for a model run Run a model stop Stop a running model pull Pull a model from a registry push Push a model to a registry signin Sign in to ollama.com signout Sign out from ollama.com list List models ps List running models cp Copy a model rm Remove a model launch Launch the Ollama menu or an integration help Help about any command
Flags: -h, --help help for ollama --nowordwrap Don't wrap words to the next line automatically --verbose Show timings for response -v, --version Show version information
Use "ollama [command] --help" for more information about a command.
설정 후 source ~/.bashrc와 sudo systemctl restart ollama를 잊지 마세요.
[ls 명령]
모델 목록 조회
1 2 3 4 5 6
$ ollama ls NAME ID SIZE MODIFIED gemma4:e2b 7fbdbf8f5e45 7.2 GB 3 days ago gemma4-e4b-32k:latest 6d2a1a196ef9 9.6 GB 4 weeks ago gemma4:e4b c6eb396dbd59 9.6 GB 4 weeks ago qwen2.5-coder:latest dae161e27b0e 4.7 GB 4 weeks ag
gemma4-e4b: 다운로드한 원래 모델
gemma4-e4b-32k: 모델의 파라미터를 수정한 Modelfile 에서 생성한 새 모델
브라우저로 11434 포트에 접속해 보면 ‘Ollama is running’ 을 확인 가능하다.
[ps 명령]
ps 명령은 실행중인 ollama 프로세스를 확인할 수 있다.
1 2 3
$ ollama ps NAME ID SIZE PROCESSOR CONTEXT UNTIL gemma4:e2b 7fbdbf8f5e45 7.7 GB 75%/25% CPU/GPU 4096 4 minutes from now
ollama 는 설치시 리눅스 계열에서는 systemd 로 설치된다. systemd 상태를 확인할 수 있다.
1 2 3 4 5 6 7
$ systemctl status ollama ● ollama.service - Ollama Service Loaded: loaded (/etc/systemd/system/ollama.service; enabled; preset: enabled) Active: active (running) since Fri 2026-05-29 22:02:07 KST; 9h ago Main PID: 165 (ollama) Tasks: 25 (limit: 28826)
[로그 확인]
로그 확인은 journalctl 를 사용한다.
1 2 3 4
journalctl -u ollama -f 5월 29 07:42:11 goyangi2 ollama[165]: time=2026-05-29T07:42:11.649+09:00 level=INFO source=server.go:1398 msg="waiting for server to become available" status="llm server loading model" 5월 29 07:42:19 goyangi2 ollama[165]: time=2026-05-29T07:42:19.188+09:00 level=INFO source=server.go:1402 msg="llama runner started in 69.72 seconds" 5월 29 07:42:19 goyangi2 ollama[165]: [GIN] 2026/05/29 - 07:42:19 | 200 | 1m10s | 127.0.0.1 | POST "/api/generate"
줄수 만큼 로그 기록 확인
1
journalctl -u ollama -n 100
[OpenAI API 호환 엔드포인트]
Ollama는 별도의 설정 없이도 OpenAI와 호환되는 API 엔드포인트를 기본적으로 제공합니다.
$ sudo systemctl show ollama --property=Environment
Modelfile 로 성능 조정
ollama 는 Modelfile 을 이용해 기존 모델의 파라미터를 조정해 새로운 모델로 서빙할 수 있다.
모델파일
Modelfile 은 텍스트 파일로 특정 모델의 파라미터, 프롬프를 조정해 새로운 모델로 생성할 수 있다.
모델은 FROM 구문에 지정한다. 1) ollma 에 등록된 모델을 사용하거나, 2) gguf 경로, 3) hf.co 의 URI 를 사용하면 된다.
1 2 3 4 5 6 7
$ ollama ls NAME ID SIZE MODIFIED qwen3-14b-han:latest bb1dc5fee044 9.0 GB 10 hours ago hf.co/unsloth/Qwen3-14B-GGUF:Q4_K_M 1c75fc1b9127 9.0 GB 10 hours ago gemma4-e4b-32k:latest 2bb4cc1b3660 9.6 GB 3 days ago my-default:latest 2bb4cc1b3660 9.6 GB 3 days ago gemma4:e4b c6eb396dbd59 9.6 GB 3 days ago
모델파일 작성
Modelfile 작성시 텍스트 파일에 FROM 구문으로 모델을 지정하고 팔라미터를 설정하면 된다.
다음은 ollama 모델에 할당한 num_ctx 토큰량 컨텍스트 크기를 직접 지정하는 예이다.
1 2
FROM qwen2.5-coder:7b # 모델 이름(ollama 다운로드) 혹은 모델의 위치 PARAMETER num_ctx 32768 # 컨텍스트 크기를 32768(32k)로 설정
[모델 생성]
새 파라미터로 모델을 생성
1
ollama create qwen-7b-32k -f Modelfile
새 모델 런치
1
ollama run qwen-7b-32k
모델 파일 파라미터
GPU 가속 최적화 (GPU Layers 설정)
Ollama는 기본적으로 GPU에 모델 레이어를 분배하지만, 때때로 VRAM 여유가 있음에도 일부를 CPU(RAM)에 남겨두는 경우가 있습니다. 모든 연산을 GPU에서 처리하도록 강제하면 속도가 비약적으로 향상됩니다.
gpu layers 는 모델 메타 정보에서 확인이 가능하다
1 2 3
FROM qwen2.5-coder:7b # -1은 가능한 모든 레이어를 GPU에 올리라는 뜻입니다. PARAMETER num_gpu -1
Context Window
ollma 모델은 **Context Window(문맥 창)**가 4096 으로 제한되는데 num_ctx 토큰량 컨텍스트 크기를 직접 지정한다.
1
PARAMETER num_ctx 32768 # 컨텍스트 크기를 32768(32k)로 설정
KV 캐시 양자화 (Flash Attention 및 메모리 절약)
32k와 같은 긴 컨텍스트를 사용할 때 가장 많은 메모리를 잡아먹는 것은 모델 자체보다 KV Cache(이전 대화를 기억하는 메모리)입니다. Ollama 최신 버전에서는 이를 압축하여 VRAM 부담을 줄일 수 있습니다.
템
1
PARAMETER temperature 1.0
무작위 토큰 선택을 제한하여 코드 일관성 유지
PARAMETER top_p 0.95 PARAMETER top_k 64
기존 모델의 파라미터 확인
다운 받은 모델의 세부 파라미터를 확인할 수 있다. 이 정보를 모델 파일로 리다이렉트해서 편집해 사용할 수 있다.
ollama show 로 모델의 파라미터를 확인하고 결과를 모델 파일로 리다이렉트하면 저장할 수 있다.
1
ollama show qwen3-14b-coding --modelfile > Modelfile
[model_providers.local_llm] name = "openai" base_url = "http://localhost:11434/v1" # openai endpoint /v1 지정 필요 wire_api = "responses" requires_openai_auth = false
[tui.model_availability_nux] "gpt-5.5" = 4
wire_api = "responses" : 최신 버전의 codex 는 response 로 지정해야 한다고 한다.
모델에 대한 provider 설정을 알아보자.
프로파일 설정
config.toml 의 model_providers 의 선언한 provider 이름은 별도의 동일한 파일로 설정한다.
해당 provider 의 동일 이름의 .codex/PROFILENAME.tomy 파일을 참조하게 된다.
이곳에 LLM endpoiint 의 세부 모델에 대한 파라미터를 선언한다.
예를 들의 위의 goyangi_coder 는 다음 같이 구성된다.
1 2 3 4 5 6 7
#.codex/goyangi_coder.config.toml model_provider = "goyangi" model = "gpt-5" approvals_reviewer = "user" # 필요 시 추가 옵션 # max_tokens = 2048 # context_length = 8192
다른 프로바이더 local_llm 프로파일은 다음 같이 구성된다.
1 2 3 4 5 6 7
#.codex/local_llm.config.toml model_provider = "local_llm" model = "gemma-4" # 서비스가 제공하는 정확안 모델 이름 approvals_reviewer = "user" # 필요 시 추가 옵션 # max_tokens = 2048 # context_length = 8192
시작
프로파일을 사용해서 codex 를 시작할 수 있다.
1
codex --profile local_llm
테스트
1
curl http://192.168.0.3:8001/v1/models
반환된 JSON 결과의 id 값이 "gemma-4"가 아니라 파일명 전체(예: "gemma-4-it-Q4_K_M.gguf")로 되어 있다면, 그 값을 그대로 model 필드에 적어주어야 매칭 실패 에러가 나지 않습니다.
한국어
Linux에서 Codex 한글 설정 Linux는 시스템 로케일이 UTF-8이면 추가 설정 없이 정상 작동합니다. locale 명령으로 확인하세요.
micromamba 는 mamba의 소규모 버전으로 독립적 실행 파일이다. 다만 mamba 와 micromamba는 환경 구성이 좀 다르다. micromamba는 mamba와 다르게 MAMBA_ROOT_PREFIX 환경 변수를 기준으로 패키지 관리가 시작되고 환경이 생성된다.
Downloading micromamba from https://github.com/mamba-org/micromamba-releases/releases/latest/download/micromamba-win-64 % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 00000000--:--:----:--:----:--:--0 00000000--:--:----:--:----:--:--0 1009280k 1009280k 003355k 00:00:020:00:02--:--:--10.8M
Installing micromamba to C:\Users\student\AppData\Local\micromamba
Adding C:\Users\student\AppData\Local\micromamba\micromamba.exe to PATH
Do you want to initialize micromamba for the shell activate command? (Y/n): y Enter the path to the micromamba prefix (default: C:\Users\student\micromamba): Initializing micromamba in C:\Users\student\micromamba C:\Users\student\AppData\Local\micromamba\micromamba.exe The following argument was not expected: -p Run with --helpfor more information.
Update
1
PS> micromamba self-update
특정 버전으로 업데이트도 가능하다.
1
PS> micromamba self-update--version1.4.6
micromamba 도움말.
1
PS> micromamba --help
2. micromamba 사용
micromamba의 가상환경은 micromamba activate /path/to/env 같이 활성화 시키는데, MAMBA_ROOT_PREFIX 환경변수를 기준으로 micromamba activate env 같이 사용할 수 있다.
현재 사용할 수 있는 환경을 출력.
1 2 3 4 5
PS> micromamba env list Name Active Path -------------------------------------------------------------- base C:\Users\student\micromamba C:\Users\student\miniconda3\envs\myenv
micromamba 명령으로 대부분의 conda 명령을 동일하게 실행할 수 있다.
1 2 3 4 5 6 7 8 9 10
micromamba info # 현재 micromamba 환경정보
# 설치한 패키지 목록 micromamba list ananconda # Anaconda 정보 micromamba list python # python 패키지 정보
# 설치 가능한 모든 python 패키지 목록 $ micromamba repoquery search python
# 설치 가능한 python=버전 패키지 목록 $ micromamba repoquery search "python>=3.11"
# 설치 가능한 jupyterlab 버전 패키지 목록 $ micromamba repoquery search "jupyterlab>=4.0"
# 현재 환경의 jupyterlab 에 연관된 의존성 패키지 목록 $ micromamba repoquery depends jupyterlab
# 현재 환경의 jupyterlab 에 연관된 모든 의존성 세부 목록 $ micromamba repoquery depends jupyterlab --recursive
패키지 연관 의존성을 트리형식으로 출력할 수 있다.
1 2 3 4 5 6 7 8
# 현재 환경의 jupyterlab 에 연관된 의존성 패키지의 트리 목록 $ micromamba repoquery depends -t jupyterlab jupyterlab[4.3.4] ├─ jupyter-lsp[2.2.0] │ ├─ python already visited │ └─ jupyter_server[2.15.0] │ ├─ python already visited
And you can ask for the inverse, which packages depend on some other package (e.g. ipython) using whoneeds.
1 2 3 4 5 6 7 8
$ micromamba repoquery whoneeds ipython
Name Version Build Depends Channel ------------------------------------------------------------------- jupyter_console 6.4.3 pyhd3eb1b0_0 ipython pkgs/main ipykernel 6.9.1 py39haa95532_0 ipython >=7.23.1 pkgs/main ipywidgets 7.6.5 pyhd3eb1b0_1 ipython >=4.0.0 pkgs/main With the -t,--tree flag, you can get the same information in a tree.
micromamba가 설치된 디렉토리를 찾습니다. 일반적으로 C:\Users<사용자 이름>.local\bin 또는 C:\micromamba에 설치됩니다. 해당 디렉토리를 삭제합니다.
환경 변수에서 micromamba 경로 제거:
Windows 검색 창에서 “환경 변수”를 검색하고 “시스템 환경 변수 편집”을 엽니다. “시스템 속성” 창에서 “환경 변수” 버튼을 클릭합니다. “시스템 변수” 섹션에서 “Path” 변수를 선택하고 “편집” 버튼을 클릭합니다. micromamba가 설치된 디렉토리 경로가 있는지 확인하고, 있다면 해당 경로를 삭제합니다. “확인” 버튼을 클릭하여 변경 사항을 저장합니다.
micromamba 관련 파일 삭제:
C:\Users<사용자 이름>.condarc 파일을 삭제합니다. (존재하는 경우) C:\Users<사용자 이름>.mambarc 파일을 삭제합니다. (존재하는 경우)
초기 시절: easy_install 2000년대 후반~2010년대 초반에는 PyPI와 pip 가 지금처럼 성숙하지 않았습니다. 당시에는 easy_install 이 사실상 유일한 선택지였고, 설치한 패키지를 제거하거나, 설치된 패키지 버전을 지정·고정하는 기능이 부족해 많은 불편이 있었습니다.
pip의 등장 pip는 requirements.txt를 통해 의존성을 고정하고 설치할 수 있는 기능을 제공하면서, 그야말로 Python 커뮤니티의 표준이 되었습니다. Python 공식 배포판에도 점차 포함되어 사실상 “파이썬 하면 pip”라는 인식이 굳어지기도 했습니다.
conda의 등장과 머신러닝 생태계 conda는 주로 NumPy, SciPy 같은 과학 컴퓨팅 라이브러리를 쉽게 설치하고자 하는 목적에서 개발되었습니다. 하지만 conda 는 별도의 패키지 저장소(Anaconda Cloud, conda-forge)를 사용하고, pip 와는 분리된 자체 의존성 해석 방식, 가상환경 관리 방식을 채택하고 있어서 생태계가 이원화되는 문제를 야기했습니다. 그 결과, 리서쳐와 서비스 개발자 간의 소통 문제가 빈번히 발생해 왔습니다.
poetry의 부상 poetry는 pyproject.toml과 poetry.lock 기반으로 의존성을 엄격히 고정하고, 여러 플랫폼에서 재현 가능한 빌드를 제공한다는 점에서 각광을 받았습니다.
단점으로는, 복잡한 의존성을 가진 프로젝트에서 해석 속도가 느리다는 점이 종종 지적되었습니다.
그럼에도 Poetry는 “제대로 동작하는 것을 보장한다” 는 확실한 장점을 가진 덕분에, 비교적 규모가 큰 팀이나 오픈소스 프로젝트에서 널리 채택되었습니다.
기타 pyenv 등. pyenv, pipx, pipenv, pip-tools 등의 도구도 각자 가상환경·의존성 관리, Python 버전 관리, 종속성 락(lock) 파일 관리 등 다양한 문제를 해결하고자 시도했습니다.
하지만 이런 도구마다 관점이 달라서, 서로 비슷한 기능이 겹치거나, 설정 방식이 달라 숙련된 개발자조차 혼란스러워하는 지점이 많았습니다.
Installation
Install uv with our standalone installers:
1 2
# On macOS and Linux. curl -LsSf https://astral.sh/uv/install.sh | sh
1 2
# On Windows. powershell -ExecutionPolicy ByPass -c"irm https://astral.sh/uv/install.ps1 | iex"
from PyPI:
1 2 3 4 5
# With pip. pip install uv
# Or pipx. pipx install uv
설치후 self update
1
uv self update
Uninstall
1 2 3 4
# Remove all data that uv has stored uv cache clean rm -r "$(uv python dir)" rm -r "$(uv tool dir)"