일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 티스토리챌린지
- golang
- minikube
- 코틀린 코루틴의 정석
- kotlin
- Java
- CKA
- Spring
- go
- kotlin querydsl
- Elasticsearch
- CloudWatch
- SRE
- 공부
- AWS EKS
- Linux
- 기록으로 실력을 쌓자
- 오블완
- MySQL
- 정보처리기사 실기 기출문제
- CKA 기출문제
- APM
- 정보처리기사실기 기출문제
- kotlin coroutine
- Kubernetes
- Pinpoint
- tucker의 go 언어 프로그래밍
- aws
- PETERICA
- AI
- Today
- Total
목록Programming (214)
피터의 개발이야기
ㅁ 들어가며ㅇ Go 개발자라면 한 번쯤 마주칠 수 있는 "fatal error: concurrent map read and map write" 오류에 대해 정리하였다. 이 오류는 동시성 프로그래밍에서 흔히 발생하는 문제로, 여러 고루틴이 동시에 맵을 읽고 쓰려고 할 때 발생한다. 또한, -race 플래그를 사용하면 Go의 레이스 디텍터로 프로그램을 테스트하면 이러한 동시성 문제를 사전에 발견하는 데 도움이 될 수 있다. 이 부분은 [GO] Go Race Detector: 동시성 버그를 잡아내는 강력한 도구에 정리하였다. ㅁ 오류의 원인 이 오류는 Go의 맵이 기본적으로 동시성에 안전하지 않기 때문에 발생한다. 여러 고루틴이 동시에 같은 맵에 접근하여 읽기와 쓰기 작업을 수행할 때, Go 런타임은 이를 감..
ㅁ 들어가며ㅇ 함께 일하는 쿠루와 이야기 하면서 대용량 파일 업로드 시 OOME을 줄이는 방법에 대해서 고민하게 되었다. 관련 내용을 찾고 공부하면서 Spring에서 제공하는 MultipartFile.transferTo() 메서드에 대해서 알게 되었다. 이 메서드는 파일 업로드 처리를 간단하고 효율적으로 만들어주는 강력한 도구였다. ㅁ transferTo() 메서드란?transferTo() 메서드는 MultipartFile 인터페이스에서 제공하는 메서드로, 업로드된 파일을 서버의 지정된 위치로 저장하는 역할을 한다. 이 메서드는 파일 데이터를 메모리에 로드하지 않고 직접 디스크로 전송하여 대용량 파일 처리에도 효율적이다. ㅁ 주요 특징간편한 사용: 단 한 줄의 코드로 파일 저장이 가능합니다.메모리 효율성..
ㅁ 들어가며 Go 언어로 개발된 애플리케이션에서 메모리 사용량이 지속적으로 증가하는 문제는 흔히 발생할 수 있다. 이 글에서는 Go GC를 너무 믿지 마세요 - 메모리 누수 탐지와 GC 주기 조절이란 글을 읽고 메모리 문제의 원인을 분석하고 해결하는 데 도움이 되는 정보와 방법을 정리해 보았다. ㅁ 문제 정의 Go 애플리케이션의 메모리 사용량이 시간이 지남에 따라 점진적으로 증가하는 현상은, GC가 있는 Go 언어에서도 발생할 수 있다. 이는 애플리케이션의 안정성과 성능에 영향을 미칠 수 있으므로, 문제 해결을 위한 체계적인 접근이 필요하다. ㅁ 원인 분석ㅇ cgo 관련 메모리 누수: cgo를 사용하여 C 코드를 Go에서 호출하는 경우, C 코드에서 메모리 누수가 발생할 수 있다.ㅇ GC 성능: GC..
ㅁ 들어가며ㅇ Netty TcpClient를 설정하는 방법을 정리하였다. 알람 개선을 위해 TcpClient 소스를 분석하면서 알게된 내용을 정리해보았다.ㅇ RequestTimeout이 너무 짧으면 오류에 대한 알람이 자주 발생하고, 그만큼의 side-effect가 발생한다. 하지만 너무 길게 설정하면 리소스 자원의 낭비가 발생할 수 있다. ㅇ tcpClient가 동시에 처리할 수 있는 pool의 유휴자원을 확보하고 알람의 적절한 발생을 컨트롤 하기 위해 MSA구조에서 각 레벨에서의 적절한 수준의 timeout 설정은 필수이다. ㅁ 기본 설정 ㅇ TcpClient 인스턴스 생성TcpClient tcpClient = TcpClient.create(); ㅇ 호스트 및 포트 설정tcpClient = tcpCl..
ㅁ 들어가며 젠킨스 빌드 환경 조성 시 SSH 키를 사용하여 git clone을 해야 했다. 구체적으로 Linux 서버에서 SSH 키를 사용하여 GitHub에 접속하는 방법을 정리하였다. ㅁ SSH 키 생성ssh-keygen -t rsa -b 4096 -C "your_email@example.com"ㅇ 프롬프트가 나타나면 키 저장 위치와 비밀번호를 지정하거나 기본값을 사용하였다. ㅁ SSH 에이전트에 키 추가eval "$(ssh-agent -s)" ssh-add ~/.ssh/id_rsa ㅁ 공개 키 복사ㅇ 출력된 내용을 복사한다. ㅁ GitHub에 SSH 키 추가ㅇ GitHub 계정에 로그인한다.ㅇ Settings > SSH and GPG keys로 이동하고 "New SSH key" 버튼을 클릭한다. ㅇ..
ㅁ 들어가며 git에서 중간 커밋 과정을 정리하는 주요 방법은 git squash이다. git squash를 사용하면 여러 개의 커밋을 하나의 의미 있는 커밋으로 합칠 수 있어 커밋 히스토리를 깔끔하게 관리할 수 있다. 오늘은 중간 커밋을 합쳐주는 squash에 대해서 정리하였다. ㅁ 체리픽 예전에 [git] 체리픽 Cherry-pick, feature 로그 깔끔하게 merge하기 작성한 글에서, 체리픽은 값만 복사하는 별개의 커밋이지 중간 커밋은 정리가 되지 않았다. ㅇ 체리픽은 값만 복사해서 dev에 머지를하기 때문에 commit ID가 다른 별개의 커밋이다.ㅇ 하지만 feature 중간에 히스토리는 그대로 남아 있다. ㅁ 테스트를 위한 git init# workspace 생성mkdir git..

ㅁ 들어가며 Viper는 Golang 애플리케이션에서 설정 정보를 관리하는 라이브러리이다. 이 글에서는 다양한 파일 형식을 지원하고 동적으로 값을 구성할 수 있는 Viper의 사용 방법을 정리하였다. ㅁViper 설치하기go get github.com/spf13/viper ㅁ 기본 사용법구성 파일 설정viper.SetConfigName("config") // 확장자를 제외한 구성 파일 이름viper.SetConfigType("yaml") // 구성 파일 형식 지정 (yaml, json, toml 등)viper.AddConfigPath("/etc/appname/") // 구성 파일을 찾을 경로 추가viper.AddConfigPath("$HOME/.appname") // 여러 경로 추가 가능viper.A..
ㅁ 들어가며 맥북 M3를 사용 중이다. 로컬에서 GO로 빌드한 실행파일이 서버에서 작동하지 않았다. 이번 글에서는 Intel Xeon 프로세서를 위한 Go 빌드 시 GOARCH 설정에 대해 정리하였다. ㅁ GOARCH란? GOARCH는 Go 언어에서 타겟 아키텍처를 지정하는 환경 변수이다. 이 설정을 통해 특정 CPU 아키텍처에 최적화된 바이너리를 생성할 수 있다. ㅁ Intel Xeon을 위한 GOARCH 설정ㅇ Intel Xeon 프로세서는 서버급 성능을 제공하는 x86-64 아키텍처 기반의 CPU이다.export GOARCH=amd64ㅇ Intel Xeon 프로세서는 x86-64 아키텍처를 사용하므로, GOARCH 값을 "amd64"로 설정해야 한다.ㅇ 이 설정은 64비트 x86 아키텍처를 타겟으..
ㅁ 들어가며 Go 언어로 웹 요청을 보낼 때 http.Client를 사용한다. Client가 proxy설정에 영향을 받는 줄 모르고 트러블 슈팅을 하게 되었다. 이 트러블 슈팅을 하면서 알게 된 http.Client의 프록시 설정에 대해 정리해 보았다. ㅁ 환경 변수를 통한 프록시 설정// HTTP 요청에 대한 프록시 서버 주소export HTTP_PROXY=http://proxy.example.com:8080// HTTPS 요청에 대한 프록시 서버 주소export HTTPS_PROXY=https://proxy.example.com:8080// 프록시를 사용하지 않을 도메인 목록export NO_PROXY=localhost,127.0.0.1,10.0.0.0/8ㅇ Go의 http.Client는 기본적으..
ㅁ 들어가며ㅇ Spring Boot의 @Cacheable 어노테이션은 애플리케이션의 성능을 향상시키기 위해 자주 사용되는 캐시 기능을 제공된다.ㅇ 이 글에서는 @Cacheable의 사용법과 관련된 다양한 기능을 Kotlin 예제를 통해 살펴보다. ㅁ Spring Cache Abstration이란? 스프링은 캐시 추상화(Cache Abstraction)을 통해 사용자는 캐시 구현에 대해 신경 쓸 필요 없이 퍼블릭 인터페이스를 쉽게 캐싱 기능을 사용할 수 있는 편리한 캐싱 기능을 지원한다. 캐싱이 필요한 비즈니스 로직에서 EhCache, Redis 등 캐싱 인프라에 의존하지 않고 추상화된 퍼블릭 인터페이스로 캐싱을 할 수 있다. 인터페이스화 되면 EhCache로 사용 중에 Redis로 변경이 쉬워진다. ..