본문 바로가기

go11

Go 코딩 컨벤션 프로젝트를 진행할 때 아래와 같은 코딩 컨벤션을 지키려 합니다.  원본 출처 : 뱅크샐러드 Go 코딩 컨벤션 | 뱅크샐러드 (banksalad.com)# 1, Don't Panic프로덕션 환경에서 서버가 올바르게 시작되고 요청을 처리할 수 있는 상태에선 절대 panic을 사용하지 않는다. 또한 프로세스를 종료시키는 fatal도 마찬가지로 사용하지 않는다. panic은 다른 언어의 try-catch 문법처럼 예외처리를 위한 것이 아니며, 서버 애플리케이션 초기화 시점에만 빠른 실패를 위해 사용한다. 의도치 않은 panic에 대비해 서버 인터셉터 혹은 미들웨어로 recovery 체인을 추가하는 것을 권장한다.  (e.g. echo의 미들웨어, grpc 인터셉터)  # 2, Panic을 낼 수 있는 함수는 m.. 2024. 7. 11.
Go와 객체지향 프로그래밍 객체지향에 준하는 프로그래밍 언어의 조건객체지향에 준하는 프로그래밍 언어의 조건이란 무엇을 의미할까? 다양한 주장이 있지만 " Go 언어로 배우는 웹 애플리케이션 개발 "에서는 다음 3대 요소를 만족하는 것이 "객체지향에 준하는 프로그래밍 언어"라고 정의한다.캡슐화(encapsulation)다형성(polymorphism)상속(inheritance)먼저 Go 언어는 객체지향 언어일까? Go 공식 사이트에서는 'Yes'면서 'No'이기도 하다는 애매한 답변을 하는데, 이는 Go가 객체지향의 3대 요소를 일부만 도입하고 있기 때문이다.  Go에서는 서브클래스화 사용 불가많은 사람들이 객체지향 언어에 기대하는 것 중 하나가 서브클래스(subclassing) 일 것이다. 좀 더 쉬운 말로 바꾸자면 클래스(단일)의.. 2024. 7. 10.
미들웨어 패턴 여러 엔드포인트를 작성하다 보면 동일한 처리를 반복적으로 사용하는 경우가 있다. 또한, 모니터링 도구나 접근 로그 출력 등 투과적으로 접근해야 하는 처리도 있다. 이런 공통 처리를 작성하는 패턴으로 미들웨어 패턴이 있다. Go의 HTTP 서버에서도 미들웨어 패턴이 폭넓게 사용된다.  미들웨어를 만드는 법Go로 애플리케이션이나 라이브러리를 설계하고 구현할 때는 표준 패키지의 시그니처나 인터페이스에 맞추어 구현할 때가 많다. 미들웨어 패턴을 구현할 때도 마찬가지다. Go의 미들웨어 패턴에서는 시그니처를 충족하도록 구현하는 것이 일반적이다.  이런 시그니처는 다음과 같은 이유로 재사용하기 좋다.http.Handler 인터페이스를 충족하는 HTTP 핸들러 구현에 적용할 수 있다.같은 패턴의 미들웨어 구현을 통해.. 2024. 7. 6.
Go와 의존성 주입 의존관계 역전 원칙 (Dependency Inversion Principle, DIP)문제를 작은 단위로 분할해서 해결책을 찾아내는 것은 소프트웨어 엔지니어링의 기본적인 접근법 중 하나다. 여기서 중요한 것은 분할한 문제들 간에 연결 고리를 약하게 하는 것이다. 각 문제의 의존 관계를 제거하고 분할된 작은 문제들을 분담해서 병렬로 문제를 해결할 수 있다. 상위 개념의 문제를 하위 개념의 문제와 독립해서 해결하기 위한 방법으로, SOLID 원칙 중 하나인 의존관계 역전 원칙(Dependency Inversion Principle, DIP)이 있다. 클린 소프트웨어에서는 다음과 같이 정의한다.상위 수준의 모듈은 하위 수준의 모듈에 의존해서는 안 된다. 둘 모두 추상화에 의존해야 한다. 추상화는 상세 구현에 .. 2024. 7. 5.
Heap Heap Data Structure  Heap은 각 상위 노드와 해당 하위 노드 사이에 고정된 관계가 있는 트리 기반 데이터 구조다. 최대 Heap의 경우 이는 상위 노드의 값이 해당 하위 노드보다 크거나 같아야 함을 의미한다. 이는 루트 노드가 항상 최댓값을 갖는다는 것을 의미한다. 최소 Heap의 경우 루트 노드는 항상 가장 작은 값을 갖는다.  Heap을 왜 사용하는가 힙을 유용하게 만드는 몇 가지 주요 속성은 다음과 같다.주어진 "n" 값 집합의 최댓값 또는 최솟값을 O(1) 시간 내에 찾을 수 있다. 배열 기반 목록을 사용하는 경우 일반적으로 O(n) 시간이 걸린다.값을 추가하고 제거하는 데는 O(log(n)) 시간이 걸리며, 최대 또는 최소 힙 속성을 유지한다. 이는 힙 정렬을 사용하여 항목 .. 2024. 6. 26.