Go

Go

[Go] 블록체인 공부가 막막하다면

들어가기에 앞서 오랜만에 글을 쓴다. 왜냐면.. 어쩌다보니 블록체인을 2달 정도 공부하게 되어서 웹 공부를 할 시간이 많이 없었다. 처음에는 분산환경에 관심이 있어서 지원한 외부 활동이였는데.(물론 내가 지원할 때 자세히 안 알아봤다..) 직접 가보니 블록체인을 연구하는 곳이였고 처음에는 어리둥절 했지만 공부하니 안되는 건 없었다. 처음시작하니 당연히 블록체인이 어떻게 연결되고 어떻게 합의, 검증을 하는지 아무 것도 몰랐다. 솔직히 그냥 합의, 검증이라는 단어 자체도 프로그래밍으로 합의, 검증?.. 이라는 생각이 들었다. 보안 쪽을 전공한 것도 아니어서 좀 더 어려웠던 것 같다. 하지만 참고할 문서들은 많았고 오늘은 그중에서 Blockchain_go, 비트코인을 기반으로 작성된 Golang 오픈소스를 소..

Go

[Go] gRPC Basics tutorial 예제 분석

들어가기에 앞서 먼저 본 글은 https://grpc.io/docs/languages/go/basics/ gRPC의 Basics tutorial의 코드 인것을 밝힙니다. gRPC를 한 번 실습해보았지만 공식 Docs를 읽어보지는 않아서 번역기 등등.. 많은 방법을 통해 혼자 번역, 분석, 주석을 단 글 인점을 알아주시길 바라고, 글이 길지만 누군가에겐 도움이 되지 않을까 하는 마음에 올려봅니다.. 먼저 Github에 존재하는 gRPC를 clone해옵니다. 그리고 현재 Basics tutorial이기 때문에 examples/route_guide안에서만 실습을 할 예정입니다. * 전체 코드를 올린 것이 아니라 부분 부분 잘라서 올려 전체 코드랑 같이봐야 이해하기 편할 거 같습니다 * 1. Protocol B..

Go

[Go] Go Clean Architecture란 무엇인가?

들어가기에 앞서 gin-gonic 프레임워크로 공부하던 중 Spring Boot는 MVC패턴으로 코드를 구현하는데 Go에서도 편한 아케텍쳐가 있지 않을까해서 찾아보았고 그중에서 가장 눈에 띄었던 글을 번역한 것입니다. 링크 -> (https://amitshekhar.me/blog/go-backend-clean-architecture) Clean Architecture를 구현했기 때문에 프로젝트에서 생성된 레이어는 다음과 같습니다. 라우터 제어 장치 유스케이스 저장소 도메인 다음은 Go 언어로 작성된 백엔드 프로젝트의 전체 아키텍처입니다. 프로젝트에서 Clean-Architecture를 쓰는 이유는 무엇일까? - 프레임워크 독립적 : 모든 것이 분리되어 있어 필요한 경우 다른패키지로 교체하기가 더 쉽다 e..

Go

[Go] Go의 웹 프레임워크 Gin이란?

들어가기에 앞서 이 글은 gin-gonice의 Docs를 참고해서 쓴 글입니다 당연하게도 Gin은 Go(Golang)로 작성된 웹 프레임워크입니다. 특징은 무엇이 있을까요? 빠르다 , 기수 트리 기반 라우팅, 작은 메모리공간, 예측 가능한 API 성능등의 특징이있습니다 미들웨어 지원 들어오는 HTTP 요청은 일련의 미들웨어와 최종 작업에 의해 처리될 수 있습니다. 예: Logger, Authorization, GZIP 그리고 마지막으로 DB에 메시지를 게시합니다. 충돌 방지 Gin은 Http 요청 중에 발생한 에러를 포착하고 복구할 수 있습니다. 이렇게 하면 서버를 항상 사용가능합니다 JSON 유효성 검사 Gin은 요청에 JSON을 분석하고 검증할 수 있습니다 경로 그룹화 우리가 보내는 url들(Pat..

Go

[Go] Go로 로그 패키지 만들기 (1)

들어가기에 앞서 이 글은 "Go언어를 활용한 분산 서비스 개발"이라는 책을 보고 정리한 내용입니다 먼저 로그 패키지를 만들기 전에 용어를 머리에 집어넣고 가야 편합니다 레코드(Record) : 로그에 정리할 데이터 저장 파일(Store): 레코드를 저장하는 파일 인덱스 파일(Index): 인덱스를 저장하는 파일 세그먼트(Segnment): 저장 파일과 인덱스 파일을 묶어서 말하는 추상적 개념 로그(Log): 모든 세그먼트를 묶어서 말하는 추상적 개념 1. 스토어(Store) 만들기 로그 패키지를 위한 LetsGo/WriteALogPackage/internal/log/stroe.go package log import ( "bufio" "encoding/binary" "os" "sync" ) var ( en..

Go

[Go] golang slice안에 특징

https://ultimate-go-korean.github.io/translation/#go-%EC%96%B8%EC%96%B4%EC%9D%98-%EC%97%AD%ED%95%99%EC%A0%81-%EA%B3%A0%EC%B0%B0language-mechanics The Ultimate Go Study Guide ultimate-go-korean.github.io 이 글은 위 전자책을 보고 정리한 내용입니다 Go에서 Slice를 생성하면 3개의 워드(word) 데이터 구조가 만들어집니다 1번 워드는 배열의 위치를 가르키며 2번 워드는 슬라이스의 길이를 3번 워드는 슬라이스의 총 용량을 보통 배열(Array)에서는 [10]이라면 타입에 따라 4byte(int)*10 = 40byte를 용량, 길이는 10이라고 ..

Go

[Go] Go루틴이란 무엇인가?

들어가기에 앞서 Go를 알아보면서 병행성이 있는 건 알고 있었지만 이렇게 코드로 겪어보니 운영체제 공부할 때가 떠올라 신기하기도 하고 재밌기도 했다 병행성과 병렬성의 차이를 알고 가야될 필요가 있다 (헷갈림..) 병렬성과 병행성의 차이 병렬성은, 실제로 여러 작업을 동시에 수행하는 것을 의미한다. 병행성은, 마치 여러 일을 동시에 하듯이 수행하는 것을 의미한다. Go 루틴이란 Go 루틴의 특징은 OS가 아닌 프로그램에서의 Time _ Sharing 처리이다 프로세스(Process)를 쓰던 스레드(Thread)를 쓰던 오버헤드가 생길 수 밖에 없다 왜냐면 우리가 컴퓨터를 쓸 때 많은 동작을 컴퓨터에게 시키기 때문이다 하나의 명령만 컴퓨터 주는 게 아니라 이것 저것 시키기 때문에 컴퓨터 안에서는 컨텍스트 스..

Go

[Go] struct를 생성하고 error코드 작성하기

오늘은 Go에 있는 strcut 키워드를 사용해보겠습니다 구조체를 만드는데 C랑 크게 다르지 않습니다 package main import "fmt" type person struct { name string age int food []string } func main() { food := []string{"burger", "king"} sleeg := person{"sleeg", 15, food} sleeg = person{name: "sleeg", age: 18, food: food} //sleeg := person{name: "nico", age: 18, food: food} 불가! //이런식으로 코딩할 경우 person{name : "nico", 18, food}는 불가 name: ,age: ,fo..

Sleeg
'Go' 카테고리의 글 목록