AWS Cloud Club을 슬랙 채널에 재밌어 보이는 세션이 올라와서 동아리원과 신청해서 다녀왔다.

건물 정말 좋았다. 특히 엘리베이터에 버튼이 없었는데, 입구에서 QR을 스캔하면 자동으로 그 층으로 이동한다 😨

각설하고

세션의 주제는 GitHub 알람 메시징을 서버리스로 구현해보는 것이였다. 근데 AWS Bedrock(AI 서비스) 활용한 자동 코드리뷰를 곁들인...

우선 2시간이라는 AWS만을 사용해서 짧은 시간안에 신기하고 재미있는 서비스를 구현했기에 정말 놀라웠다. (돈만 있으면 뭐든 만들 수 있는 세상이 된 것 같다)

구현했던 과정과 느낀점을 소개해보고자 한다. (AWS 담당자님이 블로그에 글 작성해도 된다고 허락받았다!)


목표

AWS의 서버리스 서비스인 Lambda, DynamoDB, ApiGateway를 활용해 나만의 GitHub 알리미를 만들어 보기

용어와 각 서비스의 간단한 이해

구현에 앞서 사용할 AWS서비스와 핵심적인 용어와 개념을 짚고 넘어가자

Serverless

  • 사용자가 서버를 직접 관리하지 않고 클라우드 제공자가 서버 관리를 전담하는 클라우드 컴퓨팅 모델
  • AWS Lambda … 등

서버리스 아키텍처

  • 서버리스 모델을 기반으로 애플리케이션을 설계하고 배포하는 방식
  • 이벤트 기반으로 동작
  • 백엔드 서비스가 필요한 경우에만 동적으로 리소스를 할당하는 패턴

AWS Lambda

  • 서버리스 컴퓨팅 서비스로, 이벤트에 따라 코드를 실행하는 역할.
  • 이벤트가 발생하면 그 코드를 실행시킴 (서버가 필요없음)
  • 디른 서비스들로부터 이벤트를 받을 수 있다.
  • 람다에서 라이브러리를 활용하고 싶다면 레이어 기능을 사용해야함.
  • 람다에서 환경변수라는 기능을 제공함. 서비스에서 민감한 정보(키값) 같은 것을 스태틱하게 코드에 선언해서 사용하지않고 뭐 스프링으로 치면 yml 파일 같은거 제공함

AWS IAM

  • 실행 역할은 람다가 함수가 다른 AWS 서비스 및 리소스에 액세스 할 수 있도록 권한을 부여하는 IAM 역할입니다. 쉽게 말해, Lambda 함수가 특정 작업을수행할 떄 필요한 “허가증” 역할을 합니다.

AWS gateway

  • 클라이언트 와 백엔드 서비스의 중간 관문 역할을 하는 AWS 서비스. API 요청을 관리하고 처리하는 입구
  • 파라미터 조정, 캐시, 모니터링 등의 이유로 사용

DynamoDB

  • AWS에서 제공하는 NoSQL 데이터베이스
  • DynamoDB Stream details 기능
    • DB는 원래 수동적으로 CURD만 처리하는데
    • 뭔가 이벤트가 발생하면 이걸 람다로 보낼 수 있는 기능
    • 쉽게말해 DB에 뭔가 변동사항이 생기면 람다로 뭔가 할 수 있다는

SNS

  • 메시지를 주고받는 퍼블리시/구독 메시징 서비스
  • 뭔가 메시지(앱푸시, 메시지 등) 을 보낼 수 있는 서비스

EventBridge

  • 이벤트를 사용자가 지정한 시간에 이벤트를 발생시킬 수 있는 서비스
  • 이벤트를 뭐 랜덤하게 발생시키고 람다로 던지기 가능

Bedrock

  • 생성형 AI를 간단히 활용할 수 있도록 지원하는 AWs의 서비스
  • 학습된 AI 모델을 제공, 이를 기반으로 AI 어플리케이션을 설계할 수 있음

아키텍처 구조


구현 시작

우선 AWS에 로그인합니다. 람다 서비스로 들어가줍니다.

Lambda 생성

Create function 버튼 클릭해 함수를 생성

이름은 'WebhookToDB'로 만들고 런타임을 'Python 3.13'으로 선택합니다. execution role는 기본 세팅으로 그대로 둡니다. 이후 Create Function을 누릅니다.

API Gateway 생성

이제 API Gateway를 람다의 trigger를 추가하면서 생성합니다.

Create a new API를 선택하고, Security는 Open으로 진행합니다. 이후 Add를 눌러줍니다.

이제 Lambda의 메인 화면에서 Configuration -> Triggers를 클릭하면 WebhookToDB-API가 생성된 걸 확인할 수 있습니다.

다시 람다의 메인 화면으로 돌아가서 코드 창에 코드를 한 줄 적습니다. lambda_handler 함수 내부에 적어주시면 됩니다. print("Event: " , json.dumps(event))라고 적어둡니다. 나중에 이벤트를 받은 것을 확인하려는 용도입니다. 작성한 후 꼭 Deploy 버튼을 눌러줍니다.

새로 생긴 API Gateway의 API endpoint를 복사합니다.

이제 GitHub에 들어가서 원하는 Repository에 Webhook을 만듭니다. 🚨 꼭 Public Repo에 만드셔야 합니다. 나중에 GitHub API를 사용하여 comment를 작성하게 되는데 이때 작성이 안 될 수도 있습니다.

Payload URL에 아까 복사해둔 API endpoint를 붙여 넣습니다. Content type은 JSON으로 선택하고 아래의 Let me select individual events를 선택하여 Webhook을 사용하여 받을 event를 선택합니다.

이번 실습에서는 Issue와 Pull Request를 받습니다.

Issue 탭에서 New Issue를 클릭하여 이슈를 생성합니다.

다시 Webhook으로 돌아 가서 event를 잘 보냈는지 확인합니다. 체크 표시가 되어 있으면 잘 보낸 것입니다.

어떤 이벤트를 보냈는지 Payload를 확인하고 싶다면 위의 이미지에서 파란색으로 되어 있는 주소를 클릭하고 Recent Deliveries를 클릭하면 아래와 같은 화면을 확인할 수 있습니다. opened된 이슈 event를 보냈다는 것을 볼 수 있습니다.

이제 AWS에서도 다시 확인해봅니다. CloudWatch를 검색창에서 검색하여 들어갑니다. 왼쪽 사이드 바의 Log groups를 누르면 아까 만든 WebhookToDB 람다가 있는 것을 확인할 수 있습니다. 눌러줍니다.

로그가 두 개가 있을텐데 아래는 람다를 새로 만들었을 때의 로그이고 위의 로그가 issue를 생성했을 때의 이벤트를 받은 로그입니다.

아래의 이미지처럼 로그를 눌러보시면 확인할 수 있습니다.

 

글이 너무 길어져 2, 3, 4에 나누어 작성하겠습니다.

 

이번에 처음으로 영어 공인성적이 필요하기도 하고, 대학연합 할인을 받으려면 졸업식 이전에 시험을 봐야 해서, 오픽시험을 정말 급하게 준비했다.

그런데, 생각보다 준비를 잘했던 건지 장염이슈와 컨디션이 좋지 않았는데도 운 좋게 IH등급을 받게 되었다!!
다른 사람들도 이렇게 오픽을 준비하면 좋은 결과를 받을 수 있을 것 같아서 내가 준비했던 과정을 공유해보고자 한다!

짜잔

오픽(OPIc)?

  • 토익스피킹과 같은 유명한 말하기 능력을 평가하는 어학시험이다.
  • 보통 시험 보고 빠르면 2~7일 이내에 성적발표가 나와서, 빠르게 공인영어성적이 필요한 사람들이 많이 준비한다.
  • 시험은 스피킹으로만 진행되고 컴퓨터가 질문을 하고 녹음하는 형태로 진행한다.

오픽이 왜 필요한가

  • 모든 기업이 필수(삼성, 하나은행 등)/우대 사항으로 어학성적이 있다.
  • 오픽 IM2 이상만 받아놓으면, 2년 동안은 전문적으로 어학성적이 필요한 직군이 아니라면 공인영어성적은 거의 프리패스.

나의 베이스

모든 한국사람이 그렇지만 읽기/듣기는 좀 되는데 말하기는 진짜 못한다. (내가 하고 싶은 말을 영어로 못 뱉는다)
그래도, 어렸을 때부터 해외 락 밴드, 팝송을 워낙 좋아해서. 발음이나 억양에는 조금 자신이 있었다.
영어 시험 아예 처음 봤다. (토익, 토플, 오픽 등등 봐 본 적 없었다.)

🤔 그래서 어떻게 준비했는가

주변에 물어보니, 다들 오픽노잼 오픽노잼 이야기해서 나도 영상을 많이 찾아봤다. 그리고 여러 가지 후기들을 찾아보면서 ChatGPT를 적극적으로 활용하면 좋을 것 같다는 결론에 도달했다.

1. 서베이 베이스는 백수전략으로 하되, 내가 관심 있는 분야로 조금 커스텀하자

오픽은 시험 보기 전에, 시험자의 상황에 맞추어 질문이 랜덤 하게 나오기 때문에 간단하게 설문조사를 진행한다.

  • 인터넷에 검색하면 가장 자주 나오는 서베이 전략이 백수 전략이다. 쉬운 질문을 받기 위함이다.
  • 그래서 유튜브나 검색에서 서베이 고르기 전략 영상을 보고 백수전략을 기반으로 선택하되 본인만의 서베이를 정하는 걸 추천한다. 진짜 관심 없는 분야는 한국어로 말해도 할 말이 없기 때문에
  • 채점자는 답변자가 무슨 서베이를 골랐는지 모른다. 그래서 너무 걱정하지 않아도 된다.

내 서베이

2. 난이도는 무조건 6-6

본인의 영어 실력이 걱정돼서 5-5 나 더 낮은 난이도로 선택하는 사람이 있는데 진짜 무조건 6-6이 맞다.

예를 들어, 난이도 5로 질문이 나온다고 예시를 들어보면

레벨 5 질문
너는 어디에 살고 있어? 너의 집에 생김새에 대해 알려줘.
방의 구성 그리고 네가 가장 좋아하는 방을 알려주고 그 이유를 알려줘.

레벨 6 질문
너는 어디에 살고 있어? 너의 집에 생김새에 대해 알려줘.
방의 구성 그리고 네가 가장 좋아하는 방을 알려주고 그 이유를 알려줘.
그리고 너의 지금 집과 과거에 살았던 집의 차이점을 알려줘(과거경험)
  • 이런 식으로 같은 질문을 조금 더 많이 한다고 생각하면 된다.
  • 근데 오픽의 경우, 과거경험에 대한 부분이 굉장히 배점이 높다.
  • 쉽게 말해서, 저 부분을 답변하지 못하더라도, 5-5로 고르면 애초에 점수를 받을 수 있는 기회를 놓치게 되는 것이다.
  • 나 역시 6-6으로 선택하고, 질문을 제대로 이해 못 한 부분은 2문제 스킵하고도 IH를 받았기 때문에 무조건 6-6을 추천한다.

3. ChatGPT랑 연습 🙌

오픽 연습을 위한 커스텀 ChatGPT를 만들었다!

https://chatgpt.com/g/g-67c05fa48ad88191a657d68a90c5fff2-opic-seonsaengnim

 

ChatGPT - OPIc 선생님

오픽 연습을 도와주는 GPT 입니다.

chatgpt.com

 

 

아니면

  • 유튜브에 "오픽 모의고사" 치면 동영상들이 많이 나오는데
  • 친절하게 댓글에 질문을 전부를 적어주신 분들이 많다.
  • 이걸 긁어서 ChatGpt한테 오픽 모의고사처럼 봐달라고 하면 된다.

 

지금부터 내가 선택한 서베이를 바탕으로 오픽 모의고사를 진행해줘
~~서베이 내용~~
아래 질문들을 바탕으로 오픽 모의고사를 진행해줘
~~유튜브에서 긁어온 질문 내용~~

음성모드로 전환
연습했던 기록
이런 식으로 왼쪽은 보이스모드 오른쪽은 내가 ChatGPT와 대화한 내용을 띄워서 공부했다.

음성모드를 이용해서 실제로 질문에 대한 답변을 하고, GPT에게 질문이 이해가 안 가면 한글로 물어봐도 되고,

예문이 생각 안 나면 추천해 달라고도 할 수 있다. 표현을 자연스럽게 바꿔주면 그 답변대로 연습하면 된다.

이렇게 같은 주제에 대해 2~3번 연습하면 실제 시험 시에도 매끄럽지는 않지만, 어느 정도 말 할 수 있는 것 같다.


❗ 시험을 보고 느낀 팁 및 후기

1. MainPoint(질문의 의도/요점)에서 벗어나지 않기

  • 진행하다 보면 질문이 여러 개 나오다 보니까. 질문에 대한 의도를 벗어난 TMI 이상한 말을 하는 경우도 많다.
  • 이럴때, 필러(like... you know... actually...) 등등 오디오가 비지 않게 아무 말이라도 해라!라는 경우가 많은데
  • 오히려 나는 말을 더듬더라도, 질문의 요점에 대답만 잘하면 높은 배점을 받을 수 있는 것 같다.
  • 동문서답을 하면, 영어를 유창하게 말해도 점수를 받을 수 없으니, 천천히 질문에 의도에 성실히 답변하는 것이 중요하다.

2. 형용사 많이 쓰기 (내 감정과 기분을 표현하기 )

  • 대부분의 사람들이 질문에 묘사하고 있었던 일에 대해서 ~하고 ~했다. 이런 식으로 만 대답을 하는데
  • 오픽에서는 과거경험과, 내 감정과 기분을 표현하는 부분 역시 배점이 높다.
  • 앞선 질문의 예시에 대한 좋은 답변과 나쁜 답변을 나누자면
    • 질문 : 너는 어디에 살고 있어? 너의 집에 생김새에 대해 알려줘, 방의 구성 그리고 네가 가장 좋아하는 방을 알려주고 그 이유를 알려줘.
    • 나쁜 답변 : 나는 서울 노원구에 살고 있어. 내 집은 아파트고, 9층에 살고있어. 우리 집은 방이 3개 있고, 거실, 부엌, 안방이 있어. 내가 제일 좋아하는 방은 거실이야.
    • 좋은 답변 : 나는 서울 노원구에 살고있어. 내 집은 아파트고, 9층에 살고있어. 우리집은 방이 3개 있고, 거실, 부엌, 안방이 있어. 내가 제일 좋아하는 방은 거실이야. 그 이유는 거실이 제일 넓은 방이어서 나는 그곳에 있으면 편안함을 느껴.
  • 같은 답변이여도 뒤에 느낌을 추가한 것 만으로 문장의 완성도가 높아진다.
  • 그래서, 나 역시 모든 질문의 마지막에는 그 당시 내가 느꼈던 감정이나 기분을 표현하기 위해 노력했다.
  • 이 부분이 높은 점수를 받는데 큰 요인이 된 것 같다.

3. 스크립트는 비추천, 좀 절어도 괜찮으니 천천히 이야기 하자.

  • 오픽 공부하는 사람 중에 스크립트를 외워가서 보는 경우도 있는데, 나는 비추천한다.
  • 많은 사람들이 쓰는 스크립트는 외운티가 많이 느껴질 것이다.
  • 특히, 준비한 스크립트가 안 나와서 절면서 얘기하다가 연습한 질문이 나와서 다다다다 얘기하면 외운티가 확 날 것이다.
  • 외운티가 나는 순간 채점자가 점수를 감점하기 때문에, 내가 연습한 내용이 나와도 천천히 생각하면서 말한다는 느낌이 중요하다.
  • 나도 진짜 진짜 Umm.... yeah....Umm.....을 계속 반복할 정도로, 필러도 제대로 못 넣고 정말 많이 절어서 IL, IM 생각하고 있었는데 IH를 받은 거 보면, 답변을 성실하게 잘하는지가 더 중요한 것 같다.

4. 채점자도 사람이다. 겸손하게 답변하고 그리고 감수성을 자극하자.

  • 명심하자 채점자는 사람이다.
  • 그래서, 오픽의 경우 1번 질문(자기소개)은 채점항목에 들어가지 않는다고 하지만, 나의 경우에는 이걸 잘 활용하면 좋을 것 같다는 생각이 들었다. 맨 처음 자기소개항목에서 나는 이렇게 소개했다.
"Hello, Eva! Nice to meet you. My name is Ilwoo Oh. I was born in Seoul, Korea, and I live in an area called Nowon. There are a lot of apartments here, and I also live in one. This is a bit of TMI, I have a stomachache right now—but I think I can handle it. So yeah, let’s do this! Let’s go!”

뭐 요약하면, 오늘 하필 배가 좀 아파서 조금 긴장되지만, 나는 이걸 handling 할 수 있을 것 같다. 라는 내용 (실제로 3일 전에 장염에 걸려서 당시에도 배가 좀 아팠다.)
  • 아프다고 감수성에 호소해서인지 잘 봐주신게 아닐까...(뇌피셜)
  • 답변할 때도 최대한 자신감 있지만, 잘난 척하지 않는다는 느낌으로 답변하기 위해 노력했고 녹음을 들을 때 불편할 수 있는 기침소리, 바람소리 등등 채점자에게 거슬리는 소음을 내지 않기 위해 노력했다.

5. 어디서든지 사용할 수 있는 과거 경험을 하나 연습하자

  • 실제로 있었던 희귀한 경험들 중에, 언제 어디서 일어나도 이상하지 않은 경험하나는 연습해 가는 것이 좋다
  • 어떤 서베이를 고르던 과거경험에 대한 질문은 꼭 나오는데
  • 나의 경우, "살면서 기억에 남는 특별한 경험이 무엇이 있냐"라는 질문에
2주 전에, 헬스장에서 데드리프트 운동을 친구랑 하다가 옆에서 사람이 갑자기 쓰러졌었다. 그래서 나는 너무 놀랐고, 혼란스러웠지만, 119에 전화해야 하는 것을 알았다. 5분 뒤에 앰뷸런스가 도착했고, 다행히 그 사람은 깨어났다. 매니저가 나중에 고맙다고 멤버십 1달을 연장해 주었다. 정말 잊을 수 없는 기억이었다.
  • 이런 식으로 대답했었는데, 사람이 갑자기 쓰러지는 일은 공원, 콘서트장, 헬스장 등 어디서든지 발생할 수 있는 일이기 때문에 앞에 부분만 "내가 친구랑 ~~~를 갔는데, 갑자기 옆에 사람이 쓰러졌다 ~~~ "이런식으로 특이하지만 어디에든지 활용할 수 있는 경험을 연습하면 좋은 것 같다.

마지막으로 하고 싶은 말

질문에 대한 의도를 파악하고 무슨 말을 하고 싶은지 채점자가 느낀다면 문법, 시제를 틀리고 더듬더듬 이야기해도 좋은 점수를 받을 수 있는 것 같다. 나 역시 진짜 정말 끝나고 망했다... 싶었는데 생각보다 잘 나오니까. 내가 말하고 싶은 내용의 느낌이라도 잘 전달해 보고 오자. 다들 화이팅!!!👍

서론

최근 싸피, 이직준비, 세미나, 동아리 등등 다양한 개발자들을 만나면서 가장 크게 느꼈던 것은 블로그를 해야겠다는 생각이었다. 사실 블로그의 중요성은 대부분의 개발자가 알고 있지만, 좋은 글은 작성하기가 상당히 정성이 들어가는 일이니까, 나처럼 많이 실천하지는 못하는 것 같다. 귀찮겠지만, 꾸준히 내가 공부하고 살아오면서 얻은 인사이트를 블로그에 작성해서 나를 포함한 다양한 사람들이 활용했으면 좋겠다.

그래서 블로그 첫 글을 “개발자가 왜 꼭 블로그를 해야만 하는지” 에 대해 써야겠다고 결정했다. 나 포함 이 글을 보고 블로그를 하고 있지 않은 개발자, 포스팅을 안 한 지 조금 된 개발자라면 다시 한번 마음을 다잡았으면 한다!


주변에 잘하는 개발자, 잘 된 개발자 친구들은 다 하더라

싸피에서 같이 다니는 개발 잘하는 친구, IBM 다니는 학과 선배, 개발자 동아리 친구 등등 여태까지 내가 만나고 얘기 나누면서 “아 이 사람 잘한다. 똑똑하다.” 라고 느낀사람들은 다 블로그를 운영하더라. 나 역시 남들에게 개발 잘하고 똑똑한 사람이 되고 싶기 때문에

쉽게 만들 수 있는 나만의 포트폴리오

이직 준비하면서 뼈저리게 느꼈다. 이전에 회사 다닐 때 기록을 진짜 너무 안 해놔서 기억을 더듬으면서 내가 개선하고 기여했던 것들을 힘들게 찾아, 문장으로 정리하는 것이 너무 힘들었다. 내가 진행하고 있는 프로젝트에 대해서도 좋고, 공부하면서 배운 점 등 여러 가지 인사이트들을 블로그로 정리하고 좋은 글을 작성해 놓는다면 이력서, 포트폴리오 등 내가 기여하고 담당했던 부분들을 정리하고 작성하는 데 큰 도움이 될 것이다.

그리고, 만약에 내가 작성한 글이 조회수가 대박이 날 수도 있고, 그렇다면 이력서에 “월 1만 조회수를 기록하는 블로그를 운영한다.” 라고만 적어도 남들과 충분히 차별화된 점을 가질 수 있다고 생각한다. 이력서를 작성할 때 느낀 것이지만, 타이틀과 수치가 정말 중요한데 이러한 수치를 만들 수 있는 가장 쉬운 방법이 블로그라고 생각한다.

인문학적 소양과 글쓰기 능력을 길러야만 한다.

프롬프트 엔지니어링, 협업 간의 커뮤니케이션, 자소서, 이력서, 포트폴리오 등 글쓰기 능력이 최근에 정말 중요하다고 느꼈다. 사실, 이제 개발 지식은 ChatGpt 같은 다양한 LLM의 등장으로 정말 개발을 모르는 사람이라도 코딩을 할 수 있고, 이제는 AI를 얼마나 잘 활용하는가가 경쟁력이 된 시대다. 이러한 LLM을 잘 활용하려면 프롬프트를 잘 작성할 수 있어야 한다. 또, 좋은 글을 작성하는 능력이 있다면 이를 커뮤니케이션과 자소서, 이력서 등 에 활용할 수 있다고 생각한다.


결론

뭔가 적어 보니, 너무 당연한 이야기라는 생각일 수도 있지만, 이 당연한 이야기를 그냥 생각하고 넘어가는 거랑 내가 느낀 것들을 글로써 기록하는 것은 나중에는 큰 차이를 만들어 낸다는 것이다.

+ Recent posts