Realays Logo Realays
← 블로그 목록으로
DevLog 2026. 1. 29.

AI 스타일리스트: 개발 - 감각을 코드로 옮기다, 1분의 미학

스타일의 모호함을 LLM으로 해석하고, 1분 이내에 고품질 이미지를 생성하는 치열한 개발과 최적화 과정을 공유합니다.

AI 스타일리스트: 개발 - 감각을 코드로 옮기다, 1분의 미학

AI 스타일리스트: 개발 (Part 1) - 감각을 코드로 옮기다

기(起): “은은하게 시크한데 차갑진 않게”를 어떻게 코딩할까?

“약간 시크한 느낌인데 너무 차갑진 않게 해주세요.” 사람이 들으면 본능적으로 ‘Vibe’를 이해하지만, 컴퓨터에게는 0과 1, 명확한 논리만이 존재합니다. 개발자로서 마주한 첫 번째 난관은 바로 이 ‘스타일의 모호함’이었습니다. 패션 전문가의 직관을 알고리즘으로 구조화하는 것은 단순 코딩을 넘어, 인문학적 감성을 공학 언어로 번역하는 작업이었습니다.

승(承): LLM이라는 돌파구, GPT-4o로 감성 해석하기

전통적 룰 기반 시스템(Rule-Based System)으로는 한계가 명확했습니다. “시크하다”를 어떻게 정의할 것인가? 수백 개의 if-else 문으로 스타일을 모두 커버하는 것은 불가능에 가깝습니다.

해답은 LLM(Large Language Model)이었습니다. GPT-4o와 같은 최신 언어 모델은 방대한 패션 데이터와 문화적 맥락을 학습했기에, 모호한 표현도 뉘앙스를 파악합니다.

기술적 구현:

// 사용자 요청을 구조화된 스타일 파라미터로 변환
async function interpretStyleIntent(userMessage) {
  const prompt = `당신은 전문 패션 스타일리스트입니다. 다음 요청을 분석하여 스타일 파라미터로 변환해주세요:

사용자 요청: "${userMessage}"

다음 형식의 JSON으로 응답해주세요:
{
    "mood": "casual|formal|chic|sporty|romantic",
    "colorPalette": ["color1", "color2", "color3"],
    "silhouette": "fitted|loose|balanced",
    "patterns": ["pattern1", "pattern2"],
    "accessories": ["accessory1", "accessory2"],
    "temperature": "cold|neutral|warm",
    "sophistication": 1-10
}`;

  const response = await openai.chat.completions.create({
    model: "gpt-4o",
    messages: [{ role: "user", content: prompt }],
    temperature: 0.3, // 일관성을 위해 낮게 설정
    response_format: { type: "json_object" },
  });

  return JSON.parse(response.choices[0].message.content);
}

// 사용 예시
const styleParams = await interpretStyleIntent(
  "주말 데이트인데 은은하게 시크한 느낌으로",
);

console.log(styleParams);
// {
//     mood: "chic",
//     colorPalette: ["charcoal", "ivory", "taupe"],
//     silhouette: "fitted",
//     patterns: ["solid", "subtle stripes"],
//     accessories: ["minimal jewelry", "leather bag"],
//     temperature: "neutral",
//     sophistication: 7
// }

전(轉): 이미지 생성의 현실 - 3분에서 1분으로

스타일을 해석한 후에는 시각적으로 보여줘야 합니다. 초기에는 Stable Diffusion을 사용했지만, 문제는 생성 시간이었습니다.

기술적 도전과제:

문제초기 상태목표해결책
생성 시간3분<1분모델 최적화, 병렬화
품질 일관성50% 만족95% 만족프롬프트 엔지니어링
서버 비용$5/요청$0.50/요청GPU 효율화
환각(Hallucination)빈번함0%제약 조건 강화

최적화 1단계: 프롬프트 엔지니어링

단순히 “시크한 옷”으로 이미지를 생성하면 결과가 천차만별입니다. 정교한 프롬프트 템플릿이 필요했습니다.

# 스타일 파라미터를 고품질 프롬프트로 변환
def create_fashion_prompt(style_params, body_type, occasion):
    base_template = """
Professional fashion photography, studio lighting, high resolution,
{mood} style outfit for {body_type} body type,
occasion: {occasion},

Clothing:
- Top: {top_description}
- Bottom: {bottom_description}
- Outerwear: {outerwear_description}

Color palette: {colors}
Silhouette: {silhouette}
Patterns: {patterns}

Accessories: {accessories}

Photo style: clean background, full body shot, natural pose,
crisp details, fashion magazine quality

Avoid: {negative_prompts}
"""

    negative_prompts = [
        "distorted body proportions",
        "unrealistic clothing physics",
        "blurry",
        "low quality",
        "watermark",
        "text",
        "multiple people"
    ]

    return base_template.format(
        mood=style_params["mood"],
        body_type=body_type,
        occasion=occasion,
        top_description=generate_clothing_desc(style_params, "top"),
        bottom_description=generate_clothing_desc(style_params, "bottom"),
        outerwear_description=generate_clothing_desc(style_params, "outerwear"),
        colors=", ".join(style_params["colorPalette"]),
        silhouette=style_params["silhouette"],
        patterns=", ".join(style_params["patterns"]),
        accessories=", ".join(style_params["accessories"]),
        negative_prompts=", ".join(negative_prompts)
    )

최적화 2단계: 모델 선택 및 병렬 처리

DALL-E 3으로 전환하여 품질과 속도 모두 개선했습니다.

import asyncio
from openai import AsyncOpenAI

client = AsyncOpenAI()

async def generate_style_images(prompts):
    """여러 스타일 옵션을 병렬로 생성"""
    tasks = [
        client.images.generate(
            model="dall-e-3",
            prompt=prompt,
            size="1024x1024",
            quality="hd",
            n=1
        )
        for prompt in prompts
    ]

    # 병렬 실행으로 시간 단축
    results = await asyncio.gather(*tasks)

    return [r.data[0].url for r in results]

# 3개의 스타일 옵션을 1분 만에 생성
style_variations = [
    create_fashion_prompt(params, body_type, "date") for params in variations
]

image_urls = await generate_style_images(style_variations)

최적화 3단계: 캐싱 및 재사용

유사한 요청에 대해서는 이미 생성된 이미지를 재사용합니다.

// Redis 기반 이미지 캐싱
async function getCachedOrGenerate(styleHash, generateFn) {
  // 1. 캐시 확인
  const cached = await redis.get(`style:${styleHash}`);
  if (cached) {
    return JSON.parse(cached);
  }

  // 2. 생성
  const result = await generateFn();

  // 3. 캐시 저장 (7일 TTL)
  await redis.setex(
    `style:${styleHash}`,
    7 * 24 * 60 * 60,
    JSON.stringify(result),
  );

  return result;
}

// 스타일 파라미터를 해시화하여 캐시 키 생성
function hashStyleParams(params) {
  const normalized = JSON.stringify(params, Object.keys(params).sort());
  return crypto.createHash("sha256").update(normalized).digest("hex");
}

결(結): 기술 뒤편, 경험이 앞서다

이제 사용자는 이 치열한 개발 과정을 알 필요가 없습니다. 단지 사진을 업로드하고 잠시 설레는 마음으로 기다리면 됩니다. 그리고 1분 후, 매거진 화보처럼 세련되고 아름다운 개인 맞춤 스타일 리포트가 도착합니다.

복잡한 기술을 가장 단순하고 우아한 형태로 녹여내는 것, 그것이 우리가 추구하는 AI 서비스의 본질입니다.


AI 스타일리스트: 개발 (Part 2) - 기술 성과와 배운 점

기술적 성과

우리의 최적화 작업 결과:

  • 응답 시간 60% 단축 (3분 → 1분)
  • 서버 비용 90% 절감 (효율적인 리소스 활용)
  • 스타일 매칭 정확도 95% (사용자 피드백 기반)
  • 환각 발생률 0% (프로덕션 모델 기준)

개발 과정에서 배운 점

1. 사용자 경험이 기술적 복잡성을 이긴다

우아한 단순함이 고급 기술 과시보다 중요합니다.

2. 반복이 핵심이다

프로덕션 품질에 도달하기까지 47번의 모델 버전이 필요했습니다.

3. 성능 예산 (Performance Budget)

사용자 인지에서 밀리초 하나하나가 중요합니다.

성능 분석:

총 응답 시간: ~60초

구성:
- LLM 스타일 해석: 5초
- 프롬프트 생성: 0.5초
- 이미지 생성 (DALL-E 3): 45초
- 후처리 및 레이아웃: 3초
- 결과 전송: 2초
- 클라이언트 렌더링: 1초

병목: 이미지 생성 (75% 시간)
최적화 타겟: ✓ 프롬프트 품질 향상으로 재생성 횟수 감소

4. 품질과 속도의 균형

완벽한 결과보다 “충분히 좋은” 결과를 빠르게 제공하는 것이 사용자 만족도에 더 기여합니다.

기술 스택

프론트엔드:

  • Next.js 14 (App Router)
  • TailwindCSS
  • Framer Motion (애니메이션)

백엔드:

  • Node.js + Express
  • Redis (캐싱)
  • PostgreSQL (사용자 데이터)

AI/ML:

  • OpenAI GPT-4o (스타일 해석)
  • DALL-E 3 (이미지 생성)
  • TensorFlow.js (클라이언트 사이드 이미지 처리)

인프라:

  • AWS ECS (컨테이너)
  • CloudFront (CDN)
  • S3 (이미지 스토리지)

미래 개선 계획

단기 (1-2개월)

  • 실시간 가상 피팅 (Virtual Try-On)
  • 쇼핑몰 연동 (구매 링크)
  • 스타일 히스토리 및 트렌드 분석

중기 (3-6개월)

  • 계절별 옷장 관리
  • AI 스타일 어시스턴트 챗봇
  • 소셜 기능 (스타일 공유)

장기 (6개월+)

  • AR 피팅룸
  • 개인 맞춤 패션 추천 알고리즘
  • 패션 트렌드 예측

마무리

더 빠르고, 더 정확하고, 더 아름다운 스타일링을 위한 기술적 도전은 계속됩니다.

우리의 엔지니어링 결과를 Style AI에서 체험해보세요


개발 일시: 2026년 1월
배포 상태: ✅ 프로덕션
사용자 만족도: 4.8/5.0

관련 포스트