일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 디자인패턴
- Golines
- 시스템 설계
- goroutine
- 알림 시스템
- Buffered channel
- System Design
- argocd
- AWS Infra
- Helm V3
- GoF
- Kubernetes
- golang
- Logrus
- image resizing
- 대규모 시스템 설계
- 컴포지트패턴
- AWS
- GoF 디자인패턴
- UnBuffered channel
- Infra
- 컴포짓패턴
- gitops
- 클래스 관계
- Lambda@Edge
- Live Template
- tenneling
- notification system
- Bastion Server
- go
- Today
- Total
목록기타 (83)
Fall in IT.
Go에서 의존성 역전 원칙(DIP) 활용하기 현대 소프트웨어 개발 환경에서는 유연하고 유지 관리가 가능한 애플리케이션을 설계하는 것이 그 어느 때보다 중요합니다. 이를 달성하기 위한 한 가지 핵심은 객체 지향 설계를 안내하는 SOLID 원칙의 초석인 종속성 역전 원칙(DIP)을 이용하는 것입니다. 이 게시물에서는 DIP를 자세히 살펴보고 이메일 전송에 초점을 맞춘 Go 애플리케이션의 애플리케이션과 장점을 보여줍니다. 종속성 역전 원리란 무엇입니까? DIP의 핵심은 소프트웨어 모듈을 분리하는 것을 목표로 합니다. 이 원칙은 두 가지 주요 아이디어를 주장합니다. 상위 모듈은 하위 모듈에 의존해서는 안 됩니다. 대신, 둘 다 추상화(인터페이스 또는 추상 클래스)에 의존해야 합니다. 추상화는 세부사항에 의존해서..
도커 컴포즈 도대체 왜 필요한데? 안녕하세요. 오늘은 도커와 도커 컴포즈에 대해서 알아보겠습니다. 최근에 도커 컨테이너 간의 연결에 대한 간단한 질문(?)을 받았는데 잘 생각이 나지 않아서 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) 소스코드를 보지 않고 커밋 메시지만으로 어떤 변경사항이 있었는지 ..
안녕하세요. 오늘은 GoLand(IntelliJ) IDE에서 라이브 템플릿을 사용하는 방법에 대해서 알아보겠습니다. 라이브템플릿이란? IntelliJ IDE에서 제공하는 기능으로, 테스트코드와 같이 반복적으로 작성되는 코드를 템플릿 형태로 만들어두고 단축키를 사용해서 쉽게 불러오는 기능을 말한다. 라이브템플릿 적용방법 아래에서는 GoLand IDE(IntelliJ에서 제공하는 IDE)를 사용하고 Go 언어로 개발할때 사용할 Repository Test Template을 만들어보도록 하겠습니다. 1. cmd + , 단축키를 누른다. 2. 좌측 에디터 선택 -> 라이브 템플릿 선택 -> 우측에 Go를 선택하고 +버튼 선택 3. 템플릿 텍스트 입력 type $Template$RepositoryTestSuite..
안녕하세요. 오늘은 TLS와 HTTPS에 대해 간단하게 알아보겠습니다. TLS란? TLS (Transport Layer Security)는 인터넷에서 정보를 암호화해서 송수신하는 프로토콜 넷스케이프 커뮤니케이션스사가 개발한 SSL(Secure Sockets Layer)에 기반한 기술로 국제 인터넷 표준으로 인정받은 프로콜이다. 표준에 명시된 정식 명칭은 TLS이지만 아직도 SSL이라는 용어가 많이 사용되고 있다. 흔히 SSL이라고 불리는 용어들은 대부분 TLS라고 보면 된다. (SSL은 TLS의 과거 명칭이다. SSL 3.0이 TLS의 1.0 기반이 되었다.) TLS를 사용해 암호화된 연결을 하는 HTTP를 HTTPS라고 한다. 보안된 웹 사이트 주소는 HTTPS로 시작하고 기본 포트는 443번을 사용한..
안녕하세요. 오늘은 GraphQL 보안과 성능 개선 방법에 대해서 알아보겠습니다. GraphQL 보안과 성능 개선 방법 타임아웃 설정 데이터 개수 제한 쿼리 깊이 제한 쿼리 복잡도 제한 Filed Collection GraphQL로 서버를 만들경우 클라이언트쪽 구현에 더 많은 자유도와 유연성을 부여할 수 있습니다. 여러개의 데이터를 조회할때도 한번의 쿼리로 조회(UnderFetching 해결)가 가능하고, 원하는 필드만 조회할 수 있습니다. (OverFetching 해결) 그러나, 자유도가 높은 만큼 한번의 쿼리에 너무 많은 데이터를 요청하여 문제가 발생할 수 있습니다. 한번에 너무 많은 데이터를 요청할 경우 서버 성능이 떨어질 뿐만 아니라 서비스가 다운 될 수 있습니다. 이런 경우를 대비해서 Graph..
helm 쿠버네티스 패키지 매니저 node.js의 npm과 같은 쿠버네티스용 패키지 매니지먼트 도구 헬름을 통한 쿠버네티스 어플리케이션 관리 헬름 차트는 복잡한 쿠버네티스 애플리케이션도 편리하게 정의하여 설치하거나 업그레이드 할 수 있다. 헬름 특징 복잡성 관리 쉬운 업데이트 간단한 공유 롤백 헬름 허브에 공개된 수많은 헬름 저장소의 차트들을 활용하여 쿠버네티스용 소프트웨어를 공유하고 사용할 수 있다. helm의 일반적인 개념 일반적으로 하나의 소프트웨어를 쿠버네티스에 배포하려면 간단하게 컨테이너만을 배포해서는 사용하기 어려운 경우가 많다. 외부로 IP를 노출시키기 위해서 쿠버네티스 서비스를 배포해야하고, 쿠버네티스 pod를 관리할 deployment가 필요하며, 디스크 볼륨과 기타 정책 등 부가적인 부..
안녕하세요. 오늘은 vscode에서 자동완성 단축키 설정방법에 대해서 알아보겠습니다. 맥북을 사용하는 경우 커맨드 + 스페이스, 쉬프트 + 스페이스 단축키는 시스템 단축키로 사용되고 있기 때문에 단축키를 변경하여 사용하는 것이 좋습니다. vscode 자동완성 단축키 설정방법 키보드 단축키 환경설정 탭으로 들어갑니다. Code -> Preferences -> Keyboard Shortcuts (단축키 cmd + K, cmd + S로도 진입가능) suggest를 검색 합니다. Trigger Suggest의 Keybinding에 원하는 단축키로 변경해줍니다. 필자는 option(alt) + space 단축키를 사용하였습니다. 완료! 모두 즐거운 코딩하세요~