반응형
Golang Convention : Error wrapping vs Opaque error
백엔드/Golang2024. 11. 17. 21:41Golang Convention : Error wrapping vs Opaque error

Golang Convention에서 Error Wrapping과 Opaque Error처리가 서로 충돌이 있는것 같아어떻게 정리를 해야할지를 추가로 정리해봅니다. 1. Opaque Error (불투명한 오류)"Opaque Error"는 오류 발생 지점에 대한 구체적인 정보가 부족하고, 오직 메시지 문자열만으로 전달되는 형태의 오류를 의미합니다. 이는 오류의 원인을 파악하기 어렵게 하며, 코드 디버깅을 어렵게 만드는 주요 원인입니다. 이 관점에서 살펴보면, 원래 예시 코드에서 문제가 되는 부분은 오류의 맥락이 포함되지 않아서, 오류가 어디에서 발생했는지를 쉽게 알 수 없다는 것입니다.func AuthenticateRequest(r *Request) error { err := authenticate(r..

Golang Convention 중 논의를 해야 할 사항 정리
백엔드/Golang2024. 11. 10. 12:08Golang Convention 중 논의를 해야 할 사항 정리

1. 에러 핸들링Error는 체크하지 않고 gracefully handle한다.Golang에서는 아래와 같이 작성 하는게 자연스러워 보이지만 사실은 불필요합니다.Badfunc AuthenticateRequest(r *Request) error { err := authenticate(r.User) if err != nil { return err } return nil}Goodreturn authenticate(r.User) 오류에 주석을 달아라 (Annotating Errors)github.com/pkg/errors 패키지는 과거에 널리 사용되었지만, Go 1.13부터는 Go 표준 라이브러리에 errors 패키지에 기본적으로 오류..

Golang 에러 처리  - (1) Google Guide/Best Practice 찾아보기
백엔드/Golang2024. 9. 7. 19:04Golang 에러 처리 - (1) Google Guide/Best Practice 찾아보기

배경현재 프로젝트에서 Error 처리를 일관적이지 못한 방법으로 하고 있다는 생각이 들어서 글을 쓰게 되었습니다.작년의 Golang 초기 사용 시점에는 모두 언어에 대한 이해도가 낮고 MVP 완성을 위해 빠르게 코드를 짰어야 해서 전체적으로 코드를 짠 사람의 코딩 Convention을 따라가게 되었습니다.그때의 Error handling 사용의 형태를 유사하게 활용해 오다 보니 현재까지 같은 문제를 가지고 있는 Error handling을 가져오게 된 것이죠. 그래서 우리의 Error handling은 같은 문제들을 가지고 있습니다. 현재 프로젝트의 에러 처리 방식의 문제점1. 에러 로그의 일관성이 부족합니다.어떤 에러 로그는 최상위 API 실행시에만 몰아서 출력되고,어떤 에러 로그는 최상위 API 실행..

Golang zero-value 알아보기
백엔드/Golang2024. 7. 9. 21:01Golang zero-value 알아보기

Golang에서 zero-value는 변수의 타입에 따라서 할당되는 기본 초기값을 의미합니다.Go에서 변수 선언시 초기값을 지정하지 않으면 해당 변수는 그 타입의 zero-value로 자동 초기화됩니다.왜냐면 go는 empty, null 혹은 undefined의 개념이 없기 때문이죠 아래와 같은 이유로 Zero-value는 중요합니다. 예상 가능한 기본값: 초깃값을 명시하지 않아도 프로그램의 동작이 예측 가능하게 합니다.명시적인 초기화 코드 감소: 명시적인 초기화를 생략할 수 있어 코드가 더 간결해집니다.  The Go Programming Language Specification - The Go Programming Language Golang 타입별 Zero-value  booleanfalsenume..

[번역] Golang vs Spring boot native 성능 비교해보기 - Hello world 케이스
백엔드/Golang2024. 7. 8. 23:42[번역] Golang vs Spring boot native 성능 비교해보기 - Hello world 케이스

Spring Boot 3.2 Native로 실행 와 Golang의 Gin, Fiber & Echo 사이의 성능을 비교해보려고 합니다.(Java Spring Boot vs Golang Gin vs Golang Fiber vs Golang Echo) 테스트 환경모든 테스트들은 Macbook Pro M2와 16GB RAM & 8+4 CPU cores를 썼습니다.load tester는 Bombardier를 사용했습니다.codesenberg/bombardier: Fast cross-platform HTTP benchmarking tool written in Go (github.com) GitHub - codesenberg/bombardier: Fast cross-platform HTTP benchmarking t..

Golang init() 사용법 및 주의 사항
백엔드/Golang2024. 5. 16. 23:48Golang init() 사용법 및 주의 사항

Golang Init의 기본 순서Init 함수는 기본적으로 Application의 상태를 정의하기 위해서 사용합니다.어떠한 Argument를 받거나 return 값을 제공하지도 않습니다.패키지가 처음 불려지면 그때 모든 상수나 변수가 계산되고 그 이후에 Init() 함수가 실행됩니다. 간략하게는 아래 순서로 실행됩니다.import --> const --> var --> init() 조금 더 자세히 설명하자면 아래와 같습니다.만약 패키지가 다른 패키지를 import하면, import한 패키지의 init() 및 initialize 과정이 먼저 실행됩니다.현재 패키지의 constant가 initialize 됩니다.현재 패키지의 variable이 initialize 됩니다.최종적으로 현재 피키지의 init() ..

우리 프로젝트에서 Golang DB 처리 시에 GORM을 사용 해야 하는 이유
백엔드/Golang2024. 5. 1. 11:37우리 프로젝트에서 Golang DB 처리 시에 GORM을 사용 해야 하는 이유

제가 현재 회사에서 개발중인 제품에서 사용하는 Language는 Golang입니다.기존에는 제품에 DB를 도입할 필요가 없었다가 최근에 DB 도입을 하게 되었습니다.DB를 개발자들이 잘 다루기 위한 방법이 필요했는데요. 그 중 찾아낸게 바로 GORM 이었습니다. GORM을 쓰는 근거와 그것을 정리하는 Architecture Decision Record를 작성을 해보려고합니다. GORM 사용시의 장점1. 개발 효율성 관점 1) 테이블 Creation SQL관리가 필요없습니다. Go의 구조체를 테이블로 관리하면 됩니다. 우리 프로젝트에서는 각 서버에 DB를 직접 생성해서 작업을 하기때문에 아래와 같은 Table Creation SQL 코드도 관리해야하고 이를 Golang의 Type들과 datatype syn..

Typescript vs Javascript 간단 비교 - Typescript를 중심으로
백엔드/NodeJS | Typescript2024. 3. 6. 22:32Typescript vs Javascript 간단 비교 - Typescript를 중심으로

Typescript vs Javascript 비교하기 1. Typescript는 Javascript의 모든 기능을 제공합니다. (Super set) 2. Typescript는 Javascript에서 더 많은 기능을 지원합니다. Typescript라는 이름에 걸맞게 주로 type과 관련된 개선점이 주요 추가 기능입니다. 2.1 변수에 타입을 지정할 수 있습니다. (Javascript는 할 수 없습니다.) weight와 height라는 변수를 선언할때 각 변수를 number로 타입을 정의했습니다. let weight : number = 80; let height : number = 176; 2.2 타입을 새로 만들 수 있습니다. 1. Centimeter라는 number에 해당하는 type을 정의하고 2. h..

Typescript - TypeORM 적용
백엔드/NodeJS | Typescript2023. 12. 25. 11:22Typescript - TypeORM 적용

필요 배경 지식 Typescript Prerequisite TypeORM 라이브러리 TypeORM이란? TypeORM은 TypeScript와 JavaScript (ES7, ES6, ES5)를 위한 ORM(Object-Relational Mapping) 라이브러리입니다. 이 라이브러리는 SQL 데이터베이스를 객체지향적으로 조작할 수 있게 해주며, Node.js 환경에서 주로 사용됩니다. 결국 TypeORM은 DB 쿼리문에 대한 직접적인 조작없이 객체지향적으로 DB 조작을 할 수 있게 도와주는 라이브러리다. 그래서 이를 잘 활용하면 코드의 가독성을 올리고 유지보수를 쉽게 할 수 있다는 장점이 생긴다. TypeORM의 권장 디렉토리 구조 Entity Layer - 데이터 베이스 테이블을 클래스로 표현 엔티티는..

Typescript - TypeORM 사용해서 DB 쿼리하기
백엔드/NodeJS | Typescript2023. 12. 13. 22:27Typescript - TypeORM 사용해서 DB 쿼리하기

이전 내용 관련 참고자료 2023.12.09 - [프로젝트/Github Rest API로 프로젝트 관리하기] - Repository 정보 크롤링 및 알림 서비스 구현 요구사항 정리하기 2023.11.26 - [백엔드/Typescript] - Typescript 컴파일 설정 - tsconfig.json Prerequisite Typescript 기본 엔트리 파일 컴파일 및 실행 방법 Typescript - Postgresql 연결 사용법 - pg 라이브러리 설치하기 PostgreSQL DB 스키마 작성 방법 1. TypeORM 및 Reflect-metadata 설치 npm install typeorm --save npm install reflect-metadata --save npm install [DAT..

반응형
image