일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- go recover
- go panic
- go 패닉
- go channel
- go 마스코트
- gin logger
- go 캐릭터
- git
- go디자인패턴
- go 맥 air
- go 맥
- go 대기그룹
- go air 환경변수
- 고루틴 채널
- go 맥 air 환경변수
- go air
- go clean architecture
- 좀비고루틴
- gin recovery
- go 환경변수
- 개발자
- go middleware
- 신입개발자
- golang gopher
- gin middleware
- gopath 환경변수
- 골랑 고퍼
- go
- air 환경변수
- clean architecture middleware
- Today
- Total
목록전체 글 (92)
뽀미의 개발노트

Middleware는 코드 전체에서 작동하는 공통함수를 따로 빼놓은 부분이라고 생각하면 된다. 웹 백엔드 구현시 Middleware 디렉토리에 CORS, Authentication 을 많이 넣지만, 그건 다른 좋은 예시도 많으므로 이번 포스팅에서는 logger와 recovery만 다루도록 함. 프로젝트에서 gin으로 웹서버를 구현하고 있다. 기존에 middleware를 사용하지 않았을 때는 gin.Default()로 Gin Router를 생성했었고, gin에 디폴트로 내장된 logger와 recover 기능을 이미 사용 중이었다. 이번에 middleware에 따로 logger와 recovery를 구현하여 나만의 미들웨어를 사용하기로 결정함.package mainimport ( "github.com/gi..

Go로 만든 프로젝트를 실행하려면, main.go 파일이 '루트 디렉토리 > cmd' 폴더 안에 있다고 가정할 때go run cmd/main.go해당 명령어를 사용하여 실행해야 한다. 또는 파일을 만들고 싶다면go build cmd/main.go명령어로 파일을 빌드해서 실행해도 된다. (윈도우는 main.exe 파일이, 리눅스/맥은 확장자 없이 main 파일이 생성된다.) 그러나 해당 방법을 쓰면 코드를 수정할 때마다 매번 수동으로 명령어를 다시 입력해야 해서 불편하다.그래서 air라는 유용한 라이브러리(https://github.com/air-verse/air)를 사용하여 코드 수정하면 자동으로 애플리케이션을 재빌드 후 실행하도록 해보겠다. GitHub - air-verse/air: ☁️ Live re..

여지껏 JAVA, Typescript만 써봤던 나는 새로운 언어 'Go'에 대해 공부하는 중이다. 다른 언어들은 문법 배우고 클론 코딩 하면서 바로 사용법부터 익혔는데, Go는 다른 언어들과의 차이점 + Go 만의 특징 등 언어 그 자체를 공부하는 것부터 시작하고 있다. 자바나 타입스크립트는 바로 실무에 뛰어들면서 한거라 사용은 할 줄 알지만 언어적 특성에 대해 따로 공부하지는 않아서 별 생각 없었는데, 고는 언어부터 공부하니 느낌이 확 새롭다. 아주 매력적인 언어 같다. 나는.. 아마도.. 조금.. 고를 '덕질'하고 싶다....!!! 고가 좋은 점은 여러가지이지만, 사실 가장 큰 이유는 '마스코트가 귀여워서'다... 얘 이름은 Gopher 다. 프로그래밍 언어를 겨우 캐릭터 때문에 좋아하게 될줄이야....

Restful API VS gRPC VS graphQL 차이점API 설계(클라이언트 - 서버 통신)에 사용되는 메커니즘. RestFul API 클라이언트가 서버에 작업(POST, GET, PUT, DELETE)을 요청함. http(웹의 표준 통신 프로토콜)을 기반으로 함. 요청에 들어가는 endpoint에 추가 파라미터도 포함될 수 있음. 서버가 응답하면 전체 리소스를 클라이언트에 반환. 클라이언트는 서버에게 단일 REST API 요청을 전송하고, 서버도 단일 응답을 보냄. 클라이언트에서는 작업을 계속하기 전에 서버가 응답할 때까지 기다려야함. 데이터 교환 형식은 일반적으로 JSON임(XML, HTML도 가능함). JSON 단점 : 직렬화(serialize) 해야하고 프로그래밍 언어로 번역해야됨. gRP..

회사에서 이번에 클라우드로 갈아탔다. 비용을 줄이기 위해 AWS가 아닌 GCP를 선택했다. 클라우드는 매번 많이 들어왔고 개념도 어렴풋이는 알고 있었지만 누가 물어보면 설명 못 할것 같아서 이번 기회에 공부해버리기~~!! GCP(Google Cloud Platform)클라우드 컴퓨팅 서비스. AWS, Azure 등 클라우드 산업에서 하는 일이랑 비슷함. 구글의 지원 덕분에 빠르고 강력하게 성장중. 아마존-AWS : 클라우드 점유율 1위네이버 클라우드 : 국내 1위. 국내 공공기관 서비스 하려면 여기서 많이 함.MS-Azure : 클라우드 2위. 게임업체에서 많이 사용Google-GCP : 클라우드 3위. 빅쿼리 등 많은 데이터 처리에 강점. 돈이 덜 나와서 가장 쉽게 접근 가능함.외에도 카카오 클라우드,..

프레임워크Gin-gonic/gingo와 웹 프레임워크 중 가장 오랫동안 개발되어 왔음. 다른 프레임워크보다는 조금 무겁다고 함. Web Application과 Microservices를 만드는데 사용되는 고성능 Framework임. 내장 웹서버, 자동 라우팅, 요청 및 응답을 처리하기 위한 도구, 기능 추가를 위한 미들웨어, 내장 Logger, Template 지원 등 개발을 좀더 빠르고 쉽게 할 수 있도록 많은 기능을 제공함. Go는 쉽게 HTTP 서버를 만들 수 있는 net/http 라이브러리가 내장되어 있지만, 좀 별로임. 그리고 정규표현식이나 패턴을 기준으로 요청 처리하는 라이브러리는 내장되어 있지 않음. 그래서 Gin이 Boilerplate Code를 줄일 수 있게 다양한 함수들을 포함하고 있음..
멀티쓰레드실행 흐름이 여러개인 것. 하나의 CPU가 여러 thread를 빠르게 번갈아가며 실행 -> 마치 동시에 여러 작업을 실행하는 것처럼 보임.그런데 쓰레드를 전환할때 비용이 발생하고, 이를 컨텍스트 스위치라고 함. 멀티쓰레드는 여러 작업을 병렬적으로 처리할 수 있어 효율적이지만, 쓰레드가 CPU 갯수를 넘어서서 지나치게 많아지면 오히려 성능 문제를 일으킬 수 있음. 따라서 멀티쓰레드를 활용할 때는 쓰레드가 CPU 갯수를 넘지 않도록 주의해서 사용해야 함. 고루틴고루틴은 OS의 쓰레드를 ‘이용’하는 경량 쓰레드임. (OS의 쓰레드와는 다른 개념!) 코어 - OS 스레드 - 고루틴 이렇게 연결해서 명령을 실행함. 고루틴 끝나고 제거되면 OS 스레드가 놀게됨. 그럼 대기하고 있던 고루틴이 그 빈자리로 가..

panic, defer, recovergo에는 try-catch문이 없다. 대신 panic을 처리하기 위해 defer/recover 를 사용한다.1. defer함수 리턴하기 직전에 실행LIFO (Last In, First Out) → 호출된 순서와 반대로 실행됨.C#의 finally 처럼 사용됨 (이미 리턴, 예외, panic 등이 일어나도 항상 후처리)2. panic현재 함수 멈추고 defer 모두 실행.상위함수로 전파됨.마지막 → 프로그램 종료3. recoverpanic 잡고 그 값을 가져옴. 프로그램 복구해서 이어지게 함.defer 함수 내에서만 쓸 수 있음.panic이 안 일어나면 recover()가 nil 임. 예시package mainimport "fmt"func main() { fmt.Pr..

네이티브 바이너리 형식 컴파일 언어C#과 Go의 컴파일 차이C#의 소스코드는 IL(Intermediate Language)(중간 단계의 코드)로 컴파일됨. 컴파일된 코드는 CLR(Common Language Runtime)에서 실행됨. CLR은 Virtual Machine처럼 동작하며, JIT(Just-In-Time) 컴파일러를 통해 IL을 네이티브 코드(CPU가 이해할 수 있는 기계어)로 바꿈. IL 코드는 플랫폼 독립적이어서 OS에 구애받지 않지만, 최종적으로는 .NET 런타임(CLR)이 있어야만 실행됨. 클라우드에 배포할 때 .NET 런타임을 포함해야해서 배포가 상대적으로 복잡함. (*.NET 환경에서만 실행된다는 소리는 : .NET Core 또는 .NET5라면 배포할때 .NET 런타임을 포함해서 ..

포인터와 GC(Garbage Collector)Go는 포인터를 제공하면서도, GC를 사용함. 개발자가 포인터로 메모리를 유연하게 관리할 수 있고, 안전하게 자동으로 메모리 관리도 해준다. 포인터 + GC로 성능과 안전성 모두 잡는 것.포인터C/C++ 같은 언어에서는 포인터를 제공함. 포인터를 사용하면 메모리 영역에 직접 접근하여 인스턴스를 조작할 수 있음. 메모리를 중복으로 복사하여 할당하는 경우를 줄이고 불필요한 메모리 낭비를 막을 수 있음. 그러나 잘못 사용하면 메모리 누수, 해제된 메모리 참조, 버그 발생 등의 위험이 있어 메모리 관리를 전적으로 개발자가 책임져야 함. Go에서는 포인터를 제공하지만 포인터 연산은 허용하지 않음. 주로 참조 전달이나 struct 내 메모리 참조를 위해 사용되며, GC..