일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- AWS
- GoF
- 컴포짓패턴
- Live Template
- 클래스 관계
- Logrus
- go
- UnBuffered channel
- tenneling
- Golines
- 알림 시스템
- Lambda@Edge
- Bastion Server
- Kubernetes
- AWS Infra
- gitops
- golang
- GoF 디자인패턴
- Infra
- System Design
- argocd
- 컴포지트패턴
- Buffered channel
- 시스템 설계
- 디자인패턴
- goroutine
- image resizing
- Helm V3
- 대규모 시스템 설계
- notification system
- Today
- Total
목록Information Technology (294)
Fall in IT.
고루틴과 채널을 활용한 이벤트 처리 시스템 Go 언어는 동시성(concurrency)을 간단하고 효율적으로 처리할 수 있는 강력한 기능인 고루틴(goroutines)과 채널(channels)을 제공합니다. 이들을 이해하고 올바르게 사용하는 것은 Go에서 효과적인 프로그래밍을 위해 필수적입니다. 이 글에서는 고루틴과 채널의 개념을 쉽게 설명하고, 블로킹(blocking)과 넌블로킹(non-blocking)의 차이를 설명한 후, 실제 예제 코드를 통해 설명을 더욱 구체화합니다. 고루틴과 채널의 개념 고루틴(Goroutines) 고루틴은 Go 런타임에 의해 관리되는 경량 스레드(lightweight thread)입니다. 고루틴을 사용하면 함수나 메서드를 동시에 실행할 수 있습니다. 고루틴은 go 키워드를 함수..
Go에서 의존성 역전 원칙(DIP) 활용하기 현대 소프트웨어 개발 환경에서는 유연하고 유지 관리가 가능한 애플리케이션을 설계하는 것이 그 어느 때보다 중요합니다. 이를 달성하기 위한 한 가지 핵심은 객체 지향 설계를 안내하는 SOLID 원칙의 초석인 종속성 역전 원칙(DIP)을 이용하는 것입니다. 이 게시물에서는 DIP를 자세히 살펴보고 이메일 전송에 초점을 맞춘 Go 애플리케이션의 애플리케이션과 장점을 보여줍니다. 종속성 역전 원리란 무엇입니까? DIP의 핵심은 소프트웨어 모듈을 분리하는 것을 목표로 합니다. 이 원칙은 두 가지 주요 아이디어를 주장합니다. 상위 모듈은 하위 모듈에 의존해서는 안 됩니다. 대신, 둘 다 추상화(인터페이스 또는 추상 클래스)에 의존해야 합니다. 추상화는 세부사항에 의존해서..
안녕하세요. 오늘은 Go 로깅라이브러리인 Logrus의 Hook 기능에 대하여 알아보겠습니다. Logrus란? Go 언어용으로 널리 사용되는 로깅 라이브러리이다. 확장성과 유연성을 제공하기 위해 Hook 기능을 사용할 수 있다. Hook이란? 훅 시스템을 통해 개발자는 로깅 프로세스에 추가적인 동작을 주입할 수 있다. 예를들어, 로그 메시지를 파일에 기록하는 동시에 오류 메시지를 Slack으로 전송하거나 로그 데이터를 Elasticsearch 같은 검색 엔진에 인덱싱할 수 있다. Hook 인터페이스 // logrus에 정의된 Hook 인터페이스 package logrus // A hook to be fired when logging on the logging levels returned from // `..
안녕하세요. 오늘은 간단한 알림 시스템을 설계해보겠습니다. 설계 방법은 다양하며 서비스 환경에 따라서 달라질(구체화 될)것이다. 요구사항 푸시 알림, 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) 소스코드를 보지 않고 커밋 메시지만으로 어떤 변경사항이 있었는지 ..