설치 가이드
Contexa AI Native Zero Trust 플랫폼을 Spring 프로젝트에 적용합니다. CLI 자동 설치 또는 수동 설정 중 선택할 수 있습니다.
빠른 설치 (권장)
Contexa CLI를 설치하고 하나의 명령으로 모든 설정을 자동으로 완료합니다.
1단계 — CLI 설치
curl -fsSL https://install.ctxa.ai | sh
권한 오류(Permission Denied) 발생 시 — 시스템 공용 디렉토리(예: /usr/local/bin)에 쓰기 작업을 수행하면서 권한 오류가 발생할 경우, sudo sh를 사용하여 권한을 상승시켜 실행하십시오:
curl -fsSL https://install.ctxa.ai | sudo sh
irm https://install.ctxa.ai/install.ps1 | iex
Windows 사용자 안내 — PowerShell 5.1 이상에서 동작합니다. 스크립트가 자동으로 SHA-256 체크섬을 검증하고 %LOCALAPPDATA%\Programs\Contexa에 contexa.exe를 설치한 뒤 PATH 안내를 출력합니다. Git Bash 또는 WSL을 사용하시는 경우 위의 Linux/macOS 명령을 그대로 사용하셔도 됩니다.
또는 contexa-security/contexa-cli 릴리스 페이지에서 contexa-win-x64.exe를 직접 다운로드하여 PATH에 배치하셔도 됩니다.
2단계 — 프로젝트 초기화
초기화 전에 현재 로컬 개발 환경의 Contexa 구동 적합성을 사전 테스트해 보려면 다음 명령어를 실행하십시오:
contexa init --check
환경 검사 완료 후 아래 명령을 통해 프로젝트의 대화형 자동 설정을 진행합니다:
cd your-spring-project
contexa init
설치 시작 시 Pre-installation 환경 진단이 자동 수행됩니다. 만약 도커 미기동이나 Java 버전 충돌이 감지되면 복구 가이드와 함께 설치 진행이 경고되거나 제한됩니다. 문제가 지속될 시 contexa doctor 진단을 구동하십시오.
CLI가 대화형으로 설정을 안내합니다:
- 프로젝트 유형 — 신규 프로젝트 (FULL) 또는 레거시 시스템 (SANDBOX)
- AI 보안 모드 — 관찰만 또는 즉시 차단
- AI / LLM 모델 — Ollama (로컬), OpenAI, Anthropic
- 인프라 — Standard (PostgreSQL + Ollama, 단일 서버 인메모리)가 기본. PoC/엔터프라이즈 시연용 분산 모드(Redis + Kafka 포함)는
contexa init --distributed로 활성화
CLI가 자동으로 수행하는 작업:
- 빌드 파일에
spring-boot-starter-contexa의존성 추가 application.yml에 올바른 설정 구성- 인프라용
docker-compose.yml생성 - Docker 컨테이너 시작 및 AI 모델 다운로드
3단계 — 어노테이션 추가
@EnableAISecurity
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
// AI Zero Trust로 보호할 엔드포인트에 추가
@Protectable
@GetMapping("/api/customers")
public List<Customer> getCustomers() { ... }
4단계 — 애플리케이션 시작
./gradlew bootRun
설정 완료. AI 기반 Zero Trust 보안이 활성화되었습니다. @Protectable 엔드포인트에 대한 모든 요청이 AI에 의해 실시간 분석됩니다.
레거시 시스템 연동 (SANDBOX 모드)
프로젝트에 이미 자체 인증 시스템이 있다면 SANDBOX 모드를 사용하세요. 기존 로그인을 수정하지 않고 AI 보안을 추가합니다.
@EnableAISecurity(
mode = SecurityMode.SANDBOX,
authObjectLocation = AuthObjectLocation.SESSION,
authObjectAttribute = "loginUser" // 레거시 세션 속성명
)
@SpringBootApplication
public class LegacyApplication { }
사이드 이펙트 제로 — SANDBOX 모드는 기존 보안에 간섭하지 않습니다. 로그인 페이지, 세션 관리, 접근 제어가 그대로 유지됩니다. Contexa는 @Protectable 엔드포인트에서만 동작합니다.
Contexa CLI 명령어 레퍼런스
Contexa CLI가 제공하는 주요 명령어를 상세 설명합니다. 터미널에서 contexa <command> [options] 형식으로 실행할 수 있습니다.
| 명령어 | 설명 | 주요 옵션 |
|---|---|---|
init |
현재 프로젝트에 Contexa 보안 스타터와 데이터베이스 설정을 자동으로 추가하고 인프라(Docker)를 시작합니다. |
--yes: 프롬프트 없이 기본값으로 즉시 자동 설치--force: 기존 설정을 덮어쓰고 강제 재설치--distributed: Redis, Kafka 등 분산 데모 인프라 설치--simulate: 포트 충돌이 없는 테스트용 격리 시뮬레이션 환경 구축
|
reset |
Contexa 설정 및 프로젝트 의존성, 실행 중인 Docker 컨테이너 스택을 최초 이전 상태로 완전히 롤백합니다. |
--dir <path>: 프로젝트 디렉터리 지정 (기본값: 현재 디렉터리)-s, --simulate: 시뮬레이션 환경 전체(프로젝트 내 시뮬레이션 설정 및 ctxa-sim 컨테이너/볼륨) 초기화-i, --infra: 프로젝트 전용 Docker 인프라만 초기화 (코드 제외)-c, --code: 프로젝트 소스 코드 및 설정(의존성, 어노테이션)만 초기화 (인프라 제외)-a, --all: 전체 구성요소(소스 코드 설정, 프로젝트 인프라, 시뮬레이션 스택) 강제 초기화
|
simulate |
시뮬레이션 컨테이너 스택(ctxa-sim-*)의 생명주기를 관리합니다 (하위 명령어: up, down, reset, logs, ps). |
up: 시뮬레이션 컨테이너 시작down: 시뮬레이션 컨테이너 중지reset: 시뮬레이션 데이터베이스 볼륨 초기화 (깨끗한 빈 데이터베이스 상태로 재구동)logs: 컨테이너 로그 확인ps: 컨테이너 실행 상태 점검
|
mode |
제로 트러스트 차단 정책 모드(SHADOW 또는 ENFORCE)를 동적으로 전환합니다. |
--enforce, -e: 위협 감지 시 실시간 즉시 차단 활성화--shadow, -s: 위협 감지 시 차단 없이 모니터링 로그만 기록
|
doctor |
현재 시스템의 Java 버전, Docker 데몬 기동 여부, 네트워크 연결 상태 등을 검사하고 문제 해결 가이드를 제공합니다. | N/A |
status |
가동 중인 Contexa 컨테이너 상태, DB 연결 상태, Ollama AI 모델 목록 등을 빠르게 점검합니다. | N/A |
scan |
프로젝트 코드 내 @EnableAISecurity 및 @Protectable 선언 적합성과 필수 의존성을 검사합니다. |
N/A |
사전 요구 사항
CLI 및 수동 설치 모두에 필요합니다:
| 요구 사항 | 버전 | 용도 |
|---|---|---|
| Java | 17+ | 런타임 (Gradle 툴체인으로 구성) |
| Spring Boot | 3.x | 애플리케이션 프레임워크 (4.x 버전 미지원) |
| Docker | 최신 버전 | 인프라 서비스 (PostgreSQL, Ollama) |
분산 배포 (PoC / 엔터프라이즈 시연) — contexa init --distributed 를 실행하면 PostgreSQL + Ollama 에 더해 Redis, Kafka, Zookeeper 컨테이너를 자동 생성하고 contexa.infrastructure.mode: DISTRIBUTED, spring-kafka, redisson 의존성까지 자동 추가합니다. 운영 배포는 Kubernetes + Helm 을 권장합니다.
수동 설치
CLI를 사용하지 않으려면 다음 단계를 수동으로 진행합니다.
1. 의존성 추가
dependencies {
implementation 'ai.ctxa:spring-boot-starter-contexa:0.1.0'
}
<dependency>
<groupId>ai.ctxa</groupId>
<artifactId>spring-boot-starter-contexa</artifactId>
<version>0.1.0</version>
</dependency>
2. 인프라 시작
# Standard 모드 (PostgreSQL + Ollama)
docker compose up -d
# AI 모델 다운로드
docker exec contexa-ollama ollama pull qwen2.5:14b
docker exec contexa-ollama ollama pull mxbai-embed-large
# PoC/시연용 분산 모드 (PostgreSQL + Ollama + Redis + Kafka)
# contexa init --distributed 를 실행하면 docker-compose.yml 에 모두 포함됩니다
docker compose up -d
3. 인프라 서비스
| 서비스 | 이미지 | 포트 | 모드 |
|---|---|---|---|
| PostgreSQL | pgvector/pgvector:pg16 | 5432 | Standard |
| Ollama | ollama/ollama:latest | 11434 | Standard |
| Redis | redis:7.2-alpine | 6379 | Distributed |
| Kafka | cp-kafka:7.4.0 | 9092 | Distributed |
문제 해결
자가 진단 도구 사용 안내 — Contexa 설치 또는 실행 중 문제가 발생하면 먼저 터미널에 contexa doctor를 입력하여 로컬 개발 환경 상태를 진단하십시오. 더 자세한 오류 유형별 원인과 OS별 해결책은 문제 해결 상세 가이드 (Troubleshooting) 바로가기 문서에서 확인하실 수 있습니다.
@EnableAISecurity 시동 오류 가이드
수동 설치로 spring-boot-starter-contexa 만 추가하고 @EnableAISecurity 를 선언하면, 시동 시점에 다음 세 가지 오류가 순서대로 노출될 수 있습니다. contexa-cli 가 자동으로 추가하는 의존성은 spring-boot-starter-contexa 한 개뿐이므로, 나머지는 사용자가 본인 빌드에 직접 추가해야 합니다. 각 오류마다 원인과 해결책을 정확히 표시합니다.
오류 1 — contexa.datasource.url must be configured for @EnableAISecurity
전체 메시지: java.lang.IllegalStateException: contexa.datasource.url must be configured for @EnableAISecurity. Use a dedicated Contexa database by default; sharing the application database requires explicit POC approval.
원인 — Contexa 는 보안 정책·세션·벡터 인덱스를 사용자 운영 DB 와 분리된 전용 PostgreSQL 에 저장합니다. @EnableAISecurity 가 활성화되면 contexa.datasource.url 이 반드시 설정되어 있어야 하며, 미설정 시 ContexaDataSourceIsolation 검증이 즉시 실패합니다.
해결 — 사용자 application.yml 에 contexa 전용 데이터소스 설정을 추가합니다.
contexa:
datasource:
url: jdbc:postgresql://localhost:5432/contexa
username: ${CONTEXA_DB_USERNAME:contexa}
password: ${CONTEXA_DB_PASSWORD:contexa1234!@#}
driver-class-name: org.postgresql.Driver
isolation:
contexa-owned-application: true
운영 DB 와 동일 인스턴스에 별도 스키마로 두려면 운영팀과 사전 승인 후 같은 URL 을 사용하실 수 있습니다. 기본은 별도 DB(권장).
오류 2 — No Spring AI ChatModel is configured for CONTEXA
전체 메시지: No Spring AI ChatModel is configured for CONTEXA. Add at least one Spring AI chat provider starter to your application dependencies (for example org.springframework.ai:spring-ai-starter-model-openai, org.springframework.ai:spring-ai-starter-model-anthropic, or org.springframework.ai:spring-ai-starter-model-ollama), then configure the matching provider under spring.ai.*
원인 — Contexa 의 LLM 티어 자동 설정(CoreLLMTieredAutoConfiguration) 이 ChatModel 빈을 요구하지만, classpath 에 Spring AI provider starter 가 없습니다. spring-boot-starter-contexa 는 ChatModel starter 를 transitive 의존성으로 끌고 오지 않습니다 — 어떤 provider(Ollama/OpenAI/Anthropic) 를 쓰실지는 사용자 결정이라서입니다.
해결 — 본인이 사용하실 provider starter 한 개 이상을 빌드에 추가하시고, 매칭 설정을 contexa.llm.* 아래에 두십시오. (Contexa 는 Spring AI 의 기본 자동 설정을 타지 않고, 전용 네임스페이스 contexa.llm 을 통해 모델 생성을 제어합니다.)
dependencies {
implementation 'ai.ctxa:spring-boot-starter-contexa:0.1.0'
// 아래는 @EnableAISecurity 사용 시 직접 추가 (provider 1개 이상)
implementation 'org.springframework.ai:spring-ai-starter-model-ollama'
}
contexa:
llm:
selection:
chat:
mode: dynamic-priority
priority: ollama,openai,anthropic
chat:
ollama:
baseUrl: ${CONTEXA_CHAT_OLLAMA_BASE_URL:http://127.0.0.1:11434}
model: ${CONTEXA_CHAT_OLLAMA_MODEL:qwen2.5:7b}
keepAlive: ${CONTEXA_OLLAMA_CHAT_KEEP_ALIVE:30m}
embedding:
ollama:
dedicatedRuntimeEnabled: false
model: ${CONTEXA_EMBEDDING_OLLAMA_MODEL:mxbai-embed-large}
dimensions: ${CONTEXA_EMBEDDING_OLLAMA_DIMENSIONS:1024}
OpenAI 또는 Anthropic 사용 시 spring-ai-starter-model-openai / spring-ai-starter-model-anthropic 으로 교체하시고 contexa.llm.openai.* / contexa.llm.anthropic.* 에 API 키를 설정하십시오.
오류 3 — rag-vector capability unresolved / SecurityDecisionPostProcessor 미생성
전체 메시지(요약): [ContexaCapability] rag-vector ... Resolve rag-vector first; SecurityDecisionPostProcessor is created only after UnifiedVectorService is available.
원인 — @EnableAISecurity 의 의사결정 후처리기(SecurityDecisionPostProcessor) 가 UnifiedVectorService 를 의존하고, 그 뿌리에는 Spring AI VectorStore 빈이 있습니다. classpath 에 pgvector 벡터스토어 starter 가 없으면 rag-vector capability 가 미해결되어 후속 빈 트리가 생성되지 않습니다.
해결 — pgvector 벡터스토어 starter 를 추가하시고, contexa.vectorstore.pgvector.* 를 설정합니다. PostgreSQL 컨테이너는 pgvector/pgvector:pg16 이미지를 사용하셔야 vector 확장이 자동 활성화됩니다.
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-vector-store-pgvector'
}
contexa:
vectorstore:
pgvector:
dimensions: 1024
initialize-schema: true
왜 contexa-cli 가 spring-ai-* 를 자동 추가하지 않는가 — Spring AI provider/벡터스토어 starter 를 모든 사용자에게 자동 주입하면 @EnableAISecurity 를 선언하지 않은 사용자 앱에서도 PgVectorStore / ChatModel 빈이 생성되려 시도하면서 시동이 깨집니다. Contexa 의 contract 는 "한 줄(spring-boot-starter-contexa)만 추가, 나머지는 사용자 결정" 입니다. contexa init 종료 시점에도 next.steps 에 위 의존성 라인을 그대로 출력해 드립니다.
인프라 문제 해결
컨테이너 이름 충돌 — The container name "/contexa-postgres" is already in use
전체 메시지(요약): Error response from daemon: Conflict. The container name "/contexa-postgres" is already in use by container "<hash>". You have to remove (or rename) that container to be able to reuse that name.
이어서 contexa-cli 가 출력: × Docker start failed. Run manually: docker compose up -d
원인 — 같은 이름의 컨테이너(contexa-postgres, contexa-ollama 등) 가 이미 호스트에 존재합니다. Docker 데몬은 같은 이름의 컨테이너 두 개를 동시에 가질 수 없습니다. 보통 다음 두 케이스입니다:
- 이전
contexa init실행이 만든 컨테이너가 그대로 살아있음 → 그대로 사용해도 무방 - 다른 프로젝트가 같은 이름을 점유 중 → 그쪽을 정리하거나 simulate 격리 모드로 전환
해결 방법 1 — 기존 컨테이너 그대로 사용 (권장, 데이터 보존)
# 1) 기존 컨테이너가 떠있는지 확인
docker ps --filter "name=contexa-" --format "table {{.Names}}\t{{.Status}}"
# 2) 떠있다면 그대로 두고 애플리케이션만 시작
./gradlew bootRun
해결 방법 2 — 기존 컨테이너 제거 후 재생성 (데이터 손실 주의)
# 정지 + 제거 (볼륨은 보존)
docker rm -f contexa-postgres contexa-ollama
# 분산 모드도 같이 정리하려면
docker rm -f contexa-redis contexa-zookeeper contexa-kafka
# 다시 시작
contexa init --distributed
해결 방법 3 — 격리된 시뮬레이션 모드로 전환 (운영 컨테이너 보호)
contexa init --simulate
--simulate 옵션은 컨테이너 이름 prefix 를 ctxa-sim- 로 분리하고 포트도 +20000 으로 띄워, 운영 컨테이너와 충돌 없이 사이드 바이 사이드로 사용할 수 있습니다.
| 문제 | 해결 방법 |
|---|---|
| PostgreSQL 연결 거부 | Docker 실행 확인: docker ps. 포트 5432 사용 여부 확인. |
| Ollama 연결 거부 | 컨테이너 로그 확인: docker logs contexa-ollama. 포트 11434 확인. |
| AI 모델 미발견 | 모델 다운로드: docker exec contexa-ollama ollama pull qwen2.5:14b 및 ... pull mxbai-embed-large |
vector 확장 누락 (PostgreSQL) |
이미지를 pgvector/pgvector:pg16 으로 사용하시거나, 기존 DB 라면 CREATE EXTENSION IF NOT EXISTS vector; 를 한 번 실행하십시오. |
| 포트 충돌 | 기본 포트: PostgreSQL 5432, Ollama 11434, Redis 6379, Kafka 9092 |
contexa init — 화살표 키 미작동 |
Windows: Git Bash에서 winpty contexa init 사용, 또는 Windows Terminal에서 실행 |
도움이 필요하신가요? — 설정 레퍼런스를 확인하거나 GitHub Discussions를 방문하세요.