전체 글 297

[flutter] Get.lazyPut 활용

getPages: [ GetPage(name: '/', page: () => const App()), GetPage(name: '/home', page: () => const HomePage()), GetPage( name: '/login', page: () => const LoginPage(), binding: BindingsBuilder(() { Get.lazyPut(() => LoginController(Get.find())); }) ),]Get.lazyPut을 사용하는 이유는 특정 컨트롤러 인스턴스를 필요할 때만 생성하기 위해서입니다. 즉, 해당 페이지에 접근하는 순간에만 컨트롤러가 초기화되도록 합니다. 이는 애플리케이션의 리소스 사용을 최적화하고, 불필요한 ..

[SRP] 단일 책임 원칙(Single Responsibility Principle)

SOLID 디자인 원칙, 로버트 마틴(Uncle bob)에 의해 소개되었던 자료는 아래 링크에서 살펴볼 수 있습니다.http://butunclebob.com/ArticleS.UncleBob.PrinciplesOfOod 클래스는 하나의 책임만 가져야 하며, 그 책임을 수행하는 하나의 이유만 있어야 한다는 원칙입니다. 이를 위반하는 사례와 수정된 예제를 통해 설명하겠습니다. SRP 위반 사례아래 예제는 SRP를 위반하고 있습니다. Employee 클래스는 직원 정보를 저장하면서 동시에 직원 정보를 파일로 저장하는 기능도 수행하고 있습니다. 이는 "직원 정보 관리"와 "파일 입출력"이라는 두 가지 책임을 가지고 있어 SRP를 위반합니다.#include #include #include class Employee..

[flutter] getx의 rx는?

Rx는 "Reactive Extensions"의 약자입니다. 반응형 프로그래밍은 데이터 스트림과 변화의 전파에 중점을 둔 프로그래밍 패러다임입니다. Rx는 이러한 반응형 프로그래밍을 구현하기 위한 다양한 라이브러리 및 API를 의미하며, GetX에서는 Rx 객체를 통해 반응형 상태 관리를 쉽게 할 수 있도록 해줍니다. GetX는 Flutter 애플리케이션 개발을 위한 강력한 상태 관리 및 라우팅 라이브러리입니다. GetX에서 Rx는 반응형(reactive) 프로그래밍을 위해 사용되는 클래스이며, 이는 상태 변화에 따라 자동으로 UI를 업데이트하는 것을 의미합니다. Rx는 반응형 변수를 만들기 위해 사용되며, 다음과 같은 방법으로 사용할 수 있습니다. import 'package:get/get.dart';..

[go] go-redis와 Redigo 비교

Go 언어에서 Redis 사용을 위한 두 주요 패키지, go-redis와 Redigo,를 비교해 보면 각각의 장단점이 다르며 개발자의 필요에 따라 선택이 달라질 수 있습니다.1. go-redis (https://github.com/go-redis/redis)장점문서화가 잘되어 있음: Go 언어 커뮤니티에서 널리 사용되는 패키지로, 튜토리얼과 예제들이 풍부하여 학습이 용이합니다. 공식 문서 외에도 커뮤니티에서 제공하는 자료들이 많아 빠르게 익힐 수 있습니다.사용하기 쉬움: 일반적인 Redis 명령어를 함수로 간편하게 사용할 수 있어 코드 작성이 간결합니다. Redis 클라이언트 설정, 커넥션 관리, 트랜잭션, 파이프라이닝 등 기본적인 기능이 패키지에 포함되어 있어 바로 사용할 수 있습니다.단점확장성의 한계..

[go] %v와 %+v의 차이

%v와 %+v는 Go의 fmt 패키지에서 포맷팅 지시자로 사용되며, 주로 fmt.Printf 등의 함수와 함께 사용됩니다. 이 두 지시자는 데이터를 문자열로 변환할 때 어떻게 표현할지를 결정합니다.  %v (Verb): 기본 포맷 : 값을 기본 포맷으로 출력합니다. 사용하는 예: fmt.Printf("%v", someValue) 구조체를 출력할 경우 필드 이름 없이 값만 출력합니다.  %+v (Detailed Verb): 상세 포맷 : 값을 포함하여 추가 정보를 출력합니다. 사용하는 예: fmt.Printf("%+v", someValue) 특히 구조체를 출력할 때 유용하며, 필드 이름과 값을 모두 출력합니다.  다음은 구조체를 예로 들었을 때의 차이점을 보여주는 예시입니다:package mainimpor..

[go] Context 활용하기

Go 언어로 개발할 때, 단순히 고루틴을 활용하여 동시성 작업을 수행할 수 있지만, 여러 패키지들을 보면 context를 선언하고 고루틴을 관리하는 코드가 빈번히 등장하는 것을 알 수 있습니다. 이 글에서는 context 패키지가 왜 쓰이는지, 그리고 실제 코드를 통해 어떻게 활용하는지 살펴보겠습니다.왜 context를 사용하는가?Go 언어는 고루틴을 통해 동시성 작업을 수행합니다. 동시성 프로그램에서는 특정 작업이 시간 초과되거나 취소되어야 하는 경우가 있으며, 시스템 오류로 인해 작업을 선점해야 하는 상황도 발생할 수 있습니다. 이러한 상황을 대비해 고루틴 간에 작업의 상태를 공유하고 관리하기 위해, context 패키지가 Go 1.7 버전부터 표준 라이브러리로 제공되고 있습니다.기존에는 완료 여부를..

[쿠버네티스] 서비스 배포의 발전

전통적인 배포 시대초기 IT 환경에서는 애플리케이션을 물리 서버에서 직접 실행했습니다. 그러나 이 방식에는 한 가지 큰 문제가 있었습니다. 한 물리 서버에서 여러 애플리케이션을 실행할 때, 리소스 관리에 한계가 있었기 때문입니다. 리소스를 많이 사용하는 애플리케이션이 다른 애플리케이션의 성능을 저하시킬 수 있는 상황이 자주 발생했습니다.이 문제를 해결하기 위해 각 애플리케이션을 별도의 물리 서버에 배치하는 방법이 있었지만, 이는 서버 자원이 비효율적으로 사용되고 비용이 매우 높아지는 문제가 있었습니다. 물리 서버를 추가적으로 유지 관리하는 데 드는 비용과 확장성의 한계는 기업에게 큰 부담이 되었습니다.가상화된 배포 시대이 문제를 해결하기 위한 주요 기술로 가상화가 도입되었습니다. 가상화는 단일 물리 서버..

Kubernetes와 Helm

Kubernetes(쿠버네티스)와 Helm(헬름)은 클라우드 네이티브 환경에서 애플리케이션 배포, 관리, 스케일링을 자동화하기 위해 주로 사용되는 도구입니다. 이 두 도구는 서로 보완적인 역할을 하며, 함께 사용하면 복잡한 애플리케이션을 쉽게 관리할 수 있습니다.1. Kubernetes의 역할Kubernetes는 컨테이너화된 애플리케이션의 오케스트레이션을 담당하는 플랫폼입니다. 이를 통해 컨테이너를 생성, 배포, 확장, 복구하는 일련의 작업을 자동으로 처리할 수 있습니다.주요 기능:컨테이너 오케스트레이션: 컨테이너를 클러스터에서 관리하고, 애플리케이션을 배포하며, 요청에 따라 자동으로 스케일링(확장 및 축소)합니다.서비스 디스커버리 및 로드 밸런싱: Kubernetes는 애플리케이션 간의 네트워크 트래픽..

gRPC C++ 동기 API 사용법

gRPC 네 가지 종류의 서비스 메서드1. 클라이언트가 Stub을 사용하여 서버에 요청을 보내고 일반 함수 호출처럼 응답이 돌아올 때까지 기다리는 RPC입니다.// Obtains the feature at a given position.rpc GetFeature(Point) returns (Feature) {} 2. 클라이언트가 서버에 요청을 보내고 스트림을 받아 일련의 메시지를 다시 읽는 서버 측 스트리밍 RPC입니다.클라이언트는 더 이상 메시지가 없을 때까지 반환된 스트림에서 읽습니다. stream 키워드를 응답 타입 앞에 두어 서버 측 스트리밍으로 지정합니다.// Obtains the Features available within the given Rectangle. Results are// st..

gRPC C++ 심플 사용예

이제 클라이언트가 호출할 수 있는 서버의 추가 메서드로 애플리케이션을 업데이트하는 방법을 살펴보겠습니다.gRPC 서비스는 프로토콜 버퍼를 사용하여 정의됩니다. gRPC 소개 글을 참고해 주세요. gRPC 코드 받기git으로 gRPC를 받아 봅시다. gRPC 관련 코드를 보고 싶다면 받아 두면 좋습니다.git clone https://github.com/grpc/grpc  gPRC Proto 정의다음 코드는 서버와 클라이언트(Stub)에 SayHello() RPC 메서드가 있습니다. 클라이언트는 HelloRequest를 매개 변수로 가지고 서버로 부터 HelloReply를 반환 받습니다.examples\protos\helloworld.proto에 정의된 일부 입니다.// The greeting servic..