본문 바로가기

DevOps24

[DevOps] 하나의 LB로 여러 서비스 운영하기 개요로드 밸런서는 운영관리 입장에서 상당히 많은 편의성을 제공한다.그래서 그런지 규모가 작은 프로젝트 즉, "부하 분산"이 필요없는 프로젝트임에도 불구하고 정말 많은 사람들이 로드 밸런서를 활용한다. 그런데 나의 경우, 작은 프로젝트에 LB를 쓰는게 그 기술의 취지에 맞지 않고, 그렇기에 많은 자원이 낭비가 된다는 생각에 쓰기가 싫었다. (뭔가 괜히 패배하는 기분이랄까..?) 여기서부터 지옥 시작이었다.  포트로 분리된 서버에 LB 없이 하나의 서버로 각각의 포트에 SSL을 적용하는 테스크를 진행 (이 가설엔 논점이 굉장히 많은데, 다른 포스팅에서 다뤄보겠다.)했는데, 사실 이건 로드 밸런서로 뚝딱뚝딱 1-2시간이면 할 수 있는 업무다. [사건의 발단🥹] 그런데 위와 같은 이유로 로드밸런서를 사용하기 .. 2024. 5. 13.
[AWS] public & private subnet 분리로 서버 운영하기 개요 AWS 서비스를 조금 더 보안성 있게 운영하고자 한다면, 한 VPC 내의 subnet을 분리하여 사용하는 방법이 있다. 이번 프로젝트는 앞으로 동아리에서 쭉 사용할 서비스이므로 처음부터 보안에 유의하여 설계를 해야겠다 다짐했다!! 그래서 이 포스팅을 통해 어떤 과정을 겪었는지 정리해보려 한다. AWS에서 자체적으로 해주는 것이 많아서 생각보다 많이 간단했다. VPC 만들기 AWS 계정을 생성하고 나면 기본 VPC는 존재한다. 별도의 퍼스널 서브넷 세팅을 위해 새로 VPC를 생성하자. 생성할 리소스 옵션 중 VPC만/VPC 등 두 가지가 있는데, private subnet에 RDS를 두려면 반드시 후자를 선택해야 한다. RDS 생성 시에도 RDS subnet을 세팅하게 되는데 이때 subnet은 두 .. 2024. 4. 7.
[AWS] AWS CLI 설정 및 활용하기 개요 GCP를 사용하면서 이 글 과 같이 google cloud SDK라는 걸 통해 콘솔에 접근하고 여러 클라우드 서비스를 이용하였다. AWS도 이와 마찬가지로 SDK, CLI(명확하게 말하자면 SDK와 CLI는 다른 것이긴 하다.)를 통해 콘솔에 접근하는 서비스가 있다. 이걸 설정하고 AWS 서비스를 이용해보자! 우선 root 계정과 그로부터 admin 권한을 할당 받은 계정이 있다고 가정한다. AWS CLI latest 다운 sudo curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip" 해당 문서는 MacOS 사용자 기준으로 다운 방법을 제시하고 있다. 그냥 위 명령어를 iterm or terminal에 입력해.. 2024. 3. 24.
[DevOps] Docker + Jenkins 조합으로 CI/CD - 기본 세팅편 개요 드디어 프로젝트에서 완전한 인프라를 맡았고 🥹🥰 첫 도전과제는 Jenkins로 CI/CD를 구축하는 것이다. 먼저 Jenkins가 어떤 툴인지, 어떻게 사용하는지 기본적인 세팅을 이 포스팅을 통해 정리해본다. 활용도를 위해 Docker와 함께 사용하였다. 그렇기에 해당 포스팅에는 Docker에 대한 설명도 포함된다. Docker 환경에서 Jenkins 사용하기 (Docker Desktop은 이미 설치되어 있다고 가정한다.) 도커 허브는 오픈소스답게 다양한 이미지를 활용할 수 있는데, 역시나 젠킨스 이미지도 있다. Jenkins 이미지 다운 먼저 Jenkins 사용을 위해 이미지를 다운받아주자 docker pull jenkins/jenkins Jenkins 이미지 실행 Jenkins의 공식 문서를 보.. 2024. 3. 20.
[GCP] Cloud Logging 에러 사항을 메일로 모니터링하기 개요 예기치 못한 에러 때문에 개발자가 모르는 사이 서비스가 갑자기 다운될 수도 있다. 이러한 이슈를 방지하기 위해 로그를 모니터링하는 것은 매우 중요한 일이며, 메일, slack, chat 등으로 실시간 알림을 통해 로그를 모니터링할 수 있다. Cloud Logging Cloud Logging을 보면 정말 많은 로그들이 실시간으로 쌓이고 있다. 이번 포스팅에서는 Error 관련 로그가 발생했을 때 회사의 DEV 계정으로 메일 알림을 전송하는 것을 세팅해보도록 한다. Cloud Logging의 가장 우측에 알림 만들기라는 버튼을 클릭하자. 원래 이 서비스는 없었고 StackDriver라는 서비스로 지원됐었는데, 새로 생겼다고 한다. 그래서 Cloud Logging 관련 리서치를 하면 여전히 Stackdr.. 2024. 2. 14.
[GCP] Google Cloud Load Balancer, GCP 로드밸런서 구축 | Cloud NAT와 로드밸런서 | Cloudflare 개요 회사 서버 개편 작업을 위해서 다음과 같은 작업을 수행하였다. Instance Template, Instance Group 생성 (https://cobinding.tistory.com/229) Cloud NAT Gateway 구축 (https://cobinding.tistory.com/244) [GCP] Cloud Nat Gateway 구축 과정 및 작동 방식 요구사항 서버 상황 현재 VM 인스턴스의 외부 ip는 임시 ip로 되어있다. 배포는 수동으로 “인스턴스 바꾸기”를 통해서 새로운 인스턴스 이름과 ip를 부여받는 방식으로 운영하고 있다. 인스턴스 cobinding.tistory.com [GCP] Instance Template과 Instance Group을 통한 VM 서버 생성과 블루-그린 배.. 2024. 1. 29.
[GCP] Cloud Nat Gateway 구축 과정 및 작동 방식 요구사항서버 상황배포는 “인스턴스 바꾸기”를 통해서 새로운 인스턴스 이름과 ip를 부여받는 방식으로 운영하고 있다.인스턴스 바꾸기를 통해 인스턴스를 삭제하고 교체하면, 인스턴스의 외부 ip도 인스턴스가 교체될 때마다 달라진다. 문제 상황NICE API 요청을 위해 ip 주소가 바뀔 때마다 화이트리스트에 등록을 해야함VM인스턴스에서 도는 웹사이트는 WebClient를 통해서 NICE 서버와 http 통신을 한다. 이때, VM 인스턴스의 외부 ip가 HTTP 통신 요청 헤더의 host 필드값으로 들어가게 된다. NICE 측에서는 이 요청값을 통해, 화이트리스트에 등록된 IP인지 아닌지 확인을 한다. ➡️ 따라서 IP를 번거롭게 매번 등록해야 한다. 위험성도 높다.인스턴스 바꾸기를 통해 배포가 될 때마다 외부.. 2024. 1. 29.
[GCP] Instance Template과 Instance Group을 통한 VM 서버 생성과 블루-그린 배포 개요 웹사이트 개편 작업 이후 도입된 외부 API는 요청 헤더값에 우리 웹사이트의 vm 인스턴스 정보가 담긴다. 이러한 VM 인스턴스 IP 주소는 유동 IP로 설정되어있어서, IP가 변경될 때마다(배포할 때마다 - 블루∙그린배포) 매번 VM 인스턴스의 IP를 화이트리스트에 업로드해야 한다. 이러한 수동 업데이트 방식은 문제의 소지가 다분하다. 이 문제를 해결하기 위한 개편작업을 담당하였다. 그 과정을 시리즈로 블로그에 정리해보려 한다. 이 포스팅은 그 시작점인 Instance Template의 설정과 MIG이다. Instance Template Instance Template은 MIG를 통해 서버를 운영하기 위해서 가상머신 생성을 위한 일종의 규칙 사항들을 정리해 놓은 것이다. GCP의 Instance .. 2024. 1. 29.
[GCP] Cloud Build 커밋/푸시없이 트리거 실행하기 개요 Cloud Build 작업을 하면서 트리거 테스트를 위해 계속 커밋을 남겼었다. 그런데 공용 Repository에 커밋 및 푸시를 남기지 않고 트리거를 실행하고, 로그를 볼 수 있는 방법을 찾아서 공유한다. GCP는 상대적으로 자료가 많이 없어서 작업이 꽤 힘들다..🥹 GCP를 사용하는 동안 꾸준히 기록해보자!! Cloud Build 트리거 실행 방법은 매우 간단하다. Cloud Build > 트리거 경로로 들어가서 빌드 테스트를 실행하고 싶은 트리거의 실행 버튼을 누른다. 그럼 위와 같이 트리거를 실행할 트리거 이름과 저장소, 브랜치 입력창이 나온다. 여기서 Cloud Build에 트리거 대상으로 설정해준 브랜치를 입력하고 트리거 실행을 하면된다. 그럼 바로 빌드가 되고 원격 저장소에 commit.. 2024. 1. 15.
[Redis] Redis 4편. 운영 방식과 호스팅 개요 SpringBoot와 Redis사용법을 redis-cli을 통해 로컬 환경에서 익혔다면, 호스팅 방법과 운영 방식에 대해 공부하고, 결정해보자. 데이터 관리 방식 Redis의 장점은 인메모리 방식으로 모든 데이터를 RAM에 저장하여 입출력 성능을 끌어올리는 것이다. 이러한 장점을 잘 사용하려면 어떤 데이터를, 어떻게 사용할지에 대해 잘 정의하고 이를 관리하는 방식에 대한 정의가 필요하다. 캐싱 전략 레디스 캐싱 전략은 크게 4 가지이다. 보통 읽기/쓰기 패턴을 고려하여 4 가지 전략 중 한 가지를 택하거나 2 가지 이상의 전략을 결합하여 사용한다. 레디스 DB에 쓰기 작업을 진행할 때 주의할 점은 인메모리 데이터베이스 특성상 영속성이 보장되지 않는다는 점이다. 따라서 이러한 데이터의 휘발성을 보완하.. 2024. 1. 8.
[Redis] Redis 3편. Spring Boot와 Redis | Lettuce, RedisTemplate, RedisRepository 개요 Redis는 다양한 언어와 함께 사용할 수 있다. 이번 포스팅에서는 spring boot 프로젝트에서 사용하는 Redis에 대해 알아보도록 한다. 현재 개발 운영 방식에 알맞은 방법으로 Redis를 도입할 수 있도록 각각의 라이브러리와 방식을 공부하는 것이 목적이다. 전체 코드는 깃허브에서 확인 가능하다. Lettuce와 Jedis 스프링 프로젝트에서 사용하는 레디스는 두 가지 종류가 있다. Lettuce Lettuce는 Netty 기반 라이브러리로 Asynchronous & Non-blocking으로 구현되어 있다. Netty란? 네트워크 애플리케이션 개발을 위한 오픈소스 자바 프레임워크로, 비동기 이벤트 기반의 네트워크 애플리케이션을 쉽게 개발할 수 있도록 관련 도구와 라이브러리를 제공한다. 자.. 2024. 1. 8.
[Redis] Redis 2편. 기본 자료형 개요 인프런 실전! Redis 활용 강의를 듣고 정리한 포스팅이다. redis의 자료형에 대해 알아보고 익숙해지기 위해 예시 코드를 작성해보도록 한다. Redis 자료형 특징 데이터 타입에 따라 명령어가 다르다. 대소문자 구별을 하지 않기 때문에 명령어를 대문자/소문자 구분없이 작성 가능하다. Strings 문자열, 숫자, serialized object(JSON) 등 여러 자료형을 저장하는 Strings Type이다. 레디스는 int, Integer 등 별도의 숫자 관련 자료형 없이 모두 strings로 저장한다. strings로 저장되어도 사칙 연산이 가능하다. (Java를 가장 많이 쓰는 입장에서 이 점이 젤 신기했다.) Strings 명령어 SET lecture라는 변수에 “inflearn-red.. 2024. 1. 4.