Newest
Inspiration

동미참 예비군 후기 - 서초과학화예비군훈련장 강동송파

2022.10.13(목) 동미참 훈련 다녀왔습니다. 2023.07.10 ~ 2023.07.13 (월~목) 4일 추가로 다녀왔습니다. 여름에 가는건 비추합니다. 비가 많이오면 대부분 영상시청으로 대체하지만... 불참하면 자동으로 연기됩니다. 2016년 전문연구요원 소집해제하고 코로나로 인해 처음 예비군 훈련을 갔네요. 2020년 이후로 과학화 되어 훈련이 이래저래 개편되다보니 미리 참고할 정보가 별로 없었습니다. 누군가에게 도움이 되도록 후기를 남겨봅니다ㅎㅎ 이번해는 동미참 하루만 배정되었습니다. 0. 복장 군복을 챙깁니다. 혹시 몰라 주머니에 베레모도 챙겨갔으나 모자는 아무도 안씁니다. 안가져가도 됩니다. 군화도 그냥 워커 신고 오시는 분들도 있었습니다. 가서 빌려 신어도 됩니다. 심지어 갈색인분들도 있..

카테고리 없음

Go 개발자 필독 문서(1/2) - Effective Go

Go는 유연하고 이해하기 쉬운 언어입니다. 허들이 낮아 Go의 문법을 익히고 입문하기 매우 쉽죠. 그럼 Go의 문법을 파악하고 Advanced가 되기 위해 어떠한 것들을 알아야 할까요? Effective Go Go는 언어론적으로 굉장히 유연한 언어이지만 적지않은 역사가 생기며 확립된 여러 규칙이 있습니다. Effective Go라는 문서로 정리되어 있습니다. 무려 Go Official Document 입니다. Go 를 더 쉽게 이해하는 것을 방해하지 않으려면 위의 규칙을 지키는것이 매우 중요합니다. 여기에는 Go의 naming 부터 시작하여 다양한 관습과 규칙, 스킬들이 정리되어 있습니다. Go 프로젝트 기여를 위해서는 이러한 규칙을 파악하는것은 필수입니다. 초급자가 아니더라도 안읽어 보신 분은 필독을 ..

Go

Go/Golang이 느려지는 이유와 성능 향상

1. GC(Garbage Collection) Go는 개발하기 편하지만 GC의 사용으로 성능에 문제가 생길 수 있습니다. Go는 일반적으로 확보된 메모리 크기가 2배가 될때 GC를 수행합니다. (아래 포스팅의 5. Go GC Pacing 부분을 참고하세요) Go/Golang Memory Management 이번엔 Go의 메모리 관리에 대해 정리해보려 합니다 Go가 1.17이 Release되는 현재 시점에서 해당 내용에 관해 국내에서 정리된 문서가 없는 것 같습니다 (몇가지 번역 문서는 존재하는것 같습니다) syntaxsugar.tistory.com 성능에 영향을 줄이려면 GC의 수행을 줄이는게 좋습니다. 먼저, 메모리를 미리 확보해두는 방법이 있습니다. sync.Pool을 사용하여 추가 메모리 할당 없이..

AI

AI & ML & DL

Deep Learning을 위해 3대장에 대해 가볍게 정리합니다 :) - AI(Artificial Intelligence) - ML(Machine Learning) - DL(Deep Learning) AI ⊃ ML ⊃ DL입니다. AI를 구현하는 기술 중 하나가 ML ML의 방식 중 하나가 DL 한번 읽어보고 하나씩 살펴보죠. 1. Artificial Intelligence(AI) 수많은 데이터를 판단할 필요가 생김 -> 프로그램 개발하여 컴퓨터가 반복 작업 수행 판단을 위한 새 규칙이 계속 늘어남, 데이터도 점점 늘어남 -> 매번 사람이 직접 입력, 추가 개발 점점 시간/개발 비용이 많이듬 또한, 사람조차 개발하기 어려운 복잡하고 다양한 규칙이 필요해짐 이러한 필요성에 따라 학습, 문제 해결, 패턴 인..

Other

JOSE(JSON Object Signing and Encryption)

5G 보안 관련 NF 개발 중에 JOSE(JSON Object Signing and Encryption) 규격을 분석했었는데 이번 포스팅에 정리해봅니다. 개요 JOSE는 당사자간에 claim을 안전하게 전송하기 위한 프레임워크 claim : key/value 쌍의 client 메타정보 set 예) 사용자의 권한 단계, 권한 스코프 => {"level": "root", "scope": "admin"} JOSE 프레임워크는 이를 위한 몇 가지 규격들을 제공 JWT(JSON Web Token) JWS(JSON Web Signature) JWE(JSON Web Encryption) JWK(JSON Web Keys) 규격에 따르면 JWT는 권한 claim 집합을 JWS 혹은 JWS와 JWE 구조로 인코드 한 JS..

Cloud Native

The Twelve Factors 요약(5분 컷)

12 Factors 요약 버전입니다. 종종 리마인드하다가 이번에 아예 외우려고 요약 하였습니다. 기존에 12 Factors를 아예 모르는 분은 아래 포스트를 먼저 보시길 추천합니다:) The Twelve Factors Cloud-Native App은 Cloud 환경에 App을 배포하여 서비스하는 SaaS(Software As A Service) 방식입니다 그리고 Cloud-Native와 SaaS에서는 Agile Manifesto 만큼 유명한 문서가 있죠 The Twelve-Factor App The T.. syntaxsugar.tistory.com 12 Factors 방법론을 지키면 새로운 개발자가 프로젝트 참여하는 시간과 비용 최소화 여러 실행환경에서 이식성을 극대화 클라우드 플랫폼 배포에 적합 개발과..

Go

Go/Golang - Visualizing Concurrency

안녕하세요! 요즘 회사에선 프로덕션 개통이 한창이고, 또 개인적으로 이것저것 준비하다보니 너무 바빠서 포스팅이 제대로 안되고 있습니다...ㅎㅎ 원래는 밤새서라도 한두개 포스팅했었는데 그럴시간도 없네요. 개인적으로 포스팅할 거리가 생기면 메모는 확실히 해두고 있습니다. 시간나면 정리해서 모두 포스팅으로 바뀔예정! 이번엔 Reddit에서 Go관련 글을 Subscribe하다가 재밌는 글하나 발견해서 공유합니다. 2016년에 나온 내용이지만 전 이제야 봤는데 재밌네요. https://divan.dev/posts/go_concurrency_visualize/ Visualizing Concurrency in Go · divan's blog Posted on Jan 24, 2016 divan.dev 위에 나온 Go ..

Go

Go/Golang Module 정리(작성 중)

Go는 버전이 오르면서 dependeny 관리 기능에도 꾸준히 향상이 있어왔습니다. 1.18 beta가 나온 현재시점에서 사용하게 되는 go mod 명령을 쓰기좋게 정리합니다. go mod go는 mod라는 툴을 사용해 dependency 관리를 자동화합니다. GOPATH가 아닌곳에서 go build를 수행하려면 mod를 만들어야 합니다. go mod init {MODULE} 을 입력하여 모듈을 생성하고 외부 라이브러리인 경우 go get을 통해 해당 dependency를 로컬에 다운로드합니다. 이후, go mod tidy를 수행하면 go.mod 파일이 위치한 해당 디렉터리에 Dependency들을 설정합니다. 이게 일반적인 사용 형식이고, go 코드 모듈 생성 go mod init {MODULE_PAT..

Kubernetes

Kubernetes - CKA(Certified Kubernetes Administrator) 할인(~12.06)

오늘이 Cyber Monday라고 합니다. 사이버 먼데이는 11월 넷째 주 목요일인 미국의 추수감사절 다음 주 첫 번째 월요일을 뜻하는 마케팅 용어이다. ‘사이버 먼데이’라는 용어는 마케팅 회사들이 연휴가 끝난 후 일상생활에 복귀한 소비자들에게 온라인으로 물건을 구입하도록 독려한 데서 나왔다 때문에 CKA 할인이 50% 적용이 되고 있어서 좋은 기회네요. 보통 Black Friday보다 큰 폭으로 할인이 되는 날인 것 같습니다. 요새 바빠져 좀 미뤄두었던 저도 결제했습니다. 물론 할인 받는다고해서 싼 가격은 아니지만...ㅋㅋ $188에 CKA Exam을 결제할 수 있습니다. (시험은 결제 후, 2년까지 일정을 정해 2차례 시험을 볼 수 있습니다.) CKA exam 결제 시, 아래 쿠폰을 사용하면 됩니다...

Go

Go/Golang for sets: map[T]struct{} vs. map[T]bool

set이 필요해질때 고민해본 사항인데 마침 눈이 띄어서 짧게 공유해둡니다. empty struct가 재밌는 타입이었네요. for sets: map[T]struct{} vs. map[T]bool I recently saw a colleague using `map[T]struct{}` as a set of unique T. ```go seen := map[string]struct{}{} for _, s := range stuff { if _,... www.reddit.com The empty struct – The acme of foolishness Introduction This post explores the properties of my favourite Go data type, the empty st..

Other

GitHub Copilot 후기

업무가 몰려서 포스팅이 늦어졌네요. 7월 28일날 GitHub Copilot 관련해 포스팅했었고 그 과정에서 Copilot Technical Preview를 신청했습니다. (사전 체험) GitHub Copilot Your AI pair programmer : Copilot GitHub Copilot가 이슈가 되고 있네요 좋은 쪽으로든 나쁜 쪽으로든 행보가 꽤 재미있습니다 Copilot은 GitHub과 OpenAI에서 개발한 코드 자동완성 AI 툴입니다 GitHub Copilo.. syntaxsugar.tistory.com 10월 27일날 마참내! 아래와 같이 메일을 받아 사용해볼수 있는 기회가 생겼었습니다. 프로젝트 로고 몇개 만들고부터 로고에 관심이 많아졌는데 GitHub Copilot은 아래와 같은 ..

Other

vMotion(Live Migration)

SMSC 시스템에 vMotion을 사용해볼까 조사하는 과정에서 간단하게 정리했습니다. 1. VMware vSphere ESXi(Elastic Sky X integrated), vCenter Server로 구성 ESXi는 vmware을 생성하고 실행하는 하이퍼바이저 vCenter는 네트워크에 연결된 여러 호스트(ESXi)들을 통합, 관리 vSphere Client로 접속하여 설정 가능 2. vMotion 정의 VM을 ESX, ESXi 호스트 간에 다운타임없이 이주 시키는 기술. Live Migration(LM), Hot Migration(HM)이라고도 불림(VMware에서는 vMotion) 인스턴스가 살아 있는 상태로 다른 곳으로 이동하는 것 구동중인 가상머신 또는 애플리케이션이 다른 물리 머신으로 중단 ..

Framework & Tool

Concurrency with Actor Model(행위자 모델)

기존 포스팅에서 종종 Actor를 언급을 했습니다. Akka Framework에 대해 포스팅하려다가 Actor가 무엇인지, 왜 필요한지를 먼저 정리해봤습니다. 1. Background CPU Clock 성능 진화의 한계 도달 (무어의 법칙은 무너진 지 오래) CPU는 현대에와서는 질보다 양적 증가로 이어져 왔습니다. 양적 증가로 인해 여러개의 CPU를 잘 사용하여 하드웨어의 성능을 따라갈 수 있도록 소프트웨어에서 병렬 처리가 필요해졌습니다. 이를 보고 유명한 프로그래머이자 져널리스트인 허브 셔터(Hurb Shutter)가 아래와 같은 말로 동시성 프로그래밍 시대를 표현했습니다. Free launch is over - Hurb Shutter - 공짜 점심은 끝났다. (성능 날먹은 끝났다.) 소프트웨어적인 ..

Kubernetes

Install Minikube in Apple Sillicon M1 Mac

M1에서 minikube를 처음 설치하는 거라면 이 포스트를 볼 필요 없이 아래 공식문서 링크를 통해 설치하면 됩니다. https://minikube.sigs.k8s.io/docs/start/ 저 같은 경우는 기존에 사용하던 Mac 데이터를 새로 구매한 Mac M1으로 옮기고 minikube를 실행했더니 아래와 같이 실행이 안됩니다. Error: [VBOX_VTX_DISABLED] create: precreate: This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory CPU가 다르니 당연히 안될 거라고 생각했습니다. 위에 보면 brew로 설치 시도를 했지만 아직 지원하지 않는 걸로 보입니다. 간단한 해결, 설..

Trend

[스크랩] '보시 어워드 2021' 올해 최고의 오픈소스 소프트웨어 29선

종종 괜찮은 글은 스크랩해서 짧게 공유해보려 합니다. '보시 어워드 2021' 올해 최고의 오픈소스 소프트웨어 29선 돈이 나무에서 자라지는 않지만 깃허브(GitHub) 저장소에서는 자란다. 오픈소스 프로젝트는 지구상에서 가장 귀중하고 정교한 소프트웨어를 개발하며, 무료이기 때문에 모든 기업의 IT 비용을 크 www.itworld.co.kr 보시 어워드란 말은 처음들어봤는데 Bossie(Best of Open Source Software Awards) Award 란 뜻이라고 합니다. 좀 쓸만한게 있나 내가 쓰는것이 있는가 궁금해져서 살펴보게 되었습니다. 다 흥미로웠지만 그 중에서 몇가지만 짧게 언급해봅니다. (차후 포스팅할 수도 있겠네요.) 우선 Minikube가 올랐네요. Kubernetes를 배워본 ..

Other

Duplex, Duplication(이중화)

종종 이중화 얘기가 나오는데 이쪽에 익숙하지 않다고 느껴졌습니다. 잠깐 시간내서 이중화에 대해 너무 깊지 않게 정리해봤습니다. 이중화(Duplex, Duplication)란? 서비스가 중단되는 시간(Downtime)을 최소화 하기위해 동일한 기능을 수행하는 예비 시스템을 동시 운용 구축비용과 유지보수 비용이 높아지지만 Downtime을 없애거나, 줄일 수 있음 고가용성 유지가 목표 두 가지 방법 Active/Standby Active/Active 이중화는 왜 필요한가? 기업의 비즈니스는 고 가용성이 보장되어야 함 한번의 장애는 기업 신용 실추, 매출 하락 등 매우 큰 영향을 미침 고가용성 High Availability (HA) 서비스를 안정적인 상태로 오래 운영하는 성질 1년에 계획되지 않은 서비스 중..

Go

[ko]Wire-Jacket: IoC Container of google/wire for cloud-native

오픈소스 프로젝트 Wire-Jacket 소개 GitHub - bang9211/wire-jacket: Jacket of google/wire: advanced DI approach wrapping google/wire for cloud. Jacket of google/wire: advanced DI approach wrapping google/wire for cloud. - GitHub - bang9211/wire-jacket: Jacket of google/wire: advanced DI approach wrapping google/wire for cloud. github.com 1. Introduction 블록체인, 코인 주제의 프로젝트로 Ossicones를 개발하는 중이었습니다. 스마트 컨트랙트 등 ..

Cooperation

[Git] GitHub Organization - remote: Permission to repository

GitHub Organization을 이용하면서 발생한 문제입니다. Organization에 있는 Repository는 권한을 얻기전까지 push할 수가 없습니다. $ git push ✱ remote: Permission to Dev-Sweeter/go-jose.git denied to bang9211. fatal: unable to access 'https://bang9211@github.com/Dev-Sweeter/go-jose.git/': The requested URL returned error: 403 일전에 포스팅한 문제와 비슷한 문제입니다. [Git] remote: Support for password authentication was removed on August 13, 2021. Ple..

Go

Go/Golang Release & pkg.go.dev package update

Go 같은 경우 GitHub을 통해 Document와 Package 문서가 자동으로 작성되기 때문에 Release(배포)가 중요합니다. 처음부터 배포를 신중하게 하는 것이 중요하지만 종종 실수하기 마련입니다. 먼저 말하자면, 배포 이후에 tag를 삭제하거나 수정하여 같은 버전으로 배포하는 경우에는 문서(godoc)가 refresh되지 않습니다. x/pkgsite: refresh of pkg.go.dev · Issue #48832 · golang/go What is the URL of the page with the issue? https://pkg.go.dev/github.com/bang9211/wire-jacket What is your user agent? Mozilla/5.0 (Macintosh; ..

Inspiration

개발자의 디자인..

Wire-Jacket 릴리즈 기념으로 로고 디자인을 심플하고도! 직관적이고! 이쁘게! 넣고 싶어서 생각을 좀 해봤습니다. 의미 그대로 Wire를 Wrapping하는 심플한 그림을 머릿속에 그려놓고 비슷한 그림을 구글링 하였습니다. 다행히 거의 생각한 대로의 완벽한 Wire 사진을 발견해서 이왕 하는 거 디자이너한테 커미션을 맡겨볼까 생각이 들었습니다. 근데 웬걸 찾아보니 비상업용도조차 커미션 가격이 취미로 즐기기엔 저렴하진 않더군요... 내 소스는 오픈소스인데 로고 가격이...? 결국 직접 디자인해볼까 싶어 져 간단히 디자인해봅니다. 잠깐 시간 내서 몇 가지 만들어봤는데 왜 김밥이...? ㅋㅋㅋㅋㅋㅋ 한번 김밥이라고 생각이 들고부터는 계속 김밥으로 보입니다 기존엔 프로토타입으로 아래 그림을 사용했는데 좀..

Go

Go/Golang HTTP 성능 튜닝

Go는 아주 쉽고 빠르게 HTTP 기능들을 구현할 수 있지만 성능 요구사항이 높아지다 보면 TIME_WAIT 등 자주 접하는 문제들이 있으며 자연스럽게 Go HTTP 튜닝 방법을 찾게 됩니다. 이번 포스팅에선 일반적인 Go HTTP 옵션들을 정리해봤습니다. 1. HTTP 통신을 위한 프로세스당 FD 개수 한도 설정 일반적으로 다음과 같이 리눅스가 설치되고 시스템 자원의 한도 값 중 프로세스당 FD의 개수에 대한 한도 값을 보면 다음과 같이 1024로 설정되어 있습니다. $> ulimit -n 1024 HTTP는 프로토콜의 특성상 TCP의 연결이 자주, 많이 발생하므로 1024는 부족해서, 조금만 트래픽 부하를 주어도 'Too many open files'와 같은 오류를 발생시킬 수 있습니다. 따라서 이 ..

Go

Go/Golang Dependency Injection

요즘 새로 투입될 업무 때문에 규격 분석만 하고 코딩할 틈이 없어 토이 프로젝트를 시작했습니다 프로젝트에서 golang은 DI(Dependency Injection)를 어떻게 쓰는 게 좋은 방법일지 고민해보았습니다 사내에선 golang에서 Google Guice같이 DI를 사용할 수 있는 아래의 소스를 이용하고 있었습니다 GitHub - alecthomas/inject: Guice-ish dependency injection for Go. Guice-ish dependency injection for Go. Contribute to alecthomas/inject development by creating an account on GitHub. github.com 사내 공통모듈에서 해당 소스를 impor..

Go

Go/Golang Scheduling

Go Memory에 이어 이번엔 Go Scheduler입니다 Go는 일반적인 프로그래밍 언어들과는 달리 goroutine이라는 형태를 사용합니다 우리는 goroutine으로 기존의 thread 방식보다 편리하게 concurrency를 구현합니다 뿐만 아니라 goroutine은 thread보다 가벼운 구조체이며 높은 성능을 자랑합니다 thread랑 goroutine은 뭐가 다른 걸까요? 단순히 goroutine만 아는 것보단 Go의 Scheduling을 이해해야 합니다 Memory 포스팅에서 잠깐 언급했듯이 Go는 Java의 JVM, .NET Framework의 CLR처럼 호스트 머신에 설치된 런타임을 이용하는 것이 아니라 생성되는 바이너리 파일에 작은 런타임을 포함합니다 해당 런타임이 바로 Go의 GC와..

Cooperation

[Git] squash commits already pushed - 여러 커밋 하나로 만들기

squash [skwɑːʃ;skwɔːʃ] 동사1. 짓누르다, 으깨다, 찌부러뜨리다 git에 commit들을 하나의 commit으로 묶을 수 있습니다 squash라고 하는데 뜻그대로 해당 commit들을 강제로 짜부시킨 느낌입니다 우선 squash라고하는 명령어는 없습니다 -i, --interactive let the user edit the list of commits to rebase rebase의 interactive 옵션을 이용해 squash를 수행할 수 있습니다 종종 PR을 하다보면 commit을 합쳐달라는 요청을 받는데 이미 push해버린 상태에서 3개의 commit을 squash 하는 예로 보겠습니다 (중요한 repository라면 사전에 백업을 먼저 수행하고 진행하세요) 3개의 commit을..

Cooperation

[Git] rebase is cleaner (merge vs rebase)

Git base로 개발을 수행하다 보면 commit -> pull -> merge -> push만 반복적으로 수행되는 경우가 많습니다 참여하는 개발자들이 많아질수록 merge가 자주 발생하게 되고 Git HIstory가 지저분해집니다(Non-linear history) Non-linear history가 있으면 안되는가? git든 현실이든 history는 다시 보기 위해 만들어두는 기록입니다 수많은 merge로인해 불필요하고 헷깔리는 commit들이 발생합니다 이러한 지저분한 기록보다는 다듬어두고 정리해두는게 훨씬 더 유용한 History를 유지할 수 있습니다 Linear History를 유지하기 위해 추천하는 방법은 rebase를 적극적으로 활용하는 것입니다 remote의 코드를 local로 pull할..

Go

Go/Golang Test

보통 TDD(Test Driven Developmen) 까진 안 해도 기본적인 틀을 갖추면 테스트를 병행해서 진행하는 편입니다 토이 프로젝트 기본적인 형태가 갖춰져서 우리의 소중한 동반자 [테스트]를 작성하면서 진행하려고 합니다 테스트는 안정성이 중요한 상용 프로젝트에서 가장 중요한 부분이라고 볼 수 있습니다 안정적이지 않은 App과 장애 발생은 서비스 가용성을 보장하지 못하게 되고 이는 단순한 비용 손해뿐만 아니라 가장 중요한 고객의 신뢰 손실까지 이어집니다 기업 입장에서 고객 신뢰성 상실은 가장 큰 손해로 이어지기 때문에 개발자들은 수많은 테스트들과 이중화 구성 등 만발의 준비를 합니다 높은 안정성 보장을 위해 테스트 케이스를 먼저 작성하는 TDD 방식의 개발도 채택되고 있습니다 위에서 말했듯 테스트..

Trend

Apple M1 Mac Pro 사용 후기

Apple M1 Mac Pro 사용한 지 4달 정도 지난 시점에서 물어보시는 분들이 많아 간단하게 후기 남기려고 합니다 회사 업무용으로 지원받아 Mac Pro를 구매하게 되었는데 어차피 집에도 Mac Pro 2019년형이 있기 때문에 M1칩으로 선택해봤습니다 M1? M1칩은 Apple이 Mac용으로 설계한 ARM 기반의 칩입니다 보통 Apple M1 혹은 Sillicon M1이라고 부릅니다 기존 Mac은 Intel칩을 사용했으나 이번 2020년 Mac은 Intel칩과 M1칩을 사용하는 버전이 따로 출시되었습니다 MacOS + M1(ARM) 아무래도 다들 이 새로 나온 혼종에 대해 기대 반 걱정 반으로 고민을 많이 합니다 1세대는 거르는게 답이다 VS 성능 가장 큰 문제점이라면 기존 App들과의 호환성이겠..

Go

Go/Golang Memory Management

이번엔 Go의 메모리 관리에 대해 정리해보려 합니다 Go가 1.17이 Release되는 현재 시점에서 해당 내용에 관해 국내에서 정리된 문서가 없는 것 같습니다 (몇가지 번역 문서는 존재하는것 같습니다) 이제 Go도 연식이 꽤 생긴 언어이고 관련 문서는 굉장히 많습니다만 버전마다 상세한 내용들이 추가되고, 바뀌고 있습니다 (문서는 대부분 잘 정리되어 있습니다. 양이 무지막지할 뿐) LINE 블로그의 굉장히 유명한 Go GC 관련 문서가 있습니다 깔끔하게 GC에 대해 정리해준 문서인데 Go 1.10 버전으로 다루고 있으며 현재는 이와는 GC가 꽤 달라졌습니다 Go 언어의 GC에 대해 - LINE ENGINEERING 안녕하세요, LINE Ads Platform 개발을 담당하고 있는 Okada(@ocadar..

Go

Go/Golang Protobuf Compile Guide

지난 포스팅에서 gRPC에 대해서 설명했으며 이번에는 go를 이용해 사용하는 방법을 정리합니다 gRPC 이번 포스팅은 gRPC입니다. 요즘 업무에 자주 쓰고 있어서 가볍게 정리해두려 합니다. [핵심 용어] 더보기 /* - RPC - IDL(Interface Definition Language) - gRPC - protobuf(프로토버프/프로토콜버퍼) - micros.. syntaxsugar.tistory.com gRPC를 사용하기 위해서는 protobuf로 IDL을 정의하고 gRPC 방식으로 컴파일해야 합니다 단순한 protobuf는 go에서 사용하는 방법이 굉장히 단순합니다 하지만 Tree 구조를 가진 protobuf를 go에서 컴파일하는 데는 현재까지 버그가 있습니다 이번 포스팅에서는 - 하나의 pr..

Go

Go/Golang Configuration

Configuration도 굉장히 중요한 영역 중에 하나죠 굉장히 다양한 방법과 의견이 나뉘는 분야입니다 JSON, YAML, 환경변수 등 종류도 다양하고 Cloud, Container, Command Line 등 환경도 다양합니다 그래서 golang에서 config를 어떻게 다루는게 좋을지 정리해보려 합니다 우선 12 factors에서 Configuration에 대해 언급하는 부분이 있습니다 2021.08.12 - [Cloud/Cloud Native] - The Twelve Factors The Twelve Factors Cloud-Native App은 Cloud 환경에 App을 배포하여 서비스하는 SaaS(Software As A Service) 방식입니다 그리고 Cloud-Native와 SaaS에서..

Cooperation

[Git] remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

자기 전에 새 git repository를 만들고 commit & push 하려 하니 뭔가 바뀌었네요 정확히는 아래와 같은 문구가 발생합니다 remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information. 그러니까... 2일 전인 2021년 8월 13일부터 password 방식의 인증은 폐기되고 personal access token ..

Cloud Native

The Twelve Factors

Cloud-Native App은 Cloud 환경에 App을 배포하여 서비스하는 SaaS(Software As A Service) 방식입니다 그리고 Cloud-Native와 SaaS에서는 Agile Manifesto 만큼 유명한 문서가 있죠 The Twelve-Factor App The Twelve-Factor App (한국어) 배경 이 문서에 기여한 사람들은 수백개 앱의 개발과 배포에 직접 참여했으며, Heroku 플랫폼을 통해서 방대한 앱의 개발, 운영, 확장을 간접적으로 관찰했다. 이 문서는 실제로 쓰이는 다양한 SaaS 12factor.net App이 Cloud 환경에서 올바르게 동작할 수 있도록 개발하는 12가지 요소가 정리되어 있습니다 Cloud-Native 개발자라면 한 번쯤은 들어봤을 문서죠..

Go

Go/Golang awesome-go

go에서 사용할 수 있는 framework, library, software 소스코드들의 리스트가 정리되어 있습니다 계속 관리도 되고 있네요! Survey 시에 유용한듯! A curated list of awesome Go frameworks, libraries and software GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software A curated list of awesome Go frameworks, libraries and software - GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries..

Cooperation

Clean Code - 주석

Clean Code : 주석 코딩을 배우는 첫날부터 배우는 게 주석이다 사실 입문자들에겐 그저 나중에 자신이 봐도 이해할 수 있도록 설명하는 정도... 혹은 자신의 코드를 볼 누군가를 위한 힌트 정도이다 (실제로 주석을 이쁘게 잘달아야 한다고 가르친다!) 근데 그거 아는가? 흔히 우리가 어떤 책이나 논문을 읽을 때 작성자만 아는 얘기를 써놓고 거기에 주석이 달려 있으면 보기가 굉장히 불편해진다(나만 그런가) 잘된 코딩은 주석 없이 언어만 읽어도 자연스레 이해가 되어야 한다 (글과 마찬가지다) 물론 좋은 주석도 있고 실제로 많은 훌륭한 개발자들도 주석을 조금씩 사용한다 언제 어떻게 사용할지 알아보자 '우리는 코드로 의도를 표현할 방법을 찾지 못해 주석을 사용한다' 코드는 계속 변한다 프로그래머가 주석을 유..

Other

CPU는 어떻게 동작할까

공부한 지 한참 돼서 가끔 헷갈릴 때가 있습니다 그중 CPU 관련 설명을 우연히 유튜브 영상 접했는데 그림으로 잘 설명되어 있고 회로 레벨부터 전반적으로 조립해주니 재밌네요 마침 연구실에서 센서네트워크 노드 땜질하면서 궁금해서 찾아봤던 정리해두었던 내용과 겹치기도 해서 영상 내용에 개인적으로 정리한 내용 보충하여 새로 정리해봅니다 CPU - Central Processing Unit - 중앙 처리 장치 - 기억, 해석, 연산, 제어 수행 CPU와 RAM은 반도체로 구성됩니다 - 도체 : 비저항이 작아 전기가 잘 통하는 물체 - 부도체 : 비저항이 높아 전기가 잘 통하지 않는 물체 - 반도체 : 도체와 부도체의 중간 정도로 전기가 통하는 물체 반도체는 주로 실리콘으로 구성 실리콘은 최 외각 전자가 4개 다..

Cooperation

Clean Code - 함수

Clean Code : 함수 함수를 만드는 방법은 취향이라고 생각했다 하지만 클린코드에선 아니다 사실 함수를 만드는 방법같은건 정해져 있어야했다 이런건 프로그래밍 언어에서 함수를 처음 배울때 같이 배워야 한다 (교수님들 화이팅) 함수를 만드는 방법 1. 작게 만들어라! 작은함수가 좋다 일반적으로 5줄 이하여야한다 블록과 들여쓰기 if/else, while 문 등에 들어가는 블록은 한 줄이어야 한다 호출되는 블록은 함수로 감싸고, 함수 이름을 적절히 지어라 이해하기 쉬워진다 함수의 들여쓰기 수준은 1단이나 2단을 넘어서면 안된다 2. 한 가지만 해라! 함수는 한 가지를 해야한다. 그 한 가지를 잘 해야 한다. 그 한 가지만을 해야 한다. 한 가지란? 함수 이름 아래에서 추상화 수준이 한 단계인 경우 (함수..

Cooperation

Agile

Agile에 대해서 정리하겠습니다 Agile = 민첩한 한글로는 '애자일'이라고 씁니다 게임에서 흔히 접하는 Agility(민첩성)의 Agile이 맞습니다(Dex 말고) 애자일은 소프트웨어 개발 방법론 중에 하나입니다 [소프트웨어 개발 방법론] 더보기 /* 개발자들이 소프트웨어 개발을 계속하다 보니 특정 과정이 반복되는 게 느껴집니다 우당탕 닥치는 대로 맨땅에서 개발하는 거보다 해당 과정을 정립해서 개발을 수행하는 게 계획/설계하기에 좋은 방법이란 걸 알게 됩니다 소프트웨어 공학 내용이죠 그렇게 소프트웨어를 개발하는 여러 가지 방법을 상세하게 정리한 방법론이 나옵니다 종류 - 애자일 방법론 - 구조적 방법론 - 정보공학 개발 방법론 - 객체 지향 개발 방법론 - 워터폴 방법론 - 등등 */ 애자일 방법론..

Cooperation

Clean Code - 의미 있는 이름

Clean Code : 의미 있는 이름 개발하다 보면 많이들 공감하겠지만 이름 짓는 게 참으로 어려운 일이다 이름을 짓는 일은 사실 컴파일러에겐 영향이 없다 하지만 그럼에도!!! 코딩을 하는 나와 이 코드를 사용할 동료에게 매우 중요하다 간단, 명료, 통일성을 가지고 모두가 직관적으로 알 수 있는 단어를 선택하는것이 응당하다 이름을 명확히 지을때 생각할 것 1. 의도를 분명히 밝혀라 변수, 함수, 클래스 이름으로 의도를 밝혀라 존재 이유? 수행 기능? 사용 방법? (주석이 없어도 알 수 있게) 아래 같은 변수 이름을 피해라 - list - d 2. 그릇된 정보를 피하라 프로그래머에게 어떤 특수한 정보를 제공하는 단어를 남발하지 마라 - list 같은 다른 의도로 헷갈리게 한다 유사한 개념은 유사한 표기법..

Trend

GitHub Copilot

Your AI pair programmer : Copilot GitHub Copilot가 이슈가 되고 있네요 좋은 쪽으로든 나쁜 쪽으로든 행보가 꽤 재미있습니다 Copilot은 GitHub과 OpenAI에서 개발한 코드 자동완성 AI 툴입니다 GitHub Copilot · Your AI pair programmer GitHub Copilot works alongside you directly in your editor, suggesting whole lines or entire functions for you. copilot.github.com 처음 보고는 Copilot이 Copy에 대한 변형 단어라 생각했으나 Co-pilot의 의미입니다 함수 이름, 주석 등의 문구를 입력하면 AI가 해당 문맥을 파악해..

Trend

[스크랩] 도태될IT 역량 6가지··· 새 치즈를 찾는 법

도태될IT 역량 6가지··· 새 치즈를 찾는 법 IT 역량 관점에서 경력을 보장하는 비밀은 다각화이다. 최근의 딜로이트 설문조사에 따르면 대다수의 CIO가 오늘날 역량 세트의 3분의 1이 향후 3년 내에 쓸모가 없어질 것이라고 말했다. 딜로이 www.ciokorea.com 도태될 IT 역량 6가지에 대한 소개입니다 1. 레거시 및 온프레미스 IT 스킬 2. 단일 프로그래밍 언어에 대한 전문성 3. 품질 보증(QA) 4. 소프트 스킬이 없는 하드 스킬 5. 데이터센터 운영자 6. 구성 및 물리적 기기 관리 위의 6가지라고 하는데 솔직히 도태될 거 같지는 않네요 지금도 레거시나 기존 기술에서 벗어나지 못하고 있는데 언젠가 없어질거다~ 라는 식은 너무 자극적이기만 한 내용이라고 생각이 듭니다 무게가 좀 줄어들..

Cooperation

Clean Code - 깨끗한 코드

Clean Code 개발이란 건 사실 명령어를 나열하는 행위이다 많은 연구자들은 이 개발을 인간의 언어와 비슷한 형태로 만드려고 노력해왔다 프로그래밍 [언어]라는 것을 사용하고 컴퓨터와 [대화]하는 데 사용하지만 이 책의 관점에서 봤을때 프로그래밍 언어는 결국 사람과 사람 간의 대화를 위해 사용한다 어떤 책을 읽다보면 표현이 명료하며 다음이 예상되고, 머릿속에 훤히 그려지는 글들이 있다 이는 사실 프로그래밍 언어로 표현한 코드에서도 마찬가지인 것이다 훌륭하고 간단명료하게 정리된 코드는 자신뿐 아니라 다른 독자가 읽을 때도 굉장히 중요한 것이다 나쁜 코드는 당장의 생산성에는 도움이 될지 몰라도 결국 생산성을 크게 떨어트린다 다른 기업들의 블로그 포스팅을 봤을 때도 많이 본 내용이다 회사 초창기에 마구잡이식..

Cooperation

Clean Code - 추천사

클린 코드를 읽기 시작하면서부터 그저 스쳐 지나가기엔 아쉬운 글들이 많다 느낀 점이나 내용을 간단히 정리하면서 읽어볼 예정 '남에게 설명할 때 더 배운다'라는 걸 최근에 많이 느낌 처음은 LINE 유튜브에서 추천하는 개발자 책으로 알게 되었다 여기저기서 종종 언급되어 읽어보고 싶어 졌음 책을 구매하고 커버부터 느낌이 좋다 특히 저 검은 얼룩이 묻은 부분 보자마자 나도 모르게 뭐 묻었지 하고 손으로 쓸어 넘기게 되더라... 본능적으로 Cleaning을 하고 싶게 함 개발자라면 설계나 코딩에 관해 자신만의 철학이 있다 나 같은 경우에는 '화려할 필요 없다. 읽기 쉬운 코드를 짜자'인데 사실 말처럼 쉽지는 않다 코드 리뷰를 하다 보면 여러 가지 충고를 받기 마련이고 리뷰에서 상사들에게 들은 내용이 책의 추천사..

Inspiration

근황

여유가 생겼지만 바쁘게 지내고 있습니다 근황 정리하면서 스스로에게 Inspiration을 줄 수 있으면 좋을 거 같아서 정리해봅니다 1. 블로그 포스팅 일주일에 적어도 2개는 포스팅 기존글도 다듬는 중 2. [Clean Code : 애자일 소프트웨어 장인 정신] 독서 예전부터 여기저기서 많이 눈에 띄는 책. 어제 구매했고 현재 읽어보는 중 초판은 2013년이며 많은 개발자들이 추천하는 유명한 도서 종종 포스팅할 예정 3. 블록 체인 코딩 최근 규격 스터디 때문에 커밋할 게 없어서 혼자서 간단히 코인을 구현하는 중 사전 지식이 많지 않기 때문에 글을 많이 찾아볼 듯 golang으로 개발할 예정 4. 블로그 읽기 네이버, 카카오, 라인, 우아한 형제 등 다양한 곳에서 블로그 포스팅을 해주고 있음 도움이 되는..

Cooperation

개발 문화

스스로에게 개발자로서 요구하는 자세가 있습니다 원하는 환경도 있구요(유토피아) 존재 안 할 수도 특히 코드 리뷰나 페어로 개발을 하다 보면 자연스레 개발 이상향이 그려집니다 - 이런 곳에서 일하고 싶다 - 이런 사람들과 일하고 싶다 이런 생각은 '이런 개발자가 되어야겠다'로 이어집니다 만나본 개발자 유형 세상은 넓고 다양한 사람이 존재합니다 개발자도 당연히 다양한 개발자가 존재하고 이제껏 만나본 개발자들도 참으로 다양했습니다 [만나본 개발자 유형] 더보기 /* - 외향적인 개발자(인싸형) - Geek / Nerd형 개발자 - 특정 개발언어을 특히 좋아하는 개발자 - 한 분야에 아주 깊게 투자하려는 개발자 - 트렌드에 예민한 개발자 / 관심 없는 개발자 - 꼼꼼한 개발자 / 실수가 잦은 개발자 - 그림으로..

Cloud Native

Microservice Architecture(MSA)

오늘은 Cloud Native의 중요한 요소 중 하나인 Microservice Architecture에 대해 알아보겠습니다 핵심 용어 더보기 Microservice Service Monolithic Microservice라는 건 마이크로 하게 작은 서비스를 의미하는 것 같죠 서비스라는 것을 한번 생각해봅시다 흔히 우리가 하는 개발은 앱을 통해 사용자들에게 어떤 '서비스'를 제공하기 위해서입니다 간단한 예로 보자면 - 카카오톡 : 메신저 서비스 - 인스타그램 : SNS 서비스 - 스노우 : 카메라 필터 & 편집 서비스 - 각종 은행 : 금융 서비스 초창기의 어플들은 한두 가지의 서비스를 목표로 개발되었으나 점차 사용자가 많아지면서 몸집이 많이 커지고 더 다양한 서비스를 제공하고 있죠? 즉, 서비스는 사용자..

Cooperation

특수 기호 명칭/이름

가끔 특수 기호를 말로 전달해야 할 상황이 생깁니다 말하고자 하는 기호의 명칭이 확실해야 의사소통이 원활하죠 물론 한국에선 상대방도 모르는 경우가 많지만... 적어도 오해의 소지는 없도록 자주 쓰는 문자는 확실히 알아두면 활용할 수 있겠습니다! 문자 영 문 한 글 또 다른 영문표기 Space (스페이스) 공백, 공란 blank, ghost& ~ Tilde (틸드) 물결(표) ` Grave (그레이브) 강세표 accent, back quote ! Exclamation point (익스클레메이션 포인트) 느낌표 exclamation mark, wow, hey @ At Sign (앳사인 또는 앳) 골뱅이 at, each, rose # Crosshatch (크로스해치) 우물표시 pound, number, sha..

Go

Go/Golang Long Time Performance Test - Memory Leak 해결 과정

장시간 서비스하는 Production 환경의 프로그램에서 특히 유의해야 하는 녀석들이 있죠 이번에 얘기할 녀석은 힘순찐 메모리 누수(Memory Leak)입니다 처음엔 안 보이다가 한창 돌아가면 나타나는 녀석이죠 처음부터 잘 개발했으면 문제가 없겠지만 개발이란 게 그렇지 만만하진 않습니다 장시간 성능 시험을 돌리면서 발생한 Memory Leak을 발견하고 해결한 과정을 가볍게 공유합니다:) 상황 회사에서 SKB 관련 상용 서비스 GW 개발을 하고 있습니다 전부 C로 설계된 상황에 AS 프로세스와 gRPC로 연동하는 gRPC Interface 블럭만 Go로 설계되어 제가 담당하게 되었습니다 선행과제 개발을 하면서 k8s나 Go에 대한 호감이 MAX에 이를 쯤이라 재밌는 기회라 생각했지만 Production..

Inspiration

POSTING RULE CHANGE

이틀 동안 포스팅하면서 고민을 해봤습니다 초창기 포스팅은 개인적으로 정리한 내용을 가볍게 작성을 하려 했는데 하다보니 점점 퀄리티를 높이고 싶다는 생각이 드네요 거기다 개발자의 습관인지 현재 두 개의 포스팅을 해놓고 다시 읽어보고 수정하고 내용을 다듬고 보강을 계속합니다 (왜 여기서도 개발을 하는거 같지) 확인해보니 수정하는 시간이 더 많네요 :D 아무튼 이거저거 하느라 바쁜데, 심지어는 업무하면서도 수정을 하고 싶어지는 자신을 막기 위해 포스팅을 다듬는 시간을 포함해서 포스팅 계획을 여유있게 잡는 게 좋겠다고 결론을 지었습니다 개발이든 포스팅이든 유연하게 가고 싶습니다 결론) 가벼운 포스팅을 1 Day 1 Post하려 했으나 원하는 수준의 포스팅을 쓰기엔 무리가 있다 싶어서 최소 1 Week 2 Pos..

Framework & Tool

gRPC

이번 포스팅은 gRPC입니다. 요즘 업무에 자주 쓰고 있어서 가볍게 정리해두려 합니다. [핵심 용어] 더보기 /* - RPC - IDL(Interface Definition Language) - gRPC - protobuf(프로토버프/프로토콜버퍼) - microservice(마이크로서비스) - monolithic(모놀리식) */ RPC는 Remote Procedure Call 뜻 그대로 프로세스에서 다른 프로세스의 메소드(프로시져)를 원격으로 호출하는 기법입니다 gRPC는 google에서 만든 RPC입니다 먼저 함수명, 파라미터, 반환 값 세 가지를 IDL(Interface Definition Language)로 정의해요 [IDL 설명] 더보기 /* IDL은 뜻 그대로 인터페이스를 정의하는 언어예요 서로..

Cloud Native

Cloud Native

항상 블로그를 시작하면 Cloud Native에 대해 정리해보고 싶었습니다 할 말이 굉장히 많은 내용이지만 첫 포스팅이니 가볍게 정리해보겠습니다 [핵심 용어] 더보기 /* - Infrastructure/Infra(인프라) - On-premise(온프레미스) - Cloud(클라우드) - Cloud Native(클라우드 네이티브) - Virtual-Machine(가상머신) - Container(컨테이너) - CI/CD - Microservice - DevOps */ 원하는 Software가 동작하기 위해서는 해당 Software를 구동할 장비, 네트워크 환경 등 고려할 것이 많습니다 그러한 시스템 동작에 기반이 되는 환경을 Infrastructure(Infra, 인프라)라고 합니다 기존에 갖고 있는 물리적인..

Inspiration

시작

늦었다 생각할때라도 했어야했다 좋아하는 말입니다 실제로 자주 하는 짓이기도 하구요 그래서 시작합니다 미루고 미루다 만든 블로그 제가 맛본 개발의 쓴맛들 달달한 꿀팁들 대신 맛보고 알려주는 기미상궁형 개발자 되새김질도 되고 더 공부하게되고 재밌네요 보는사람 없더라도 혼자 정리한다는 마음으로 시작합니다 시작 목표 - 그간 정리해둔 개발 노트 재정리 - 일거리라 생각하지말고 스스로 재미있게 가벼운 수준으로 - 부담없게 5-10분 분량의 달달한 팁/정보 - 잡설 줄이고, 내용은 간단 명료하게 - 글쓰는데 부담갖지 말자 - 1 Day 1 Commit도 유지

Syntax Sugar
{ DEV SWEETER ; }