Go 22

Go 인증/인가 구현하기: JWT 기반 인증 미들웨어 설계

Gin으로 API 서버를 옮겼다면,다음으로 거의 반드시 등장하는 요구사항이 인증(Authentication)과 인가(Authorization) 다.이번 챕터에서는세션 기반이 아니라 JWT(Json Web Token) 를 사용하는 방식으로인증 흐름이 어떻게 구성되는지Gin 미들웨어로 어떻게 분리하는지실무에서 자주 실수하는 포인트는 무엇인지를 차분하게 정리한다.“완벽한 보안 구현”보다는API 서버에서 반복적으로 쓰이는 기본 설계를 이해하는 게 목표다.인증과 인가는 구분해서 생각해야 한다먼저 용어부터 정리하는 게 좋다.인증(Authentication): 너 누구냐인가(Authorization): 이 작업 해도 되냐JWT는 주로인증 결과를 토큰으로 전달하고이후 요청에서 인가 판단의 근거로 사용하는 데 쓰인다.왜..

backend 2026.02.03

Gin으로 API 서버 옮기기: 기존 net/http 구조 그대로 활용하기

이전 챕터에서net/http + handler / service / repository 구조로 CRUD API를 만들었다면,이번에는 그 구조를 Gin 프레임워크로 옮겨보는 단계다.이번 챕터의 핵심은 분명하다.Gin 문법을 많이 아는 것 ❌기존 구조를 깨지 않고 프레임워크만 교체 ⭕️즉,“Gin을 쓰면 코드 구조가 어떻게 달라지는가”가 아니라**“달라지지 않아야 하는 부분은 무엇인가”**에 초점을 둔다.왜 이 타이밍에 Gin을 보는가Gin은 Go 웹 프레임워크 중 가장 많이 사용된다.하지만 실무에서 Gin을 잘 쓰는 사람들의 공통점은 이거다.Gin 이전에 net/http 흐름을 한 번은 이해했다이 과정을 거치면Gin의 Context가 왜 필요한지미들웨어가 어디에 끼어드는지테스트를 어떻게 해야 하는지가 훨씬..

backend 2026.02.02

Go에서 DB 연동하기: database/sql과 Repository 패턴으로 구조 잡기

CRUD API까지 만들었다면,다음으로 자연스럽게 이어지는 주제는 DB 연동이다.이번 챕터에서는ORM을 바로 쓰지 않고, 표준 라이브러리 database/sql 을 기준으로DB 연결 흐름SQL 실행 방식Repository 패턴으로 구조를 정리하는 방법을 정리한다.목표는“편한 코드”가 아니라실무에서 오래 유지되는 구조를 한 번 만들어보는 것이다.왜 database/sql부터 다뤄야 할까Go에는 GORM 같은 ORM도 있고,sqlx 같은 헬퍼 라이브러리도 있다.그럼에도 불구하고database/sql을 먼저 다뤄보는 이유는 명확하다.모든 DB 라이브러리의 기반쿼리 실행 흐름이 명확함성능 특성을 직접 제어 가능문제가 생겼을 때 디버깅이 쉬움실무에서도“ORM을 쓰더라도 내부 동작은 database/sql”이라는 ..

backend 2026.02.01

Go로 간단한 CRUD API 만들기: REST 구조와 테스트 코드까지 연결하기

이전 챕터에서라우팅 분리와 미들웨어 구조를 잡았다면,이제는 그 위에 실제로 동작하는 CRUD API를 올려볼 차례다.이번 챕터의 목표는 단순하다.REST 형태의 CRUD API를 한 번 직접 만들어보고비즈니스 로직과 HTTP 레이어를 분리하고그 구조를 테스트 코드로 검증해본다“완성도 높은 서비스”보다는실무에서 반복되는 기본 패턴을 익히는 데 초점을 둔다.예제 시나리오: User 관리 API예제로는 가장 단순한 User 리소스를 사용한다.POST /users 사용자 생성GET /users 사용자 목록 조회GET /users/{id} 사용자 단건 조회DB 대신메모리 저장소(in-memory store) 를 사용해구조에만 집중한다.기본 구조 다시 정리cmd/serve..

backend 2026.01.31

Go HTTP 서버 확장하기: 라우팅 분리와 미들웨어 개념 정리

이전 챕터에서 net/http로 가장 단순한 API 서버를 만들었다면,이번에는 그 서버를 **조금 더 “실제 서비스에 가까운 형태”**로 확장해본다.이번 챕터의 핵심은 다음 두 가지다.라우팅 로직을 어떻게 정리하는가공통 로직을 미들웨어 형태로 어떻게 분리하는가프레임워크 없이도구조적으로 정리된 서버 코드를 만드는 게 목표다.왜 라우팅 분리가 필요한가단순 예제에서는 이런 코드가 문제 없어 보인다.http.HandleFunc("/ping", pingHandler)http.HandleFunc("/users", userHandler)http.HandleFunc("/orders", orderHandler)하지만 엔드포인트가 늘어나면 곧 한계가 온다.main 함수가 비대해짐핸들러 간 책임이 섞임테스트가 어려워짐그래서..

backend 2026.01.30

Go로 간단한 HTTP API 서버 만들기: net/http 기반 기본 구조 이해하기

성능 분석까지 다뤘다면, 이제는지금까지 배운 내용을 실제 코드로 엮어보는 단계로 넘어가는 게 자연스럽다.이번 챕터에서는외부 프레임워크 없이 표준 라이브러리 net/http만 사용해서가장 기본적인 HTTP API 서버를 만들어본다.이 글의 목적은“화려한 기능”이 아니라,Go 서버 코드의 기본 뼈대가 어떻게 생겼는지를 이해하는 데 있다.왜 net/http부터 시작하는가Go 웹 개발을 검색하면Gin, Echo 같은 프레임워크가 먼저 등장한다.하지만 실무 기준으로 보면,프레임워크도 결국 net/http 위에 있음기본 구조를 모르면 디버깅이 어려움단순한 서비스에는 표준 라이브러리로도 충분이라는 이유로net/http를 한 번은 직접 써보는 게 좋다.가장 단순한 HTTP 서버package mainimport ( ..

backend 2026.01.27

Go로 간단한 HTTP API 서버 만들기: net/http 기반 기본 구조 이해하기

성능 분석까지 다뤘다면, 이제는지금까지 배운 내용을 실제 코드로 엮어보는 단계로 넘어가는 게 자연스럽다.이번 챕터에서는외부 프레임워크 없이 표준 라이브러리 net/http만 사용해서가장 기본적인 HTTP API 서버를 만들어본다.이 글의 목적은“화려한 기능”이 아니라,Go 서버 코드의 기본 뼈대가 어떻게 생겼는지를 이해하는 데 있다.왜 net/http부터 시작하는가Go 웹 개발을 검색하면Gin, Echo 같은 프레임워크가 먼저 등장한다.하지만 실무 기준으로 보면,프레임워크도 결국 net/http 위에 있음기본 구조를 모르면 디버깅이 어려움단순한 서비스에는 표준 라이브러리로도 충분이라는 이유로net/http를 한 번은 직접 써보는 게 좋다.가장 단순한 HTTP 서버package mainimport ( ..

backend 2026.01.25

Go 성능 분석과 최적화 입문: pprof로 병목 지점 찾는 방법

테스트까지 작성했다면, 이제 한 단계 더 나아가**“이 코드가 얼마나 효율적으로 동작하는가”**를 고민하게 된다.Go는 성능을 직접 튜닝하지 않아도상당히 준수한 결과를 내는 편이지만,트래픽이 늘거나 처리량이 중요해지는 순간막연한 추측이 아니라 근거 있는 분석이 필요해진다.이때 사용하는 도구가 바로 pprof다.이 글에서는pprof가 무엇인지어떤 성능 문제를 볼 수 있는지실무에서 최소한으로 활용하는 방법을 중심으로 정리한다.pprof는 무엇을 해주는 도구인가pprof는 Go에서 제공하는 성능 프로파일링 도구다.코드를 뜯어보거나 로그를 찍지 않아도, 다음 정보를 수집할 수 있다.CPU를 어디서 많이 쓰는지메모리를 어디서 할당하는지goroutine이 왜 늘어나는지어떤 함수가 병목인지중요한 점은**“느린 이유를..

backend 2026.01.24

Go 빌드와 실행, 배포 흐름 정리: 로컬부터 운영까지 한 번에 이해하기

go mod까지 정리했다면, 이제 실제로코드를 어떻게 빌드하고 실행하며, 운영 환경에 배포하는지를 다룰 차례다.Go는 빌드와 배포 과정이 단순한 편이다.하지만 단순하다고 해서 아무 생각 없이 쓰다 보면환경별 차이, 바이너리 관리, 설정 처리에서 다시 헷갈리기 쉽다.이 글에서는Go 빌드와 실행의 기본 흐름환경별 빌드 방식실무에서 자주 사용하는 배포 패턴을 중심으로 정리한다.go run vs go build, 언제 무엇을 쓰나go run: 빠른 실행용go run main.go소스 코드를 즉시 컴파일 후 실행임시 바이너리를 만들어 실행한다실행 파일이 남지 않는다로컬 개발이나 간단한 테스트에는 충분하지만,운영 환경에서는 거의 사용하지 않는다.go build: 실행 파일 생성go build현재 디렉터리 기준으로 ..

backend 2026.01.23

Go 테스트 코드 작성 정리: testing 패키지와 Go식 테스트 문화

로깅과 설정까지 정리했다면, 이제 운영 관점에서 빠질 수 없는 마지막 기본 주제인테스트(testing) 를 다룰 차례다.Go는 테스트를 “특별한 작업”으로 취급하지 않는다.별도의 프레임워크를 강요하지도 않고,테스트 코드 역시 일반 Go 코드의 연장선으로 다룬다.이 글에서는Go의 testing 패키지 기본 사용법테스트 코드 파일 구조실무에서 자주 쓰는 테스트 작성 기준을 중심으로 정리한다.Go 테스트의 기본 철학먼저 Go 테스트의 전제를 하나 짚고 가는 게 좋다.Go 테스트는많이, 자주, 가볍게 작성하는 것을 전제로 한다.테스트 러너 설치 필요 없음IDE 의존도 낮음CI 환경에서도 동일하게 동작덕분에 테스트는“나중에 여유 되면”이 아니라개발 흐름 안에 자연스럽게 포함되기 쉽다.testing 패키지 기본 구..

backend 2026.01.22