반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
EMS Solution
Features
클라우드 관리
AI 인공지능
서버관리
데이터베이스 관리
네트워크 관리
트래픽 관리
설비 IoT 관리
무선 AP 관리
교환기 관리
운영자동화
실시간 관리
백업 관리
APM Solution
애플리케이션 관리
URL 관리
ITSM Solution
서비스데스크
IT 서비스 관리
Big Data Solution
SIEM
Dashboard
대시보드
Consulting Service
컨설팅 서비스
고객
레퍼런스
고객FAQ
문의하기
가격
자료실
카탈로그
사용자매뉴얼
회사소개
비전·미션
연혁
2016~현재
2000~2015
인증서·수상
투자정보
재무정보
전자공고
IR자료
새소식
공고
보도자료
오시는 길
채용
피플
컬처
공고
FAQ
블로그
열기
메인 페이지로 이동
블로그
최신이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
최신이야기
검색
기술이야기
Helm과 Argo의 개념과 통합 활용법?!
기술이야기
Helm과 Argo의 개념과 통합 활용법?!
애플리케이션을 클라우드 네이티브 환경에서 효율적으로 관리하고 운영할 수 있는 플랫폼인 쿠버네티스(kubernetes)를 활용하는 기업들이 점점 더 늘어나고 있습니다. 이에 따라 효율적인 애플리케이션 관리를 통해 패키징 배포, 관리를 자동화하고 일관된 상태를 유지하는 것이 중요해지고 있습니다. 이번 글을 통해서는 애플리케이션 개발 및 도구 중 최근 많이 사용되는 Helm과 Argo에 대해서 자세히 알아보겠습니다. ㅣHelm의 등장 쿠버네티스를 활용한 애플리케이션 배포에 가장 기본이 되는 단위는 yaml 파일로, 주로 쿠버네티스 object(리소스)들을 정의하고 다루는데 활용됩니다. 쿠버네티스를 통해 애플리케이션을 배포하다 보면 비슷한 틀과 내용을 공유하고, 내부 값(configuration)만 일부 변경하는 작업을 하게 되는데요, 이 과정에서 애플리케이션마다 모두 yaml 파일을 만들어야 하나 보니 매우 번거로웠습니다. 위 이미지를 보면, A 애플리케이션은 정적 파일인 yaml을 오브젝트별(Service, Pod, ConfigMap)로 만들어서 생성하고 배포합니다. 그러다가 프로젝트의 확장에 따른 기능 추가로 인해 B와 C 애플리케이션으로 쪼개어 각각의 yaml 파일을 복사해서 사용합니다. 하지만, 팀 단위로 인프라가 확장될 경우는 어떻게 할까요? 개별 오브젝트에 대한 yaml 개별적으로 관리할 수 있을까요? 만약, 개별적으로 관리한다면 파일의 갯수와 코드량의 증가로 인해 개발자들은 매우 혼잡하게 될 것입니다. 이러한 문제점을 해결하기 위해, 쿠버네티스에서 애플리케이션을 배포하기 위해 사용되는 대표적인 패키징 툴인 Helm이 등장하게 됐습니다. Helm을 활용하면 컨테이너 배포뿐 아니라 애플리케이션을 배포하기 위해 필요한 쿠버네티스 리소스를Node의 npm, Ubuntu의 APT, Mac의 Homebrew처럼 모두 패키지 형태로 배포할 수 있습니다. ㅣHelm의 역사 Helm은 v1부터 v3에 이르기까지 아래와 같은 변화의 과정을 거쳐왔습니다. Helm v1 ◾ [2015년 11월] DEIS의 내부 프로젝트로 시작되어 KubeCon에서 발표 ◾ [2017년 04월] MS에서 DEIS를 인수 Helm v2 ◾ [2016년 01월] Google 프로젝트에 합류 ◾ [2016년 ~ 2018년] Helm v2 고도화, 2.15.0 릴리스 발표에서 v2 향후 계획 세부사항 공유 Helm v3 ◾ [2018년 06월] CNCF 프로젝트에 합류, MS, 삼성 SDS, IBM 및 Blood Orange의 구성원 등이 참여 ◾ [2019년 11월] 릴리스 발표 v2에서 v3로 고도화되면서 가장 눈에 띄는 변화는 Tiller(클러스터 내에서 Helm 패키지 및 배포 상태를 관리하는 서버 구성요소)의 제거입니다. Helm v2에서는 클러스터에 Tiller를 설치하여, API Server와 REST*1 통신을 하고, Client와 gRPC*2 통신을 진행했었는데요, Helm v3부터는 Tiller가 제거되면서 Client에서 바로 REST 통신을 통해 API Server로 요청하는 방식으로 변경되었습니다. 그 외에도 Helm v3으로 업그레이드되면서 보안 취약점이 줄어들었으며, 설치 및 관리 과정이 단순화되었습니다. 또한 사용자에게 보다 더 안전하고 효율적인 배포 및 관리 환경을 제공할 수 있게 되었습니다. *1 REST (Representational State Transfer) : 웹 기반 애플리케이션에서 자원을 관리하기 위한 아키텍처 스타일, 데이터를 고유한 URL로 표현하고 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 해당 자원에 대한 행위를 정의함 *2 gRPC (google Remote Procedure Call) : 구글에서 개발한 오픈소스 프레임워크, 원격지에 있는 다른 시스템 또는 서버에 있는 함수를 호출하는 방식 ㅣHelm의 주요 개념 Helm은 애플리케이션을 배포해 주는 툴이라고 앞서 살펴봤는데요, Helm과 같이 사용되는 주요 개념들을 살펴보겠습니다. ◾ Helm Chart: 쿠버네티스 리소스를 하나로 묶은 패키지입니다. 이는 yaml 파일의 묶음(패키지)으로, 이 묶음 public 혹은 private registry에 push 해두고, helm 명령어를 통해 Helm Chart를 설치하여 쿠버네티스 리소스를 배포하는 역할을 합니다. ◾ Repository: Helm Chart 들의 저장소 ◾ Release: kubernetes Cluster에서 구동되는 차트 인스턴스이며, Chart는 여러 번 설치되고 새로운 인스턴스는 Release로 관리됩니다. ㅣHelm의 주요 기능 Helm의 두 가지 주요 기능을 살펴보겠습니다. [1] Helm Chart를 통한 손쉬운 배포 Helm을 사용하면 어떻게 되는지 그림으로 살펴보겠습니다. 개발 클러스터가 있고 앱 2개를 배포한다고 가정했을 때, Helm Chart Template을 만들면 변수 처리를 통해 yaml 파일을 하나하나 수정할 필요 없습니다. kubectl 명령어를 통해 yaml 파일의 동적 값을 치환하여 템플릿 형태로 편리하게 배포할 수 있다는 장점이 있습니다. [2] Helm Package를 이용한 오픈소스 설치 및 배포 Helm을 통해서 쿠버네티스에서 가동할 수 있는 아래와 같은 다양한 오픈소스들의 제품들을 쉽게 설치/배포할 수 있습니다. 위제품들 외에도 Helm Chart는 총 14,376개의 패키지와 281,373개의 릴리스를 오픈소스로 제공합니다. 이를 통해 사용자들은 자신의 요구에 맞는 가장 적합한 솔루션을 선택하여 개발할 수 있습니다. 또한 많은 사용자들이 검증하고 사용함에 따라 안정성 있는 운영도 가능하죠. 다양한 Helm Chart 패키지는 커스터마이징이 가능한 경우가 많은데요, 사용자는 필요에 따라 구성을 조정하고 수정해서 사용할 수 있는 장점이 있습니다. 다음으로는 Helm 못지않게 많이 활용되는 ArgoCD에 대해서 살펴보겠습니다. ㅣ ArgoCD란?! 기존의 kubernetes 애플리케이션을 배포하고 관리하는 방식은 수동적이었습니다. yaml 파일을 직접 편집하고, kubectl로 변경사항을 클러스터에 적용하는 수동 배포 방식은 실수를 많이 유발했죠. 또한 여러 개발자나 팀이 각자의 방식대로 배포 및 관리를 수행하는 경우, 클러스터 상태의 일관성이 저하되었는데요. 이로 인해 개발 및 운영팀 간의 협업이 어렵고 생산성이 감소되는 문제가 발생하기도 했습니다. 이러한 기존 접근 방식에 대한 대안으로 GitOps가 탄생했는데요, GitOps는 Git 저장소를 사용하는 소프트웨어 배포 접근 방식입니다. GitOps는 인프라와 소프트웨어를 함께 관리함으로써, Git 버전 관리 시스템과 운영환경 간의 일관성을 유지할 수 있도록 합니다. ArgoCD는 GitOps를 구현하기 위한 도구 중 하나로 kubernetes 애플리케이션의 자동 배포를 위한 오픈소스 도구입니다. kubernetes 클러스터에 배포된 애플리케이션의 CI/CD 파이프라인에서 CD 부분을 담당하며, Git 저장소에서 변경사항을 감지하여 자동으로 kubernetes 클러스터에 애플리케이션을 배포할 수 있습니다. kubernetes 애플리케이션 배포 과정을 살펴보겠습니다. ① 사용자가 개발한 내용을 Git 저장소에 Push(이때, kubernetes 배포 방식인 Helm 배포 방식의 구조로 Git 저장소에 Push 할 수 있습니다.) ② ArgoCD가 Git 저장소의 변경 상태를 감지 ③ Git 저장소의 변경된 내용을 kubernetes에 배포하여 반영 ㅣ ArgoCD의 주요 기능 ◾ 애플리케이션을 지정된 환경에 자동으로 배포 ◾ 멀티 클러스터 관리기능 제공 ◾ OCI, OAuth2, LDAP 등 SSO 연동 ◾ 멀티 테넌시와 자체적인 RBAC 정책 제공 ◾ 애플리케이션 리소스 상태 분석 ◾ 애플리케이션 자동 및 수동 동기화 기능 제공 ◾ Argo가 관리하고 있는 쿠버네티스 리소스 시각화 UI 제공 ◾ 자동화 및 CI 통합을 위한 CLI 제공 위 내용은 ArgoCD가 제공하는 주요 기능을 나열한 것인데요, 이 중에서도 대표적인 다섯 가지 기능에 대해서 자세히 살펴보겠습니다. ① 쿠버네티스 모니터링 ArgoCD는 쿠버네티스를 항상 추적하고 있다가 저장소의 변경사항이 감지되면, 자동으로 클러스터의 상태를 저장소의 상태와 동기화합니다. 또한 문제가 생기면 이전 상태로 롤백 할 수 있으며, 이를 통해 시스템 복구 및 문제 해결을 용이하게 합니다. ② 멀티 클러스터 관리 다중 클러스터 환경에서도 배포를 관리할 수 있어 복잡한 인프라 환경에서의 효율적인 작업을 가능하게 합니다. ③ ArgoCD 대시보드 Argo에서는 클러스터 상태를 효과적으로 관리하고 모니터링할 수 있는 대시보드를 제공합니다. ArgoCD 대시보드를 통해 애플리케이션의 실시간 상태와 동기화 상태와 같은 전체적인 배포 파이프라인을 자동화하여 시각적으로 확인할 수 있고, 롤백 및 이력 추적 기능도 동시에 제공하고 있습니다. ④ 안전한 인증 및 권한 관리 역할 기반 액세스 제어(RBAC) 및 권한 제어기능을 통해 민감한 정보에 대한 접근을 제어할 수 있습니다. ⑤ GitOps 지원 ArgoCD는 GitOps 방법론을 따르므로 애플리케이션의 배포를 Git Repository와 동기화할 수 있습니다. 이를 통해 코드와 인프라의 일관성을 유지하고 변경사항을 추적할 수 있습니다. ㅣ Helm과 ArgoCD의 통합 활용 프로세스 Helm과 Argo를 함께 사용하면 개발, 테스트, 배포 프로세스를 효과적으로 관리할 수 있습니다. Helm으로 애플리케이션을 패키징하고 버전을 관리하며, Argo를 활용하여 GitOps 워크플로우를 통해 지속적인 통합 및 배포를 자동화할 수 있습니다. ① develop: Helm을 사용하여 애플리케이션을 Helm Chart로 패키징 합니다. 이후 개발된 Helm Chart를 저장하기 위한 Git 저장소를 설정합니다. ArgoCD에서 저장한 저장소를 특정 배포 대상 Kubernetes 클러스터와 연결하여, Git 저장소의 변경사항을 감지하고 새로운 배포를 시작하여 클러스터에 적용합니다. ② git push: 개발자가 로컬 저장소 내용을 원격 저장소에 배포합니다. ③ Observe(GitOps): ArgoCD는 Git 저장소의 변경 사항을 감지하여, 변경사항이 발생하면 새로운 버전의 애플리케이션을 배포하여 자동화 및 일관성을 유지합니다. ④ 운영/테스트/개발 ㅣ마무리 오늘 함께 살펴본 Helm과 ArgoCD 두 가지 강력한 도구를 함께 이용한다면 CI/CD 통합, 버전 관리, 자동화 등의 이점을 활용해서 kubernetes 환경에서 애플리케이션을 더 효율적으로 관리할 수 있습니다. 한편 애플리케이션을 효과적으로 개발하는 것도 중요하지만, kubernetes 환경의 프로세스를 실시간 모니터링하고 추적하여 관리하는 것도 매우 중요합니다. 브레인즈컴퍼니의 kubernetes 모니터링 솔루션 Zenius-K8s는 다양한 CI/CD 도구를 이용하여 개발한 kubernetes 애플리케이션의 전체 클러스터 및 구성요소에 대한 상세 성능 정보를 모니터링하고, 리소스를 추적함으로써 시스템의 안정성과 성능을 높여주고 있습니다.
2024.03.08
기술이야기
카프카를 통한 로그 관리 방법
기술이야기
카프카를 통한 로그 관리 방법
안녕하세요! 저는 개발4그룹에서 제니우스(Zenius) SIEM의 로그 관리 기능 개발을 담당하고 있는 김채욱 입니다. 제가 하고 있는 일은 실시간으로 대용량 로그 데이터를 수집하여 분석 후, 사용자에게 가치 있는 정보를 시각화하여 보여주는 일입니다. 이번 글에서 다룰 내용은 1) 그동안 로그(Log)에 대해 조사한 것과 2) 최근에 CCDAK 카프카 자격증을 딴 기념으로, 카프카(Kafka)를 이용하여 어떻게 로그 관리를 하는지에 대해 이야기해 보겠습니다. PART1. 로그 1. 로그의 표면적 형태 로그(Log)는 기본적으로 시스템의 일련된 동작이나 사건의 기록입니다. 시스템의 일기장과도 같죠. 로그를 통해 특정 시간에 시스템에서 ‘어떤 일’이 일어났는지 파악할 수도 있습니다. 이렇게 로그는 시간에 따른 시스템의 동작을 기록하고, 정보는 순차적으로 저장됩니다. 이처럼 로그의 핵심 개념은 ‘시간’입니다. 순차적으로 발생된 로그를 통해 시스템의 동작을 이해하며, 일종의 생활기록부 역할을 하죠. 시스템 내에서 어떤 행동이 발생하였고, 어떤 문제가 일어났으며, 유저와의 어떤 교류가 일어났는지 모두 알 수 있습니다. 만약 시간의 개념이 없다면 어떻게 될까요? 발생한 모든 일들이 뒤섞이며, 로그 해석을 하는데 어려움이 생기겠죠. 이처럼 로그를 통해 시스템은 과거의 변화를 추적합니다. 똑같은 상황이 주어지면 항상 같은 결과를 내놓는 ‘결정론적’인 동작을 보장할 수 있죠. 로그의 중요성, 이제 조금 이해가 되실까요? 2. 로그와 카프카의 관계 자, 그렇다면! 로그(Log)와 카프카(Kafka)는 어떤 관계일까요? 우선 카프카는 분산 스트리밍 플랫폼으로서, 실시간으로 대용량의 데이터를 처리하고 전송하는데 탁월한 성능을 자랑합니다. 그 중심에는 바로 ‘로그’라는 개념이 있는데요. 좀 더 자세히 짚고 넘어가 보겠습니다. 3. 카프카에서의 로그 시스템 카프카에서의 로그 시스템은, 단순히 시스템의 에러나 이벤트를 기록하는 것만이 아닙니다. 연속된 데이터 레코드들의 스트림을 의미하며, 이를 ‘토픽(Topic)’이라는 카테고리로 구분하죠. 각 토픽은 다시 *파티션(Partition)으로 나누어, 단일 혹은 여러 서버에 분산 저장됩니다. 이렇게 분산 저장되는 로그 데이터는, 높은 내구성과 가용성을 보장합니다. *파티션(Partition): 하드디스크를 논리적으로 나눈 구역 4. 카프카가 로그를 사용하는 이유 로그의 순차적인 특성은 카프카의 ‘핵심 아키텍처’와 깊게 연결되어 있습니다. 로그를 사용하면, 데이터의 순서를 보장할 수 있어 대용량의 데이터 스트림을 효율적으로 처리할 수 있기 때문이죠. 데이터를 ‘영구적’으로 저장할 수 있어, 데이터 손실 위험 또한 크게 줄어듭니다. 로그를 사용하는 또 다른 이유는 ‘장애 복구’입니다. 서버가 장애로 인해 중단되었다가 다시 시작되면, 저장된 로그를 이용하여 이전 상태로 복구할 수 있게 되죠. 이는 ‘카프카가 높은 가용성’을 보장하는 데 중요한 요소입니다. ∴ 로그 요약 로그는 단순한 시스템 메시지를 넘어 ‘데이터 스트림’의 핵심 요소로 활용됩니다. 카프카와 같은 현대의 데이터 처리 시스템은 로그의 이러한 특성을 극대화하여, 대용량의 실시간 데이터 스트림을 효율적으로 처리할 수 있는 거죠. 로그의 중요성을 다시 한번 깨닫게 되는 순간이네요! PART2. 카프카 로그에 이어 에 대해 설명하겠습니다. 들어가기에 앞서 가볍게 ‘구조’부터 알아가 볼까요? 1. 카프카 구조 · 브로커(Broker) 브로커는 *클러스터(Cluster) 안에 구성된 여러 서버 중 각 서버를 의미합니다. 이러한 브로커들은, 레코드 형태인 메시지 데이터의 저장과 검색 및 컨슈머에게 전달하고 관리합니다. *클러스터(Cluster): 여러 대의 컴퓨터들이 연결되어 하나의 시스템처럼 동작하는 컴퓨터들의 집합 데이터 분배와 중복성도 촉진합니다. 브로커에 문제가 발생하면, 데이터가 여러 브로커에 데이터가 복제되어 데이터 손실이 되지 않죠. · 프로듀서(Producer) 프로듀서는 토픽에 레코드를 전송 또는 생성하는 *엔터티(Entity)입니다. 카프카 생태계에서 ‘데이터의 진입점’ 역할도 함께 하고 있죠. 레코드가 전송될 토픽 및 파티션도 결정할 수 있습니다. *엔터티(Entity): 업무에 필요한 정보를 저장하고 관리하는 집합적인 것 · 컨슈머(Consumer) 컨슈머는 토픽에서 레코드를 읽습니다. 하나 이상의 토픽을 구독하고, 브로커로부터 레코드를 소비합니다. 데이터의 출구점을 나타내기도 하며, 프로듀서에 의해 전송된 메시지를 최종적으로 읽히고 처리되도록 합니다. · 토픽(Topic) 토픽은 프로듀서로부터 전송된 레코드 카테고리입니다. 각 토픽은 파티션으로 나뉘며, 이 파티션은 브로커 간에 복제됩니다. 카프카로 들어오는 데이터를 조직화하고, 분류하는 방법을 제공하기도 합니다. 파티션으로 나눔으로써 카프카는 ‘수평 확장성과 장애 허용성’을 보장합니다. · 주키퍼(ZooKeeper) 주키퍼는 브로커를 관리하고 조정하는 데 도움을 주는 ‘중앙 관리소’입니다. 클러스터 노드의 상태, 토픽 *메타데이터(Metadata) 등의 상태를 추적합니다. *메타데이터(Metadata): 데이터에 관한 구조화된 데이터로, 다른 데이터를 설명해 주는 데이터 카프카는 분산 조정을 위해 주키퍼에 의존합니다. 주키퍼는 브로커에 문제가 발생하면, 다른 브로커에 알리고 클러스터 전체에 일관된 데이터를 보장하죠. ∴ 카프카 구조 요약 요약한다면 카프카는 1) 복잡하지만 견고한 아키텍처 2) 대규모 스트림 데이터를 실시간으로 처리하는 데 있어 안정적이고 장애 허용성이 있음 3) 고도로 확장 가능한 플랫폼을 제공으로 정리할 수 있습니다. 이처럼 카프카가 큰 데이터 환경에서 ‘어떻게’ 정보 흐름을 관리하고 최적화하는지 5가지의 구조를 통해 살펴보았습니다. 이제 카프카에 대해 조금 더 명확한 그림이 그려지지 않나요? 2. 컨슈머 그룹과 성능을 위한 탐색 카프카의 가장 주목할 만한 특징 중 하나는 ‘컨슈머 그룹의 구현’입니다. 이는 카프카의 확장성과 성능 잠재력을 이해하는 데 중심적인 개념이죠. 컨슈머 그룹 이해하기 카프카의 핵심은 ‘메시지를 생산하고 소비’ 하는 것입니다. 그런데 수백만, 심지어 수십억의 메시지가 흐르고 있을 때 어떻게 효율적으로 소비될까요? 여기서 컨슈머 그룹(Consumer Group)이 등장합니다. 컨슈머 그룹은, 하나 또는 그 이상의 컨슈머로 구성되어 하나 또는 여러 토픽에서 메시지를 소비하는데 협력합니다. 그렇다면 왜 효율적인지 알아보겠습니다. · 로드 밸런싱: 하나의 컨슈머가 모든 메시지를 처리하는 대신, 그룹이 부하를 분산할 수 있습니다. 토픽의 각 파티션은 그룹 내에서 정확히 하나의 컨슈머에 의해 소비됩니다. 이는 메시지가 더 빠르고 효율적으로 처리된다는 것을 보장합니다. · 장애 허용성: 컨슈머에 문제가 발생하면, 그룹 내의 다른 컨슈머가 그 파티션을 인수하여 메시지 처리에 차질이 없도록 합니다. · 유연성: 데이터 흐름이 변함에 따라 그룹에서 컨슈머를 쉽게 추가하거나 제거합니다. 이에 따라 증가하거나 감소하는 부하를 처리할 수 있습니다. 여기까지는 최적의 성능을 위한 ‘카프카 튜닝 컨슈머 그룹의 기본 사항’을 다루었으니, 이와 관련된 ‘성능 튜닝 전략’에 대해 알아볼까요? 성능 튜닝 전략 · 파티션 전략: 토픽의 파티션 수는, 얼마나 많은 컨슈머가 활성화되어 메시지를 소비할 수 있는지 영향을 줍니다. 더 많은 파티션은 더 많은 컨슈머가 병렬로 작동할 수 있음을 의미하는 거죠. 그러나 너무 많은 파티션은 *오버헤드를 야기할 수 있습니다. *오버헤드: 어떤 처리를 하기 위해 간접적인 처리 시간 · 컨슈머 구성: *fetch.min.bytes 및 *fetch.max.wait.ms와 같은 매개변수를 조정합니다. 그다음 한 번에 얼마나 많은 데이터를 컨슈머가 가져오는지 제어합니다. 이러한 최적화를 통해 브로커에게 요청하는 횟수를 줄이고, 처리량을 높입니다. *fetch.min.bytes: 한 번에 가져올 수 있는 최소 데이터 사이즈 *fetch.max.wait.ms: 데이터가 최소 크기가 될 때까지 기다릴 시간 · 메시지 배치: 프로듀서는 메시지를 함께 배치하여 처리량을 높일 수 있게 구성됩니다. *batch.size 및 *linger.ms와 같은 매개변수를 조정하여, 대기 시간과 처리량 사이의 균형을 찾을 수 있게 되죠. *batch.size: 한 번에 모델이 학습하는 데이터 샘플의 개수 *linger.ms: 전송 대기 시간 · 압축: 카프카는 메시지 압축을 지원하여 전송 및 저장되는 데이터의 양을 줄입니다. 이로 인해 전송 속도가 빨라지고 전체 성능이 향상될 수 있습니다. · 로그 정리 정책: 카프카 토픽은, 설정된 기간 또는 크기 동안 메시지를 유지할 수 있습니다. 보존 정책을 조정하면, 브로커가 저장 공간이 부족해지는 점과 성능이 저하되는 점을 방지할 수 있습니다. 3. 컨슈머 그룹과 성능을 위한 실제 코드 예시 다음 그림과 같은 코드를 보며 조금 더 자세히 살펴보겠습니다. NodeJS 코드 중 일부를 발췌했습니다. 카프카 설치 시에 사용되는 설정 파일 *server.properties에서 파티션의 개수를 CPU 코어 수와 같게 설정하는 코드입니다. 이에 대한 장점들을 쭉 살펴볼까요? *server.properties: 마인크래프트 서버 옵션을 설정할 수 있는 파일 CPU 코어 수에 파티션 수를 맞추었을 때의 장점 · 최적화된 리소스 활용: 카프카에서는 각 파티션이 읽기와 쓰기를 위한 자체 *I/O(입출력) 스레드를 종종 운영합니다. 사용 가능한 CPU 코어 수와 파티션 수를 일치시키면, 각 코어가 특정 파티션의 I/O 작업을 처리합니다. 이 동시성은 리소스에서 최대의 성능을 추출하는 데 도움 됩니다. · 최대 병렬 처리: 카프카의 설계 철학은 ‘병렬 데이터 처리’를 중심으로 합니다. 코어 수와 파티션 수 사이의 일치는, 동시에 처리되어 처리량을 높일 수 있습니다. · 간소화된 용량 계획: 이 접근 방식은, 리소스 계획에 대한 명확한 기준을 제공합니다. 성능 병목이 발생하면 CPU에 *바인딩(Binding)되어 있는지 명확하게 알 수 있습니다. 인프라를 정확하게 조정할 수도 있게 되죠. *바인딩(Binding): 두 프로그래밍 언어를 이어주는 래퍼 라이브러리 · 오버헤드 감소: 병렬 처리와 오버헤드 사이의 균형은 미묘합니다. 파티션 증가는 병렬 처리를 촉진할 수 있습니다. 하지만 더 많은 주키퍼 부하, 브로커 시작 시간 연장, 리더 선거 빈도 증가와 같은 오버헤드도 가져올 수도 있습니다. 파티션을 CPU 코어에 맞추는 것은 균형을 이룰 수 있게 합니다. 다음은 프로세스 수를 CPU 코어 수만큼 생성하여, 토픽의 파티션 개수와 일치시킨 코드에 대한 장점입니다. 파티션 수와 컨슈머 프로세스 수 일치의 장점 · 최적의 병렬 처리: 카프카 파티션의 각각은 동시에 처리될 수 있습니다. 컨슈머 수가 파티션 수와 일치하면, 각 컨슈머는 특정 파티션에서 메시지를 독립적으로 소비할 수 있게 되죠. 따라서 병렬 처리가 향상됩니다. · 리소스 효율성: 파티션 수와 컨슈머 수가 일치하면, 각 컨슈머가 처리하는 데이터의 양이 균등하게 분배됩니다. 이로 인해 전체 시스템의 리소스 사용이 균형을 이루게 되죠. · 탄력성과 확장성: 트래픽이 증가하면, 추가적인 컨슈머를 컨슈머 그룹에 추가하여 처리 능력을 증가시킵니다. 동일한 방식으로 트래픽이 감소하면 컨슈머를 줄여 리소스를 절약할 수 있습니다. · 고가용성과 오류 회복: 컨슈머 중 하나가 실패하면, 해당 컨슈머가 처리하던 파티션은 다른 컨슈머에게 자동 재분배됩니다. 이를 통해 시스템 내의 다른 컨슈머가 실패한 컨슈머의 작업을 빠르게 인수하여, 메시지 처리가 중단되지 않습니다. 마지막으로 각 프로세스별 컨슈머를 생성해서 토픽에 구독 후, 소비하는 과정을 나타낸 소스코드입니다. ∴ 컨슈머 그룹 요약 컨슈머 그룹은 높은 처리량과 장애 허용성 있는 메시지 소비를 제공하는 능력이 핵심입니다. 카프카가 어떤 식으로 운영되는지에 대한 상세한 부분을 이해하고 다양한 매개변수를 신중하게 조정한다면, 어떠한 상황에서도 카프카의 최대 성능을 이끌어낼 수 있습니다! ------------------------------------------------------------ ©참고 자료 · Jay Kreps, “I Hearts Logs”, Confluent · 위키피디아, “Logging(computing)” · Confluent, “https://docs.confluent.io/kafka/overview.html” · Neha Narkhede, Gwen Shapira, Todd Palino, “Kafka: The Definitive Guide” ------------------------------------------------------------
2023.09.19
사람이야기
[2023년 장기근속자 인터뷰] 장기근속할 수 밖에 없었던 브레인즈만의 매력은?(1)
사람이야기
[2023년 장기근속자 인터뷰] 장기근속할 수 밖에 없었던 브레인즈만의 매력은?(1)
지난해에 이어, 올해도 장기근속자가 많이 생겼습니다. 그만큼 브레인즈컴퍼니가 일하기 좋은 곳이라는 것을 증명하는 거겠죠? :) 브레인즈컴퍼니는 5년 단위로 장기근속 포상(포상 제도 보러가기)을 하고 있습니다. 이번에는 총 17명의 근속자들이 신년에 포상을 했는데요. 특히 처음으로 무려 20년 근속자가 등장했는데요. 5년, 10년, 15년, 20년 근속자 중 각 1명씩을 만나, 브레인즈컴퍼니에서 장기근속하며 있었던 에피소드, 장기근속할 수 있었던 브레인즈만의 매력 등에 대해 이야기 나눴습니다. 오늘은 20년 근속한 개발1그룹장 상호님, 15년 근속한 개발5그룹장 재형님의 이야기를 들어보겠습니다. ------------------------------------------------------------- Q. 장기근속 포상 소감 부탁드립니다. 잘 버텼고 고생했다는 뿌듯함과 썩은 물이 되지 말아야 한다는 부담감이 교차합니다. 10년 근속을 받을 때만 해도 뿌듯함이 강했는데 갈수록 부담감이 커지네요. 회사의 성장에 도움이 되도록 더욱 노력하겠습니다. Q. 입사 당시 브레인즈컴퍼니와 현재의 브레인즈컴퍼니를 비교해 봤을 때 달라진 점이 있다면? 회사명이 달라졌고, 동료들이 많아져 이름과 얼굴을 기억하기 힘들게 됐고, 파견 근무가 거의 없어졌고, 사무실 환경이 엄청 좋아졌고, 아메리카노와 음료를 마음껏 먹을 수 있게 됐고, 말 많은 사람이 늘었고, 성수동이 핫 플레이스가 됐다는 것. Q. 그동안 근무하면서 기억에 남는 에피소드에 대해 얘기해주세요. 많은 일들이 있었지만 입사 후 첫 파견근무를 나가서 했던 일이 가장 기억에 남네요. 저희 회사 포함해서 9개 정도 업체가 4개월 정도 진행한 프로젝트였는데, 가장 먼저 검수받고 마무리하면서 담당 고객님으로 부터 조그마한 감사의 선물을 받았을 때가 기억납니다. 아직도 제 책상 서랍에 그때 받은 선물이 있지요. Q. 가장 고마웠거나 기억에 남는 동료가 있으신가요? 부모님께서 갑자기 큰 병에 걸리셨을 때 가족처럼 걱정해주시고 병원도 알아봐 주신 분이 있습니다. 서울로 상경해서 가정을 꾸린 지 얼마 되지 않은 시점이었는데 물심양면으로 많은 도움을 받았습니다. 또 다른 분은 가족도 아닌데 보증을 서 주셨던 분이 있었습니다. 엄청 큰 금액은 아니었지만 당시 저에게는 꼭 필요한 돈이었고 마땅히 보증인을 구할 수 없었던 저에게는 참으로 고마운 분이었습니다. 이 외에도 많은 분들에게 감사한 일들이 많았습니다. 이 지면을 빌려 감사 말씀을 드립니다. Q. 장기근속할 수 있었던 브레인즈 컴퍼니만의 매력은? 힘들 때 같이 술 한잔 기울여주면서 위로해주고, 기쁠 때 나보다 더 기뻐해주고 축하해주는 사람들이 있다는 것이 매력인 것 같습니다. Q. 더 나은 브레인즈컴퍼니를 만들기 위해 어떤 변화가 필요할까요? YB, 브행시, 평등한 직장 문화 등 지금도 더 나은 브레인즈를 위해 많은 변화의 노력들을 하고 있다고 생각합니다. 그러한 노력들을 계속 하다 보면 자연스럽게 좀 더 나은 브레인즈가 되어있지 않을까요? Q. 앞으로 브레인즈컴퍼니에서 이뤄 보고 싶은 꿈이 있다면? 어느 좋은 날 추하지 않게 마무리 하고 싶네요. Q. 마지막으로 후배들에게 한 말씀 부탁드립니다. 중요한 것은 꺾이지 않는 마음입니다. 항상 건강하시고 행복하세요. Q. 장기근속 포상 소감 부탁드립니다. 브레인즈컴퍼니는 개인적으로 6번째 회사입니다. 사회생활 초기에 연봉을 쫓아 외국계 회사에서 일하기도 했고, 벤처 창업도 해봤습니다. 2007년에 입사한 이곳 브레인즈에서 근속 15년을 이룰 수 있다는 게 감개무량합니다. Q. 입사 당시 브레인즈컴퍼니와 현재의 브레인즈컴퍼니를 비교해 봤을 때 달라진 점이 있다면? 사무실 환경이 많이 달라졌습니다. 특히 예전엔 이중창이 아니어서 겨울 외풍에 엄청 추웠던 기억이 있네요(전 추위를 별로 안타는 체질 인데도). 그때는 사무실 내에서 흡연하는 것도 가능했던 시기였으니 보온과 환기의 딜레마에 사무실 분위기가 어땠을지는 상상에 맡기겠습니다. Q. 그동안 근무하면서 기억에 남는 에피소드에 대해 얘기해주세요. 13년 전쯤 보안USB 관련해서 국정원보안적합성 검증을 받기 위해 대전 국가보안기술연구소를 오가며 밤샘작업을 하면서 어렵게 검증 받았던 기억이 있습니다. 회사가 단체로 첫 해외연수를 갔을 때가 제일 행복했던 것 같습니다. 필리핀 세부에서 치안의 두려움을 뒤로한 채 해외에서 가진 회식자리는 잊을 수 없네요. Q. 가장 고마웠거나 기억에 남는 동료가 있으신가요? 저와 같이 일한 동료들은 모두 고마운 동료였습니다. 그 중 기억에 남는 동료는 대전에서 1년간 상주 프로젝트를 하며 같이 지낸 팀원입니다. 하루 중 잠자는 시간을 제외하곤 거의 같이 생활을 했습니다. 아침 운동 스쿼시부터 시작해서 주간업무, 저녁식사, 야근 그리고 피로를 푸는 한잔까지. 특히 이놈은 퇴사 이후에도 설, 추석 명절이 되면 꼭 안부 전화를 해서 기억에서 잊혀질 틈을 주지 않습니다. Q. 장기근속할 수 있었던 브레인즈 컴퍼니만의 매력은? 말이 통하는 동료, 상사, 후배들이 많은 것이 매력인 것 같습니다. 경쟁사 또는 다른 분야 회사에 다니는 지인들의 푸념을 듣다 보면, 우리 구성원들이 실력도 좋고 성격도 좋으며, 나도 그 중 일부라는 게 행운이라고 느끼게 됩니다. 난관에 봉착했을 때 같이 해쳐 나갈 팀원이 있었고, 타 팀원들의 도움도 잘 받을 수 있었습니다. Q. 더 나은 브레인즈컴퍼니를 만들기 위해 어떤 변화가 필요할까요? 구성원의 나이 차이가 최대 35세 이상 나는 것으로 알고 있습니다. 10년이면 강산도 변한다고 하는데, 세대들 간 생각의 차이, 가치관의 차이 등 여러 면에서 차이가 당연히 있겠죠. 회사의 새로운 정책은 내부 구성원의 생각 차이를 줄이고 공감대를 형성할 수 있도록 하는 것이 우선돼야 한다고 생각합니다. 그런 측면에서 YB-TF의 활동을 더 활발하게 해야 할 것 같습니다. Q. 앞으로 브레인즈컴퍼니에서 이뤄 보고 싶은 꿈이 있다면? 제가 혼자서 이룰 수 있는 꿈은 아니고 바람은 있습니다. 작년에 '에이프리카'라는 회사를 인수했다고 알고 있습니다. 브레인즈컴퍼니 및 자회사들이 잘 성장해서 맛도 좋고 가격도 저렴한 회사의 구내 식당에서 아침, 점심, 저녁을(집밥보다 맛있어서) 해결할 수 있는 날이 왔으면 좋겠습니다. Q. 마지막으로 후배들에게 한 말씀 부탁드립니다. “빨리 가려면 혼자 가고 멀리 가려면 함께 가라”라는 아프리카 속담을 좋아합니다. 개인이 아닌 팀의 일원일 때 가져야 하는 마음가짐을 가장 잘 나타내는 말인 것 같습니다. 한 가지 더 첨언하자면, 장기전에는 체력이 필수입니다. 각자의 체력을 유지하기 위해 좋아하는 운동 한 가지는 꾸준히 하는 것을 추천드립니다.
2023.03.08
회사이야기
[행사] 2023년 2월 BB데이
회사이야기
[행사] 2023년 2월 BB데이
2월 BB데이가 22일 수요일에 열렸습니다! 지난달에 이어 이번 2월에도 신입 사원이 입사해 같은 팀 동료들과 함께 참석했습니다. 최근 인수한 자회사 에이프리카에 계시던 선근님도 브레인저들을 보기 위해 한 걸음에 달려왔어요. 선근님은 주니어 브레인저들과도 서슴없이 소통하고 있어, 20대 브레인저들도 선근님과 이야기 나눌 기회가 자주 있습니다. 이날은 늘 먹던 치킨 대신 찜닭으로 대체해달라는 의견이 있어, 찜닭과 함께 지난해 인기 있었던 양장피도 함께 준비했어요. 그리고 BB데이에 빠질 수 없는 맥주와 각종 술! 특별히 40도가 넘는 안동 소주로 신입 사원을 격하게 환영해 줬어요. (신입 사원은 마시지 않고, 팀장을 비롯한 동료들만 마셨다는 후문) 이날은 특별히 팀을 나눠 여러가지 게임을 진행했습니다. 첫 번째로, 넌센스 퀴즈! 넌센스 퀴즈는 젊은 피로 뭉친 인프라웹팀에서 대부분 맞혔어요. 두 번째는 회사와 관련된 퀴즈! 구성원 인원 수 맞히기와 5초 안에 다른 팀원 5명 이름 말하기를 했는데요. 이번 퀴즈는 인프라코어팀에서 많은 점수를 획득해갔어요. 세 번째는 사자성어 이어 말하기! 다들 혹여나 본인이 못 맞히지 않을까라는 긴장감 속에 게임이 진행됐는데요. ITSM팀 제외, 다른 팀 모두 한 번에 성공했습니다. 이날 하이라이트였던 마지막 게임! 30점을 걸고, 각 팀 대표로 한 명 씩 나와 까나리커피 속 진짜 커피를 찾아봤습니다. 사진 보시면 누가 커피인지 바로 알아채셨죠? 30점 대역전극의 주인공은 바로... 꼴찌를 달리고 있던 ITSM팀! 가장 먼저 원샷하고 승리의 표정으로 다른 브레인저를 보고있는 ITSM팀장 희찬님. 한편, 까나리커피를 뿜을 두 브레인저를 사진에 담기 위해 대기했지만 게임 시작 전, "까나리도 참고 마시면 경품줍니다!"라는 말에 두 명의 브레인저도 모두 원샷을 해버렸습니다. 게임 시작 전 살짝 맛본 까나리커피는 도저히 마실 수가 없는 상태였는데......(독한 것들) 살신성인의 모습을 보여준 두 브레인저 덕분에 모두 웃음을 터트리며 즐거운 시간을 보냈어요. (뒤에서 계속 웃고 있는 파란 옷의 청룡님) 이렇게 2월 BB데이에서도 웃고 즐기며 한 달간의 스트레스를 풀고, 3월에도 열심히 달릴 준비를 해봅니다. 3월 BB데이에서 만나요!
2023.02.23
회사이야기
[행사] 친해지길 바라, '브행시'
회사이야기
[행사] 친해지길 바라, '브행시'
그 동안 진행됐던 브레인저의 행복한 시간, 브행시! 지난해 마지막 분기에 개발3그룹과 경영지원실에 신입 직원 2명이 입사했는데요. 이들을 환영하기 위해 사수와 선근님과 함께 브행시를 진행했습니다! 메뉴는 요즘 브레인저들에게 인기가 많은 잭슨 피자로 준비했어요. 입사한 지 약 1년 만에 사수로 참석한 현수님 선근님과 거리낌없이 대화하며 편안한 분위기를 만들어 준 덕분에, 웃음이 끊이질 않았습니다. 부서 간 교류를 위해 한 달에 한 번씩 열리는 브행시도 여러 차례 진행됐습니다! 지난 11월에는 QA팀이 평소 교류가 드문 프리세일즈팀과 경영지원실, 전략경영실을 선택해 자리를 만들었습니다. 12월에는 디자인팀이 평소 협업할 기회가 많은 개발3그룹과 인프라웹팀을 선택해, 서로 안면을 익히고 친해지는 시간을 가졌습니다. 올해 첫 브행시에서는 솔루션사업팀을 주축으로 TC팀, 프리세일즈팀, 경영기획실이 한 자리에 모였어요. 이날은 최근 인수한 에이프리카에 대해 이야기를 나누며, 앞으로 어떤 부분에서 함께 해나갈 수 있을지를 고민해보는 시간을 가졌습니다. 2023년 올해도 브레인저 간 소통을 위한 행사는 쭈~욱 이어집니다! 다음 행사 때는 또 어떤 부서들이 함께 모일지 기대되네요.
2023.01.18
기술이야기
JPA 도입을 위한 고민_ORM 기술을 써야 하나?
기술이야기
JPA 도입을 위한 고민_ORM 기술을 써야 하나?
몇 해전에 새로운 버전의 ITSM을 개발하기 시작하면서 JPA 기술 도입을 두고 고민했던 내용을 이제는 한 번쯤 정리해야 할 시점이라고 생각했다. 비단 JPA뿐 아니라 Spring Boot, Thymeleaf, Kotlin과 같은 새로운 개발 기술이나 Git, Gradle, Slack, PR처리 등 새로운 업무 환경까지 상당한 변화를 시작한 프로젝트였기 때문에 고민되는 것이 한두 개가 아니었지만 가장 길고 심각하게 고민했던 부분이라 따로 기록을 남겨본다. 이 글은 기술적인 내용은 아니고 어떻게 보면 당연하고 일반적인 내용이지만 다음 기회에 새로운 기술, 환경, 프로세스에 대한 도입을 검토할 때 조금이나마 도움이 됐으면 하는 마음이다. 여기에선 기술적인 내용에 대한 설명을 덧붙이지 않는 것은 관련된 내용은 'JAVA', 'ORM', 'JPA' 등으로 검색만 해도 비슷한 글들이 넘쳐나는 상황에 하나 더 덧붙이는 건 별로 의미가 없어 보이기 때문이다. 1. ORM에 대한 갑을논박 ORM에 대한 검색을 해보면 정말 여기서 다시 얘기하고 싶지 않을 정도로 오랜 시간동안 많은 사람들의 많은 의견들이 쏟아져 나온다. 게다가 더욱 혼란스러운 점은 구구절절 옳은 말들이라는 점이다. 여기서 뭔가 딱 부러진 결론을 내는 것은 불가능하고 너무 많은 의견들을 접하면서 점점 혼란스러워졌다. 대표적으로 참고 삼아 [자바 ORM 표준 JPA 프로그래밍]을 쓰신 김영한님의 글로 추정되는 링크 하나 투척~ https://okky.kr/article/286812 2. 우리에게 중요한 것 2.1. 진입장벽 : 진입장벽… 이 높다한들 하늘 아래 뫼… 일까? 어떤 기술이든 진입장벽은 그 도입 여부를 결정하는 가장 중요한 요소이다. 개인적으로 스터디를 하거나 한번 써보고 싶은 마음에서라면 진입장벽이 높을수록 구미가 당기는 변태적인 성향이 있는 사람도 있겠지만 이게 업무적인 접근이고 다른 팀원들과 함께 해야 하는 것이라면 진입장벽이 높이에 따라서는 그 기술의 효과가 인정되어도 도입이 쉽지 않은 것이 사실이다. JPA는 많은 사람들이 진입장벽이 높은 편이라고 입을 모아 말한다. 검토를 위해 살짝 들여다 보았을때도 쉬워 보이진 않았다. 말 그대로 ORM을 잘 쓰기 위해서는 Object와 Model에 대한 깊이 있는 사전 지식과 그 둘을 Mapping하는 개념적인 체계가 머리 속에 있어야 충분히 활용할 수 있을 것 같았다. 진입장벽이란 것도 사실 상대적인데 당시에 판단으로 우리 팀에서 도입하기에 진입장벽은 중상(中上)이라고 생각했다. 잘 자리잡기 쉽지 않을 것이고 시간도 오래 걸리리라 생각이 들었다. 이러한 점을 만회할 장점이 있는지 고민이 필요했다. 2.2. 제품 특징 : 우리가 만드는 제품/프로젝트의 특징에 맞는가? 당시에 새롭게 시작되는 프로젝트에서 만드는 제품은 기존 Zenius ITSM 시스템의 새로운 버전이다. 업무적으로 여러가지 특징이 있지만 Model과 관련되어서는 상대적으로 복잡한 구조라 할 순 없었고 극단적인 성능과도 거리가 좀 있다. 상대적으로 깔끔하고 명확한 모델링이 훨씬 더 중요하다고 판단했고 이러한 면은 JPA도입에 대한 긍정적인 입장을 가지게 했다. 쿼리와 관련되어서 수많은 간단한 작업들을 효과적으로 할 수 있을거란 기대감… 만약 만들려고 하는 제품이 특정 RDBMS에 의존적이거나, 혹은 인수인계나 유지보수가 어려울 정도로 비즈니스부터가 복잡한 형태라서 JPA를 쓰면서도 많은 성능 튜닝과 Native Query를 사용해야 하는 상황이거나 한다면 상황은 약간 달라졌을 것이다. 제품의 특징과 더불어 현재 프로젝트의 특성도 같이 살펴봐야 한다. 레거시 시스템의 업그레이드인지, 이번 프로젝트처럼 완전히 새 판에서 시작하는 게 가능한 상황인지… 새로운 제품을 만드는 프로젝트가 납기일이 정해진 프로젝트보다 나은 점은 그나마 초기 학습과 관련된 투입을 감안하기가 좀 더 수월하다는 점이다. SI같은 성격의 프로젝트라면 내부 고객뿐 아니라 상대방 고객도 설득해야 하는 문제점이 더 크다. 그런 면에서 이번 프로젝트는 JPA를 도입하거나 적용하기엔 괜찮은 상황이라는 게 결론이었다. 2.3. 조직/인력 구조 : 바로 우리가 쓰는 기술이다. 기술도 중요하지만 우리도 중요하다. 제목처럼 아무리 좋은 기술이라도 우리에게 맞냐는 게 결정적이다. 아래와 같은 질문들을 던져 보았다. • 현재 구성원들의 사전 지식은 어느 정도인가? • 우리 회사나 우리 팀에서 향후 관련된 개발자를 계속 충원할 수 있는가? • 우리 팀은 새로운 기술을 공부하며 도입할 의지를 가졌는가? • 회사는 관련된 교육과 초기에 벌어질 삽질을 감내할 수 있는가? 결론적으로 반반이었다. 우리 팀은 JPA에 대해서 아는 바가 거의 없는 상태였다. 게다가 지금이야 JPA를 사용하는 사람들도 더 늘어난 것 같고 우리 회사의 위상도 달라졌지만 당시의 우리 회사의 규모나 채용 형태를 봤을 때 관련된 개발자를 충원하는 것도 쉽지는 않을 것 같았다. 반대로 새로운 기술 도입에 대해서 강한 의지까지는 아니라도 긍정적은 자세를 가진 팀원과 초기 삽질에 대해서 어느 정도 감내할 수 있는 회사라는 것이 당시의 생각이었다. 그래도 반이 어디냐…는 게 최종 결론이었다. 2.4. 재미 : 그래서 땡기냐? 이성적이고 객관적인 여러 사실들을 매트릭스화해서 평가를 하면서도 스스로에게 던지는 마지막 질문은… 그래서 땡기냐는 거다. 모든 수치가 부정적인데도 끝까지 미련을 버리지 못하고 하고 싶은 경우가 있고, 모든 결과가 긍정적인데도 뭔가 하기 싫은 경우가 많은데, 결국 그것들은 결과로 이어지더라. 리누스 토발즈가 커널을 업그레이드할 때 가장 중요한 점으로 “얼마나 재미”가 있냐는 점이라고 얘기 했다는데, 우리는 그 정도 레벨의 개발자는 아직(!) 아니지만 우리에게도 “재미”는 가장 중요한 결정요인 중 하나이다. 스스로에게 물어보자. 재미있어 보이나? 그리고, 당시에 나에게는 무척 설레었던 일이었음을 고백해야겠다. 3. 염려스러운 점 3.1. 회귀본능 아직 익숙하지 않은 상태에서 개발을 진행하다 보면 도무지 JPA에서 왜 이런 쿼리를 만들어내는지 이해하기 어려운 경우를 종종 만난다. 혹은 익숙한 SQL이 머리속에서 막 떠오르는데 JPA로 적용하기 위해서 이런저런 삽질을 하다 보면… 아… 그냥 쿼리를 직접 짤까? Native Query도 Mybatis도 지원한다던데… 분명 이런 순간이 올 것이라고 예상했다. 공부를 하는 것도 좋지만 회사에서 업무로 일정에 맞춰 무언가를 만들어내야 하는 압박감은 따로 누가 주지 않아도 가지고 있는 것이니… 침착하자. 익숙하지 않고 힘들다고 나도 모르게 무언가 자꾸 길을 벗어나고 있는 건 아닌지 계속 주의 깊게 들여다 봐야 한다. 결론적으로 지금에 와서 돌이켜보면 초반에는 의도대로 생성되지 않는 쿼리들에 당황하긴 했지만, 약간의 삽질 후에는 왜 그런 상황이 발생되는지 알기가 어렵지는 않았다. 언젠가는 복잡한 통계나 로직 때문에 Native Query를 쓰게 될 날이 오겠지만 아직은 아니다. 3.2. 학습곡선 도입하려는 기술에 따라, 혹은 구성원의 사전 지식에 따라 학습곡선은 상당히 다양한 형태로 나타나는데, 평균적으로 JPA의 학습곡선은 전반적으로 경사가 아주 완만하다고 판단했다. 즉 도입 검토 시점의 진입장벽은 그 자체로 염려스러운 점이었다. 그 얘기는 수준을 일정수준 이상으로 끌어올리기 위해서 많은 시간과 노력이 팀 차원에서 필요하다는 얘기였고 필요로 하는 사전지식도 꽤 있을 듯 했다. 게다가 여러 가지 이유로 개인별로 나타나는 학습곡선도 많이 다르리라 예상했다. 뭔가 기막힌 해결책이 있으면 좋겠지만, 책을 구매해서 읽고 유료 강의, 무료 강의들을 공유하고… 서로서로 도와가며 공부하는 클래식한 정공법을 택했다. (그만큼 사실 효과는 기대하기 힘들다는 것도 알지만…) 지금 생각해보면 어떤 기술이나 프로세스든 누군가 소수의 인원이 먼저 출발해서 끌어줄 수 있는 형태가 되는 것이 제일 나은 것 같다. 서로서로 도움을 주면서 같이 커가는 모양새가 될 수 있을 듯 한데 우리는 그렇지는 못했고 모두가 공평(?)하게 모르는 상태에서 스타뜨~ JPA의 도입에 대한 학습곡선은 최종적으로 도입을 결정하는데 마지막까지 고민을 하게 했던 점이었다. 3.3. Mapper는 누가? 자, 우리는 Object도 Model도 이제까지 다 개발자가 했다. Object야 당연히 개발자가 만들어야 하겠지만 큰 기업에서처럼 DBA가 있거나 화면을 퍼블리싱해주거나 하지 않는다. 우리는 우리가 화면, 미들웨어, DB까지 직접 만들고 컨트롤 해왔다. 그게 좋은 것이냐의 문제를 여기서 얘기하자는 게 아니라 현실이라는걸 얘기하는 거다. 우리 팀원 모두가 JPA 초보이다. Mybatis를 사용하고 Spring을 사용해봤다고 하지만 ORM이나 SQL Mapper에 대한 심도있는 고민은 부족한 상황. 앞으로 JPA에서 Object와 Model은 그렇다고 해도 Mapper역할은 또 필요하지 않을까? 그런 가이드는 또 누가 해야 하나… 모든 개발자에게 알아야 한다고 말할 수 있지만 모든 개발자에게 팀에서 잘하는 메인이 되라고 하기엔 좀 애매한 영역이란 게 항상 있다. 프로그램의 오브젝트와 DB의 모델을 연결하는 Mapper를 잘 구성할 경험이 많은 개발자가 없다는 점은 학습곡선과 더불어 JPA 도입을 망설이게 했던 주요 고민이었다. 결론적으로 선임 개발자를 중심으로 착실히 스터디를 잘 해주었고 제품의 특성상 그렇게 복잡한 관계를 매핑할 일이 많지 않아서인지 초반에 몇 번 팀원들이 같이 머리를 싸매고 논의했던 것 외에 문제는 없었다. 4. 결론(현재까지는…) 도입 결정 후 꽤 긴 시간 제품을 만들고, 이제는 고객사에 납품도 하면서 기능을 계속 추가하고 있는 이 시점에서 돌아보면, 어떤 부분은 팀원들이 너무 잘해주고 있고, 어떤 부분은 전혀 예상하지 않은 형태로 진행이 돼서 난감한 경우도 있지만 전체적으로는 아주 만족하고 있다. 정확하게 측정을 하진 못했지만 쿼리를 직접 짜면서 개발을 진행하는 것보다 생산성 측면에서 확실히 나아졌다고 느끼고 있고 그 효과는 초반에 투입된 시간에 비례해 앞으로 더욱 더 기대된다. 만족하고 있다고는 했지만 여기서 만족이라는 게 성과나 기술적인 완성도에 대한 절대적인 만족은 아니다. 다만 아직 우리 제품에 대한 아쉬움을 가지는 것이 JPA 때문은 아니라는 점은 확실하다. JPA가 유행에 따라 생긴 기술이라고 하기엔 너무 오래된 기술이지만 그래서인가 ORM 자체에 대한 흥미도 점점 더 해가고 있다. JPA도 ORM에 대한 가장 최근의 시도중 하나겠지만, 앞으로 어떤 식으로 발전해 나갈지, 그에 따른 개발 업무는 또 어떤 식으로 변화가 있을지도 궁금하고… 어쨌든, 지금으로서는 다시 돌아가진 않을 생각이다.
2023.01.03
회사이야기
모비젠과 빅데이터∙AI 플랫폼 사업 MOU
회사이야기
모비젠과 빅데이터∙AI 플랫폼 사업 MOU
양사 보유한 빅데이터 및 AI 플랫폼 분야 전문성으로 시너지 창출 브레인즈컴퍼니(099390)는 빅데이터 플랫폼 전문 기업 모비젠과 ‘빅데이터 및 인공지능(AI) 플랫폼 사업’ 공동 추진을 위한 양해각서(MOU)를 체결했다고 8일 밝혔다. 이번 협약으로 양사는 빅데이터 플랫폼 분석 기술 및 AI 분야의 전문성을 바탕으로 시너지를 창출할 계획이다. 특히 공공분야의 빅데이터 및 AI 사업에 공동 대응할 방침이다. 최근 양사는 부동산 분야 빅데이터 플랫폼 및 혁신서비스 구축 관련 프로젝트를 컨소시엄 형태로 수주해 구축 중이다. 해당 프로젝트에서 모비젠은 빅데이터 연계 및 서비스 구축을 담당하고, 브레인즈컴퍼니는 AI 기술을 활용해 부동산에 대한 고객 맞춤형 혁신 서비스를 제공할 예정이다. 브레인즈컴퍼니는 AI와 빅데이터 기술을 접목한 지능형 IT 인프라 통합관리 솔루션 전문 기업으로, 국내 주요 공공 및 금융기관, 통신사, 대기업, 포털 등에 솔루션을 공급하고 있다. 최근 클라우드∙AI 플랫폼 전문기업 에이프리카를 인수하고 AI 플랫폼 분야로 사업을 확장 중이다. 모비젠은 통신 데이터를 비롯해 교통, 물류, 이커머스 등에서 발생하는 다양한 형태의 빅데이터를 수집∙저장∙분석하고 모니터링하는 기업이다. 최근 출시한 서비스형 소프트웨어(SaaS)기반의 빅데이터 분석 플랫폼은 다양한 저장소의 데이터를 시각적으로 분석해, 웹 기반 분석 애플리케이션 제작이 가능한 원스톱 환경을 제공한다. 심재걸 브레인즈컴퍼니 전략사업본부장은 “이번 MOU를 통해 양사는 빅데이터 및 AI 분야 사업에 대한 협력 강화를 바탕으로, 클라우드 기반 빅데이터 및 AI 플랫폼 전문 기업으로 발돋움할 것”이라고 말했다.
2022.12.08
회사이야기
에이프리카 타운홀 미팅
회사이야기
에이프리카 타운홀 미팅
지난 주 브레인즈컴퍼니는 클라우드•AI 플랫폼 전문기업인 에이프리카를 인수한 바 있습니다. 선근님은 지난 5일 가산에 위치한 에이프리카를 방문해, 에이프리카 구성원들에게 이번 인수를 진행하게 된 배경과 브레인즈컴퍼니 및 선근님 소개, 향후 운영방향에 대해 공유하는 시간을 가졌습니다. 에이프리카에 도착하니, 이규정 대표를 비롯한 에이프리카 직원들이 라운지에 모여 브레인즈컴퍼니를 반겨줬습니다. 이규정 대표가 선근님을 소개하며 PT가 시작됐습니다. 선근님은 먼저, 브레인즈와 에이프리카가 함께 하게 된 배경에 대해 설명했습니다. 브레인즈컴퍼니와 에이프리카 각각이 갖고 있는 장단점에 대해 설명하고, 함께 했을 때 어떤 시너지를 내며 동반성장할 수 있을지에 대해 이야기를 나눴습니다. 다음으로는 브레인즈컴퍼니에 대한 소개를 이어갔습니다. IT 인프라 통합관리 소프트웨어 업계의 최강자인 브레인즈컴퍼니의 조직, 연혁, 주요 제품 등을 비롯한 에이프리카 직원들이 궁금해할만한 내용들을 전달했습니다. 그리고 가장 집중도가 높았던, 선근님의 본인 PR 타임! 과학고 조기졸업 후 카이스트에 진학했지만, 당구를 즐겨치다 뒤늦게 학업에 열중했던 학창시절 이야기, 브레인즈컴퍼니 합류 전 사회 생활과 합류 후 겪었던 고난, 또 본인의 MBTI와 좌우명 등 많은 이야기를 전했습니다. 선근님의 입담 덕에 에이프리카 직원들은 중간중간 웃음꽃을 피우며 즐겁게 미팅에 참여할 수 있었습니다. 마지막으로, 향후 회사 운영 방향성에 대한 장•단기 계획과 비전을 이야기했습니다. 앞으로 각 대표들이 어떤 부분을 맡아 업무를 해나갈지, 또 조직 및 프로세스는 어떻게 정비해나갈지 등에 대해 친절하게 설명을 이어갔습니다. 1시간여 간의 PT가 끝난 후 질의응답 시간을 가지며 미팅은 종료됐습니다. 에이프리카 사옥을 나서며, 브레인즈컴퍼니와 에이프리카 대표의 기념 사진! 앞으로 브레인즈컴퍼니와 에이프리카가 클라우드 및 인공지능(AI) 분야에서 시너지를 내며 동반 성장해나가길 바라며, 많은 관심과 응원 부탁드립니다!
2022.12.06
회사이야기
브레인즈컴퍼니, 에이프리카 인수로 클라우드∙AI 사업 강화
회사이야기
브레인즈컴퍼니, 에이프리카 인수로 클라우드∙AI 사업 강화
클라우드 네이티브 인프라 환경에서 사업 시너지 극대화할 것 브레인즈컴퍼니(099390)는 클라우드 및 인공지능 사업 강화를 위해 에이프리카의 경영권 인수 계약을 체결했다고 2일 밝혔다. 이번 인수는 브레인즈컴퍼니의 기존 사업에 에이프리카의 인공지능과 클라우드 기술을 더해 클라우드 네이티브 인프라 환경에서 사업적 시너지를 극대화한다는 전략이다. 2000년 설립한 브레인즈컴퍼니는 21년 기준 공공분야 관제 소프트웨어 점유율(24.06%) 1위 기업이다. ▲다양한 IT 인프라를 단일 플랫폼에서 통합관리하는 지능형 모니터링 소프트웨어(EMS, Enterprise Management Software) ▲웹 애플리케이션의 지연시간을 실시간으로 관제하는 어플리케이션 성능 모니터링 소프트웨어(APM, Application Performance Management) ▲대용량 로그관리 소프트웨어 및 인공지능 소프트웨어 ▲IT서비스 통합관리(ITSM, IT Service Management) 소프트웨어 등을 주된 사업으로 하고 있다. 2011년에 설립된 에이프리카는 ▲인공지능 개발 클라우드 플랫폼(MLOps, Machine Learning Operations) ▲클라우드 매니지먼트 플랫폼(CMP, Cloud Management Platform) ▲클라우드 구축 컨설팅 및 서비스 사업을 주요 사업으로 한다. 강선근 브레인즈컴퍼니 대표이사는 “시장 초기부터 클라우드 네이티브 환경의 구축, 운영관리, 인공지능 등의 분야에서 착실히 다져온 에이프리카의 기술력을 높이 평가해 인수하게 됐다”며, “양사는 상호 협력으로 클라우드 및 인공지능 인프라에 관한 고객 수요를 충족시키며 사업 확장을 함께 도모해, 향후 에이프리카를 클라우드 네이티브 인프라 관리와 인공지능 개발 관리를 위한 솔루션 및 서비스 분야의 국내 대표주자로 육성할 계획”이라고 밝혔다.
2022.12.02
1