AWS 해커톤

HJ·2024년 2월 4일
0

계기

저번 포스팅에서 언급했던 1월 30일부터 2월 1일까지 1박 3일로 진행되는 동계 빅데이터 AWS 캠프에 참여했다. 일정은 아래와 같이 2일교육후 밤샘 개발 형식으로 진행되었으며 , 만들었던 프로젝트에 대해 간단하게 포스팅 해보겠다.

프로젝트 배경 및 목표

주제

해커톤에 주제는 '지역사회 문제 해결' 이었다. 처음에는 지역사회라는 단어에 치중해 다양한 지역 문제를 어떻게 해결할지에 먼저 생각하게 되었고 , 많은 아이디어들이 나왔지만 의견 수렴이 힘들었다.

이에 , 일반적인 문제 상황을 해결해 전반적인 사회 발전에 기여하는 쪽으로 아이디어를 생각해 '아이들을 위한 스마트 일기 서비스'라는 주제를 선정하게 되었다.

배경

  • 현대 사회에 아이들은 일반 종이보다 미디어에 더 익숙해져 있어 문해력 성장에 영향을 미침
  • 맞벌이가 점점 많아지면서 부모가 아이를 일일히 챙겨주기 어려움

목표

  • AWS 다양한 기술 적극 활용
  • 사용자가 일기를 입력하면 선생님같은 친근한 comment를 gpt가 답변
  • gpt가 맞춤법 교정 , 표현법 수정등 기능 제공
  • 일기 기반 이미지 생성

Trial 1

1차 아키텍처

가장 처음 구상한 아키텍처는 아래와같다.

  1. AWS S3에서 버킷을 만들고 웹 호스팅을 하게된다.
    *참고로 Frontend코드들을 모두 build해서 버킷에 올리면 자동으로 웹을 호스팅할 수 있게 구성해준다.
  2. 서버리스 환경에서 AWS Lambda 트리거를 활용해 사용자가 입력한 input text를 연결된 gpt로 output text를 만들고 이를 dynamo db에 저장한다.
  3. 저장된 데이터를 다시 lambda에서 받아서 bedrock에 input으로 넣고 bedrock을 통해 이미지를 생성한다
  4. 생성된 이미지를 다시 반대 과정을 거쳐 유저에게 전달한다.

위와 같은 프로세스를 하면 서버를 만들 필요가 없고 serverless 환경에서 이벤트가 발생했을때만 트리거를 발동시켜 서비스를 수행하도록 할 수 있고 , 서버를 열었을때보다 비용절감을 할 수 있다.


실행과정

먼저 환경을 만들기 위해 우선 위와같이 S3 버킷을 만들고 컴퓨터 역할을 하는 AWS cloud 9을 먼저 만들고 cli코드를 통해 client에 frontend인 즉, 웹을 구성하는 코드를 build했다. 따라서 아래와 같이 웹을 구성하기 위한 코드들이 모두 버킷에 올라갔고 웹 호스팅이 바로 가능하다.

Trial 2

개발 중간에 문제가 발생했다. 우리 서비스에 핵심은 웹인데 , 4명으로 구성된 우리 팀원에서 복잡한 frontend코드를 제대로 다뤄본 팀원이 없었다. 따라서 새로 frontend코드를 구성하는데 무리가 있었고 , 어쩔 수 없이 2일동안 강의자료로 사용한 짜주신 코드에 의존할 수 밖에 없었다. 해당 코드는 3tier(s3로 웹 호스팅 , RDS 저장소 사용 , ec2서버사용) 하는 방식으로 react를 기반으로 구성되어 있었다 .

dynamodb와 lambda의 장점을 최대한 활용하지 못해 아쉽지만 시간이 한정되어 있었기에 어쩔수 없이 해당 코드를 수정하는 방향으로 방향으로 진행하기로 결정했고 , 그나마 웹 프로젝트를 해본 내가 대부분 수정하는 역할을 맡았다. 수정은 cloud9 cli를 통해 s3로 build했다. 아키텍처는 중간에 있는 lambda가 ec2 로 dynamodb가 RDS로 변경되었다.

정리하자면 다음과 같다.

  1. 웹 서버(EC2)는 S3 버킷에서 웹 콘텐츠를 로드하여 사용자에게 전송하고 사용자는 이 웹사이트에 텍스트를 입력한다.
  2. 웹 서버(EC2)에 연결된 일기를 학습한 gpt4 model api를 통해 output을 생성한다.
  3. 생성된 output(선생님 같은 코멘트 , 맞춤법 교정등)을 rds에 저장한다
  4. serverless인 lambda를 함수를 통해 RDS 데이터베이스에서 생성 output 텍스트를 가져와 Bedrock 모델에 전달한다.
  5. bedrock은 새로운 output(이미지) 생성한다.
  6. 생성된 output(이미지)를 다시 lambda함수를 거쳐 lambda->rds->ec2->user 과정을 진행해 유저에게 전달한다.

promt engineering

이후 우리 서비스에 맞는 결과를 도출하기 위해 promt engineering을 진행했다. 모델은 gpt4를 api를 활용했으며 실제 팀원이 썼던 일기 데이터를 텍스트화 시켜 모델에 넣어보니 아래와 같이 불안정했다.

이에 특정 변수에 가중치를 두고 instruction을 수정하는 promt enginerring과정을 여러번 거쳐 결과를 도출해 냈다.

아래는 실제 일기를 넣었을때 나온 결과이다. 선생님 같은 코멘트와 , 맞춤법을 , 불안정한 표현들을 수정해주는 의도와 맞는 output을 도출해 낼 수 있었다.

image gen

일기를 기반으로 이미지를 생성하는것도 또하나의 task였다. 처음에는 친근한 느낌의 이미지를 생성하기 위해 hugging face에서 'stablediffusionapi/disney-pixar-cartoon' api를 가져와 promt를 수정해 이미지를 생성하려 했으나 , 원하는 느낌의 이미지를 생성해내지 못했다.

이때 멘토님의 조언을 받아 AWS bedrock 시스템을 활용해 보려고 했고 , aws bedrock에서 지원하는 수많은 이미지 생성 모델중 Transformer기반이며 가장 좋은 결과를 생성해준 Titan Image Generator G1v1을 선택했다.

# 실제 일기 데이터 내용 # 
오늘 있었던 일 ~ 현재시각 오전 8시 30분,
할 일이 없어서, 아침먹고, 영화를 보러 가기로 했다. 
..... 아빠와 함께 석가탄신일을 맞이하여..... 
..... 절에 가 보았다....... 절이 생각보다 컸다.....

input으로 들어갈 실제 일기내용을 간단하게 적으면 위와 같다.

한국어를 지원하지 않기 때문에 gpt를 통해 번역을 먼저하고 결과와 negative promtpt를 추가해 이미지를 생성하였다. nagative promtpt를 추가하면서 완벽하지는 않지만 내용과 어느정도 맞는 이미지를 생성할 수 있었다.

이후 , lambda를 통해 output을 받아 aws bedrock과 연결해 이미지를 생성하려고 bedrock모델의 api를 연결했으나, lambda를 통해 웹사이트에 이미지를 띄우는 프로세스 구축에 어려움을 겪었고 , 결국 제한시간안에 수행해 내지 못했다.

최종

따라서 최종 결과는 아래와 같다. 실제 일기를 입력하고 코멘트 받기 버튼을 누르면 promtpt engeneering된 gpt가 선생님같은 느낌에 코멘트를 생성해준다. 다소 깔끔하지 않는 나열 형식이지만 맞춤법 교정이나 , 선생님같은 코멘트등은 원하는 output으로 잘 생성된것 같다.

고찰

이번 해커톤으로 진행했던 프로젝트는 지금까지 중 가장 난관이 많았던 프로젝트였던 것 같다. 아이디어를 결정하는 과정이 늦어져 남들보다 개발에 늦게 시작했고 시간 안에 해야 한다는 조바심, 욕심에 비해 조화가 이루어지지 않았던 개개인의 능력으로 인한 일에 효율성 저하가 아마 큰 원인이지 않을까 싶다.

결과 또한 처음 계획했던 계획들이 수도 없이 많이 틀어졌다. lambda에서 ec2로 바꾼 점, dynamodb에서 RDS로 바꾼 점, image 생성까지 구현 못한 점들이 많이 아쉬웠다. 솔직히 정신과 몸이 동시에 힘들어지니 아무것도 하지 못하고 있는 팀원을 속으로 원망하기도 하고,'내가 더 많은 것을 해봤더라면'이라는 생각을 가지면서 나 자신에게 자극을 주기도 했다.

몸도 마음도 지쳤던 프로젝트였지만, 이것도 나에게 돈 주고도 못 사는 좋은 경험이었다고 생각한다. 현업에 간다고 모든 협업 상황이 최고의 환경이고 프로젝트가 다 원활하게 진행된다는 법이 있을까? 아마, 지금과 비슷하게 협업이 원활하게 이루어지지 않는 상황들도 많을 것이다. 특히, 시간 안에 해야 하는 해커톤은 더 그렇다.

이 경험을 통해, 한 명이 모든 것을 다 잘하기는 어렵다는 것을 깨달았다. 그래서 각 분야의 전문가가 있는 것이고 이 전문가들이 조화를 이루어야 좋은 프로젝트가 나오게 되는 것 같다. 그래서 기업들도 채용에 협업 능력을 강조하고, 다양한 협업 환경에서 능동적으로 대처하는 것은 많은 프로젝트 경험에서 노하우가 나오는 것 같다.

그래도, 한 번도 사용해 보지 못한 AWS를 마음껏 사용하면서 S3, ec2,lambda 등 다양한 AWS 서비스에 익숙해질 수 있었고 클라우드의 편리성과 필요성을 다시 한번 느끼게 된 해커톤이었다. 또한 밤샘 개발이라는 것을 처음 해보면서 제한된 시간에 원하는 결과를 내기 위해 노력하는 수많은 사람들을 보면서 IT 분야의 생기를 느낄 수 있었고, 나에게 많은 자극도 되는 의미 있는 프로젝트였다.

profile
데이터 공부 기록

0개의 댓글

관련 채용 정보