본문 바로가기
반응형

golang31

[golang] go context, go-cache를 활용한 캐시 서버 만들기 이번게시글에서는 go-context와 go-cache를 활용한 간단한 캐시서버를 구축하는 예제입니다. 소스코드는 github.com/jaeho310/proxy-tut 에서 확인할 수 있습니다. GitHub - jaeho310/proxy-tut Contribute to jaeho310/proxy-tut development by creating an account on GitHub. github.com 1. 캐시 서버의 기능 (1). 클라이언트에게 요청이 오면 캐시되었는지 확인한후, 캐시되어있다면 본서버로 요청을 보내지 않고 데이터를 내려줍니다. (2). 동일한 요청이 여러개 들어올 시(본서버에서 응답을 받기전이라 캐시되지 않은경우) 동일한 요청은 본서버에 한번만 보내고 나머지 요청은 블락시키고 응답을 받.. 2022. 1. 13.
[golang] golang profile 적용하기(viper 예제) 이번 게시글에서는 viper를 사용하여 go 애플리케이션 profile을 설정하는 방법에 대해 정리합니다. 1. profile이란? 애플리케이션을 개발하다 보면 애플리케이션의 설정을 유동적으로 관리 하는 경우가 있습니다. 예를 들면 로컬환경, 테스트용 베타서버, 운영서버는 DB, log setting 등이 다릅니다. 모든것을 환경변수로 관리하고 컨테이너 환경의 환경변수를 관리하는 파일을 따로 만드는 경우도 있지만 profile파일을 도입하면 보다 편리하게 설정을 관리할 수 있습니다. 2. 프로젝트 구조(https://github.com/jaeho310/golang-profile-viper) . |-- configuration | `-- config_model.go |-- go.mod |-- go.sum .. 2021. 12. 28.
[golang] go-redis, redis-mock 사용법 및 예제(suite 사용법) 이번 게시글에서는 go-redis 패키지를 사용하는 컴포넌트 구축 방법을 정리하고 유닛테스트(행위기반 테스트)와, 통합테스트(상태기반 테스트)방식의 테스트 코드 작성법(suite, mock사용)을 예제로 정리합니다. 1. redis란 key, value의 비정형 데이터를 저장해놓는 nosql입니다. RDB는 parser, 전처리기, 옵티마이저를 타고 디스크까지 접근하므로 느리지만 redis(remote dictionary server)는 서버의 메모리에서 동작하며 조회 정책을 기본적으로 해시테이블방식을 사용하므로(시간복잡도가 O(1)) 빠릅니다. 대신 정규화가 불가능해 RDB에 비해 확장에 불리합니다. 만료시간이 있는 데이터를 저장하거나, 확장될 여지가 없는 데이터셋을 저장할때 주로 사용됩니다. (red.. 2021. 12. 13.
[golang] go context의 활용2(go context사용법 및 예제2) 저번 게시글에서는 context를 활용하여 불필요한 트래픽을 제어하고, 클라이언트에게 즉시 리턴을 내려주는 방법에 대해 정리했습니다. [golang] go context의 활용1(go context사용법 및 예제1) 이번 게시글에서는 go context를 활용하는 방법을 정리 합니다. 1. go context란 golang을 사용하다보면, 메서드를 호출할때 context를 아규먼트로 요구하는 경우가 종종 있습니다. context를 아규먼트로 넘 frozenpond.tistory.com 이번 게시글에서는 컨텍스트, 고루틴, 채널을 활용하여 비동기 큐를 만드는 예제입니다. 1. 요구사항 (1). 비동기 큐에 각 자릿수의 합을 구해달라는 요청을 쌓을수 있어야한다.(Producer) (2). 요청을 FIFO형식.. 2021. 12. 9.
[golang] go context의 활용1(go context사용법 및 예제1) 이번 게시글에서는 go context를 활용 예제를 정리합니다. 1. go context란 golang을 사용하다보면, 메서드를 호출할때 context를 아규먼트로 요구하는 경우가 종종 있습니다. context를 아규먼트로 넘겨서 사용할때, 주의해야 할 점과 직접 context를 활용한 개발을 할때 어떻게 활용하는지 간단한 예제를 만들어봤습니다. go context가 처음이라면 해당 게시글에 어떤 기능들이 있는지 간단히 정리해놨습니다. [golang] golang 컨텍스트(context)란 이번 게시글에서는 golang의 context에 대해 정리합니다. 1. context란 운영체제를 공부할때 들었던 컨텍스트 스위칭(문맥교환으로 외웠던)에 사용된 용어 입니다. 고랭의 context도 비슷합니다. 상태나.. 2021. 12. 7.
[golang] go context란 이번 게시글에서는 golang의 context에 대해 정리합니다. 1. context란 운영체제를 공부할때 들었던 컨텍스트 스위칭(문맥교환으로 외웠던)에 사용된 용어 입니다. 고랭의 context도 비슷합니다. conext패키지는 고루틴의 문맥관리(상태나 흐름을 관리해주기 위한)를 위한 패키지입니다. 고루틴 로직에 결함이 생겨 끝나지 않는 무한루프가 생기는걸 방지하거나, 진행되는 문맥을 강제로 종료시키거나, 해당 문맥이 더이상 유효하지 않을때 불필요한 로직을 진행시키지 않게 하는 등 문맥을 관리하는데 사용됩니다. 2. context 인터페이스 type Context interface { Deadline() (deadline time.Time, ok bool) Done() 2021. 12. 6.
[golang] golang 채널(channel) 사용법, 사용예제 이번 게시글에서는 channel 에 대해 정리합니다. 1. channel이란 일반적인 프로그래밍언어의 스레드는 전역화된 변수나, heap에 메모리를 잡거나 콜백을 제공하는 라이브러리를 이용해서 동기화작업 및 데이터를 공유하는 경우가 많습니다. 그러나 고 언어는 일반적인 스레드가 아닌 고루틴을 사용하며 channel이라는 고루틴끼리의 통로를 이용하여 동기화작업이나 데이터를 교환합니다. 고루틴의 channel은 일반적인 동기화 방식보다 저렴하며, 스레드에 안전하다는 장점이 있습니다. 2. channel을 통한 동기화 및 데이터교환 package main import ( "fmt" "time" ) func main() { ch := make(chan string) go doSomething(ch) result.. 2021. 12. 6.
[golang] 고루틴(go routine)이란 이번 게시글에서는 고루틴에 대해 정리합니다. 1. 고루틴이란 고루틴은 동시에 여러 로직을 병렬적으로 진행시키고 싶을때 사용합니다. 일반적인 프로그래밍 언어에서 사용하는 스레드(그린스레드)들은 생성하는데 1MB가 필요하고, 커널레벨 스레드와 연결되어 운영체제한테 스레드를 위임해 스케줄링 받아 돌아가는 방식이지만 고루틴은 2KB만 필요하며 커널에서 직접 스케줄링 받지 않고 고 스케줄러가 직접 스케줄링해주므로 훨씬 가볍고 빠릅니다. 사용법은 메서드 앞에 go 라는 키워드만 붙여주면 됩니다. 2. 예제 package main import ( "fmt" "runtime" "time" ) func main() { // 현재 main문을 실행시키는 고루틴인 1이 출력됩니다. fmt.Println("Goroutines.. 2021. 11. 15.
[golang] golang defer 사용법 및 예제(golang의 catch는 defer안에서) 이번 게시글에서는 golang의 defer에 대해 정리하겠습니다. defer는 사용하여 패닉을 복구, lock unlock, 스트림닫기, 채널닫기, context 종료 등 여러곳에서 사용됩니다. defer의 사용법과 defer를 활용해 panic을 제어하는 예제입니다. 1. 지연실행 defer는 지연실행을 요청하는 키워드입니다. 스코프가 끝난 이후 defer키워드가 붙은 메서드를 실행합니다. package main import ( "fmt" ) func main() { defer func() { fmt.Println("스코프가 끝난이후 실행") }() fmt.Println("메인스코프 종료") } $ go run main.go 메인스코프 종료 스코프가 끝난이후 실행 2. lock package main .. 2021. 11. 15.
반응형