728x90

전체 글 154

[Go/Golang] 정수형 자료를 입력 받을 때, Scanner 사용하기

[Go/Golang] 정수형 자료를 입력 받을 때, Scanner 사용하기 일반적으로 PS할 때, 저는 bufio 패키지를 사용합니다. 보통 사용하는 fmt.Scanf() 또는 fmt.Printf()는 버퍼링을 수행하지 않아 많은 양의 입력을 받는 경우 매우 느려집니다. 실행 시간이 매우 중요한 PS에 있어선 더더욱 피하게 되는 내장 함수입니다. 한 줄에 여러 개의 입력을 받는 경우, (*bufio.Reader).ReadString('\n)을 이용해 받고, 끝에 들어오는 \n을 Trim하고 Fields()를 이용해 배열로 쪼갭니다. 그리고 나서 strconv.Atoi()로 숫자 변환을 해줍니다. 만약 한 줄에 셀 수 있을 정도의 입력을 받는다면, fmt.Fscanf((*bufio.Reader), ..

IT/Go 2021.05.13

[Kubernetes] Helm으로 Statefulset의 spec upgrade가 안 되는 경우

[Kubernetes] Helm으로 Statefulset의 spec upgrade가 안 되는 경우 Helm으로 배포한 패키지에 statefulset이 있으면, helm upgrade 명령을 사용했을 때 오류가 날 가능성이 있습니다. 특정 파드의 리소스 제한을 걸지 않아서, 배포 이후에 제한을 걸기 위해 values.yaml을 업데이트 하고 helm upgrade를 수행했는데, statefulset이 지원하지 않는 업데이트라는 에러를 뿜뿜하더군요. 분명 자원은 spec.template.containers.resources에 있으니까, 이걸 수정한다고 해서 statefulset이 업데이트 할 수 없다고 나오는 건 분명히 버그였습니다. 수소문 해보니 저와 같은 현상을 겪었던 분들이 많이들 계셨고, 찾아낸 해법..

IT/Kubernetes 2021.05.12

[BOJ/1062/Golang] 백준 1062 - 가르침

백준 1062 - 가르침 [Gold/4] - Golang 사족 훈련소에서 백준 랭킹 1위인 구사과님을 만났습니다. 엄청난 우연이었는데, 이 때 많은걸 배운 것 같습니다. 앞으로는 제가 풀었던 문제들, 한참 생각해보았지만 떠오르지 않아 인터넷을 조금 참조 또는 대다수 참조한 경우 가리지 않고 생각의 흐름과 이해한 내용을 정리해서 포스팅할 계획입니다. 두서가 없고 설명이 어색한 때가 있으면 가감없이 댓글로 남겨주시면 감사하겠습니다 🙂 접근 방식 주어진 N, K, 단어의 길이가 브루트포스한 완전 탐색을 수행할 수 있을 정도의 크기라서 완전 탐색을 사용하기로 했습니다. 처음에는 단어를 순회하면서 가장 최적의 알파벳을 찾아야 하는 것인 줄 알았는데, 알파벳을 사용할 수 있는만큼 뽑고, 해당 알파벳 집합으로 주어진..

PS/BOJ 2021.05.01

[Go/Golang] Zap과 시간 기반 파일 로테이션 로깅 수행하기

본 포스트는 'dhwaneetbhatt'의 Time based log file rotation with zap 글을 번역한 것임을 밝힙니다. Zap과 시간 기반의 파일 로테이션 로깅 zap은 현재까지도 잘 개발되어오고 있고, 성능 측면에서도 훌륭한 Go의 오픈소스 로깅 라이브러리입니다. 유감스럽게도, 원 글쓴이(이하, 필자)의 조직에서 제공하는 모든 앱들이 12-factor 애플리케이션으로 구성되지 않았으며, 이로인해 물리적으로 파일에 로그를 남기는 작업이 여전히 필요했습니다. 이와 같은 이유로 zap을 사용함과 동시에 파일을 로테이션 할 수 있도록 하는 방법이 필요했습니다. 필자는 Java 진영에서 넘어왔기 때문에 log4j의 매우 다양한 파일 로테이션 옵션을 제공하고 있는 것을 알고 있..

IT/Go 2021.03.29

[Linux/Unix] Shell Script에서 날짜/시간 변수 사용하기

Date Format 리눅스 또는 유닉스 계열에서 날짜를 표시하는 문법은 다음과 같습니다. date +FORMAT date +"%FORMAT" date +"%FORMAT%FORMAT" date +"%FORMAT-%FORMAT" 위 문법에서 + 기호는 이 문법이 사용자가 정의한 형식을 따르고 있음을 나타냅니다. 또한 중간에 들어간 -도 사용자가 원하는 문자로 변환하여 사용할 수 있습니다. 만약 출력의 형식이 연&월&일 의 형태라면 - 대신 &를 넣어 포매팅할 수 있는 구조입니다. yy-mm-dd 형식으로 출력하기 터미널을 열어서 다음 명령을 입력해봅시다. $ date +"%y-%m-%d" 출력은 이렇습니다. 21-03-22만약 연도 데이터를 4자리로 출력하고 싶다면 %y를 %Y로 치환해주면 됩니다. $ d..

IT/OS 2021.03.22

[Go/Golang] Go Application에 Prometheus Exporter 연동하기

Prometheus Prometheus는 CNCF의 오픈 소스 프로젝트로 System과 Service 모니터링 시스템입니다. 특정 주기를 기준으로 사용자가 구성한 target으로부터 metric을 수집합니다. 또한 사용자가 정의한 rule expression을 계산하여 해당 결과를 보여주고 특정 조건을 만족하는 상황에 도달하면 알람을 울리는 등의 기능을 수행합니다. Prometheus는 시계열(time-series) 데이터를 처리하는 데에 특화되어 있습니다. Prometheus Exporter Prometheus는 여러 방법으로 metric을 수집합니다. 특히 Exporter라는 구성 요소를 통해 target 시스템 및 서비스의 Expose된 metric을 수집해올 수 있습니다. Prometheus Ex..

IT/Go 2021.03.16

[Go/Golang] Map 자료형을 Struct로 변환하기(mapstructure)

Map Python에는 Dictionary라는 강력한 자료형이 있습니다. 굉장히 유연하고, 편리한 자료형입니다. 기본적으로 Python의 Dictionary는 다른 언어의 Map 자료형과 동일합니다. Python Dictionary의 특별한 점이라면, 하나의 Dictionary 변수 안에 각기 다른 자료형의 데이터가 보관될 수 있다는 점입니다. 따라서 Python에서 어떤 데이터를 Dictionary로 보관하는 일은 그리 어려운 일이 아닙니다. 특히, JSON 데이터를 별다른 추가 작업 없이 Dictionary에 대응할 수 있다는 점은 정말 엄청난 기능이라고 생각합니다. 그러나 Go 진영에선 상황이 다릅니다. Go에서 특정 데이터를 Dictionary로 보관하기 위해선, Key-Value가 어떤 자료형인..

IT/Go 2021.03.15

[OpenSource] GitHub CLI, GitHub의 공식 CLI 프로젝트

GitHub CLI gh는 GitHub을 커맨드 라인으로 만나볼 수 있는 CLI 도구입니다. pull requests나 issues 등의 다양한 GitHub 기능을 터미널에서 이용할 수 있게 도와줍니다. GitHub CLI, gh 는 오픈 소스 프로젝트로 개발되고 있으며, 개발 언어 중에서는 Go가 약 99.7%를 차지하고 있습니다. GitHub CLI는 Go 오픈소스 프로젝트 중 하나입니다. Installation macOS macOS 용 gh는 현재(2021.03.12) Intel 칩을 장착한 Mac에서만 네이티브로 이용이 가능합니다. $ brew install gh Windows 1. WinGet 이용 $ winget install gh 2. Chocolatey 이용 $ choco install g..

IT/OpenSource 2021.03.12

[Wiki/Git] gitignore를 자동으로 만들어보자

git으로 버전 관리를 하다보면, 커밋하고 싶지 않았던 파일이나 디렉터리가 포함되어 커밋되는 경우가 왕왕 있습니다. macOS의 .DS_Store나 Vscode의 __debug_bin 파일 등이 대표적입니다. 때론 문서를 작업하다 정상적으로 종료하지 않아 남은 .swp 파일도 이런 경우에 속하겠죠. 우리는 이렇게 원치 않는 파일을 관리하기 위해 .gitignore파일을 작성합니다. .gitignore .gitignore 파일은 단순히 파일 확장자나 파일의 이름, 디렉터리 이름으로 구성된 파일입니다. 특정 확장자의 파일을 모두 무시하고 싶다면 와일드카드 * 를 사용하여 나타내면 됩니다. 특정 디렉터리 하위에 위치한 파일을 무시하고 싶다면 dir/ 를 작성해주면 됩니다. 따라서 프로젝트에서 무시하고자 하는 ..

IT/IT WIKI 2021.03.11
728x90
반응형