일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Buffered channel
- intellij ide
- 배포 파이프라인
- GoF 디자인패턴
- GoF
- elasticsearch
- 티스토리챌린지
- golang
- notification system
- 윈도우키보드
- AWS
- goland
- 오블완
- Kubernetes
- Golines
- body size
- UnBuffered channel
- 컴포지트패턴
- go
- gitops
- Infra
- http 413
- System Design
- Helm V3
- apollo router
- Logrus
- Intellij
- 대규모 시스템 설계
- 디자인패턴
- 배포 프로세스
- Today
- Total
목록Information Technology (301)
Fall in IT.
안녕하세요. 오늘은 간단한 알림 시스템을 설계해보겠습니다. 설계 방법은 다양하며 서비스 환경에 따라서 달라질(구체화 될)것이다. 요구사항 푸시 알림, SMS 메시지, 이메일 알림 제공 알림의 종류는 더 늘어날 수 있다. 고려할 사항 알림 유형별 지원 방법 연락처 정보 수집 방법 알림 전송 및 수신 방법 알림 유형별 지원 방법 iOS 푸시 알림 → APNS (Apple Push Notification Service) 사용 Android 푸시 알림 → FCM (Firebase Cloud Messaging) 사용 SMS 메시지 → 트윌리오 같은 써드파티 서비스 사용 이메일 → SendGrid 같은 써드파티 서비스 사용 연락처 정보 수집 방법 회원가입시에 전화번호, 이메일 등의 정보를 받아야하고 모바일에 푸시 ..
안녕하세요. 오늘은 캡슐화에 대해서 아주 간단하게 정리해보겠습니다. 캡슐화 # Date 구조체의 필드값을 모두 퍼블릭으로 선언 type Date struct { Year int Month int Day int } # Date 구조체의 필드값을 모두 프라이빗으로 선언 type Date struct { year int month int day int } 구조체의 필드값을 퍼블릭으로 선언하지 않고 프라이빗으로 선언하는게 왜 중요할까? year, month, day에는 값의 범위가 정해져 있는데 가령, month는 1이상이고 12이하여야한다. year, day도 마찬가지로 범위가 존재한다. 이때, 상세 필드값을 퍼블릭으로 열어주게 되면 값을 설정할때 적절한 유효성 검사를 할 수 없게 된다. 조금 더 구체적으로 ..
대규모 System Design을 위한 몇 가지 기본 기능을 간단하게 정리해보자. (대규모 시스템을 설계하기 위해서는 많은 기술들이 필요하지만 이 글에서는 로드밸런서, 메시지 큐, 캐시에 대한 개념을 간단히 정리해보겠습니다) 로드밸런서 로드밸런서는 부하 분산 집합에 속해 있는 웹 서버들에게 트래픽을 고르게 분산하는 역할을 한다. 사용자는 로드밸런서의 공개 IP 주소(public IP address)로 접속한다. 웹 서버는 클라이언트의 접속을 직접 처리하지 않는다. 또한, 서버 간의 통신은 사설 IP 주소(private IP address)를 이용한다. 이렇게 되면, 서버의 확장 및 축소가 쉬워지는데 부하 분산 집합에 웹 서버를 추가하거나 삭제함으로써 필요에 따라 서버의 규모를 확장하거나 축소할 수 있다...
도커 컴포즈 도대체 왜 필요한데? 안녕하세요. 오늘은 도커와 도커 컴포즈에 대해서 알아보겠습니다. 최근에 도커 컨테이너 간의 연결에 대한 간단한 질문(?)을 받았는데 잘 생각이 나지 않아서 GPT의 도움을 받아서 답했던 일이 있었습니다. 그래서 다시한번 도커에 대한 개념과 도커 컴포즈에 대해 정리하고자 글을 적게 되었습니다. 도커란? 도커란 가상화 기술을 사용하여 애플리케이션과 그에 필요한 실행 환경을 컨테이너로 패키징하는 오픈 소스 플랫폼이다. 도커는 그럼 왜 필요한가? 도커는 개발 환경을 표준화하고, 애플리케이션의 배포와 관리를 단순화하는데 도움을 준다. 여러 환경에서 일관된 실행을 보장하며 가상화를 통해 시스템 자원을 효율적으로 사용할 수 있다. 또한 확장성이 뛰어나며 빠른 배포를 가능케 하므로 개..
안녕하세요. 오늘은 UML, 클래스간의 관계에 대해서 알아보겠습니다. UML(Unified Modeling Language)이란? 1997년 OMG(Object Management Group)에서 표준으로 채택한 소프트웨어를 모델링 할때 사용하는 언어이다. 개념을 설명하기 위해 사용되기도 하고 구현된 시스템의 구조를 설명하기위해 사용되기도 한다. 소프트웨어 모델링이란? - 다른 사람들과의 의사소통 또는 설계 논의 - 전체 시스템의 구조 및 클래스의 의존성 파악 - 유지보수를 위한 설계 문서 UML의 종류 UML은 크게 두 종류의 다이어그램이 존재한다. 1. 구조 다이어그램 (Structure Diagram) 2. 행위 다이어그램 (Behavior Diagram) 구조 다이어그램 시스템의 개념, 관계 등의..
Composite Pattern 컴포짓 패턴 그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴 클라이언트 입장에서 ‘전체’나 ‘부분’이나 모두 동일한 컴포넌트로 인식할 수 있는 계층을 만든다. (Part-Whole Hierarchy) 예를들어, 가방에 물건(아이템)이 5가지 존재한다고 생각해보자. 물 립밤 향수 노트북 안경 물건들은 각각 쓰임새는 다르지만, 그에 해당하는 이름과 가격이 정해져있다. 이때 우리는 물건의 각각의 가격과 가방안에 든 모든 물건들의 가격을 알고 싶다고 할 경우에 컴포짓 패턴을 유용하게 사용할 수 있다. 가방 → 컴포지트를 나타내고 컴포지트는 안에 컴포넌트들을 갖고 있다. 컴포넌트 → 물, 향수 등이 해당되고 컴포지트에 기능 실행을 요청하면 컴포지트는 포함하고 있는 컴포넌트들..
Git commit message 관리 (with. rebase) git을 작업 이력을 저장하는 용도로만 사용하다보니 commit 이력이 지저분해지기 시작했고 코드리뷰가 어려워지기 시작했다. 또한, 특정 시점으로 코드를 rollback 하려고 했더니… 내가 원하던 시점을 도무지 찾을 수가 없었다. 아, 그리고 하나 더 말하자면 release 배포 후 release note를 자동 불러오기 했을때 특정 기능을 개발하는동안 올려두었던 commit message들도 죄다 올라와서 어떤 기능이 추가됐고 변경되었는지 알아보기 어려웠다. 이런 이유들로, Git commit message 관리가 필요하다고 느꼈다. 1. 최소한의 메시지 작성 규칙 1) 소스코드를 보지 않고 커밋 메시지만으로 어떤 변경사항이 있었는지 ..
안녕하세요. 오늘은 Go언어에서 Golines라는 툴을 사용해서 보기좋게 포맷팅하는 방법을 알아보겠습니다. Go언어는 개발자의 생산성 향상에 초점을 두고 설계되어 기본적으로 gofmt이라는 소스코드의 스타일을 자동으로 포맷팅해주는 툴을 제공합니다. 다만, 아쉬운점은 소스코드 한 라인의 최대길이에 따라서 자동으로 줄바꿈을 해주는 기능이 없다는 것.. 그래서 찾게 된 툴이 golines입니다. Golines란? golines는 Go 소스코드에서 긴 줄을 줄이는 포맷터이다. 적용방법 Goliens 툴 설치하기 $ go install github.com/segmentio/golines@latest Goland > Preferences 클릭 (cmd + , 키로 접근 가능) 좌측에 도구 > 파일 검사기를 선택합니..
안녕하세요. 오늘은 GoLand(IntelliJ) IDE에서 라이브 템플릿을 사용하는 방법에 대해서 알아보겠습니다. 라이브템플릿이란? IntelliJ IDE에서 제공하는 기능으로, 테스트코드와 같이 반복적으로 작성되는 코드를 템플릿 형태로 만들어두고 단축키를 사용해서 쉽게 불러오는 기능을 말한다. 라이브템플릿 적용방법 아래에서는 GoLand IDE(IntelliJ에서 제공하는 IDE)를 사용하고 Go 언어로 개발할때 사용할 Repository Test Template을 만들어보도록 하겠습니다. 1. cmd + , 단축키를 누른다. 2. 좌측 에디터 선택 -> 라이브 템플릿 선택 -> 우측에 Go를 선택하고 +버튼 선택 3. 템플릿 텍스트 입력 type $Template$RepositoryTestSuite..
안녕하세요. 오늘은 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이..