본문 바로가기
반응형

golang32

[golang] golang reverse proxy 예제 일반적으로 proxy기능이 필요한 경우 nginx, haproxy 등 proxy용 솔루션을 통해 구축하지만 내부적으로 추가 동작이 필요한 경우 직접 proxy 서버를 개발해야 됩니다. 이번 게시글에서는 golang을 사용해 reverse proxy를 구축하는 방법에 대해 정리합니다. 저는 http request를 처리하기위해 echo framework를 사용하는것을 선호하지만, 이번 게시글에서는 따로 서드파티 라이브러리의 기능이필요하지 않으므로 standard library인 mux를 이용한 프록시 서버를 구축합니다. 1. 소스코드 소스코드는 아래 github repo에서 확인할 수 있습니다. GitHub - jaeho310/go-std-proxy Contribute to jaeho310/go-std-p.. 2023. 4. 6.
[golang] echo framework와 jwt 이번 게시글에서는 golang echo framework에 jwt 인증방식을 적용시키는 방법에 대해 정리합니다.먼저 jwt에 대해 간단하게 알아보고 기성 인증방식인 세션방식과 비교한 후 소스코드를 정리합니다.1. JWT란JWT(Json Web Token)란 cliam 기반의 web token으로 토큰자체에 정보를 포함해 인증 인가를 처리하는데 사용합니다. 2. 기성 인증방식(세션)과의 차이기성 인증방식은 서버가 한대라면 세션에 사용자 정보를 담고 보관하다가 인증이 필요한 요청에 세션정보를 확인합니다.서버가 여러대라면 시간복잡도가 좋은 디비(redis)를 뒤져 세션정보를 찾아 인증하는 형식입니다. 그러나 jwt는 secret키를 알고있으면 어느 서버에서나 인증, 인가를 수행할 수 있는 state less .. 2023. 1. 21.
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(마무리) 이번 게시글에서는 gorm을 사용하여 graphql서버의 전반적인 아키텍쳐를 구축하면 graphql 서버 구축을 마무리합니다. 소스코드는 github 링크에서 확인하실 수 있습니다(main 브랜치) GitHub - jaeho310/golang-graphql-sample: golang graphql sample with gqlgen golang graphql sample with gqlgen. Contribute to jaeho310/golang-graphql-sample development by creating an account on GitHub. github.com 1. 패키지 구조 ./ ├── generated │ └── generated.go ├── go.mod ├── go.sum ├── gq.. 2022. 12. 10.
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(3) 이번 게시글에서는 resolver 작성방법과 데이터를 질의하는 방법에 대해 정리합니다. 소스코드는 아래의 github 레포에서 확인할 수 있습니다(example-2 브랜치) GitHub - jaeho310/golang-graphql-sample Contribute to jaeho310/golang-graphql-sample development by creating an account on GitHub. github.com 1. 패키지 구조 . | go.mod | go.sum | gqlgen.yml | main.go | tools.go | +---generated | generated.go | +---graphql | user.graphql | ㄴ---resolver | resolver.go | user.. 2022. 12. 8.
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(2) 이번 게시글에서는 gqlgen 사용법에 대해서 정리합니다. 소스코드는 아래의 github 레포(example-1 branch)에서 확인하실 수 있습니다. GitHub - jaeho310/golang-graphql-sample Contribute to jaeho310/golang-graphql-sample development by creating an account on GitHub. github.com 1. 패키지 구조 . | go.mod | go.sum | gqlgen.yml | main.go | tools.go | +---generated | generated.go | +---graphql | user.graphql | ㄴ---resolver | resolver.go | user.resolvers... 2022. 12. 7.
[golang] gqlgen을 사용하여 golang graphql 서버 구축하기(1) 이번 게시글부터 graphql에 대해 정리하며 gqlgen을 사용하여 golang graphql 서버를 구축하는 예제를 만들어볼 예정입니다.(gqlgen, gorm, sqlite3 사용) 소스코드는 아래의 github 레포에서 확인하실 수 있습니다. GitHub - jaeho310/golang-graphql-sample Contribute to jaeho310/golang-graphql-sample development by creating an account on GitHub. github.com 1. graphql이란 페이스북에서 개발한 graphql은 클라이언트에서 쿼리를 통해 원하는 만큼의 데이터를 꺼내갈 수 있도록 만들어진 api로 rest api보다 유연하게 데이터를 제공할 수 있습니다. 2... 2022. 12. 7.
[golang] 맥북 m1칩에서 golang 크로스 컴파일 이슈 해결 방법 m1맥북에서 test db로 sqlite3를 사용하던도중 amd64환경(x86)으로 도커 이미지를 생성해야 되는 상황에 겪은 이슈입니다. 주로 c컴파일러가 없어서 발생하는 문제로 CGO_ENABLED를 조작할때 참고할 수 있습니다. 1. 크로스 컴파일 방법 (1). arm64 $ GOARCH=arm64 GOOS=linux go build -o main (2) amd64 맥북에서 amd64(x86)로 빌드할때 주의하여야 합니다(크로스 컴파일) $ GOARCH=amd64 GOOS=linux go build -o main 2. 에러 로그 및 해결법 Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub -.. 2022. 10. 13.
[golang] H4sIAAAAA??? 얼마전 아래와 같은 문자열을 만난적이 있습니다.(저의 경우는 aws rds관련 로그를 파싱하는 과정에서 만났습니다) H4sIAAAAAAAAAJVVbW/bNhD+K4T7oQngOHx/cZegxualARqnS7wB~~~ 해당 문자열은 얼핏보면 base64로 인코딩 된것 같지만 아닙니다. H4slA로 시작하는 문자열은 base64로 인코딩된 gzip 문자열 입니다. base64로 디코딩 해준 후, gzip파일을 읽어온 것처럼 해석해야 합니다. 1. 소스코드 func main() { data := "H4sIAAAAAAAAAJAA\n" decodeString, _ := base64.StdEncoding.DecodeString(data) r, err := gzip.NewReader(bytes.NewReader(de.. 2022. 9. 19.
[golang] 익명함수를 고루틴으로 실행시킬때의 주의점(순서와 스택) 이번 게시글에서는 익명함수를 고루틴으로 실행시킬때의 주의점을 정리합니다. 1. 소스코드 package main func main() { wg := sync.WaitGroup{} for i := 0; i < 5; i++ { wg.Add(1) go func() { defer wg.Done() time.Sleep(1) fmt.Println("hello ", i) }() } wg.Wait() } 0부터 4까지 고루틴과 waitgroup을 이용해 hello 1 ~ hello 4 까지 출력시킨 후 프로세스를 종료하려 했으나 결과는 0부터 4가 아닌 5가 5번 출력됩니다. 고루틴은 생성되고 실행되기까지 시간이 필요합니다(일반적인 스레드보다는 매우 빠른편) for문은 5까지 i++가 진행되었고 i < 5의 조건에 부합.. 2022. 9. 8.
반응형