문제 상황 feature 브랜치에서 작업이 진행되었고, develop 브랜치에 머지하려고 할 때 컨플릭트 발생아래와 같은 브랜치 상태에서 develop 브랜치로 변경하려고 하니 변경 사항이 겹쳐서 checkout이 막힌 상황이었다. A --- B --- C --- D --- E --- F --- G (develop, old) \ X --- Y --- Z (feature/chat-list, new)develop 브랜치는 기존 G 커밋에서 멈춰 있었고,feature/chat-list 브랜치에서 X, Y, Z 커밋이 추가됨develop 브랜치로 이동하려고 했지만 변경 사항이 겹쳐버려 컨플릭트가 발생했다.이때 강제로 develop ..
Infra
이번에 채팅SDK 를 구현하면서 백엔드 서버를 어떻게 배포해야하나 고민하게 되었다. 현재 인프라에서는 백엔드 서버를 로드밸런싱을 하고 있다. RESTAPI 였다면 매 요청이 Statless 하기때문에 로드밸런싱을 하더라도 로그인 빼고는 크게 고민할게 없었다. 하지만 소켓의 경우에는 connection이 계속 유지되어야하기 때문에 로드밸런싱을 할 시에 연결유지를 위해 Sticky Session 방식을 사용해야할까? 만약 세션고정을 할거면 로드밸런싱 장점이 너무 퇴색되는거 아닌가..? 다들 어떻게 하고 있는거지? 라는 궁금증이 생겼다. 결론적으로는 웹소켓 서버 배포할때 세션고정대신 3가지 방법을 통해 로드밸런싱의 이점을 가져갈 수 있다. 해결방법을 알아보기전에 먼저 원리부터 살펴보자 WebSocket 통신 ..
🧐 문제 발생Flutter CICD 비용개선을 위해 젠킨스 서버를 온디맨드 인스턴스에서 스팟 인스턴스로 이주했다. 그런데 이상하게 Build 속도는 빠른데 젠킨스 접속속도가 현저하게 느렸다. EC2 모니터링을 보면 CPU도 해봤자 7% 사용하고 있고 네트워크도 정상적인 것 같은데 당최 어떤게 문제인지 알 수가 없었다. 플러그인이 문제인가 싶어서 플러그인도 다 삭제해봤는데 접속속도가 너무 느렸다. 😭🧐 문제 분석 및 해결먼저 속도지연과정을 살펴보자면 아래와 같은 순서이다. 1. 사용자가 브라우저를 통해 젠킨스에 접속한다.2. EC2의 Jenkins Server는 등록된 내부 URL로 HTML, CSS 등의 웹 리소스를 보낸다.3. 만약 내부 URL의 ip와 해당 젠킨스가 배포된 EC2의 public ..
🧐 문제상황 매일 새벽 5시마다 플러터 프로젝트 develop 브랜치에서 단위테스트를 실행시키고자 했다. 1. 이를 위해 EC2에 도커로 젠킨스를 배포했다.2. Flutter 는 Docker Hub 에 마땅한 이미지가 없어서 (개인이 올려놓은 플러터 이미지가 있긴했는데 스타수가 워낙 낮아 신뢰하기 어려웠다.) EC2 로컬에 직접 설치한상태였다. 이 상태에서 파이프라인 스크립트를 작성하고 build 를 해보았더니 젠킨스가 flutter 파일을 찾지못하고 failure해버리는 이슈가 발생했다.☺️ 문제 원인 분석 및 해결Jenkins가 Docker 컨테이너로 실행되면, 컨테이너는 자체 격리된 파일 시스템을 사용한다. 따라서, EC2 로컬에 설치된 Flutter와 Android SDK 경로를 인식하지 못하고..
OpenStack 개요OpenStack은 오픈소스 클라우드 인프라 관리 플랫폼이다. 주로 프라이빗 클라우드 환경에서의 자율적이고 맞춤형 인프라 관리를 위해 사용된다. 보안, 데이터 통제, 맞춤형 설정, 비용 절감 등 여러 측면에서 프라이빗 클라우드에 최적화된 툴이다. 특히 데이터 주권이 중요하거나 퍼블릭 클라우드로 전환이 어려운 산업에서는 OpenStack을 통한 프라이빗 클라우드 구축이 용이할 수 있다. AWS와 OpenStack, VMware 와 OpenStack 차이차이점을 알아보기에 앞서 AWS, VMWare, OpenStack의 공통점부터 알아보자. 셋 모두 Iaas라는 공통점이 있다. Iaas란 Infrastructure as a service의 약자로 가상화된 컴퓨팅 자원(예: 서버, 네트워..
온프레미스로 구축할 때는 보통 Type1 하이퍼바이저를 이용해 물리자원을 가상화하여 분배한다. Type1 하이퍼바이저로 ESXi를 사용하는 인프라 구축방법에 대해 알아보자. ESXi를 사용하면 물리 자원을 가상화하여 효율적으로 분배할 수 있다. 특히 여러 국가나 지역에 있는 물리 서버에 ESXi를 설치하고, 네트워크로 연결해 통합 관리하면, 마치 하나의 거대한 데이터센터처럼 사용할 수 있다. 예를 들어 영국, 일본, 미국 등에 각각 ESXi 서버를 배포하여 CPU와 메모리 자원을 제공하고 한국에 위치한 중앙 데이터센터에서 데이터 저장소를 관리할 수 있다. 이러한 인프라 구조에서 데이터에 대한 접근은 iSCSI(Internet Small Computer Systems Interface) 프로토콜을 통해 ..
하이퍼바이저란? 하이퍼바이저는 물리 서버 위에서 여러 가상 서버 인스턴스(VSI)를 만들어내는 소프트웨어이다. 하이퍼바이저(Hypervisor)의 어원을 살펴보면 "하이퍼-" 는 "초월적인" 또는 "더 높은 단계의" 라는 의미를 가지고 있어 하이퍼바이저가 물리적인 하드웨어 위에서 가상 시스템을 관리하는 소프트웨어임을 나타내고 "바이저(Visor)" 는 "관리자" 또는 "감시자"라는 뜻으로, 하이퍼바이저가 물리적 자원을 감독하고 가상 머신이 이 자원을 잘 활용하도록 관리하는 역할을 한다는 것을 알 수 있다. 즉 하이퍼바이저는 물리적 자원을 초월해 여러 가상 머신을 관리하는 상위 관리자라는 의미를 내포하고 있다. 컴퓨터 부팅될 때 물리적 하드웨어에서 시작해 운영체제가 메모리에 올라가고 프로그램들이 실행되는데..