일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- javascript
- 배포 파이프라인
- 티스토리챌린지
- 디자인패턴
- m4 pro
- body size
- cosine similarity metric
- elasticsearch
- kube-prometheus-stack
- 오블완
- esbuild
- gitops
- 배포 프로세스
- apollo router
- golang
- typescript
- Logrus
- goland
- Buffered channel
- 사설 ip
- Intellij
- Kubernetes
- go
- http 413
- intellij ide
- GoF
- AWS
- 코사인 유사성 메트릭스
- Infra
- UnBuffered channel
- Today
- Total
목록프로그래밍언어 (95)
Fall in IT.
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...
안녕하세요. 오늘은 Go에서 Slice에서 중복을 제거하는 방법에 대해서 알아보겠습니다. Go에서는 Map을 사용해서 Slice의 아이템 중복을 제거할 수 있습니다. Slice의 아이템을 순회하면서 map에 존재하지 않다면 삽입, 존재한다면 pass 하는 방식을 이용합니다. (이때, map의 값으로 빈구조체(struct{})를 넣는 이유는 빈구조체의 경우 메모리를 차지하지 않기 때문입니다.) 샘플 코드 func deleteDuplicateItem(arr []string) []string { ret := []string{} m := make(map[string]struct{}) for _, val := range arr { if _, ok := m[val]; !ok { m[val] = struct{}{} ..