큐시즘 30기 밋업 프로젝트가 한창인 요즘이다.

9월 21일 큐넥팅을 시작으로, 이제는 밋업데이까지 약 3주 정도가 남아있다!

29기에 이어 이번 30기에서도 NCP와 협업을 진행하며, 감사하게 NCP 크레딧을 지원 받아 비용적인 부담 없이 개발을 진행하고 있다 👍🏻

이에 대한 중간 기록 및 후기를 작성하고자 이 글을 쓰게 되었다.

단순하게 후기만 딱 적으면 재미없으니… 초반 배포 과정에서 했던 삽질도 한 번 함께 적어보려고 한다 🤣


⚾️ 프로젝트 소개

‘나에게 가장 Fit한 Zone에서 야구를 즐겨보세요, Hit Zone!’

우리 쓰리피트 팀(A팀)에서는, 야구장 방문 니즈에 딱! 맞는 구역을 추천받을 수 있도록 하는 웹 서비스 : HitZone을 만들고 있다!

💡 문제 인식

  • 아이디어 발제 기획 배경
    • 야구를 너무 좋아해서 혼자 직관을 갈 정도인 발제자조차.. ‘각 구장 마다 너무 다른 구역 특성 및 유형’, ‘매번 달라지는 홈/원정 좌석’, ‘굉장히 복잡한 층별 안내도’등 너무 많은 야구 직관 시의 변수들은 사랑으로도 극복할 수 없었습니다 ..
    • 그러다 문득 떠오른 생각.. ‘이러한 변수한 곳에서 모아볼 수는 없을까?’
      • 히트존 (Hit Zone) 은 야구를 정말 좋아하는 사람들부터, 야구 문화에 관심을 가지고 있는 입덕 예정인 사람들까지! 야구 직관을 더 편리하게 즐기고 싶다는 애정으로부터 출발했습니다.
    • 야구장에 갈 때, 재밌는 응원과 같은 야구의 매력에만 집중할 수 있도록 ‘직관 시 편리함’을 제공하는 서비스를 만들어보고자 합니다.

MVP 포함 핵심 기능 💡 저희 히트존의 MVP는 ‘사용자의 니즈에 맞는 각 구장 별 구역 추천’ 입니다. 💡 2번째 핵심 기능은 ‘구장별 구역 가이드’ 입니다. 💡 저희 서브 기능은 ‘야구 문화 가이드’ 입니다.

나는 해당 팀에서 백엔드 리드를 맡아, CICD & NCP Clova 활용 챗봇 구현 & API 구현 등을 진행중이다.


🌐 서비스 활용

히트존_아키텍처

활용한 서비스들은 위 시스템 아키텍처를 보며 설명하려고 한다!

  1. 우선 배포를 위해 NCP Server를 사용하였다.
  2. 네트워크 구축을 위해 VPC를 사용하였다.
  3. 도커를 사용하기 때문에 도커 이미지를 저장할 Container Registry를 사용하였다.
  4. 정적 리소스 파일들을 저장하기 위한 Object Storage를 사용하였다.
  5. DB를 관리하기 위해 Cloud For MySQL을 사용하였다.
  6. 챗봇 구현을 위해 CLOVA Studio를 사용하였다.

여기서 마지막 챗봇 구현에 대한 내용은, 이전 29기 밋업 프로젝트 때 작성했던 내용을 한 번 읽어보아도 좋을 것 같다. (현재는 DTO를 Record로 변경하고 중복 코드를 줄이는 등 약간의 변동 사항이 있기에, 프로젝트가 종료 후 한 번 다시 정리해보려고 한다!)


😓 배포 삽질 과정

그럼 이제부터 이번 프로젝트에서 배포를 할 때 어떤 삽질을 했는지 한 번 적어보려고 한다.

나는 이전 기수에서도 NCP를 써보았고, 사이드 프로젝트에서도 최근까지 NCP로 무중단 배포를 했던 경험이 있기 때문에 배포 자체는 금방할 수 있을 것이라고 생각했었다.

물론 안보고 할 수 있는 정도는 아니기 때문에, 29기 때 함께 했던 백엔드 친구의 글을 많이 참고했다. 처음 NCP로 배포해본다면 하나씩 따라가보는 것도 추천한다 👍🏻

상황

상황을 설명하자면 서버 인스턴스 생성 및 접속, DB 까지 모두 문제 없이 완료가 된 상태였다. 또한 Github Actions & Docker 를 사용하여 무중단 배포를 진행하기 때문에 Container Registry 구축까지 완료가 되었다.

인스턴스 내에 SSH 접속한 후 Container Registry에 있는 이미지를 pull 새로운 컨테이너를 생성하여 배포를 진행하는 방식이었기 때문에, 우선 인스턴스에서 수동으로 컨테이너를 생성해 본 후 테스트를 진행하려고 했었다.

위 글에서

이 부분이라고 봐주면 될 것 같다!

이전에도 동일하게 해 보았기 때문에 초반에는 순조롭게 흘러갔다. 내부에서 이미지를 수동으로 pull한 후 run 해서 컨테이너를 실행시켰는데, 이상하게도 계속해서 public ip로 접속이 되지 않았다..🥲

헬스체크를 위한 API를 만들어두었기에, 그 쪽으로 요청을 해도 계속해서 응답을 받을 수 없었다.

😩 문제가 뭘까..

도대체 문제가 뭘까 한참 생각했다..

애초에 접속 자체가 되지 않는 것이기 때문에 Nginx나 CORS의 문제는 아니라고 생각했다.

그래서 VPC나 서브넷 쪽에서 포트 자체가 막혀있는 게 아닐까?라는 생각을 해서 찾아보았다. 실제로 이전에도 ACG에서 허용 포트 설정을 하지 않아 몇 시간을 날린 적이 있었기 때문이다.

하지만 이미 ACG에는 위처럼 설정이 되어 있어서 문제가 없는 상태였다.

빠르게 끝내고 다음 단계를 진행할라고 했어서 그런지, 마음이 조급해져서 근본적인 문제점을 찾기가 어려웠다.

그래서 같은 해결책을 반복해서 시도해 보았고, 서버도 세 번 정도 다시 만들었던 것 같다.

✍🏻 문의

그러다 도저히 내 머리로는 해결이 되지 않아서, 지푸라기라도 잡는 심정으로 NCP 측에 문의까지 남겼다 🥲

이렇게 말이다..지금 보니 참 웃프다 🤣 위 이미지처럼 문의를 통해서 해결은 할 수 없었고, 이제 다시 스스로 해결해보아야 했다.

참고로 NCP 측에 문의를 남기고 하루만에 답을 받을 수 있었다..! 답이 빨라서 너무 좋았다 👍🏻👍🏻

✅ 해결 과정

당일에는 머리가 너무너무 아팠지만, 다행히 며칠이 지나고 나니 조금 차분하게 문제를 바라볼 수 있었다.

코드나 VPC의 문제는 아닌 것으로 생각했기 때문에, 이제 남은 것은 인스턴스 내에서 외부 접속을 막고 있는 부분이 있는지를 확인하는 것이었다.

그렇게 하염없이 docker ps , docker logs -f {컨테이너명} 을 반복하며 컨테이너를 바라보다가.. 무언가 이상한 점 하나를 발견하게 되었다.

위 이미지를 보면 PORTS8080/TCP 로 되어있는데, 이는 포트포워딩이 되지 않음을 의미했다. (다시 보면 헬스체크도 unhealthy인데… 왜이렇게 시야가 좁았을까 😇)

문제는 바로 내가 컨테이너를 실행할 때 포트포워딩을 빼먹었던 것이다…

docker run -d —env-file .env {컨테이너명}

위처럼 백그라운드 실행 (-d), 환경변수 할당 (-env-file)만 했었고,

docker run -d -p 8080:8080 —env-file .env {컨테이너명}

이렇게 포트포워딩 (-p)을 통해서 인스턴스 외부에서도 접속 가능하게 포트를 열어주니 접속이 되었다.

너무 아무렇지 않게 쓰던 명령어라서 빼먹었다는 생각조차도 하지 못했던 것이, 문제를 해결하지 못 하게 만들었던 것 같다 🥲

그래도 해결되니 너무나도 행복했고.. 이후로는 큰 문제 없이 개발을 즐겁게 하고 있다!

지금 보면 창피한 일이지만, 언젠가 또 실수를 할 수도 있기에 글로 남겨 두 번 실수를 하지 않으려고 한다.

요즘 들어 든 생각인데, 웬만한 에러는

  1. 사소한 부분부터 확인해 보고
  1. 해결이 되지 않을 때는 잠시 멀리한다면

다 해결이 되는 것 같다.

또한 내 능력으로 (with 구글링, GPT) 고칠 수 없는 정도의 에러는 사실상 거의 만나지 않는 것 같다. 그러니 문제가 있을 때는 오히려 차분하게 내가 어떻게 했었는지, 전과는 다르게 한 점이 없는지 등을 파악하는 것이 해결에 더욱 빠른 길인 것 같다!


💡 만족하는 점 & 아쉬운 점

지금까지 NCP를 사용해 보며 만족하는 점과 아쉬운 점에 대해 적어보려고 한다.

만족하는 점

  1. 아무래도 크레딧 지원을 받기에 부담 없이 여러 서비스들을 이용해 볼 수 있다는 점이 큰 장점인 듯하다.
  2. 또한 다른 플랫폼에서 사용하지 못 했던 고성능 서버도 사용해 볼 수가 있는 것 같다.
  3. 가이드 등 설명이 한글이기 때문에 초보자도 쉽게 따라갈 수가 있다.
  4. AI와 관련한 다양한 서비스들이 있고, 성능 또한 우수하기 때문에 밋업 프로젝트에 적용해 보고 싶은 부분들이 많다.
  5. 위에서 언급한 것처럼 문의를 남겼을 때 굉장히 답이 빠르고, 레퍼런스가 친절하게 작성되어 있다.

아쉬운 점

  1. 크레딧 지원을 받지 않는다면 학생 입장에서 이용하기는 조금 부담스러운 청구 금액이 나온다..! 물론 성능이 좋기에 어쩔 수는 없지만 추후 조금 더 라이트한 성능과 금액의 서버가 있다면 좋지 않을까라는 생각이 든다.
  2. 어쩔 수 없이 AWS, GCP에 비해 아직 블로그 글 등 레퍼런스 들이 부족하다. 하지만 점점 늘어날 것이고, 문의나 가이드 등이 매우 친절한 편이기 때문에 어느정도 커버가 된다고 생각한다!

🚀 앞으로의 목표

사실 이번 밋업 프로젝트를 시작하면서 NCP 서비스를 더 많이 활용해 보고 싶다는 생각이 있었다. 인프라 쪽에서 조금 더 공부를 하고 적용해 보고 싶었으나.. 생각보다 현재 개발하고 있는 서비스의 규모가 크지는 않기 때문에 오버스펙이라는 판단이 들었다.

때문에 인프라 보다는 코드의 퀄리티를 높이기 위해서 더 많은 시간을 쏟고 있는 듯하다. (이것만 하기에도 시간이 많이 부족하다 😅)

하지만 이번에도 CLOVA Studio를 통해서 이미 챗봇을 구현했고, 아직 3주라는 기간이 남았기 때문에 AI나 다른 부분에서 충분히 더 활용해 볼 수 있을 것이라고 생각이 든다.

때문에

  1. 우선은 필수적인 기능들을 만들기 위해 노력할 것이고
  2. 가독성유지보수성을 고려하여 코드 퀄리티를 높일 것이며
  3. 중간 피드백을 반영하여 전반적으로 리팩토링을 진행해 볼 것이다.

그리고 프로젝트가 종료된 후에는 회고록 겸 NCP 사용 후기를 이전 기수 때처럼 열심히 작성해보려고 한다 🧑🏻‍💻🔥

얼른 프로젝트가 끝났으면 좋겠으면서도..시간이 천천히 가기를 바라는 요즘인 것 같다. 다들 끝까지 화이팅 하기를 바란다❗️