본문 바로가기
👀 오늘 방문자:
📊 전체 방문자:
SideProject

비전공자의 AI 개발 도전기 3편: Django로 업그레이드한 AI 도구 추천 사이트

by Lionell0901 2025. 6. 27.
반응형

안녕하세요! 지난번 Flask로 AI 강사 매칭 플랫폼을 만들고 나서 개인적으로 아쉬웠던 부분들이 있어서 새로운 프로젝트를 시작했습니다.

🤔 이전 프로젝트의 현실적인 문제들

솔직히 Flask 프로젝트는 만들고 나서 관리가 불편했던 점이 있었어요.

  • 강사 정보 추가하려면: 코드 파일 열어서 하드코딩으로 추가 → 재배포
  • 구글 스프레드시트: 처음엔 괜찮았는데 데이터 많아지니까 관리 어려움
  • 뭔가 바꾸려면: 매번 코드 수정하고 다시 올려야 함

"이거 진짜 실무에서 쓸 수 있는 수준인가?" 하는 생각이 들더라고요.

🎯 이번엔 뭘 만들어볼까?

그래서 이번엔 강사 매칭에서 아예 방향을 바꿔서 AI 도구 추천 사이트를 만들어보기로 했어요. 주변에서 이런 얘기를 자주 들었거든요.

  • "ChatGPT 말고 다른 AI는 뭐가 있어?"
  • "무료로 쓸 수 있는 이미지 AI 없나?"
  • "코딩할 때 쓸 수 있는 AI 좀 알려줘"

그리고 이번엔 제대로 된 관리 시스템을 만들어보고 싶었어요.

🛠️ 이번엔 Django로 가보자

Flask도 좋지만, 관리자 기능이 필요하다보니 Django가 더 적합할 것 같았어요. 이전에 수업들으면서 자주 들었던 Django인데, 실제로 해본 적은 없었어요. 그래도 AI와 함께 공부하면서 차근차근 해보았어요.

기술 스택 변화

이전 (Flask 버전)

  • Frontend: HTML/CSS/JavaScript
  • Backend: Flask
  • Database: 구글 스프레드시트 
  • 관리: 스프레드 시트에 직접 들어가서 관리

지금 (Django 버전)

  • Frontend: HTML/CSS/JavaScript + Bootstrap
  • Backend: Django
  • Database: SQLite → PostgreSQL
  • 관리: Django Admin (이게 핵심!)
  • 배포: Railway

💡 핵심 기능 설계

1. 체계적인 데이터 모델링

# models.py
class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    
class AITool(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField()
    website_url = models.URLField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    pricing_type = models.CharField(max_length=20, choices=PRICING_CHOICES)
    tags = models.CharField(max_length=500)
    search_text = models.TextField()  # 검색 최적화용

2. Django Admin으로 쉬운 관리

이전 프로젝트에서 가장 불편했던 점이 데이터 관리였어요. 이번에는 Django Admin을 활용해서 쉽게 관리할 수 있었어ㅛ.

  • 웹 브라우저에서 AI 도구 정보 추가/수정
  • 카테고리별 분류 관리
  • 검색 태그 최적화
  • 이미지 업로드 및 URL 관리

3. 향상된 검색 시스템

Flask 버전에서 사용했던 벡터 검색을 더욱 개선했어요:

# views.py (간소화된 검색 로직)
def search_tools(request):
    query = request.GET.get('q', '')
    
    if query:
        # 기본 키워드 검색
        tools = AITool.objects.filter(
            Q(name__icontains=query) |
            Q(description__icontains=query) |
            Q(tags__icontains=query)
        )
    else:
        tools = AITool.objects.all()
    
    return render(request, 'search.html', {'tools': tools, 'query': query})

4. 사용자 친화적인 UI

  • 카테고리별 필터링: 텍스트생성, 이미지생성, 코딩도구 등
  • 가격별 필터: 무료, 유료, 프리미엄 등
  • 반응형 디자인: 모바일에서도 편리한 사용
  • 직관적인 네비게이션: 한눈에 보기 쉬운 구조

💻 실제 개발 과정

1주차: 기본기 다지기

1-2일차: 프로젝트 셋업

# 가상환경 만들고 
conda create -n ai-tool-finder python=3.10
conda activate ai-tool-finder

# Django 설치
pip install django
django-admin startproject ai_finder .
python manage.py startapp tools

처음에 가상환경 설정에서 좀 헤맸어요. conda랑 venv 섞어서 쓰다가 꼬였거든요.

3-4일차: 데이터 모델 만들기

# models.py - 생각보다 단순했음
class Category(models.Model):
    name = models.CharField(max_length=100)
    description = models.TextField()
    
class AITool(models.Model):
    name = models.CharField(max_length=200)
    description = models.TextField()
    website_url = models.URLField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    pricing_type = models.CharField(max_length=20)
    tags = models.CharField(max_length=500)

Django Admin 설정하고 나서 정말 신세계였어요. 웹에서 클릭 몇 번으로 데이터 추가하는 게 이렇게 편할 줄이야!

5-6일차: 화면 만들기
Bootstrap 쓰니까 디자인은 생각보다 빨리 끝났어요. 반응형도 자동으로 되고요. 검색 기능은 일단 단순하게 키워드 매칭으로만 했습니다.

7일차: 배포의 험난함 여기서 진짜 고생했어요...

😅 배포 과정의 현실

첫 번째 시도: Render

처음엔 이전 프로젝트처럼 Render에 올리려고 했어요. 근데...

  • ALLOWED_HOSTS 설정 오류 - 이거 해결하는 데만 2시간
  • 마이그레이션이 자꾸 실패 - DB 테이블이 안 만들어짐
  • 빌드 타임아웃 - 15분 제한에 걸려서 계속 실패
  • 무료 플랜의 메모리 부족

무료 버전의 한계인건지 반복적인 빌드 타임아웃이 나와서 다른 서비스를 찾아봤어요.

두 번째 시도: Railway (드디어 성공!)

Railway는 정말 다르더라고요. 물론 1달 5달러를 넘어가면 추가 결제가 필요했지만, 기본적으로 Render처럼 잠자기 모드가 없어서 언제든 접속이 가능했습니다. 그리고 사용한만큼 결제되는 방식이라 일단 포트폴리오로 웹 배포를 하기에 아주 좋았어요.

  • GitHub 연동하니까 푸시만 하면 자동 배포
  • 환경변수 설정도 웹에서 클릭으로 끝
  • 빌드 속도도 훨씬 빠름
  • 메모리 제한도 더 여유로움
# settings.py - 이것만 제대로 설정하면 됨
ALLOWED_HOSTS = [
    'localhost',
    '127.0.0.1', 
    '*.railway.app',
    'web-production-b2c1.up.railway.app',
]

마지막에 로컬 데이터를 서버에 올리는 게 좀 까다로웠는데, JSON 파일로 백업해서 해결했어요.

🎉 결과물과 솔직한 소감

🔗 완성된 사이트

주소: https://web-production-b2c1.up.railway.app

현재 30여개 AI 도구가 등록되어 있고, 카테고리별로 분류해뒀어요. 추후에 각 카테고리에 맞는 도구들을 더 최신화할 예정입니다.

  • 텍스트 생성 (ChatGPT, Claude 등)
  • 이미지 생성 (Midjourney, DALL-E 등)
  • 코딩 도구 (GitHub Copilot, Cursor 등)
  • 비즈니스 도구 등

💡 이번에 진짜 배운 것들

Django Admin의 위력

# admin.py - 이것만으로도 관리 시스템 완성
@admin.register(AITool)
class AIToolAdmin(admin.ModelAdmin):
    list_display = ['name', 'category', 'pricing_type']
    list_filter = ['category', 'pricing_type'] 
    search_fields = ['name', 'description']

웹에서 데이터 추가/수정하는 게 이렇게 편할 줄 몰랐어요.

적당한 복잡도의 중요성
이전에 벡터 검색까지 썼는데, 사실 단순한 키워드 검색만으로도 충분했어요. 과도하게 복잡하게 만들 필요가 없더라고요.

호스팅 서비스 선택의 중요함
Render는 제한이 많고, Railway는 개발자 친화적이었어요. 서비스마다 특성이 정말 다르네요.

실제 사용할 수 있는 수준의 차이
이전 프로젝트는 데모용이었다면, 이번 건 진짜 사람들이 쓸 수 있는 수준이 된 것 같아요.

📈 이전 프로젝트와 비교해보니

구분 Flask 강사 매칭 Django AI 도구 추천

데이터 관리 하드코딩 (지옥) Django Admin (천국)
데이터베이스 구글 시트(API 연결도 쉽지 않음) SQLite/PostgreSQL
확장성 힘듦 쉬움
유지보수 코드 수정 필요 웹에서 바로 수정
배포 복잡함 상대적으로 쉬움

정말 차이가 크더라고요. 특히 데이터 관리 부분에서 Django Admin이 특히 좋았어요.

🚀 앞으로 해보고 싶은 것들

일단 지금 상태에서도 쓸 만하긴 한데, 더 개선해보고 싶은 부분들이 있어요.

단기적으로는

  • AI 도구 개수 늘리기 (100개 목표)
  • 카테고리 더 세분화하기
  • 사용자가 직접 도구 제보할 수 있는 기능

장기적으로는

  • 회원가입/로그인 기능
  • 북마크 기능
  • 사용자 리뷰 시스템
  • 모바일 앱도 만들어보고 싶음

그런데 일단은 지금 있는 기능들을 안정적으로 유지하는 게 먼저라고 생각하네요

🎯 포트폴리오로서의 가치

이 프로젝트는 다음과 같은 기술적 역량을 얻을 수 있었어요.

백엔드 개발

  • Django 프레임워크 활용
  • 데이터베이스 모델링 및 관계 설정
  • RESTful URL 구조 설계

프론트엔드 개발

  • 반응형 웹 디자인
  • Bootstrap 활용
  • 사용자 친화적 UI/UX

배포 및 운영

  • 클라우드 서비스 배포 경험
  • 환경변수 및 설정 관리
  • 지속적 배포 (CD) 구축

문제 해결 능력

  • 배포 환경별 이슈 해결
  • 성능 최적화
  • 사용자 피드백 반영

📝 마치며

Flask에서 시작해서 Django로 업그레이드하는 과정에서 프레임워크의 선택이 얼마나 중요한지 깨달았어요.

특히 Django Admin 같은 기능은 개발 시간을 엄청나게 단축시켜주더라고요. 이전에는 강사 정보 하나 추가하려면 코드를 수정하고 재배포해야 했는데, 이제는 웹 브라우저에서 클릭 몇 번이면 끝이에요.

실제 사용자가 있는 서비스를 만들어보고 싶다는 목표로 시작했는데, 지금은 정말 누구나 사용할 수 있는 AI 도구 추천 사이트가 되었습니다.

비슷한 프로젝트를 고민하고 계신 분들에게 조금이라도 도움이 되었으면 좋겠어요!

🔗 프로젝트 링크


다음편에서는 이 프로젝트에 AI 벡터 검색을 다시 도입해서 더 정확한 추천 시스템을 만들어보는 과정을 공유할 예정입니다!

반응형

댓글


loading