
군대를 전역하고, 한동안 블로그에 손을 대지 못하다가 정말 오랜만에 글을 써본다.
전역하자마자 복학을 하여 1학기는 정신없이 보낸 것 같고, 여름방학부터 AUSG을 포함해서 대외활동을 조금씩 시도해보고 있던 와중, 좋은 기회가 닿아 Amazon Q라는 해커톤에 참가할 수 있었다.
이틀동안 진행된 기간은 짧은 대회였지만, 대상을 수상한 것과 별개로 개인적으로 배우고 느낀점이 많았던 대회였던지라, 중간고사가 끝난 지금 시간을 내어 두 달만에 회고글을 작성해보려한다.

최종 결과물: https://github.com/americano212/amazon-q-hackathon
pre-해커톤
AUSG(AWSKRUG University Student Group) 슬랙에 해커톤 공고를 올려주셨는데, 1등 상품이 무려 맥북프로..!
나갈까 말까 다이어리를 보며 고민하던 찰나에 현숙님께서 먼저 DM을 주셔서 팀을 모으게 되었다.


사실 해커톤 참가 확정이 늦어져서(해커톤 시작 이틀 전에 참가 확정이 되었다), 주제나 진행 방향에 대한 이야기를 미리 하진 못했다. 참가 확정이 되자마자 허겁지겁 해커톤을 진행할 장소를 물색하고, 각자 주제를 고민해보고 당일날 모여 이야기 해보기로 짧게 온라인 회의를 마쳤다.
해커톤-ing
주제 선정
첫날 10시에 만나서 점심 먹기 전까지 주제를 정하고 구체화 시키는데 많은 시간을 썼던 거 같다. Amazon Q라는 생성형 AI를 잘 사용하면서도, 짧은 시간에 개발과 배포를 할 수 있고, 심사위원들의 흥미도 끌 주제를 골라야했다.

각자 주제를 고민해왔고, 의견 교환을 한 끝에 '영어 학습을 위한 게이미피케이션 서비스'로 의견을 좁힐 수 있었다.
영어 학습을 위해서 토익 스피킹처럼, 이미지를 보고 음성으로 이미지에 대해 설명하면, 사용자의 설명을 바탕으로 이미지를 생성해서 두 이미지 간의 유사도로 얼마나 영어로 설명을 잘했는지 판단을 하는 서비스였다.
팀원 중 은지님께서 Amazon Nova Family(Sonic, Pro, Canvas)이라는 따끈따근한 모델군에 대해서, 최근에 Amazon에서 밀어주고 있기도 하고 사용해본 경험이 있다고 하셔서 해당 모델을 적극 사용해보기로 하였다.
개발 준비
해커톤 특성 상 Amazon Q 해커톤이기에 Amazon Q라는 코드 생성 툴을 얼마나 잘 쓰는지도 채점 요소에 포함되어 있었다. MCP, Agent 등 다양한 기능을 최대한 살려보자는 의견으로 모아질 수 있었다.
우리가 시도해본 것은
1. Notion MCP를 통해서 notion에서 협업을 해서 Ideation을 하고, 개발에 대한 명세를 한 다음, notion MCP를 이용해 local에 markdown으로 명세를 불러오는 것이다. 불러온 명세를 Q Developer CLI에서 context로 먹여서 참고하도록 하니 품질이 더 높아졌다.
사실 이게 Notion MCP를 써야지! 하고 나온게 아니라, 노션으로 작업하다보니 이걸 끌고 오면 편할거 같아서 낸 의견이었는데, 획기적이었다. notion에서는 여러명이 동시 읽기/수정이 부드럽기에 notion에서 함께 명세를 하고 개발할 때는 다들 MCP로 불러와서 먹이는 방식이었는데, 꽤나 좋은 방법인 것 같다.

2. Draw.io MCP를 이용해서 아키텍처(CloudFormation으로 작성된)를 발표자료에 쓰기 위해서 쉽게 export 할 수 있었는데, 생각보다 괜찮게 뽑혀서 놀랐다. 원래라면 cloudcraft나 draw.io 등 드로잉 툴을 이용해서 하나하나 그려줬어야할텐데, '이거 AI로 그린거임!'하면 모두 납득할 정도의 퀄리티로 손쉽게 export 할 수 있었다.

3. Custom Agent 도 사용해보았는데, 솔직히 이건 우리가 전문성 있게 역할 부여를 못해서 그런것도 있겠지만, 그냥 .md 파일로 pre-context(copilot-instructions.md 같은거) 먹이는 것과 성능면에서 큰 차이는 모르겠다. 근데, 기능 상으로 기업 레벨에서 쓸 때, AI가 접근할 수 있는 파일이나 툴 통제하고, 역할 부여하고 output_size, ttl 제어하고 그런면에서 일관성 유지하기에는 좋아보였다. 프로젝트가 커질 수록 빛을 볼 기능 같았다.
개발 진행
은지님께서 무료로 사용할 수 있는 장소를 대관해주셔서 첫날부터 모여서 작업할 수 있었다.
주제 선정 이후에 각자 R&R을 나누고, 기술스택을 선정했다. Amazon Nova Sonic을 잘 써먹는게 우리 서비스 구현의 핵심이었는데, AWS에서 sample code로 WebSocket 통신을 이용하는 express 코드가 있었고, 마침 express를 사용 배포해본 경험이 있었기에 learning curve없이 사용할 수 있었다.


본인은 원래는 백엔드와 인프라를 맡으려고 했으나, 생각보다 sample-code에서 많은 부분을 구현해놓았었고, Amazon API와의 연결은 은지님께서 해보신 경험이 있으셔서 내가 express를 크게 만질일은 없었다.
그래서 인프라 설계와 배포에 집중했고, 관련된 내용에 대해서는 다음 단락에서 issue들과 함께 정리해보겠다.
Amazon Nova Family
이번에 해커톤하면서 알게된 것 중 하나인데, 바로 Nova model이다. 크게 3가지로 나눠져있었고,
음성 Speach-to-Speach를 지원하는 Amazon Nova Sonic (그냥 STT/TTS가 아니라 LLM이 합쳐져서, 답변을 생성하여 대화할 수 있는 모델이다.),
일반적인 LLM인 Amazon Nova Pro,
이미지를 생성하는 Amazon Nova Canvas이다.
Amazon에서 AI 모델이 많이 발달했다는 생각이 들었고, 특히 최근에 STT/TTS 프로젝트를 하고 있는데, Amazon Nova Sonic은 굉장히 자연스럽게 동작하도록 잘만들어졌었구나 하는 생각이 들었다. 별다른 튜닝 없이 Nova Sonic 그 자체만으로 대화형 챗봇을 구축할 수 있다는 점이 매력적이었다. (다만, 당연하게도 비용과의 trade-off는 있을 것이다)
우리 서비스에서 Nova Sonic은 대화형 플랫폼에, Nova Pro는 이미지 결과 비교와 보고서 생성에, Nova Canvas는 사용자 설명으로 부터 이미지를 생성하는데 사용했다.
PartyRock
이것도 이번에 해커톤하면서 처음본건데, 생성형 AI를 chaining?하여 테스트해볼 수 있는 플랫폼이었다.
Amazon에서 공식적으로 지원하고 무료로 사용할 수 있다고 하는데, 퀄이 좋아보였다. 데이터와 AI 모델을 파이프라인으로 연결해서 테스트해볼 수 있었고, MVP 검증에 사용했다.
늘 서비스를 직접 올려서, 테스트 해봐야했는데 이런 서비스도 있다니... 편리하고 좋은 것 같다.

개발 중 이슈
개발하면서 내가 겪었던, 몇가지 기술적 이슈가 있었는데, 이슈와 해결 방법을 정리 해보려한다.
1. IAM Role 부여 이슈
본 해커톤을 진행하는 동안, Amazon에서 팀마다 IAM 계정을 부여해줬다. 그래서 모든 서비스를 비용 걱정없이 마음껏 써볼 수 있었는데, 이게 화근이었다.
문제는 Amazon Nova Family를 배포하는 과정에서 발생했는데, Nova Family는 Amazon Bedrock 플랫폼 위에서 돌아가고 있었고, 우리 서비스의 백엔드는 Docker로 말아서 ECS Fargate에 배포되었다. 이 배포 과정 자체는 Amazon Q CLI를 이용해서 CloudFormation을 생성하고 실행해서 인프라를 생성하고, image를 ECR에 올리고 ECS에서 해당 이미지로 run하는 방식을 자동화 시켰고 정상적으로 배포되었다.
그런데 문제는 ECR Fargate에서 Bedrock에 요청을 보낼 때 권한을 제어할 방법이 없던 것이다. 대회용 계정이라 IAM 역할 권한이 막혀있어서 IAM Role을 부여할 수 없었던 문제가 있었다. 원래라면 ECR Fargate 자체에 IAM Role에 추가로 Bedrock 접근 권한을 열어줬으면 될 것 같은데, 이게 안열려서 한참동안 고생했다.
결과적으로 직접 IAM User를 만들고, Bedrock 권한을 넣어서 백엔드에서 직접적으로 .env에 API_KEY와 SECRET을 들고 있으면서, sdk로 호출하는 방식으로 해결하긴했는데, 보안 측면에서 좋은 방법은 아니다. (다만, 상황이 상황이니만큼 해커톤적 허용을 하는걸로...)
2. Amazon Q의 할루시네이션
두번째는 Amazon Q의 할루시네이션 때문에 (1)의 문제가 더 커진 것인데, 우리를 도와주시는 SA님께 (1) 문제에 대해서 말씀드리고, IAM Role 권한을 풀어달라고 요청드렸더니, Bedrock의 API Key를 이용해보라고 조언해주셨다. 결과적으로 이게 정답이었다. Bedrock에서는 접근 권한을 API Key를 부여 받아서, 서비스에서 호출할 수 있었는데, Daily Key로 해커톤이 진행되는 동안만 사용하고 폐기하면 될 일이었다.
하지만 이 내용을 Amazon Q에 질의해보았더니, Amazon nova sonic에서 API Key를 지원안해서 그렇게 할 수 없다는 답변을 받았다. 추정하기로는 Amazon Q가 학습될 때, Nova Sonic이 없었거나 API Key 지원을 안했을 수도 있을 것 같고, 공식 docs에서 명시적으로 해당 부분을 언급하지 않고 있어서 Amazon Q 학습에 해당 내용이 포함되지 않았나?라는 추측도 해보았다.
아무튼 이 답변 때문에 시간을 더 허비하게 되었고, 상기한 방식대로 IAM User의 ACCESS_KEY와 SECRET을 그대로 서버에 넣어버리는... 좋지 못한 패턴을 갖게 되었다.
LLM에서 생성된 답변을 맹목적으로 믿으면 안된다는 점을 다시 한번 상기시킬 수 있었다.
3. Amazon Nova Sonic에서 https만 지원
제 컴퓨터에서는 잘 돌아갔는데...를 느끼는 순간이었다. Nova Sonic은 localhost에서는 잘 동작하지만, production으로 배포하는 순간 https로 SSL/TLS를 지원하지 않으면, 음성 데이터를 보내서 그런지 전송 자체를 막았다.
2가지 해결 방법이 있었는데, 앞단에 https를 지원하도록 cloudfront 같은 CDN을 붙이거나, 도메인에 인증서를 발급 받고, CNAME으로 DNS에서 직접 ELB(ALB)를 바라보도록 할 수도 있었다.
해커톤을 위해 도메인을 세팅할 필요까지는 없어서, 시연 정도를 할 수 있도록 cloudfront를 ELB 앞에 붙였고, cloudfront에서는 기본적으로 https가 적용된 endpoint를 제공하기에 이제 다 되었구나 싶었다.
4. CloudFront에서 websocket 사용
잘 배포가 되었다 생각했는데, 이제 Nova Sonic까지 잘 붙었는데, 녹음된 데이터가 뒷단으로 넘어가지 않는 문제가 발생했다... 확인해보니 CloudFront에서는 websocket을 사용할 때 별도의 설정을 줘야한다더라...
Amazon Q를 이용해서 CloudFormation에 추가적인 속성을 넣었고, Cloudfront에서도 websocket을 지원하도록 수정할 수 있었다.
정말 1박 2일 동안 해커톤인데, 실전 압축으로 많은 지식을 배울 수 있었다. 위의 모든 과정을 github actions으로 자동 trigger해서 배포되게 하는 것까지가 나의 임무였다. 그렇게 해커톤을 마무리할 수 있었다.

해커톤 결과
둘째날은 강남역 인근 스터디룸을 대관해서 새벽에 개발을 하다가, 역삼 센터필드의 AWS 회의실?, 컨퍼런스 룸?으로 이동해서 진행했다.


개발 종료 후 발표는 팀장이신 현숙님께서 맡아주셨다. 1차적으로 AWS 측 심사위원(아마 SA분이시지 않을까) 두 분께 10분 발표를 진행하고, 최종 4팀을 선정해서 2차 발표를 진행했다.
결과물이 잘 뽑혀서 내심 기대는 했지만, 다른 팀들도 직장인 단위로도 많이 참가하시기도해서 기대 반, 걱정 반인 상태로 발표를 지켜봤다.
1차 발표 후 심사위원 분들께서 좋은 피드백을 많이 해주셨는데, 그 중 제일 기억에 남는 말은 '이거 다른 공모전에 낸적 없는거 맞냐?'라는 말을 들었을 때, 수상 가능성이 있겠다는 확신이 들었다.
그렇게 2차 발표 대상으로 선정되어 발표까지 마무리를 하고, 상호평가 + 모든 심사위원 분들의 평가를 받았다.
최종적으로 대상 수상을 할 수 있었고, 맥북프로/5 를 부상으로 받았다.


좋은 팀원들과 함께했기에 결과물도 잘 뽑히고, 대회 성적도 좋을 수 있었다.
느낀점&배운점
- 대부분의 코드를 생성형 AI만 써서, 개발해본 건 처음이었는데, 확실히 아직 바이브 코딩만으로 모든 개발을 대체하기엔 어려운 부분도 많았다.
- 하지만, 결국 AI를 이용한 코딩을 했을 때 생산성이 기하급수적으로 상승하는 것은 자명한 사실이자 시대의 흐름이고, 이 또한 하나의 도구로서 어떻게 하면 잘 쓸 수 있을지 공부해야하는 시대가 왔다고 생각한다.
- 가령 Amazon Q CLI를 잘 쓰는 방법을 공부하는 것이, 새로운 언어나 프레임워크를 배우는 것과 비슷하다고 생각했다.
- 다른 발표자 분들을 보면서도 느꼈지만, 우리보다 생성형 AI를 훨씬 잘 쓰시는 분들도 많았고, 서비스 fit하게 이용하시는 모습을 보면서 감탄했다.
- AI 모델에 대해서도 많이 무지했던 것 같아서, 전체적으로 기초가 되는 지식들을 공부해야겠다는 동기부여가 되었고, 그동안 써보지 못한 다양한 서비스를 사용해볼 수 있어서 좋은 공부였던 것 같다.
- https://github.com/americano212/amazon-q-hackathon
- https://github.com/aws-samples/amazon-nova-samples/tree/main/speech-to-speech/sample-codes
'대회' 카테고리의 다른 글
| [해커톤] 2025 Blaybus 실전 앱 개발 경진대회 참가 및 수상 후기 (2025.01.05.~2025.01.17.) (10) | 2025.02.02 |
|---|---|
| [PS] 2022 Winter SUAPC 후기 (2022.02.26.) (1) | 2022.03.08 |
| [해커톤] 2021 Artech Hackathon 참여 후기 (2021.12.03.~2021.12.06.) (0) | 2021.12.07 |