일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CKA 기출문제
- 공부
- Spring
- PETERICA
- CloudWatch
- APM
- 정보처리기사실기 기출문제
- tucker의 go 언어 프로그래밍
- Kubernetes
- kotlin coroutine
- golang
- Java
- mysql 튜닝
- 티스토리챌린지
- docker
- AWS EKS
- AI
- 기록으로 실력을 쌓자
- kotlin
- kotlin querydsl
- CKA
- go
- 정보처리기사 실기 기출문제
- aws
- 오블완
- Pinpoint
- Linux
- 코틀린 코루틴의 정석
- minikube
- Elasticsearch
- Today
- Total
목록전체 글 (852)
피터의 개발이야기
ㅁ 들어가며ㅇ 지난 글, [Docker] Docker 컨테이너에서 JAR 파일만 수정하고 다시 실행하는 방법에서 실행 중인 컨테이너에서 JAR 파일을 갱신하는 과정을 정리하였다. 이후, 해당 컨테이너를 새로운 태그로 지정하여 Docker Hub에 푸시하는 과정을 정리하였다.2021년, Pinpoint를 구성하면서 작성한 글, [docker] PinPoint docker Commit 하고 Push하기에서도 비슷한 과정이 정리되어 있다. ㅁ 실행 중인 컨테이너를 이미지로 커밋사용법)docker commit :ex) docker commit my_container my_image:updatedㅇ 컨테이너의 현재 상태를 새로운 이미지를 생성하여 저장한다. ㅁ 이미지에 태그 추가사용법)docker tag : ..
ㅁ 들어가며Spring Boot Batch로 작성된 기존 코드에서 연동된 주소만 수정하여 테스트가 필요하였다. Batch는 이미 도커로 빌드된 상황에서 실행 중인 Docker 컨테이너에서 JAR 파일만 수정하고 다시 실행하는 방법을 정리하였다. 이렇게 하면 기존 Endpoint로 선언된 Spring실행 명령문 그대로 변경된 url로 테스트를 수행할 수 있었다. ㅁ 새로운 JAR 파일 준비./gradlew clean buildㅇ 로컬 환경에서 수정된 코드로 새 JAR 파일을 빌드 ㅇ IntelliJ에서 Gradle build를 실행하면 build/libs/빌드된.jar를 확인할 수 있다. ㅁ 새 JAR 파일을 컨테이너로 복사docker cp /로컬/경로/radio-da-1.0.0-SNAPSHOT.jar ..
ㅁ 들어가며재해 복구 계획을 수립할 때 가장 중요한 두 가지 지표가 있다. 바로 RTO(Recovery Time Objective)와 RPO(Recovery Point Objective)이다. 이 두 지표에 의미를 정리하였다. ㅁ RTO (Recovery Time Objective): 목표 복구 시간RTO는 재해 발생 후 시스템을 복구하여 정상 운영 상태로 돌아가는 데 걸리는 최대 허용 시간을 의미한다.예를 들어, RTO가 4시간이라면 재해 발생 후 4시간 이내에 시스템이 정상 작동해야 한다는 의미이다.정의: 애플리케이션이 오프라인 상태로 있을 수 있는 최대 허용 시간목적: 비즈니스가 감당할 수 있는 최대 다운타임을 결정특징: 시스템 복구 속도와 직접적으로 연관됨 ㅁ RPO (Recovery Point ..
ㅁ 들어가며ㅇ 보안검수 중 Docker의 특정 볼률에대해 Read-only 조치를 지시 받았다. ㅇ Docker Compose에서 볼륨을 읽기 전용(read-only)으로 설정하는 방법을 정리하였다. ㅁ Docker Compose 볼륨, 읽기전용 설정방법# 짧은 방법volumes: - /호스트/경로:/컨테이너/경로:ro# 긴 방법volumes: - type: bind source: /호스트/경로 target: /컨테이너/경로 read_only: trueㅇ :ro는 "read only"의 약어로, 해당 볼륨을 읽기 전용으로 설정한다.ㅇ 이렇게 설정하면 호스트 머신에서는 파일을 수정할 수 있지만, 컨테이너에서는 읽기만 가능하다. ㅁ Docker run 시 docker run -v /경로..
ㅁ 들어가며ㅇ 지난 글, [Postman] Postman의 Workspace: API 개발자의 디지털 작업실에서 Postman의 협업 기능의 장점과 그로 인한 온라인 의존성에 대해서 알아보았다. 이번 글에는 Postman의 오프라인 사용법에 대해서 정리하였다. ㅁ Postman의 이전 버전 다운로드 최신의 Postman은 클라우드 기능이 강조되면서 오프라인 사용이 어렵게 되었다. 이를 위한 이전 버전을 찾아 다운로드 해야한다. ㅇ Postman 커뮤니티 내에서 링크가 존재한다. ㅇ Direct download links for v9.31.30 (last version before 10.0)https://dl.pstmn.io/download/version/9.31.30/win64https://dl.pstm..
ㅁ 들어가며 Postman의 Workspace를 통해 업무 협업이 가능하다. 하지만 클라우드 기반의 기능이 강조되면서 오프라인 사용성에 문제가 발생하기도 한다. 이 글에서는 Postman의 Workspace에 대해서 정리하면서 온라인 의존성에 대해서 정리하였다. ㅁ Workspace란? Postman의 Workspace는 API 개발자들의 디지털 작업실이라고 할 수 있다. 마치 목수가 자신만의 작업대를 가지고 있듯이, API 개발자들은 Postman Workspace에서 모든 API 관련 작업을 효율적으로 수행할 수 있다. ㅁ Workspace의 특징협업의 중심지: Team Workspace를 통해 팀원들과 실시간으로 API 작업을 공유하고 협업할 수 있다.유연한 구성: 기능별, 프로젝트별, 또는 파트..
ㅁ 들어가며ㅇ Go 언어를 사용하다 보면 함수와 메서드, 그리고 포인터 메서드와 값 타입 메서드의 차이점을 이해하는 것이 중요하다. 메서드는 포인터 리시버를 가질 때 값이나 포인터 모두 받을 수 있지만, 함수는 값 인자를 받을 때 해당 타입의 값만 받을 수 있다. 이 글에서는 이들의 차이점과 사용 방법에 대해 정리하였다. Tucker의 Go언어 프로그래밍 책, 17장 1~3의 내용을 참조하였다. ㅁ 함수 vs 메서드함수 (Function)독립적으로 존재하며 특정 타입에 종속되지 않는다.예: print(), sum() 등메서드 (Method)특정 타입에 종속되어 있다.객체의 동작(behavior)을 정의한다.문법: func (리시버) 메서드명(매개변수) 반환값 { ... }type Person struct..
ㅁ 들어가며ㅇ fsnotify는 Go 언어에서 파일 및 디렉토리의 변경 사항을 실시간으로 감지할 수 있도록 도와주는 라이브러리이다. fsnotify의 주요 기능과 사용법을 정리하였다. ㅁ fsnotify란? fsnotify는 Windows, Linux, macOS 등 다양한 운영체제에서 동작하는 크로스 플랫폼 파일 시스템 감시 라이브러리이다. 이 라이브러리를 사용하면 파일 생성, 삭제, 수정, 권한 변경 등의 이벤트를 실시간으로 감지할 수 있다. ㅁ 감지 이벤트이벤트설명fsnotify.Create파일 또는 디렉토리 생성fsnotify.Remove파일 또는 디렉토리 삭제fsnotify.Write파일 내용 수정fsnotify.Rename파일 또는 디렉토리 이름 변경snotify.Chmod파일 또는 디렉토리 ..
ㅁ 들어가며ㅇ Go 언어의 sync.Map은 동시성 안전한 맵 구현을 제공한다. 일반 map과 달리 여러 고루틴에서 동시에 안전하게 사용할 수 있다. sync.Map의 초기화 및 기본적 사용법을 정리하였다. ㅁ sync.Map 초기화sync.Map은 별도의 초기화가 필요 없었다.var m sync.Map ㅁ주요 메서드Store(key, value interface{})m.Store("key", "value")ㅇ 맵에 키-값 쌍을 저장 Load(key interface{}) (value interface{}, ok bool)value, ok := m.Load("key")if ok { fmt.Println("Value:", value)}ㅇ 키에 해당하는 값을 조회 Delete(key interfa..
ㅁ 들어가며 이 글에서는 Golang을 사용하여 Linux 명령어를 실행하고, 실행된 프로세스를 sync.Map으로 관리한 후 종료하는 방법에 대해 정리하였다. ㅁ 필요한 패키지 importpackage mainimport ( "fmt" "os/exec" "sync" "syscall")ㅇ 먼저 필요한 패키지들을 import 한다. ㅁ 명령어 실행 및 관리 함수 작성var processMap sync.Mapfunc runCommand(name string, args ...string) (*exec.Cmd, error) { cmd := exec.Command(name, args...) err := cmd.Start() if err != nil { retur..
ㅁ 들어가며 이전에 [GO] Go 언어에서의 "fatal error: concurrent map read and map write" 해결하기에서 동시성으로 인한 오류를 해결하는 과정에서 이를 예방할 수 있는 Race Detector를 알게 되었다. Go 언어는 동시성 프로그래밍을 위한 강력한 기능을 제공하지만, 이와 함께 데이터 레이스(data race)와 같은 동시성 버그의 위험도 존재한다. 이러한 문제를 해결하기 위해 Go는 내장 Race Detector를 제공한다. ㅁ Race Detector란? Go의 Race Detector는 프로그램 실행 중 발생할 수 있는 데이터 레이스 조건을 감지하는 도구이다. Go 프로그램을 실행시키면 deadlock이나 data race condition이 발..
ㅁ 들어가며ㅇ Go 개발자라면 한 번쯤 마주칠 수 있는 "fatal error: concurrent map read and map write" 오류에 대해 정리하였다. 이 오류는 동시성 프로그래밍에서 흔히 발생하는 문제로, 여러 고루틴이 동시에 맵을 읽고 쓰려고 할 때 발생한다. 또한, -race 플래그를 사용하면 Go의 레이스 디텍터로 프로그램을 테스트하면 이러한 동시성 문제를 사전에 발견하는 데 도움이 될 수 있다. 이 부분은 [GO] Go Race Detector: 동시성 버그를 잡아내는 강력한 도구에 정리하였다. ㅁ 오류의 원인 이 오류는 Go의 맵이 기본적으로 동시성에 안전하지 않기 때문에 발생한다. 여러 고루틴이 동시에 같은 맵에 접근하여 읽기와 쓰기 작업을 수행할 때, Go 런타임은 이를 감..
ㅁ 들어가며ㅇ 함께 일하는 쿠루와 이야기 하면서 대용량 파일 업로드 시 OOME을 줄이는 방법에 대해서 고민하게 되었다. 관련 내용을 찾고 공부하면서 Spring에서 제공하는 MultipartFile.transferTo() 메서드에 대해서 알게 되었다. 이 메서드는 파일 업로드 처리를 간단하고 효율적으로 만들어주는 강력한 도구였다. ㅁ transferTo() 메서드란?transferTo() 메서드는 MultipartFile 인터페이스에서 제공하는 메서드로, 업로드된 파일을 서버의 지정된 위치로 저장하는 역할을 한다. 이 메서드는 파일 데이터를 메모리에 로드하지 않고 직접 디스크로 전송하여 대용량 파일 처리에도 효율적이다. ㅁ 주요 특징간편한 사용: 단 한 줄의 코드로 파일 저장이 가능합니다.메모리 효율성..
ㅁ 들어가며ㅇ 젠킨스 빌드환경을 구성하면서 이전에 빌드되었던 이미지들과 컨테이너들이 있었다. 도커 시스템에서 사용하지 않는 리소스를 쉽게 정리하는 방법을 정리해 보았다. ㅁ docker system prune이란?docker system prune은 도커 시스템에서 사용하지 않는 리소스를 한 번에 정리해준다. 중지된 모든 컨테이너최소 하나의 컨테이너에서 사용되지 않는 모든 네트워크매달려 있는(dangling) 모든 이미지모든 빌드 캐시 ㅁ 사용 방법docker system pruneㅇ 이 명령어를 실행하면 경고 메시지와 함께 삭제될 항목들이 나열된다. 계속 진행하려면 'y'를 입력한다.ㅇ 20GB의 리소스가 정리되었다. ㅁ 추가 옵션기본적으로 볼륨은 삭제되지 않는다. 볼륨도 함께 삭제하려면 --volum..
ㅁ 들어가며 Go 언어로 개발된 애플리케이션에서 메모리 사용량이 지속적으로 증가하는 문제는 흔히 발생할 수 있다. 이 글에서는 Go GC를 너무 믿지 마세요 - 메모리 누수 탐지와 GC 주기 조절이란 글을 읽고 메모리 문제의 원인을 분석하고 해결하는 데 도움이 되는 정보와 방법을 정리해 보았다. ㅁ 문제 정의 Go 애플리케이션의 메모리 사용량이 시간이 지남에 따라 점진적으로 증가하는 현상은, GC가 있는 Go 언어에서도 발생할 수 있다. 이는 애플리케이션의 안정성과 성능에 영향을 미칠 수 있으므로, 문제 해결을 위한 체계적인 접근이 필요하다. ㅁ 원인 분석ㅇ cgo 관련 메모리 누수: cgo를 사용하여 C 코드를 Go에서 호출하는 경우, C 코드에서 메모리 누수가 발생할 수 있다.ㅇ GC 성능: GC..