데보션앱 소개페이지 바로가기
로그인 선택

신고하기

CLOSE
신고사유 (대표 사유 1개)
상세내용 (선택)
0/200
  • 신고한 게시글은 더 이상 보이지 않습니다.
  • 이용약관과 운영정책에 따라 신고사유에 해당하는지 검토 후 조치됩니다.
  • 허위 신고인 경우, 신고자의 서비스 이용이 제한될 수 있으니 유의하시어 신중하게 신고해 주세요.
(이 회원이 작성한 모든 댓글과 커뮤니티 게시물이 보이지 않고, 알림도 오지 않습니다.)

미리보기

커뮤니티

      1,234

      badge 23.06.15

      글 등록

      카테고리를 선택해주세요.

      DEVOTEE를 활성화 시키면
      지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.

      버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.

      임시저장함에 저장되었습니다. 저장일시 : 2022.5.17 14:29:08

      임시저장함

      제목을 선택하시면 이어서 작성이 가능하며,
      최대 20건까지 저장합니다.
      컨텐츠 유형, 제목, 저장일시, 삭제로 이뤄진 임시저장 목록
      컨텐츠 유형 제목 저장일 삭제

      데보션 블로그 게재 요청

      CLOSE
      • *
      • *

      본인인증

      효율적인 데보션 서비스 이용 및
      고객님의 소중한 개인정보보호를 위해
      본인인증을 진행해주세요. 본인인증 미 진행 시 로그인이 제한됩니다.
      본인인증 실패

      본인인증 로그인에 실패하였습니다.
      회원이 아니시거나 본인인증 등록이
      완료되지 않은 사용자입니다.

      회원정보 연결

      [2기 개발 과제] DEVOCEAN 배포 자동화 프로젝트

      kchabin 23.12.15
      604 2 0
      DEVOTEE 요약
      DEVOCEAN YOUNG 2기 AllinOne조가 DEVOCEAN 배포 자동화 프로젝트에 대한 개발 과정 및 최종 결과를 공유했다. 프로젝트는 웹과 앱의 CI/CD를 관리하는 것으로, 웹은 젠킨스와 쿠버네티스를 활용했고, 앱은 Github Action이라는 ci/cd 플랫폼을 이용했다. 그 과정에서 여러 오류 발생에도 불구하고, 이를 해결하며 K8S 클러스터, CI/CD, 그리고 컨테이너 운영에 대한 이해도를 높일 수 있었다.
      DEVOTEE 추천 블로그

      안녕하세요, DEVOCEAN YOUNG 2기 AllinOne의 강다빈입니다.

      지난 11월 3일 금요일, T타워 4층 Supex 홀에서 발표했던 개발 프로젝트 최종 결과물을 소개하고자 글을 올리게 되었습니다.


      AllinOne의 주제는 바로 DEVOCEAN 배포 자동화 프로젝트였는데요,

      지금부터 차근차근 저희의 프로젝트를 소개해보도록 하겠습니다. 🤗

      slide 1.png


      전체적인 개발 과정

      slide 2.png

      Tech Day

      시작은 4월에 진행된 테크 데이 행사였습니다.

      데보션 전문가 안승규님의 Kubernetes 기반 애플리케이션 배포 시스템 구축 방법 관련한 세션을 들으면서 그때 처음 k8s에 대해 알게 되었습니다.

      거기에 우리 DEVOCEAN 마스터 김상기 님께서 DEVOCEAN도 컨테이너에 올릴 계획이라고 말씀하신 걸 열심히 주워듣고..! 이 프로젝트를 기획하게 되었죠 😚

      DevTime

      k8s에 대해서 모르는 것이 많기도 하고, Dokubernetes 스터디를 개설해서 본격적인 공부를 시작하기는 했지만 책만 들여다봐서 이해할 수 있는 수준이 아니었던 k8s...

      저는 실력보다 의욕이 앞서면 어떤 불행이 발생하는지 이번 프로젝트를 통해 절실히 느꼈던 것 같습니다.

      너무 간단한 주제를 잡았나 걱정되기도 하고, 모든 팀원들이 만족할 수 있는 프로젝트 주제를 제시해야 한다는 강박에

      개발 공부를 위한 타이머 앱 DevTime을 기획하기도 했습니다만, 열심히 돌고돌아 처음 주제로 다시 돌아왔습니다 😅

      KCD 2023 & Kubernetes Study 🐳

      DEVOCEAN에서 티켓을 지원해주셔서 간 Kubernetes 관련 행사였습니다.

      여기서 커피챗을 통해서 안승규님의 강의를 저희 Dokubernetes 스터디에서 들을 수 있게 되었고,

      이 스터디를 통해 배운 것들을 저희 DEVOCEAN 배포 자동화 프로젝트에 적용할 수 있게 되었습니다.

      결국 목표는?

      slide 3.png

      궁극적인 목표는 결국, DEVOCEAN 활동을 통해 경험하고 배운 것들을 프로젝트 진행에 활용해보는 것이었습니다.


      초기 구상

      slide 4.png

      지난 10월 데모데이 때 제출했던 저희 프로젝트의 초기 구상입니다.

      웹과 앱으로 나눠서 웹은 젠킨스를 활용해 쿠버네티스에 올려 ci/cd를 하는 것으로 구상했고, 앱은 fastlane을 활용한 apk와 ipa 배포 자동화를 구상했었습니다.


      App 빌드 자동화

      실제로 진행하게 된 방식은, 초기 구상과 좀 다릅니다.

      slide 5.png

      앱을 배포할 때 권한 문제가 있고, 또 앱 스토어나 구글 플레이 스토어에 앱 등록 시 비용이 발생하기에

      이런 두 가지 문제 상황을 고려하지 않을 수 있는 방향을 생각해서 깃허브에서 제공하는 ci/cd 플랫폼인 Github Action으로 CI를 진행하게 되었습니다.

      Workflow

      slide 6.png

      DEVOCEAN 개선 프로젝트에 활용 가능한 코드 레포지토리를 제공받아서 제 깃허브 레포지토리에 fork해왔고,

      해당 데보션 앱 레포지토리의 Actions 탭에서 set up a workflow yourself를 클릭하면 워크플로우를 작성할 수 있습니다.

      Yaml 파일 형식으로 작성할 수 있고, 제대로 만들어지면 보시는 것처럼 Actions에 내가 만든 워크플로우의 이름이 뜨게됩니다.

      워크플로우의 기본적인 작성 문법을 이해하는데 조금 시간이 걸렸던 것 같습니다.

      빌드한 결과물은 어디로?

      slide 8.png

      작성한 워크플로우를 커밋하면, build.yaml 이실행되는데, 빌드가 무사히 이뤄지면 결과물로 appbundle이 만들어지고, Github Actions Artifacts에 저장됩니다.


      Web을 minikube에 띄우기

      slide 9.png

      제공받은 코드를 바탕으로 DEVOCEAN 컨테이너 이미지와 MySQL 이미지를 생성했는데요,

      DB의 경우 실제 DB에서 테스트 데이터를 받아와서 넣고 이미지를 만들었습니다.

      slide 10.png

      웹 사이트 이미지는 현재 데보션이 서비스되고 있는 AWS s3 링크를 알아내서 연결하고 불러왔습니다.

      동영상이 재생 되지않는 이슈도 있었는데요, 직접 데보션 웹사이트에서 동영상을 다운로드 하고 이를 스프링 프로젝트 리소스에 넣어 해결했습니다.

      slide 11.png

      저희가 구성한 쿠버네티스 클러스터의 다이어그램입니다.

      minikube의 ip 노출은 minikube tunnel을 활용했고, Docker에 minikube와 만들어둔 mysql 이미지를 띄웠습니다.


      minikube 내부에 데보션 네임스페이스를 만들고 그 안에 파드들을 띄웠습니다.

      파드는 k8s cluster 내부에서 실행되는 가장 작은 배포 단위로, 컨테이너화 된 애플리케이션을 실행시키는 용도입니다.

      저희는 replicas를 2로 설정해 클러스터 내부에서 두 개의 파드가 동작하도록 했습니다.

      minikube tunnel이 로드밸런서 타입의 서비스에 가상 ip 주소를 할당하면 로컬 머신에서 해당 ip 주소로 서비스에 액세스할 수 있고,

      이 서비스를 통해 외부 트래픽을 내부 서비스로 전달합니다.

      ClusterIP 서비스와 Endpoint를 만들어둔 mysql 컨테이너와 연결하는데 사용했습니다.

      Helm Chart

      작성한 Deployment, Service 들을 모아 helm chart로 만들고 minikube에 배포하게 됩니다.

      helm은 쿠버네티스의 패키지 매니저 또는 애플리케이션 배포 관리자 역할을 합니다. helm으로 우리가 배포하는 리소스들을 관리합니다.

      slide 15.png

      먼저, helm create devoceanchart 명령을 실행하면 Helm 차트의 기본 디렉토리 구조와 예제 매니페스트 파일이 생성됩니다.

      minikube 드라이버로 이동해서 마지막 명령어를 입력하면 데보션 파드라는 이름의 릴리즈가 만들어지고,

      devocean 네임스페이스 안에 애플리케이션이 배포됩니다.


      Troubleshooting.. 🤯

      프로젝트를 진행하는 기간의 대부분은 스터디였고,

      실제로 배운 것들을 적용해서 파드를 띄우는 과정들은 생각보다 짧은 시간동안 진행 됐지만 그 와중에도 꽤 많은 오류들이 쏟아졌습니다.

      1. k8s 클러스터 내부에서 외부 DB 접근 불가

      slide 17.png

      클러스터 내부에서 외부 DB에 접근이 안되는 문제가 생겼었는데, DB의 주소를 host.docker.internal 에서 mysql-service로 변경하여 이 문제를 해결했습니다.

      2. MySQL 연결 오류 : Could not ge JDBC Connection;

      slide 18.png

      "Could not get JDBC Connection" 오류는 Java 프로그램에서 데이터베이스와 연결할 때 발생하는 문제를 나타냅니다.

      JDBC는 Java Database Connectivity의 약자로, Java 언어로 작성된 애플리케이션에서 데이터베이스와의 통신을 가능케 하는 API입니다.

      확인 결과 저희가 Replica set을 2로 설정해놨기에 pod가 두 개가 떠야 정상인데,

      mysql max_connection 값이 작아서 pod 한 개가 연결되면 다른 pod의 연결은 이뤄지지 못하기 때문에 발생하는 오류였습니다.

      해당 오류는 set global max_connections=1000; 으로 설정해서 해결할 수 있었습니다.

      3. Pod Health Check : Unhealthy

      k8s에서 Pod가 제대로 띄워졌는지 모니터링 하는 기능이 바로 Health Check 입니다.

      Pod가 잘 살아있는지 검사하는 Liveness Probe, Pod가 트래픽을 전달받을 준비가 완료됐는지 확인하는 Readiness Probe가 있는데요

      이를 통해 클러스터의 안정성과 가용성을 높이는 역할을 합니다.

      slide 19.png

      저희 프로젝트의 경우 Pod를 띄우는데 걸리는 시간이 꽤 오래 걸려서 발생한 문제였고,

      yaml 파일에 initialDelaySeconds 값을 120으로 설정해서 120초만큼 기다린 후 health check가 이뤄지도록 해 문제를 해결했습니다.

      4. Apple Silicon Mac Platform 오류

      Docker 이미지를 작성한 팀원의 노트북과 제 노트북의 운영체제가 서로 달라 발생한 오류였습니다.

      arm64 지원 가능한 이미지로 수정해서 해결했습니다.

      slide 20.png

      프로젝트 진행 소감 ✨

      처음 이 프로젝트 주제를 선정한 이유는 k8s를 공부하고,

      공부한 내용을 바탕으로 실제 현업에서 개발자 분들이 경험할 만한 일들을 한 번 해보면 좋겠다는 생각때문이었습니다.

      중간에 여러 우여곡절도 존재하긴 했지만, 안승규 전문가 님과 DEVOCEAN에서 많이 도와주신 덕분에 처음 의도한 대로 프로젝트가 진행될 수 있었고,

      프로젝트를 시작할 때와 비교하면 아주 조금이라도 성장한 모습을 발견할 수 있어 뿌듯한 마음도 듭니다.

      이제 DEVOCEAN YOUNG 2기 활동도 거의 다 끝나가는데, 이 활동에서 배운 것들을 바탕으로 앞으로 더 멋지고 좋은 개발자가 되겠습니다. 감사합니다.

      댓글 0

      DEVOTEE를 활성화 시키면
      지금 작성한 댓글에 AI가 댓글을 달아줍니다.

      kchabin 님의 최신 블로그

      더보기

      DEVOTEE 추천 블로그

      동영상 기고하기