일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- GIT
- 서비스메쉬
- Kubernetes
- AWS
- model context protocol
- redirect-gateway
- authorizationpolicy
- 티스토리챌린지
- Intellij
- javascript
- AI
- RDS
- elasticsearch
- typescript
- replication lag
- 오블완
- cosine similarity metric
- sqs fifo queue
- context7
- 캡슐화
- 2024 톨스토이문학상 수상
- esbuild
- ssh 에이전트
- Infra
- 디자인패턴
- GoF
- golang
- goland
- go
- 구조체
- Today
- Total
목록프로그래밍언어 (96)
Fall in IT.
Go 언어로 개발을 하다 보면, 구조체(struct)를 설계할 때 필드를 공개(public)로 해야 할지, 비공개(private)로 해야 할지 고민되는 경우가 많다. 캡슐화를 위해 private으로 설계했다가, 실제 사용 시 불편해지는 경험도 흔하죠. 그렇다면 Go에서는 어떤 기준으로 필드의 접근 범위를 설정하는 것이 좋을까? 이 글에서는 Go 언어의 철학에 기반해, 구조체 필드를 언제 public으로 두고 언제 private으로 설정하는 것이 적절한지를 설명하고자 한다.Go 언어의 철학: 실용성과 단순성Go 언어는 "실용적이고 단순한 언어"를 목표로 설계되었습니다. 창시자 중 한 명인 Rob Pike는 다음과 같이 말했다:"불필요한 복잡성을 피하라""명확성이 미묘한 기교보다 낫다" 이 철학은 구조체 ..
ESBuild는 JavaScript와 TypeScript 코드를 빠르게 번들링하고 변환(트랜스파일링)하기 위한 고성능 빌드 도구입니다. Evan Wallace가 개발했으며, 속도와 효율성을 극대화하는 것을 목표로 설계되었습니다.ESBuild의 주요 특징빠른 속도:ESBuild는 Go 언어로 구현되어 있어 단일 스레드에서도 매우 빠른 성능을 발휘합니다.병렬 처리가 가능하여 멀티 코어 CPU 환경에서도 속도가 빠릅니다.TypeScript와 Babel 기반 도구에 비해 10~100배 더 빠릅니다.지원하는 언어와 기능:JavaScript: 최신 ES6+ 문법 지원.TypeScript: 트랜스파일링을 기본적으로 지원하지만, 타입 검사는 수행하지 않음.JSX/TSX: React 문법 지원.CSS: CSS 코드를 번..
tsx와 ts-node는 각각 타입스크립트를 실행하기 위한 도구지만, 두 도구는 서로 다른 사용 사례와 강점이 있어서 공존하고 있습니다. ts-node와 tsx 모두 런타임에 TypeScript를 JavaScript로 트랜스파일링하고 실행하지만, tsx가 더 빠른 이유는 트랜스파일링 방식, 캐싱 전략, 그리고 ES 모듈 처리 최적화 때문입니다. 아래에 두 도구의 작동 방식과 성능 차이의 이유를 자세히 설명드리겠습니다.1. 트랜스파일링 방식의 차이ts-node:ts-node는 TypeScript 컴파일러(tsc) 또는 TypeScript 서비스(typescript)를 사용해 TypeScript 코드를 JavaScript로 변환합니다.이 과정은 컴파일러가 전체 코드를 읽고 변환하므로 무겁고 느릴 수 있습니다..
Go 언어로 Pub/Sub(Publish-Subscribe) 라이브러리를 개발해보자. (심심하니까…)목차Pub/Sub의 핵심 개념 이해설계 구조 정의단계별 개발테스트 작성고급 기능 추가1. Pub/Sub의 핵심 개념 이해Pub/Sub 시스템의 기본 원리는 다음과 같다.Publisher: 메시지를 특정 Topic에 발행Subscriber: Topic을 구독하고 해당 토픽의 메시지를 수신Broker: 발행된 메시지를 관리하고 적절한 구독자에게 전달2. 설계 구조 정의Go의 구조체와 채널을 활용해 Pub/Sub 시스템을 설계할 수 있다. 아래는 기본 구성요소이다.Topic: 메시지를 그룹화하는 주체Publisher: 메시지를 발행하는 인터페이스Subscriber: 메시지를 구독하는 인터페이스Broker: 토픽..
고루틴과 채널을 활용한 이벤트 처리 시스템 Go 언어는 동시성(concurrency)을 간단하고 효율적으로 처리할 수 있는 강력한 기능인 고루틴(goroutines)과 채널(channels)을 제공합니다. 이들을 이해하고 올바르게 사용하는 것은 Go에서 효과적인 프로그래밍을 위해 필수적입니다. 이 글에서는 고루틴과 채널의 개념을 쉽게 설명하고, 블로킹(blocking)과 넌블로킹(non-blocking)의 차이를 설명한 후, 실제 예제 코드를 통해 설명을 더욱 구체화합니다. 고루틴과 채널의 개념 고루틴(Goroutines) 고루틴은 Go 런타임에 의해 관리되는 경량 스레드(lightweight thread)입니다. 고루틴을 사용하면 함수나 메서드를 동시에 실행할 수 있습니다. 고루틴은 go 키워드를 함수..
안녕하세요. 오늘은 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 // `..
안녕하세요. 오늘은 캡슐화에 대해서 아주 간단하게 정리해보겠습니다. 캡슐화 # 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도 마찬가지로 범위가 존재한다. 이때, 상세 필드값을 퍼블릭으로 열어주게 되면 값을 설정할때 적절한 유효성 검사를 할 수 없게 된다. 조금 더 구체적으로 ..

안녕하세요. 오늘은 Go언어에서 Golines라는 툴을 사용해서 보기좋게 포맷팅하는 방법을 알아보겠습니다. Go언어는 개발자의 생산성 향상에 초점을 두고 설계되어 기본적으로 gofmt이라는 소스코드의 스타일을 자동으로 포맷팅해주는 툴을 제공합니다. 다만, 아쉬운점은 소스코드 한 라인의 최대길이에 따라서 자동으로 줄바꿈을 해주는 기능이 없다는 것.. 그래서 찾게 된 툴이 golines입니다. Golines란? golines는 Go 소스코드에서 긴 줄을 줄이는 포맷터이다. 적용방법 Goliens 툴 설치하기 $ go install github.com/segmentio/golines@latest Goland > Preferences 클릭 (cmd + , 키로 접근 가능) 좌측에 도구 > 파일 검사기를 선택합니..
안녕하세요. 오늘은 Golang에서 Singleton Pattern을 구현하는 방법에 대해서 간단하게 알아보겠습니다. Singleton Pattern이란? 이 패턴은 인스턴스가 하나만 존재해야 하는 경우 사용된다. (예를들어서, DB 인스턴스나 Logger와 같은 인스턴스가 이에 해당할 수 있다.) 구현 방법 1. Mutex를 사용하는 방법 var lock = &sync.Mutex{} type single struct { } var singleInstance *single func GetInstance() *single { if singleInstance == nil { lock.Lock() defer lock.Unlock() if singleInstance == nil { fmt.Println("[Mu..
안녕하세요. 오늘은 Go 1.18 버전에서 추가 된 generic을 사용해보도록 하겠습니다. Generic에 대한 개념은 여기서 확인해주시기 바랍니다. Generic 사용 전 (source code) interface를 사용하여 스택을 구현한 경우 package main import "fmt" type stack struct { data []interface{} } type Stack interface { Push(data interface{}) Pop() interface{} Get() []interface{} } func New() Stack { return &stack{ data: []interface{}{}, } } func (s *stack) Push(data interface{}) { fmt...