이번 AI 실습 특강의 주제는 지식 증류(Knowledge Distillation)다. 크고 성능 좋은 모델이 만들어낸 결과를 작은 모델이 학습하게 해서, 가벼운 모델로도 특정 작업을 처리하게 만드는 것이 목표다. 전체는 네 단계로 진행된다. 먼저 정답이 없는 데이터에 거대 모델로 정답을 붙이고, 그 데이터로 소형 모델을 LoRA 파인튜닝하고, 양자화를 얹어 더 큰 모델까지 학습시키고, 마지막으로 vLLM으로 서빙해서 성능을 비교한다. 이번 글에서는 그 첫 단계인 Pseudo Labeling을 다룬다. 01 지식 증류는 큰 모델의 답을 작은 모델에게 물려주는 것이다큰 모델은 성능이 좋지만 무겁고 비싸다. 작은 모델은 싸고 빠르지만 혼자 학습해서는 성능이 안 나온다. 그래서 큰 모델을 선생(Teacher)..
싸피 공통 프로젝트에서 익명 채팅 서비스를 만들었고, 나는 AI 파트를 맡았다. 내가 담당한 기능은 채팅방에서 실시간으로 범죄 의심 패턴을 찾아내는 것이었다.이 기능은 백엔드 서버가 채팅 메시지를 모아서 큐에 넣고, AI 서버가 큐에서 꺼내 분석하고 결과를 돌려주는 구조로 설계됐다. 큐를 쓰기로 정한 건 팀의 설계 결정이었고, 큐에서 꺼내는 쪽이 내 담당이었다. 문제는 내가 메시지 큐를 만져본 적이 없다는 것이었다. 일정이 촘촘했기에, 구현하면서 개념을 주워 담았다. 기능은 돌아갔고 MR도 통과했는데, 며칠 지나니 큐를 왜 durable로 잡았는지 ACK를 왜 콜백 뒤에 찍었는지, 솔직히 메시지 큐가 뭔지도 설명을 못할 수준이었다.그래서 코드와 설계 명세서를 다시 열고, 컨슈머 하나 만드는 데 실제로 필..
앞서 만든 이미지를 서버에 올리는 게 다음 일이었다. 수동으로 하면 서버에 접속해서 코드 받고, 빌드하고, 기존 컨테이너 지우고, 새로 띄우고, 잘 떴는지 확인하는 다섯 단계다. 코드 고칠 때마다 이걸 반복하는 것도 번거롭지만, 진짜 문제는 중간에 실패했을 때다. 기존 컨테이너는 이미 지웠는데 새 컨테이너가 안 뜨면 서비스가 죽은 채로 남는다. 이 절차를 대신 실행해주는 게 젠킨스이고, 팀이 이미 쓰고 있어서 AI 배포도 거기에 얹기로 했다. 01 Jenkinsfile을 올렸는데 아무 일도 안 일어났다젠킨스는 정해진 순서로 명령을 대신 실행해주는 서버다. 실행할 절차는 `Jenkinsfile`이라는 파일에 적는다. 코드 받고, 빌드하고, 기존 컨테이너 교체하고, 잘 떴는지 확인하는 순서를 여기에 쭉 써두..
싸피 공통 프로젝트에서 AI 파트를 맡았다. 배포 얘기가 나올 즈음 인프라 담당 팀원이 백엔드와 프론트를 서버에 올려둔 상태였고, 나는 AI 서버만 도커로 감싸면 되는 상황이었다.문제는 내가 도커를 만져본 적이 없다는 것이었다.그래서 한 줄씩 왜 필요한지 찾아보면서 정리했다. 도커를 처음 보는 사람 기준으로 썼고, 젠킨스 배포는 2편에서 이어진다. 01 코드는 깃에 있는데 왜 굳이 이미지로 만드나코드는 이미 저장소에 있으니 서버에서 받아서 실행하면 되는 것 아닌가.안 된다. 서버는 내 노트북과 다른 컴퓨터이기 때문이다. 내 쪽에는 파이썬 3.11이 깔려 있고 영상 처리에 쓰는 ffmpeg도 있는데 서버에는 없다. 코드만 올리면 실행하자마자 import에서 죽는다. 서버에 필요한 걸 하나씩 깔아줄 수도 있..
싸피 2학기 공통 프로젝트를 진행하면서 이번에 처음으로 인프라 쪽을 건드려보기로 했다.팀의 인프라 담당 팀원이 인프라 대부분을 맡아줬고, 나는 AI 파트 쪽에 필요한 부분만 관리하는 식이었다.기술적 논의를 진행하면서 리버시 프록시, 인바운드, 인증서 갱신과 같은 말들이 후두둑 쏟아지는데, 친하지 않는 용어들이라서 따로 메모해두고 공부하기로 했다. 이 글은 그 메모를 순서대로 다시 세운 것이다. 배포를 직접 해본 경험담이 아니라, 배포되는 걸 옆에서 보면서 "이게 왜 이렇게 되는 건가"를 따라간 공부 기록에 가깝다. 00 배포 구조npm run dev를 치면 localhost:8080이 열리는데, 이 주소는 내 노트북을 닫으면 사라진다. 그래서 24시간 켜져 있는 컴퓨터가 필요하고, 그게 EC2다. 그 컴..
싸피 2학기가 시작되고 6주간의 짧은 공통 프로젝트를 진행 중이다. 오랜만에 AI 서버 스캐폴딩 작업을 진행했는데, 몇 번 해본 작업이라서 특별한 건 없지만요번에는 해본 적 없었던 검증(테스트) 과정을 나름 체계적으로 구성해봤기에, 이렇게 또 새롭게 배운 내용을 정리하고자 한다. AI의 도움을 어느 정도 받으면서 작업을 하다보니, 작업이 끝날 때마다 즉, 푸시할 때마다 작업이 끝났다고 부를 수 있는 기준이 있으면 좋을 것 같았다.그리고 내가 기존에 알던 pytest 이외에도 꽤나 여러 테스트들이 있는 것 같아서, 이번에 한 번 짚고 넘어가자 싶었다. 01 검증 방법에는 뭐가 있는지코드를 검증하는 방법은 크게 두 갈래로 나뉜다.정적 분석(static analysis): 코드를 실행하지 않고, 코드 자체(구..
취준생에게는 많고 많은 산이 있는데,그중 가장 하기 싫고 높은 산이 나에겐 바로 영어다 ...싸피 출퇴근길에 릴스만 하염없이 보다가 시간을 낭비하는 나를 발견하고휴대폰으로 간단히 자기 개발할 수 있는 게 뭘까 생각하다가나의 가장 큰 약점인 영어를 보완해 보자는 것이었다.중고등학교 때 영어를 경선식 영단어책으로 공부해 왔었다.나는 이 방식이 가장 기억에 오래 남고 하는 과정에서도 재미가 있다고 생각해서나를 위한 영어단어 앱을 만들어보면 어떨까 하여 시작된 나의 바이브코딩 이야기근데 꽤나 잘 만든 것 같아서,나처럼 나만을 위한 무언가, 혹은 재미있는 아이디어를 만들어보고 싶은 사람들에게 도움이 될까 하여나의 바이브코딩 과정을 한 번 정리해 보았다.이 과정을 겪으며 가장 중요하게 생각했던 결국 AI가 코드를 ..
오랜만에 돌아오는 기술 블로그 ..!요번에는 SSAFY에서 AI 실습 특강으로 진행했던 미니 프로젝트 중 하나인, MCP 서버 만들기를 들고왔다.그동안 AI를 포함해 여러 풀스택 실습들을 이어왔는데, SSAFY 커리큘럼에 정신 없이 따라 가느라, 그리고 SSAFY는 여러모로 대외비가 많아서 .. 이렇게 글로 쓰기에 조심스러운 부분들도 많은 것 같다. 암튼 그건 핑계고,약간의 여유가 생긴 이 틈을 이용해 유익했던 여러 지식들을 블로그로 공유하기 ㅎ.ㅎ 전에 실습했던 MCP 서버는 기존에 만들어진 오픈소스를 클로드 데스크탑에 적용하는 느낌의 실습이었다면, 이번에는 찐으로 나를 위한 서버를 만드는 실습이었다. 뭔가 기술 블로그스럽게 ... 간단하게 기술 개요부터 차근차근 정리해보기 00 MCP MCP(Mod..
카테부에서 운영 중인 춘이네 비서실 v2 기능으로 챗봇 스트리밍 기술이 들어간다. 사내 전용 챗봇 시스템에서 AI 응답의 스트리밍 출력으로 사용자 경험을 향상시키는 것이 목적이다. 스트리밍 기술을 구현하기 위해서는 실시간 데이터 전송이 가능한 기술을 채택해야했고, 크게 SSE, WebSocket, Long Polling 이렇게 세 개를 볼 수 있다. 위 그림을 보면 polling은 클라이언트로부터 요청이 들어왔을때 응답을 돌려주는 것으로 요청과 응답이 1:1 관계이다. SSE는 커넥션 후에 서버측에서 event가 발생할 때마다 응답을 보내준다. 따라서 요청과 응답이 1:N 관계이다. 마지막으로 Socket 통신은 커넥션을 맺고 나면 클라이언트와 서버의 구분 없이 양방향으로 데이터를 보낼 수 있는 구조..
구현할 기능춘이네 비서실 v2에는 위키 기반 뉴스가 들어간다. 부트캠프 위키에 올라온 문서를 넣으면 헤드라인, 4줄 요약, 기사 본문, 그리고 기사에 어울리는 삽화까지 한 번에 만들어 주는 것이 목적이다. 텍스트는 GPU VM에 올려둔 Qwen3-14B-AWQ가 만들고, 삽화는 DALL·E 3가 만든다.v1(소통방 기반 뉴스)과 달라진 지점이 바로 이 삽화다. v1은 디스코드 대화를 받아 헤드라인과 요약만 만들었고, 이미지가 있다면 아래와 같이 사용자가 이미 올려둔 실제 사진이었다. 파일 처리는 백엔드 몫이었고 AI 서버는 텍스트만 만들면 끝이었다. v1 · 소통방 기반v2 · 위키 기반입력디스코드 대화위키 문서 (제목 + 본문)출력headline, summaryheadline, summary, new..
