본문 바로가기 - 테스트 주도 개발 입문 - 시작하기 TDD 돈 객체의 곱셈과 다중 통화 요구사항을 예제로, 실패하는 테스트부터 최소 구현과 중복 제거까지 레드·그린·리팩터 흐름을 단계별로 익힌다.
- 테스트 주도 개발 입문 - 테스트 주도 개발이란? TDD 테스트 주도 개발을 테스트 기법이 아닌 코드 설계와 구조화 방법으로 설명한다. 단순성과 신뢰성을 높이는 반복 과정, 실천을 망설이는 이유와 학습 방향을 다룬다.
- [PS / Go] 백준 11729 번 하노이 탑 이동 순서, 프로그래머스 타겟 넘버 문제 풀이 하노이 탑의 이동 횟수와 순서를 재귀로 구하고, 타겟 넘버는 반복문과 메모이제이션으로 푼다. 두 문제의 점화식과 시간 복잡도 차이도 설명한다.
- [백준 / Go] 18428번: 감시 피하기 문제 풀이 교실의 빈칸 중 세 곳에 장애물을 놓는 모든 조합을 탐색한다. 각 교사의 상하좌우 시야를 검사해 모든 학생이 감시를 피할 수 있는지 판별한다.
- [백준 / Go] 23324번: 어려운 모든 정점 쌍 최단 거리 문제 풀이 가중치가 1인 간선을 제외한 뒤 분리 집합으로 양쪽 연결 요소의 크기를 구해 모든 정점 쌍 최단 거리의 합을 계산하고 Go로 구현한다.
- Go 1.22.0 업데이트 살펴보기 문서 읽기 Go 1.22에 추가된 반복문 변수 할당과 정수 범위 순회를 중심으로 Vet, 런타임, 컴파일러, 표준 라이브러리의 주요 변화를 다룬다.
- [Go] Polygon ID와 Websocket을 사용한 신원 인증 - 4. 신원 인증 코딩 하기 KYCAge 자격 증명을 발급받고 Polygon ID 앱에서 증명 토큰을 생성해 서버가 검증하는 신원 인증 절차를 단계별로 설명한다.
- [Go] Polygon ID와 Websocket을 사용한 신원 인증 - 3. 로그인 코딩 하기 세션 생성과 QR 코드 요청부터 Polygon ID 토큰 검증까지의 로그인 흐름을 구성하고, 웹소켓으로 인증 상태를 전달한다.
- [Go] Polygon ID와 Websocket을 사용한 신원 인증 - 2. Websocket 코딩 하기 Polygon ID 인증 진행 상태를 전달하기 위해 Go 서버에서 웹소켓 클라이언트, 허브, 메시지 채널과 연결 핸들러를 구현한다.
- [Go] Polygon ID와 Websocket을 사용한 신원 인증 - 1. Polygon ID 코딩 하기 Polygon ID의 DID와 검증 가능한 자격 증명 구조를 설명하고, Go 서버와 웹소켓 기반 로그인 예제의 구성과 변경 사항을 소개한다.
- [백준 / Go] 1124번: 언더프라임 문제 풀이 에라토스테네스의 체와 최소 소인수 메모이제이션을 이용해 각 수의 소인수 개수를 구하고, 구간 내 언더프라임을 세는 Go 풀이를 설명한다.
- [백준 / Go] 24040번: 예쁜 케이크 문제 풀이 케이크 밑면의 가로와 세로를 정수 인수로 두고, 둘레를 세 색 띠로 같은 수만큼 나눌 수 있는지 판별하는 Go 풀이를 제시한다.
- [Go] Vault를 사용해 시크릿 저장하고 불러오기 기초 문서 읽기 Docker Compose로 HashiCorp Vault를 실행하고 Go 클라이언트를 생성해 시크릿을 쓰고 읽는 기본 흐름을 단계별로 구성한다.
- [Go] 우아하게 종료하기 (Graceful shutdown) 코딩 하기 Go HTTP 서버가 종료 시그널을 받았을 때 연결과 자원을 안전하게 정리하도록 채널, 고루틴, 종료 함수를 구성하는 과정을 설명한다.
- [Go] SOLID in Go - 의존 관계 역전 원칙 디자인 패턴 상위 모듈과 구체 구현의 직접 의존이 만드는 변경 비용을 짚고, Go 인터페이스로 의존 방향을 추상화하는 방법과 주의점을 설명한다.
- [백준 / Go] 21920번: 서로소 평균 문제 풀이 수열에서 기준값과 최대공약수가 1인 원소만 골라 평균을 계산한다. 유클리드 호제법으로 서로소를 판별하고 합계와 개수로 평균을 구한다.
- [백준 / Go] 11815번: 짝수? 홀수? 문제 풀이 약수의 개수가 홀수인 수는 완전제곱수라는 성질로 각 입력을 판별한다. 매우 큰 정수를 다루기 위해 Go의 큰 정수 연산을 활용한 풀이를 담았다.
- [Go] SOLID in Go - 인터페이스 분리 원칙 디자인 패턴 클라이언트가 쓰지 않는 메서드에 의존하지 않도록 인터페이스를 분리하는 원칙을 설명한다. 복합기와 프린터 예제로 분리와 임베딩의 이점과 주의점을 다룬다.
- [Go] 아파치 카프카를 사용한 간단한 이벤트 기반 서비스 구현 코딩 하기 Go와 아파치 카프카로 주문 접수와 처리 이벤트를 주고받는 카페 서비스를 구현한다. 토픽, 생산자와 소비자 구성부터 도커 실행 과정까지 다룬다.
- [백준 / Go] 9417번: 최대 GCD 문제 풀이 각 테스트 케이스에 주어진 정수의 모든 두 수 조합을 순회하며 최대공약수의 최댓값을 구한다. 유클리드 호제법을 적용한 Go 풀이를 담았다.
- [Go] SOLID in Go - 리스코프 치환 원칙 디자인 패턴 하위 타입이 상위 타입의 행동 규약을 지켜야 하는 리스코프 치환 원칙을 설명한다. 직사각형과 정사각형의 Go 인터페이스 설계를 위반 사례와 비교한다.
- [백준 / Go] 4134번: 다음 소수 문제 풀이 주어진 정수 이상인 가장 작은 소수를 찾기 위해 제곱근까지만 약수를 검사하는 이유를 설명한다. 큰 입력에서도 효율적으로 판별하는 Go 풀이를 담았다.
- [Go] gRPC 파헤치기 - 프로토콜 버퍼 (Protocol Buffers) 코딩 하기 gRPC의 기본 직렬화 형식인 프로토콜 버퍼의 특징을 설명한다. 프로토 파일의 문법, 패키지, 열거형, 메시지, 서비스와 주석을 구성하는 방법을 다룬다.
- [Go] SOLID in Go - 개방 폐쇄 원칙 디자인 패턴 기존 코드를 바꾸지 않고 기능을 확장하는 개방 폐쇄 원칙을 주문과 할인 예제로 설명한다. Go 인터페이스를 적용한 개선과 유지보수상의 이점을 비교한다.
- [백준 / Go] 14490번: 백대열 문제 풀이 콜론으로 구분된 두 정수를 최대공약수로 나눠 가장 간단한 비율로 만드는 과정을 설명한다. 유클리드 호제법을 Go로 구현한 풀이를 담았다.
- [Go] gRPC 파헤치기 - gRPC란? 코딩 하기 gRPC가 원격 메서드를 로컬 호출처럼 다루는 방식과 서비스 인터페이스, 서버, 클라이언트 스텁의 역할을 설명한다. 여러 언어와 환경을 연결하는 특징도 다룬다.
- [Go] SOLID in Go - 단일 책임 원칙 디자인 패턴 생성·저장·불러오기·변환을 한 객체가 맡은 구조를 역할별 함수와 타입으로 분리하며, 단일 책임 원칙이 유지보수성에 주는 이점을 설명한다.
- [백준 / Go] 13909번: 창문 닫기 문제 풀이 창문 번호의 약수 개수가 홀수일 때만 마지막에 열린다는 성질을 이용해, 제곱수의 개수로 답을 효율적으로 구하는 수학적 풀이를 설명한다.
- [Go] SOLID in Go - 패키지 디자인 패턴 Go 패키지의 선언과 임포트 방법을 소개하고, 이름의 첫 글자에 따라 외부 공개 범위를 제어해 패키지 수준에서 캡슐화하는 방식을 설명한다.
- [Go] SOLID in Go - 컴포지션 디자인 패턴 Go의 구조체와 인터페이스 임베딩으로 기능을 조합하는 방법을 익히고, 상속보다 컴포지션이 결합도와 치환 가능성에 유리한 이유를 설명한다.
- [Go] 클라우드 디자인 패턴 - 서킷 브레이커 클라우드 네이티브 원격 서비스 장애의 전파를 막는 서킷 브레이커의 닫힘·열림·반 열림 상태 전환을 설명하고 직접 만든 Go 구현과 테스트 과정을 다룬다.
- [Go] 컨텍스트(Context) 문서 읽기 Go Context로 작업 취소와 타임아웃, 마감 시점, 요청 범위 값을 전달하는 방법과 취소 원인을 추적하는 관련 API를 설명한다.
- [LeetCode / Go] 2571. Minimum Operations to Reduce an Integer to 0 문제 풀이 정수의 이진 표현에서 연속된 1을 덧셈으로 압축한 뒤 남은 비트를 제거하는 그리디 전략으로 최소 연산 횟수를 효율적으로 구한다.
- [Go] SOLID in Go - 인터페이스 디자인 패턴 Go의 암시적 인터페이스 구현 방식과 인터페이스를 통한 느슨한 결합, 서로 다른 구체 타입을 같은 계약으로 다루는 다형성을 설명한다.
- [Go] SOLID in Go - 구조체와 메서드 디자인 패턴 Go 구조체의 값 복사와 포인터 전달 차이, 값·포인터 리시버를 사용하는 메서드의 동작과 타입에 메서드를 소속시키는 이유를 설명한다.
- [Go] SOLID in Go - SOLID란? 디자인 패턴 낮은 응집도와 높은 결합도가 만드는 설계 문제를 짚고, 다섯 가지 SOLID 원칙을 Go에도 적용할 수 있는 이유를 설명한다.
- [Go] 문자열과 바이트 슬라이스를 상호 변환하는 여러가지 방법 코딩 하기 Go 문자열과 바이트 슬라이스를 변환하는 타입 변환, 복사, 리플렉션, unsafe 방식을 벤치마크한다. 복사 없는 변환의 성능과 불변성 위험도 비교한다.
- [Go] 잠자는 이발사 문제 코딩 하기 잠자는 이발사 문제에서 발생하는 경쟁 상태와 기아 조건을 설명한다. Go의 뮤텍스와 채널로 대기석, 손님 순서, 이발사의 상태를 동기화해 구현한다.
- [Go] 식사하는 철학자들 문제 코딩 하기 공유 자원 접근에서 데드락이 생기는 네 가지 조건을 식사하는 철학자 문제로 설명한다. Go의 동기화 도구로 교착 상태를 피하는 구현 방법을 제시한다.
- [Go] 깃허브 프로필 최신 블로그 글 목록 자동으로 업데이트하기 코딩 하기 Go로 블로그 RSS를 읽어 깃허브 프로필 README의 최신 글 목록을 갱신하고, 깃허브 액션으로 변경 사항을 자동 반영하는 과정을 다룬다.
- 타입스크립트로 블록체인 만들기 in Go 코딩 하기 TypeScript로 작성된 간단한 블록체인을 Go의 구조체와 슬라이스로 옮기며 블록 생성, 해시 계산, 체인 추가 로직의 차이를 비교한다.
- [Effective Go] Names 문서 읽기 Effective Go의 이름 짓기 원칙을 바탕으로 패키지, 접근자, 단일 메서드 인터페이스의 관례를 설명한다. 밑줄 대신 혼합 대문자를 쓰는 규칙과 예외도 다룬다.