🔗 청년의 시작, 확신으로 바꾸다. [창업할각?] - AI
청년 창업자를 위한 AI 기반 맞춤형 코칭 & 지원사업 추천 플랫폼
초기 창업자의 의사결정과 지원사업 연결을 돕는 Spring Boot 기반 AI 서버
- 문제 정의
- 아이디어에 대한 객관적 피드백·멘토링 기회 부족
- 방대한 지원사업 공고·복잡한 절차로 신청 어려움 → 창업 포기/실패 증가 → 지역 일자리·혁신 저하, 지역 격차 심화
-
현장 인사이트
- 한성대·신구대 창업동아리 인터뷰:
- “맞춤형 지원사업 추천 서비스가 필요하다”
- “경험 부족으로 어디서부터 시작해야 할지 모르겠다”
- 인스타그램 광고 실험: 도달 대비 클릭률 평균 이상 → 청년층의 창업 수요와 맞춤형 솔루션에 대한 높은 관심 검증
- 한성대·신구대 창업동아리 인터뷰:
-
솔루션
- <창업할각?>은 단순 정보 제공을 넘어 AI 기반 맞춤형 플랫폼으로서
- 창업자의 준비 과정과 전략 수립 지원
- 적합한 지원사업 매칭 및 사업계획서 첨삭 제공
- 주간 실행 리포트를 통한 지속적 코칭과 실행 지원 제공
- 결과적으로 지역 창업 생태계 활성화와 균형 발전에 기여
- <창업할각?>은 단순 정보 제공을 넘어 AI 기반 맞춤형 플랫폼으로서
| 분석할각? | 선정될각? |
|---|---|
![]() |
![]() |
| 사용자가 입력한 창업아이템을 기반으로 AI가 유형, 전략을 분석해 swot와 로드맵을 포함한 레포트를 생성합니다. | AI가 사업 계획서를 첨삭해주고, 지원사업에 선정되기 위한 예상 Q&A를 제공합니다. |
- 분석할각?
- 사용자 입력(역량, 자원)을 기반으로 창업 유형/전략 분석
- AI가 SWOT/실행 로드맵 생성, 각도(Angle) 수치화해 레포트 제공
- AI 서버에서 BERT 임베딩 기반으로 수천 건 공고와 빠른 유사도 매칭
- 매주 최신 레포트 생성 후 이메일 전송
- 선정될각?
- 사업계획서 문항 답변에 대한 AI 첨삭
- 문항 답변, 첨삭에 기반한 예상 질의응답 제공
-
창업 지원 사업 유사도 검색 상위 k개 반환
-
POST /ai/similar?k=30
-
Reqeust
- RequestBody
{ "idea_title": "핀테크 해외진출", "idea_description": "해외 바이어와 수출상담을 위한 플랫폼 개발" }- Query Parameters
Key Type 비고 k Long 반환 개수 -
Response
-
201
[ { "external_ref": "60693092185905", "score": 0.8539398908615112 }, { "external_ref": "174700", "score": 0.807349681854248 }, { "external_ref": "52983642732337", "score": 0.807349681854248 }, { "external_ref": "60688746952497", "score": 0.7798588275909424 }, ... 상위 k개 반환 ]Key Type 비고 external_ref String 지원사업 고유 값 score Long 유사도 점수
-
- 문서 임베딩
- SBERT(all-MiniLM-L6-v2)로 공고 텍스트·사용자 아이디어를 384차원 벡터로 변환(L2 정규화)
- 유사도 매칭
- FAISS로 코사인 기반 Top-K 후보 검색 → 공고 external_ref와 유사도 점수 반환
- 추천 흐름
- 사전 작업(앱 최초 1회 + 매일 00:00): 공고 수집·정제 → 배치 임베딩 → 인덱스 업서트
- 요청 시: 사용자 아이디어 임베딩 → FAISS 검색 → 상위 K 반환
- GPT 대비
- 토큰 한계 없이 대량 후보를 벡터 검색으로 즉시 비교
- AI 서버는 유사도 기반 Top-K 결과만 반환하고,
이후 BE(Spring Boot)에서 이를 받아 지역 적합도·마감일 임박도·규정 적합도를 가중 결합한 하이브리드 스코어를 산출 → 현실적으로 바로 활용 가능한 추천 구조
- 검색 성능: k=30 기준 평균 응답 속도 240ms → 43ms (82% 개선, 5.6배 향상)
- 안정성: 동일 입력 100회 반복 측정 시 표준편차 ±3.2ms → 일관된 결과 제공
- 사용자 반응: 인스타그램 광고 실험에서 도달 대비 클릭률 업계 평균 대비 +27%p → 창업 수요·관심 검증
- 정적 분석 & 리팩토링
- SonarQube 등으로 이슈 정리 → 심각도 순 리팩토링
- 추천 성능 최적화
- FAISS 인덱스 싱글톤(부팅 시 1회 로드), 중복 L2 정규화 제거, ID 벡터화 변환, 대량 삭제 최적화(IDSelectorArray)
- CPU 스레드 튜닝을 코드로 일원화(특히 macOS OpenMP 충돌 회피), SBERT/Torch 스레드 제한
- 운영 안정성
/health헬스체크, 꼼꼼한 예외처리, 자세한 로깅
- CI/CD
- 기본 파이프라인 구성(빌드·테스트·배포), 환경 변수 분리
- 성능 개선
- 배포 서버 k=30 기준 240ms → 43ms (−82.1%, ×5.6)
- 동일 입력 30~100회 반복 측정, p50/p95 기록
| 참고 논문 | 코드에서 참고한 부분 |
|---|---|
| 1. FAISS 공식 논문 – “FAISS: A library for efficient similarity search and clustering of dense vectors” (Johnson et al., 2017) | 전체 인덱스 구조 설계, 내적 기반 유사도 검색 방식, IDMap2 활용, 벡터 추가/삭제/저장/로드 기능 구현 |
| 2. SBERT 논문 – “Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks” (Reimers & Gurevych, 2019) | 임베딩 벡터 정규화 후 내적을 코사인 유사도로 활용, 외부 참조(ref)를 int ID로 변환하여 검색 결과 반환 구조 적용 |
- Lang/Runtime: Python 3.11
- Web: FastAPI, Uvicorn(개발) / Gunicorn+UvicornWorker(운영)
- ML: sentence-transformers/all-MiniLM-L6-v2(SBERT) AllMiniLm L6 V2, FAISS
- HTTP: httpx(Async)
- Data/Model: Pydantic v2, python-dotenv
- Infra/Obs: 로깅, 헬스체크
flowchart TD
%% Entry
U[Client] -->|/startup/recommend k=30| API[FastAPI startup_router]
%% Recommend Path
API -->|similar_top_k| REC[recommend_service]
REC -->|embed_texts| EMB[SBERT all MiniLM L6 v2\nModel Singleton]
REC -->|get_store| STORE[index singleton to FaissStore]
STORE --> IDX[FAISS index\nsupports.faiss]
REC -->|search top k cosine| IDX
IDX --> REC
REC -->|SimilarSupportDTOs| API
API -->|JSON| U
%% Ingest and Indexing
ADMIN[Admin or Batch Trigger] --> SYNC[fetch_startup_supports_async]
CRON[Scheduler optional\n00:00 daily] --> SYNC
SYNC -->|httpx| KAPI[K Startup Open API]
SYNC --> DTO[CreateStartupResponseDTOs\ndedup and clean]
DTO --> VEC[vectorize_and_upsert_from_dtos]
VEC -->|embed_texts batch| EMB
VEC -->|upsert id equals external_ref| STORE
STORE -->|persist| IDX
%% App Startup
BOOT[[App startup]] --> CPU[cpu_tuning.apply_cpu_tuning\nenv limit threads]
BOOT -->|warmup| STORE
%% Health
U -->|GET /health| API --> HEALTH["{status: ok}"]
%% Styles
classDef store fill:#eef,stroke:#5b8,stroke-width:1px;
classDef ml fill:#eef6f
sudo apt update
sudo apt install -y python3 python3-venv python3-pip
python3 --version- (1) 가상환경 생성/활성화 (필수는 아니지만 권장)
cd <프로젝트_루트> # 예: ~/AI
python3 -m venv .venv
source .venv/bin/activate
# (선택) 비활성화: deactivate- (2) 패키지 설치
python -m pip install -U pip setuptools wheel
python -m pip install -r requirements.txt개별 설치가 필요할 때:
python -m pip install fastapi uvicorn httpx python-dotenv(옵션) PyTorch 설치가 필요하고 기본 설치가 실패하면 CPU 전용 인덱스로:
python -m pip install torch --index-url https://download.pytorch.org/whl/cpu- (3) 환경 변수 설정
- 프로젝트 루트에
.env파일 생성 - 공공 데이터포털 관련 환경 변수 필요
SERVICE_KEY=본인이 발급받은 key
BASE_URL=http://apis.data.go.kr/B552735/kisedKstartupService01/getAnnouncementInformation01
sudo apt install uvicorn fastapi
# 가상환경 활성화된 상태에서
python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000--reload: 코드 변경 시 자동 재시작--host 0.0.0.0: 외부 접근 허용--port 8000: 실행 포트 (기본 8000)
엔트리포인트가 다르면
uvicorn api.main:app ...,uvicorn src.main:app ...처럼 경로를 맞춰 주세요.
- FastAPI 공식 문서: https://fastapi.tiangolo.com/
- Uvicorn 공식 문서: https://www.uvicorn.org/
externally-managed-environment: 가상환경에서 설치했는지 확인 (.venv활성화 여부)pip not found:sudo apt install -y python3-pip후python3 -m pip ...사용ModuleNotFoundError: 가상환경이 맞는지,requirements.txt설치가 끝났는지 확인- 포트 점유:
lsof -i :8000→ 프로세스 종료 후 재실행

