Codex Skill 등록하기 - bcpprm 사례로 익히는 워크플로 자동화 가이드
·
dev/ai
개발을 하다 보면 반복해서 수행하는 작업이 생깁니다. 변경 사항을 확인하고, 브랜치를 만들고, 커밋 메시지를 정리한 뒤, 원격 저장소에 푸시하고 PR까지 생성하는 흐름도 그중 하나입니다. 이런 반복 작업을 매번 자연어로 길게 설명하는 대신, Codex가 일정한 규칙에 따라 수행하도록 만들 수 있는 방법이 Skill입니다.이 글에서는 제가 실제로 등록한 bcpprm Skill을 사례로 삼아, Codex에 새로운 Skill을 등록하는 전체 과정을 정리합니다. 이후 다른 자동화 Skill을 만들 때에도 그대로 참고할 수 있도록 기록합니다.예시로 사용하는 bcpprm는 Branch → Commit → Push → Pull Request 흐름을 지원하도록 만든 Skill입니다.먼저 결정할 것: Skill인가, P..
flutter - 플러터로 크로스 플랫폼 앱 개발하기(3)
·
dev/app
상태 관리 라이브러리앱에는 고정된 데이터와 변경되는 데이터가 존재한다. 앱의 주된 사용 목적 중 대부분은 변경되는 데이터의 조회로 이 데이터를 어떻게 관리하고 표현하는지가 앱의 성능, 사용성에 큰 영향을 미친다. 상태 관리 라이브러리는 변경되는 데이터를 클래스 내부에서 관리하고 위젯에 담아 화면에 출력하는 클래스간 데이터 흐름을 총괄한다. 상태 관리 라이브러리로는 대표적으로 Provider, Bloc, Riverpod, GetX가 존재한다. GetX는 이제 거의 안 쓰이고, Provider는 일전에 설명한 관계로 Bloc, Riverpod 두 라이브러리를 중심으로 설명한다.BlocBusiness Logic Componentimperative (명령형) : 외부 자극을 단일 경로를 따라 내부 상태 변화로 ..
flutter - 플러터로 크로스 플랫폼 앱 개발하기(4)
·
dev/app
개발환경 세팅과 플러터 핵심 개념 학습을 어느정도 완료했으니 이를 토대로 플러터 프로젝트를 생성해보자. AI와의 채팅을 통해 갈등 관리 기능을 제공하는 간단한 채팅 앱 conflicAI을 만들기로 했다. VScode를 사용한다.플러터 프로젝트 생성모바일 앱이므로 웹이나 데스크톱 전용 패키지를 따로 세팅하지 않도록 --platforms로 iOS와 Android를 설정하고 --org로 프로젝트 담당 조직(추후 앱의 식별자에 포함)을 명시해서 프로젝트를 생성한다. 이때 프로젝트 이름은 snake_case로 설정해야 한다.flutter create --platforms ios,android --org com.cusum26 conflic_ai create 명령어로 프로젝트를 생성하면 다음과 같은 파일 구조가 만들..
flutter - 플러터로 크로스 플랫폼 앱 개발하기(2)
·
dev/app
본격적인 프로젝트 개발에 앞서 플러터의 필수 개념에 대해 알아보자. 플러터 아키텍쳐 플러터 프로젝트의 구조를 나름 비유하자면 다음과 같다. 무한하게 상상할 수 있는 Framework가 특정 규칙에 따라 상상력을 전기적 신호로 표현할 수 있는 Engine이라는 뇌로 실체화되고, Embedder를 통해 Native까지 전달된 뇌의 전기적 신호가 실제 물리적 움직임으로 구체화된다... 추상화된 하나의 뇌로 네이티브라는 서로 천차만별인 신체를 적절하게 제어하기 위해서는 뇌의 신경이 각 신체 전용 제어 구조로 연결돼야 한다. 이때 Embedder가 각 몸뚱아리 전용 제어 틀을 이 추상화된 뇌에게 제공하는 역할을 한다. Embedder 플러터로 만든 앱이 기기에서 실행되려면 각 네이티브 환경의 인터페이스 규칙을 ..
flutter - 플러터로 크로스 플랫폼 앱 개발하기(1)
·
dev/app
개발 환경 세팅플러터 설치 (macOS 기준)(1) 터미널로 설치하는 방법1. 터미널 앱에서 다음 명령어로 플러터 sdk 설치 (brew는 이미 설치 완료 가정)brew install --cask flutter 2. flutter 명령어 사용을 위한 PATH 추가 (.zshrc 파일에 sdk가 설치된 경로를 등록)수동으로 설정한 디렉토리에 다운로드 했다면 "which flutter" 명령어로 sdk 설치된 경로 확인 가능echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrcsource ~/.zshrc 3. 설치 확인flutter --version 4. 적용 확인flutter doctorDoctor summary (to see all details, run f..
Kafka - 이벤트 기반의 비동기 작업 처리 구조로 알림 기능 구현하기 (4)
·
dev/infra
도커 환경에서의 Kafka UI 설정알림 기능이 제대로 동작하는 지 검증하기 앞서 Kafka 브로커가 설계한 대로 작동하는 지 Kafka UI를 통해 확인해보자. Kafka UI는 Kafka 브로커에 저장된 메시지와 메타데이터를 조회해 시각적으로 표현하는 HTTP 기반의 외부 웹 UI 도구이다. 일반적으로 Docker 컨테이너로 배포되며 브라우저를 통해 Kafka 브로커의 운영 및 모니터링 환경을 제공한다. 다음의 Docker 설정을 통해 브라우저 접속 환경을 구성할 수 있다.kafka-ui: image: provectuslabs/kafka-ui:latest container_name: kafka-ui ports: - "8085:8080" # 호스트의 브라우저는 8085로 접속 가능 env..
Kafka - 이벤트 기반의 비동기 작업 처리 구조로 알림 기능 구현하기 (3)
·
dev/infra
도커 환경에서의 Kafka 설정Kafka의 로그 서버는 스프링 애플리케이션과 분리된 외부 브로커로 동작하며, 프로듀서와 컨슈머 클라이언트를 통해 애플리케이션과 통신한다. 따라서 일반적으로 도커 컨테이너나 별도의 서버 환경에서 운영된다. 여기서는 Kafka를 도커 컨테이너 안에서 실행하는 방식으로 설계했다. 스프링 애플리케이션은 로컬 환경에서는 IDE에서, 배포 환경에서는 도커 컨테이너 안에서 실행되므로 어느 환경에서 접속하더라도 도커 내부의 Kafka 브로커를 정확히 식별해 연결해야 한다. 이를 위해 Kafka는 도커 환경에서 포트를 2개 열어 두고, 각각에 리스너를 설정하여 두 가지 방식으로 접근하는 클라이언트와 모두 통신할 수 있도록 구성한다. 도커 내부에서는 클라이언트끼리 직접 연결 가능하므로 외부..
Kafka - 이벤트 기반의 비동기 작업 처리 구조로 알림 기능 구현하기 (2)
·
dev/infra
Kafka를 이용한 확장성 문제 해결Kafka는 애플리케이션 외부에서 동작하는 로그 시스템이므로 메시지의 저장 상태를 유지하는 데에 애플리케이션 JVM의 자원을 소모하지 않는다. 따라서 대량의 메시지가 발생하더라도 애플리케이션 처리량에 직접적인 영향을 주지 않는다. 이런 측면에서 Kafka는 처리량 문제를 완화하기도 하지만, 근본적으로 대량의 이벤트 처리를 제어할 수 있는 구조적 수단을 제공하는 것이다. 실제 메시지 처리는 애플리케이션 내부에서 일어나므로 높은 처리량의 핵심은 어느 메시지(작업)를 누가, 언제 소비(처리)하느냐에 달려 있다. 즉, 한정된 JVM 자원을 최대 효율로 활용하는 것은 전적으로 오케스트레이션 방식에 의존한다. Kafka는 자체적으로 대량의 작업을 안정적으로 분배하고 병렬 처리할 ..
Kafka - 이벤트 기반의 비동기 작업 처리 구조로 알림 기능 구현하기 (1)
·
dev/infra
Kafka를 적용하게 된 개인적인 문제의식과 수평적 확장성을 보장하는 이벤트 기반 비동기 작업 처리 구조 구축 과정, 그리고 이를 이용해 알림 기능을 구현한 사례를 기록하고자 한다. 이 과정에서 Kafka에 대해 공부하고 개인적으로 정리한 학문적인 내용까지 포함한다. Spring 프로젝트에서 알림 기능을 담당한 적이 있다. 당시 기능 구현에 있어서 기초적인 스키마는 다음과 같다. 알림은 멤버 단위로 관리되므로 멤버 엔티티와 관계 설정이 필요하다. 멤버를 직접 참조하는 알림 엔티티 구조를 사용할 경우, 모든 멤버에게 동일한 내용을 전달하는 공통 알림의 메시지가 레코드마다 중복 저장되고 심각한 공간 낭비가 발생한다. 따라서 메시지와 몇 개의 메타 정보를 저장한 별도의 알림 엔티티를 두고, 알림의 수신 관계..
부동산 계약 리뷰 제공 및 열람 서비스 컨트랙트 개발 (2)
·
dev/blockchain
프로젝트를 시작하기에 앞서 온체인 개발 스택은 다음과 같다.On-chain- Solidity (Smart Contracts)- Hardhat (Build / Test / Deploy)- Sepolia (Testnet)여기서 Hardhat은 스마트컨트랙트 테스트 및 배포 도구이다. 이더리움 네트워크에 스마트컨트렉트가 올라가면 EVM에 의해 실행되는데 이때 EVM은 특정 코드가 어떻게 처리될 지를 정의한 규칙들의 집합이다. hardhat은 컨트랙트의 코드가 의도대로 동작하는지 EVM과 동일한 환경에서 미리 실행·검증하게 해주는 개발 도구라고 보면 된다. 로컬 환경에서의 테스트, 테스트넷 배포, 메인넷 배포까지도 지원한다. 추가로 현재 블록체인 개발에서 노드 접근과 온체인 데이터 통신에 주로 JSON-RPC ..