🌐 이전 게시글 2023.12.21 - [Go/코딩 하기] - [Go] Polygon ID와 Websocket을 사용한 신원 인증 - 3. 로그인 🛒 KYCAge Credential 발급 받기 KYCAge Credential 발급 받기 🛒 신원 인증 절차 클라이언트 => 서버 websocket 연결 요청 websocket 이 연결되면 websocket을 통해 서버 => 클라이언트 세션 아이디 전달 세션 아이디와 함께 클라이언트 => 서버 신원 인증 QR 코드 요청 서버 => 클라이언트 세션 아이디와 매칭되는 신원 인증 요청을 생성하여 저장한 뒤, QR 코드를 생성하여 전달 사용자의 Polygon ID 앱 => 클라이언트 인증 QR 코드 스캔 Polygon ID 앱에서 올바른 credential 선택, p..
🌐 이전 게시글 [Go] Polygon ID와 Websocket을 사용한 신원 인증 - 2. Websocket 🌐 이전 게시글 [Go] Polygon ID와 websocket을 사용한 신원 인증 - 1. Polygon ID 💜 Polygon ID? Polygon ID는 자기주권신원(Self-Sovereign Identity) 및 개인정보 보호 원칙에 따라 사용자의 개인 정보를 안전하게 보 piatoss3612.tistory.com 🛒 로그인 절차 클라이언트 => 서버 websocket 연결 요청 websocket 이 연결되면 websocket을 통해 서버 => 클라이언트 세션 아이디 전달 세션 아이디와 함께 클라이언트 => 서버 로그인 QR 코드 요청 서버 => 클라이언트 세션 아이디와 매칭되는 로그인 ..
🌐 이전 게시글 [Go] Polygon ID와 websocket을 사용한 신원 인증 - 1. Polygon ID 💜 Polygon ID? Polygon ID는 자기주권신원(Self-Sovereign Identity) 및 개인정보 보호 원칙에 따라 사용자의 개인 정보를 안전하게 보호하면서도, 앱과 사용자 사이의 신뢰할 수 있는 신원 검증 절차를 제 piatoss3612.tistory.com 📫 Websocket 웹소켓(WebSocket)은 웹 브라우저와 웹 서버 간의 양방향 통신을 제공하는 프로토콜입니다. 웹소켓의 특징과 동작 방식은 다음과 같습니다. 양방향 통신: 웹소켓은 양방향 통신을 지원하며, 클라이언트나 서버가 언제든 데이터를 보낼 수 있습니다. 지속적인 연결: 웹소켓은 연결을 생성하고 유지하는 데..
💜 Polygon ID? Polygon ID는 자기주권신원(Self-Sovereign Identity) 및 개인정보 보호 원칙에 따라 사용자의 개인 정보를 안전하게 보호하면서도, 앱과 사용자 사이의 신뢰할 수 있는 신원 검증 절차를 제공하기 위해 사용할 수 있는 프레임워크입니다. Polygon ID를 통해 생성된 신원은 DID(Decentralized Identity)라고 불리며, 신원에 기반한 부가적인 정보들은 VCs(Verifiable Credentials)라고 불립니다. VCs에는 나이나 학위 같은 간단한 정보부터 특정 DAO에서 발행된 멤버십 증명과 같이 다양한 정보들을 담을 수 있습니다. Polygon ID는 DID에 기반해 VCs를 발행하고 검증하는 프로세스를 제공하며, 이는 다음과 같이 세 ..
🪓 우아하지 않은 종료 다음과 같이 모든 요청에 "hello world"로 응답하는 간단한 http 서버가 있습니다. 코드의 실행 순서는 다음과 같습니다. DB 연결 http 서버 시작 http 서버 종료 DB 연결 종료 package main import ( "context" "database/sql" "log" "net/http" _ "github.com/mattn/go-sqlite3" ) func main() { // 1. DB 연결 db, err := ConnectDB() if err != nil { log.Fatal(err) } log.Println("DB connection established") srv := &Server{ Server: &http.Server{ Addr: ":8080", ..
🍇 아파치 카프카 (Apache Kafka)? 아파치 카프카는 분산 데이터 스트리밍 플랫폼으로, 대용량의 데이터를 안정적으로 실시간 전송하고 저장하기 위한 오픈 소스 시스템입니다. 아파치 카프카는 메시지를 파일 시스템에 저장함으로써 기존의 AMQP 기반 메시징 큐와 달리 데이터를 재사용할 수 있다는 특징을 가지고 있습니다. 이외에도 많은 특징이 있지만, 이번 게시글에서는 아파치 카프카에 대한 소개를 보다는, 간단한 예제를 통해 카프카를 메시징 큐로써 사용하는 방법을 연습해 보겠습니다. 🎁 패키지 선택 Go에서 사용할 수 있는 아파치 카프카 관련 패키지는 대표적으로 3개를 꼽을 수 있습니다. sarama: 가장 많은 스타를 보유하고 있습니다. 예제가 있긴 하지만 위키랑 README에 글로만 설명을 해놔서 ..
📡 프로토콜 버퍼 (Protocol Buffers) 프로토콜 버퍼는 구조화된 데이터를 직렬화하는 방식으로, 구글에서 개발하으며 gRPC에서 데이터를 주고받기 위해 기본으로 사용되는 방식입니다. 프로토콜 버퍼는 다음과 같은 주요 특징을 가지고 있습니다. 효율적인 이진 직렬화: 다른 형식(XML 또는 JSON)에 비해 더 작은 데이터 크기로 더 빠른 데이터 전송 및 저장이 가능합니다. 스키마 정의: '.proto' 파일을 사용하여 프로토콜 버퍼 메시지를 스키마로 정의할 수 있습니다. 다양한 언어 지원: 현재 프로토콜 버퍼는 C++, Java, Python, Go 등 총 11개 언어로의 컴파일을 지원하고 있습니다. 업데이트 및 상호 호환성: 데이터 스키마에 새 필드를 추가하거나 수정 또는 제거하는 업데이트가 ..
💻 gRPC gRPC는 어떤 환경에서도 실행되는 고성능 RPC(Remote Procedure Call) 프레임워크입니다. RPC(Remote Procedure Call): 마치 로컬 프로시저를 호출하는 것처럼 원격 시스템에 있는 함수 또는 프로시저를 호출할 수 있게 해주는 프로세스 간 통신 기술 gRPC를 사용하면 클라이언트 애플리케이션은 로컬에서 메서드를 호출하는 것처럼 다른 머신에 있는 서버 애플리케이션에 있는 메서드를 직접 호출할 수 있습니다. 그 덕분에 분산 애플리케이션과 서비스를 구축하는 것이 한결 수월해집니다. 대다수의 RPC 시스템과 마찬가지로 gRPC는 파라미터와 반환 타입을 가지는 메서드를 명시함으로써 서비스를 정의합니다. 서버는 서비스에 정의된 인터페이스를 구현하고, gRPC 서버를 실..
go를 사용하다 보면 문자열과 바이트 슬라이스를 상호 변환하여 사용해야 되는 경우가 자주 발생합니다. 특히 io.Writer 인터페이스의 Write 메서드가 인수로 바이트 슬라이스를 넘겨받기 때문에 더 그런 것 같습니다. 문자열을 바이트 슬라이스로 변환하거나 바이트 슬라이스를 문자열로 변환하는 방법은 여러 가지가 있습니다. 이번 게시물에서는 각 방법들을 살펴보고 벤치마킹을 통해 성능을 비교해 보겠습니다. 1. string -> []byte 변환 1.1 Type Conversion // 1. 타입 컨버젼을 사용하는 방법 func StringToBytesConversion(s string) []byte { return []byte(s) } 타입 컨버젼을 사용하는 방법은 문자열을 []byte()로 감싸주면 됩..
😪 잠자는 이발사 문제란? '잠자는 이발사 문제'는 운영체제의 프로세스 간 통신과 그들의 동기화 문제를 직관적으로 설명하기 위한 문제입니다. 잠자는 이발사 문제는 다음과 같이 정의됩니다. 이발사: 이발사는 고정된 개수의 대기석이 있는 바버샵으로 출근합니다. 대기 중인 손님이 있다면 손님을 이발 의자에 앉혀서 이발을 해 주고, 대기 중인 손님이 없다면 이발사는 낮잠을 잡니다. 손님: 손님은 이발을 받으러 바버샵에 갑니다. 이발사가 다른 손님을 이발하고 있다면 대기석으로 이동합니다. 대기석이 비어있으면 빈자리에 앉아서 기다리고, 그렇지 않다면 바버샵을 나갑니다. 이발을 받을 차례가 된 손님은 이발 의자로 이동하며 이발사가 자고 있다면 이발사를 깨웁니다. 문제: 이발사와 손님의 행동 시간이 확실하게 구분되어 ..