📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 2023.10.03 - [Go/디자인 패턴] - [Go] SOLID in Go - 구조체와 메서드 2023.10.04 - [Go/디자인 패턴] - [Go] SOLID in Go - 인터페이스 2023.10.09 - [Go/디자인 패턴] - [Go] SOLID in Go - 컴포지션 2023.10.10 - [Go/디자인 패턴] - [Go] SOLID in Go - 패키지 2023.10.11 - [Go/디자인 패턴] - [Go] SOLID in Go - 단일 책임 원칙 2023.10.12 - [Go/디자인 패턴] - [Go] SOLID in Go - 개방 폐쇄 원칙 2023.10.13 - [Go/디자인..
🍇 아파치 카프카 (Apache Kafka)? 아파치 카프카는 분산 데이터 스트리밍 플랫폼으로, 대용량의 데이터를 안정적으로 실시간 전송하고 저장하기 위한 오픈 소스 시스템입니다. 아파치 카프카는 메시지를 파일 시스템에 저장함으로써 기존의 AMQP 기반 메시징 큐와 달리 데이터를 재사용할 수 있다는 특징을 가지고 있습니다. 이외에도 많은 특징이 있지만, 이번 게시글에서는 아파치 카프카에 대한 소개를 보다는, 간단한 예제를 통해 카프카를 메시징 큐로써 사용하는 방법을 연습해 보겠습니다. 🎁 패키지 선택 Go에서 사용할 수 있는 아파치 카프카 관련 패키지는 대표적으로 3개를 꼽을 수 있습니다. sarama: 가장 많은 스타를 보유하고 있습니다. 예제가 있긴 하지만 위키랑 README에 글로만 설명을 해놔서 ..
문제 9417번: 최대 GCD 첫째 줄에 테스트 케이스의 개수 N (1 < N < 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 양의 정수 M (1 < M < 100)개가 주어진다. 모든 수는 -231보다 크거나 같고, 231 -1보다 작거나 www.acmicpc.net 정수 M개가 주어졌을 때, 모든 두 수의 쌍 중에서 가장 큰 최대공약수 찾는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수 N (1 < N < 100)이 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있으며, 양의 정수 M (1 < M < 100)개가 주어진다. 모든 수는 -231보다 크거나 같고, 231 -1보다 작거나 같다. 출력 각 테스트 케이스마다, 입력으로 주어진 수의 모든 두 수의 쌍의 최..
📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 2023.10.03 - [Go/디자인 패턴] - [Go] SOLID in Go - 구조체와 메서드 2023.10.04 - [Go/디자인 패턴] - [Go] SOLID in Go - 인터페이스 2023.10.09 - [Go/디자인 패턴] - [Go] SOLID in Go - 컴포지션 2023.10.10 - [Go/디자인 패턴] - [Go] SOLID in Go - 패키지 2023.10.11 - [Go/디자인 패턴] - [Go] SOLID in Go - 단일 책임 원칙 2023.10.12 - [Go/디자인 패턴] - [Go] SOLID in Go - 개방 폐쇄 원칙 🎭 리스코프 치환 원칙 (Liskov..
문제 4134번: 다음 소수 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. www.acmicpc.net 정수 n(0 ≤ n ≤ 4*109)가 주어졌을 때, n보다 크거나 같은 소수 중 가장 작은 소수 찾는 프로그램을 작성하시오. 입력 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. 출력 각각의 테스트 케이스에 대해서 n보다 크거나 같은 소수 중 가장 작은 소수를 한 줄에 하나씩 출력한다. 문제 이해하기 소수는 1과 자기 자신만을 약수로가지는 수입니다. 따라서 정수 n이 주어졌을 때 2 ≤ i ≤ (n-1)인 정수 i 중 어떤 것으로든 n을 0으로 나누어 떨어지게 만들 수 있다면 ..
📡 프로토콜 버퍼 (Protocol Buffers) 프로토콜 버퍼는 구조화된 데이터를 직렬화하는 방식으로, 구글에서 개발하으며 gRPC에서 데이터를 주고받기 위해 기본으로 사용되는 방식입니다. 프로토콜 버퍼는 다음과 같은 주요 특징을 가지고 있습니다. 효율적인 이진 직렬화: 다른 형식(XML 또는 JSON)에 비해 더 작은 데이터 크기로 더 빠른 데이터 전송 및 저장이 가능합니다. 스키마 정의: '.proto' 파일을 사용하여 프로토콜 버퍼 메시지를 스키마로 정의할 수 있습니다. 다양한 언어 지원: 현재 프로토콜 버퍼는 C++, Java, Python, Go 등 총 11개 언어로의 컴파일을 지원하고 있습니다. 업데이트 및 상호 호환성: 데이터 스키마에 새 필드를 추가하거나 수정 또는 제거하는 업데이트가 ..
📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 2023.10.03 - [Go/디자인 패턴] - [Go] SOLID in Go - 구조체와 메서드 2023.10.04 - [Go/디자인 패턴] - [Go] SOLID in Go - 인터페이스 2023.10.09 - [Go/디자인 패턴] - [Go] SOLID in Go - 컴포지션 2023.10.10 - [Go/디자인 패턴] - [Go] SOLID in Go - 패키지 2023.10.11 - [Go/디자인 패턴] - [Go] SOLID in Go - 단일 책임 원칙 🚪 개방-폐쇄 원칙 (Open-Closed Principle) 확장에는 열려 있고, 변경에는 닫혀 있다. 개방-폐쇄 원칙은 상호 결합도..
문제 14490번: 백대열 n과 m이 :을 사이에 두고 주어진다. (1 ≤ n, m ≤ 100,000,000) www.acmicpc.net 대열이는 욱제의 친구다. “야 백대열을 약분하면 뭔지 알아?” “??” “십대일이야~ 하하!” n:m이 주어진다. 욱제를 도와주자. (...) 문제 이해하기 n과 m의 최대공약수 g로 n과 m을 나눠주면 두 수를 최대한 약분할 수 있습니다. 코드 package main import ( "bufio" "bytes" "fmt" "os" "strconv" ) var ( scanner = bufio.NewScanner(os.Stdin) writer = bufio.NewWriter(os.Stdout) input []byte ) func main() { defer writer...
💻 gRPC gRPC는 어떤 환경에서도 실행되는 고성능 RPC(Remote Procedure Call) 프레임워크입니다. RPC(Remote Procedure Call): 마치 로컬 프로시저를 호출하는 것처럼 원격 시스템에 있는 함수 또는 프로시저를 호출할 수 있게 해주는 프로세스 간 통신 기술 gRPC를 사용하면 클라이언트 애플리케이션은 로컬에서 메서드를 호출하는 것처럼 다른 머신에 있는 서버 애플리케이션에 있는 메서드를 직접 호출할 수 있습니다. 그 덕분에 분산 애플리케이션과 서비스를 구축하는 것이 한결 수월해집니다. 대다수의 RPC 시스템과 마찬가지로 gRPC는 파라미터와 반환 타입을 가지는 메서드를 명시함으로써 서비스를 정의합니다. 서버는 서비스에 정의된 인터페이스를 구현하고, gRPC 서버를 실..
📺 시리즈 2023.10.02 - [Go/디자인 패턴] - [Go] SOLID in Go - SOLID란? 2023.10.03 - [Go/디자인 패턴] - [Go] SOLID in Go - 구조체와 메서드 2023.10.04 - [Go/디자인 패턴] - [Go] SOLID in Go - 인터페이스 2023.10.09 - [Go/디자인 패턴] - [Go] SOLID in Go - 컴포지션 2023.10.10 - [Go/디자인 패턴] - [Go] SOLID in Go - 패키지 ☝ 단일 책임 원칙 (Single Responsibility Principle) 모든 객체는 하나의 책임만을 져야 한다. 단일 책임 원칙은 객체가 단일 책임 또는 역할에 집중하도록 유도함으로써 소프트웨어를 더 쉽게 이해하고 유지보수할..