일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- AWS
- Kubernetes
- http 413
- 배포 프로세스
- Logrus
- Golines
- GoF
- UnBuffered channel
- 디자인패턴
- 컴포지트패턴
- body size
- Buffered channel
- 배포 파이프라인
- Infra
- notification system
- 윈도우키보드
- Intellij
- goland
- intellij ide
- Helm V3
- elasticsearch
- gitops
- golang
- 티스토리챌린지
- GoF 디자인패턴
- 오블완
- 대규모 시스템 설계
- apollo router
- go
- System Design
- Today
- Total
목록시스템구축 (16)
Fall in IT.
현재 필자의 시스템은 MSA로 구성되어있다. 그리고 각 마이크로서비스의 로그 기록은 Elasticsearch에 기록되고 있는데 그 방식이 조금 특이(?)하다.전통적인 EFK 시스템을 통해서 기록되는 것이 아니라 로그라이브러리를 통해 기록되고 있기 때문이다. 왜 로그라이브러리를 통해서 로그 데이터를 기록하게 됐는지, 각각의 장단점은 무엇인지 간략하게 설명하고자한다. 로깅 라이브러리를 통해서 Elasticsearch로 전송하는 방식장점구조 단순성Fluentd, Logstash와 같은 추가적인 로그 수집 레이어를 생략할 수 있다.애플리케이션과 Elasticsearch 사이의 연동만 설정하면 되므로 관리할 구성요소가 줄어든다.로그 장애 포인트는 Elasticsearch 하나로 줄어듬.유연성데이터 포맷을 애플리케..
최근 연차를 보내던 중 QA 팀으로부터 서비스의 로그인 오류 문의를 받았다.문제의 원인을 조사하고 해결한 과정을 기록한다. 문제 상황QA 팀에서는 서비스 로그인이 되지 않는다고 보고했다.로그를 확인해 보니 API 타임아웃이 발생하고 있었다.원인 분석로그 기록 방식API 에러가 발생한 서비스는 로그를 로그 라이브러리를 통해 Elasticsearch에 기록하고 있었는데 동기적으로 기록하고 있었다.이 방식은 Elasticsearch에 문제가 생기면 API 요청이 지연되거나 실패할 수 있는 구조적 문제를 내포하고 있었다.Elasticsearch 상태 점검Elasticsearch는 실행 중이었으나 에러 로그가 기록되고 있었다.스토리지 상태를 확인한 결과, /usr/share/elasticsearch/data 디렉..
안녕하세요. 오늘은 간단한 알림 시스템을 설계해보겠습니다. 설계 방법은 다양하며 서비스 환경에 따라서 달라질(구체화 될)것이다. 요구사항 푸시 알림, SMS 메시지, 이메일 알림 제공 알림의 종류는 더 늘어날 수 있다. 고려할 사항 알림 유형별 지원 방법 연락처 정보 수집 방법 알림 전송 및 수신 방법 알림 유형별 지원 방법 iOS 푸시 알림 → APNS (Apple Push Notification Service) 사용 Android 푸시 알림 → FCM (Firebase Cloud Messaging) 사용 SMS 메시지 → 트윌리오 같은 써드파티 서비스 사용 이메일 → SendGrid 같은 써드파티 서비스 사용 연락처 정보 수집 방법 회원가입시에 전화번호, 이메일 등의 정보를 받아야하고 모바일에 푸시 ..
대규모 System Design을 위한 몇 가지 기본 기능을 간단하게 정리해보자. (대규모 시스템을 설계하기 위해서는 많은 기술들이 필요하지만 이 글에서는 로드밸런서, 메시지 큐, 캐시에 대한 개념을 간단히 정리해보겠습니다) 로드밸런서 로드밸런서는 부하 분산 집합에 속해 있는 웹 서버들에게 트래픽을 고르게 분산하는 역할을 한다. 사용자는 로드밸런서의 공개 IP 주소(public IP address)로 접속한다. 웹 서버는 클라이언트의 접속을 직접 처리하지 않는다. 또한, 서버 간의 통신은 사설 IP 주소(private IP address)를 이용한다. 이렇게 되면, 서버의 확장 및 축소가 쉬워지는데 부하 분산 집합에 웹 서버를 추가하거나 삭제함으로써 필요에 따라 서버의 규모를 확장하거나 축소할 수 있다...
안녕하세요. 오늘은 Kubernetes를 말할때 빠지지않고 등장하는 Helm에 대해서 알아보도록 하겠습니다. Helm이란? Kubernetes 패키지 매니저 도구 다양한 애플리케이션(tomcat, fluentd 등)을 Kubernetes에 쉽게 배포하도록 도와줌 Kubernetes에 애플리케이션을 쉽게 관리(배포, 업데이트) 하도록 도와주는 도구 Helm은 kubectl과 같이 Kubernetes master 노드의 API Server를 통해 애플리케이션을 배포하고 관리하는 일을 수행한다. Helm V2까지는 Kubernetes 환경에 Helm Client(agent)와 연동될 Tiller Server를 설치해야했으나, V3 부터는 Kubernetes API 직접 통신하는 방식으로 변경되었다. Helm이..
안녕하세요. 오늘은 아주 간단하게 AWS 인프라를 구성해보고 로컬 컴퓨터에서 SSH tenneling을 사용해서 Private Subnet 영역에 위치한 서버 컴퓨터(EC2 인스턴스)에 접속하는 것까지 실습해보도록 하겠습니다. 대상 AWS 인프라 구성에 어려움을 겪고 계신 분 VPC, Subnet은 default로만 사용해보신분 기본적인 네트워크 구성을 알고 싶으신 분 목표 조금은(?) 보안을 신경쓰면서 아래와 같은 아주 간단한 인프라를 구성해보자 목차 사용한 AWS 리소스와 간단 개념 인프라 구성에 대한 설명 실습 사용한 AWS 리스소와 간단 개념 사용한 리소스 VPC (Virtual Pricate Cloud) Subnet IGW (Internet Gateway) NAT EC2 AZ (Availabil..
안녕하세요. 오늘은 Github 계정 엑세스 토큰 생성 방법에 대해서 정리해보겠습니다. Github 계정 엑세스 토큰은 언제 사용할까? git을 사용해서 push/clone와 같은 작업을 할때 필요하다. 예를들면, CI & CD 파이프라인을 구축하는데 스크립트에서 특정 저장소를 clone받거나 push하고자 하는 일이 생길 수 있다. 확인 방법 Github 우측 상단에 프로필을 선택한 후, 아래쪽에 Settings를 선택한다. 좌측 하단에 Developer settings를 선택한다. 좌측 메뉴에서 Personal access tokens -> Tokens를 차례로 선택한다. 우측에 Generate new token을 클릭한다. 원하는 옵션을 선택하고 토큰을 생성한다. 모두 즐거운 코딩하세요~
안녕하세요. 오늘은 AWS의 S3, CloudFront, Lambda, Lambda@Edge 기술을 활용하여 이미지 리사이징(작게..)하는 방법에 대해서 알아보도록 하겠습니다. (아래 내용에서는 이미지 리사이징을 위한 코드에 대한 설명은 하지 않고 AWS 서비스를 활용하는 방법을 중심으로 설명합니다.) 목적 다양한 사이즈의 이미지를 클라이언트가 사용할 수 있도록 한다. (썸네일 이미지에 큰 사이지의 이미지를 사용할 필요는 없다. 상황에 따라 그에 맞는 이미지를 사용할 수 있도록 한다.) 요구사항 하나의 이미지를 사용하여 다양한 사이즈의 이미지를 만들어낸다. querystring을 사용하여 이미지 사이즈를 다양하게 요청이 가능하다. s 사이즈 설정 s=100x100 (width, height) q 비율 설..
Service Object 란? 파드에 접근할 수 있는 정책을 정의하는 개념. 서비스는 기본적으로 자신의 클러스터 IP를 가지고 있고 이 서비스를 파드에 연결하면 서비스의 아이피로 파드에 접근이 가능하다. 파드에도 자신의 클러스터 IP를 가지고 있다. 그렇다면 왜 서비스를 통해서 파드에 접근해야할까? 그 이유는, 파드라는 존재는 언제든지 죽을 수 있고 재생성될 수 있다. 파드의 아이피는 가변적이라 재생성되면 변한다. 그렇기 때문에 파드의 아이피는 신뢰성이 떨어지고 서비스 오브젝트는 지우지 않는 한 삭제되지 않는다. 따라서, 특정 파드에 일관된 아이피를 통한 접근을 가능하게 하기 때문에 서비스를 사용한다. Service의 특징 고정된 IP 사용 가능 파드를 다양한 방식으로 외부에 노출 가능 트래픽 분산 가..
안녕하세요. 오늘은 Kubernetes 클러스터 배포 도구인 Argo CD에 대해서 간단하게 알아보겠습니다. Argo CD Argo CD는 GitOps 스타일의 배포를 지원하는 CD 도구이다 Git 저장소의 내용과 쿠버네티스 클러스터를 동기화해주는 역할을 하는 에이전트이다 쿠버네티스 클러스터 내부에서 Pod 형태로 배포가 된다. 특징 애플리케이션 정의, 구성 및 환경은 선언적이어야하며 버전을 제어해야한다. 애플리케이션 배포 및 수명주기 관리는 자동화되고 확인하기 쉽다. 작동 원리 Argo CD는 원하는 애플리케이션 상태를 정의하기위한 소스로 Git repository를 사용하는 GitOps 패턴을 따른다. Kubernetes 매니페스트는 여러 방법으로 지정할 수 있다. (필자는 helm 차트를 사용하였습..