From fc3a0d6b61628b43c3e9d141651c2f67447785de Mon Sep 17 00:00:00 2001 From: Godopu Date: Sun, 12 Jul 2026 20:15:33 +0900 Subject: [PATCH] docs: resolve unused import build error and absolute paths in README --- README.md | 55 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 00b0450..28d4175 100644 --- a/README.md +++ b/README.md @@ -30,11 +30,9 @@ REST와 JSON은 단순하고 사람이 읽기 쉽다는 훌륭한 장점이 있 ### gRPC 개요 -이 장은 Go 언어를 사용하여 gRPC를 다루는 방법을 설명합니다. gRPC는 'google Remote Procedure Calls'의 약자로, 구글이 개발한 RESTful 서비스의 대안입니다. gRPC의 가장 큰 장점은 REST와 JSON 메시지를 사용하는 방식보다 훨씬 빠르다는 점입니다. +위와 같이 gRPC가 고안된 배경과 필요성을 바탕으로, 구체적인 특징과 개발 프로세스를 살펴보겠습니다. -또한, gRPC는 풍부한 도구들을 제공하여 gRPC 서비스용 클라이언트를 더 빠르고 쉽게 만들 수 있도록 돕습니다. 마지막으로, gRPC는 바이너리 데이터 형식을 사용하기 때문에 JSON 형식을 사용하는 RESTful 서비스보다 훨씬 가볍습니다. - -gRPC 서버와 클라이언트를 개발하는 과정은 크게 세 단계로 나뉩니다. 첫째, 인터페이스 정의 언어(IDL) 파일을 생성합니다. 둘째, gRPC 서버를 개발합니다. 셋째, 개발된 gRPC 서버와 통신할 gRPC 클라이언트를 개발합니다. +gRPC 서버와 클라이언트를 개발하는 과정은 크게 세 단계로 나뉩니다. 첫째, 인터페이스 정의 언어(IDL) 파일을 생성하여 인터페이스를 계약(Contract)으로 정의합니다. 둘째, 이 정의를 기반으로 gRPC 서버를 개발합니다. 셋째, 해당 서버와 통신할 gRPC 클라이언트를 개발합니다. ### 다룰 주제 @@ -80,7 +78,7 @@ gRPC의 주요 장점은 다음과 같습니다: 이 리포지토리에 포함된 예제 코드를 사용해 gRPC 서버와 클라이언트를 실행하고 통신해 볼 수 있습니다. -### 1. 사전 준비사항 +## 1. 사전 준비사항 gRPC를 구동하기 전에 아래 요구사항이 충족되었는지 확인하십시오: * **Go 설치 확인**: Go 버전이 1.25.4 이상이어야 합니다. ```bash @@ -91,30 +89,43 @@ gRPC를 구동하기 전에 아래 요구사항이 충족되었는지 확인하 go mod download ``` -### 2. (선택) IDL 파일 컴파일 및 Stub 생성 +## 2. (선택) IDL 파일 컴파일 및 Stub 생성 이미 컴파일된 stub 파일들(`protoapi/protoapi.pb.go`, `protoapi/protoapi_grpc.pb.go`)이 리포지토리에 기본 포함되어 있어 **이 단계를 건너뛰고 바로 실행할 수 있습니다.** -만약 `.proto` 정의 파일을 직접 수정하고 코드를 다시 빌드하고 싶다면, 구체적인 `protoc` 설치 및 컴파일 절차는 [grpcentity README](file:///home/godopu16/PuKi/lab/canary_projects/grpccanary/examples/grpcentity/README.md) 가이드를 참고하여 진행해 주시기 바랍니다. +만약 `.proto` 정의 파일을 직접 수정하고 코드를 다시 빌드하고 싶다면, 구체적인 `protoc` 설치 및 컴파일 절차는 [grpcentity README](examples/grpcentity/README.md) 가이드를 참고하여 진행해 주시기 바랍니다. -### 3. 실습용 코드 준비 (main.go 편집) +## 3. 실습용 코드 준비 (main.go 편집) 이 프로젝트의 진입점 파일인 `examples/main.go`는 기본적으로 JSON 파싱 예제만 실행하도록 설정되어 있습니다. gRPC 예제를 실행하기 위해서는 아래와 같이 진입점을 변경해야 합니다: -1. [examples/main.go](file:///home/godopu16/PuKi/lab/canary_projects/grpccanary/examples/main.go) 파일을 엽니다. -2. `main()` 함수 내부의 `jsonexample.JsonParsingExample()`을 주석 처리하거나 지우고, `grpcSample()`을 호출하도록 수정합니다. - ```go - func main() { - // jsonexample.JsonParsingExample() // 기존 JSON 예제 주석 처리 - grpcSample() // gRPC 예제 실행 호출로 변경 - } - ``` +1. [examples/main.go](examples/main.go) 파일을 엽니다. +2. `import` 블록에서 미사용 임포트 오류(`imported and not used`)를 방지하기 위해 `"grpccanary/examples/jsonexample"` 줄을 주석 처리(또는 삭제)하고, `main()` 함수에서 `grpcSample()`을 호출하도록 수정합니다. + +**수정 후 코드 스니펫 예시:** +```go +package main + +import ( + "fmt" + entity "grpccanary/examples/grpcentity" + // "grpccanary/examples/jsonexample" // 미사용 임포트 주석 처리 + "time" +) + +var port = ":8080" + +func main() { + // jsonexample.JsonParsingExample() // 기존 JSON 예제 주석 처리 + grpcSample() // gRPC 예제 실행 호출로 변경 +} +``` 3. 수정 내용을 저장합니다. -### 4. gRPC 예제 실행하기 +## 4. gRPC 예제 실행하기 리포지토리 루트 디렉토리에서 다음 Go 실행 명령을 입력합니다: ```bash go run ./examples ``` -### 5. 기대 출력 결과 +## 5. 기대 출력 결과 명령어가 정상적으로 실행되면, `examples/main.go`에 정의된 `grpcSample()` 함수가 구동되어 백그라운드 고루틴으로 `:8080` 포트에서 gRPC 서버를 실행한 뒤, gRPC 클라이언트가 서버로 RPC 호출을 보냅니다. 터미널에는 아래와 유사한 출력 로그가 나타납니다: ```text @@ -131,14 +142,14 @@ Random Integer 2: 87 2. 클라이언트가 `GetRandomPass` 메서드를 호출하여 무작위 비밀번호(`&c(D7f/G#s%d`)를 생성하여 받아옵니다. 3. 클라이언트가 `GetRandom` 메서드를 두 차례 호출하여 각각 무작위 정수 값을 받아옵니다. -### 6. 트러블슈팅 가이드 +## 6. 트러블슈팅 가이드 * **`listen tcp :8080: bind: address already in use`**: 이미 다른 프로세스가 `8080` 포트를 점유하고 있는 상태입니다. 점유 중인 프로세스를 종료하거나, `examples/main.go` 및 `examples/grpcentity/server.go`에서 `port` 변수 값을 다른 값(예: `:9090`)으로 변경한 후 다시 실행하십시오. * **`module grpccanary: package ... is not in GOROOT`**: - 모듈 로드 에러가 발생한 경우, 리포지토리 루트 경로(`/home/godopu16/PuKi/lab/canary_projects/grpccanary`)에서 명령어를 올바르게 실행했는지 재확인하고, `go clean -modcache` 후 `go mod tidy`를 수행해 보십시오. + 모듈 로드 에러가 발생한 경우, 리포지토리 루트 경로(작업 디렉토리)에서 명령어를 올바르게 실행했는지 재확인하고, `go clean -modcache` 후 `go mod tidy`를 수행해 보십시오. -### 7. 다음 단계 -gRPC 동작 방식을 깊이 이해하고 통신 명세(IDL)를 확장해 보려면, [protoapi.proto](file:///home/godopu16/PuKi/lab/canary_projects/grpccanary/protoapi.proto)의 메시지 타입을 편집해 보거나 [grpcentity README](file:///home/godopu16/PuKi/lab/canary_projects/grpccanary/examples/grpcentity/README.md)로 이동해 다음 실습 단계를 탐색하십시오. +## 7. 다음 단계 +gRPC 동작 방식을 깊이 이해하고 통신 명세(IDL)를 확장해 보려면, [protoapi.proto](protoapi.proto)의 메시지 타입을 편집해 보거나 [grpcentity README](examples/grpcentity/README.md)로 이동해 다음 실습 단계를 탐색하십시오. # 참고 자료