반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
EMS Solution
Features
클라우드 관리
서버관리
데이터베이스 관리
네트워크 관리
트래픽 관리
설비 IoT 관리
무선 AP 관리
교환기 관리
운영자동화
실시간 관리
백업 관리
스토리지 관리
예방 점검
APM Solution
애플리케이션 관리
URL 관리
브라우저 관리
ITSM Solution
서비스데스크
IT 서비스 관리
Big Data Solution
SIEM
AI 인공지능
Dashboard
대시보드
Consulting Service
컨설팅 서비스
고객
레퍼런스
고객FAQ
문의하기
가격
자료실
카탈로그
사용자매뉴얼
회사소개
비전·미션
연혁
2016~현재
2000~2015
인증서·수상
투자정보
재무정보
전자공고
IR자료
새소식
공고
보도자료
오시는 길
채용
피플
컬처
공고
FAQ
블로그
열기
메인 페이지로 이동
블로그
최신이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
최신이야기
검색
기술이야기
브라우저 모니터링 시스템 Zenius BRMS의 주요 기능과 특장점은?!
기술이야기
브라우저 모니터링 시스템 Zenius BRMS의 주요 기능과 특장점은?!
디지털 서비스에서 사용자가 직접 체감하는 경험은 서비스 만족도를 좌우합니다. 로그인 버튼을 눌렀는데 화면이 전환되지 않는다거나 chrome 환경에서만 동작하고 타 브라우저에서는 호환되지 않는 등의 문제는 누구나 한 번쯤 겪어봤을 것입니다. 이런 작은 불편이 반복되면 사용자는 쉽게 이탈하고, 브랜드 전체에 대한 신뢰도 역시 떨어집니다. 최종 사용자 경험을 모니터링 하지 않는 것은 최고의 스킬을 지닌 축구선수가 실내 경기장에서만 훈련받고 필드에서는 뛰어보지 않는 것과 같습니다. 그러나 PC, 모바일, 태블릿 등 사용자가 다양한 기기를 오가며 서비스를 이용하는 상황에서, 운영자가 모든 브라우저의 사용자 경험을 관찰하기는 쉽지 않습니다. 서버 로그를 수집하거나 백엔드 지표를 모니터링하는 것만으로는 사용자가 실제로 느끼는 경험을 알 수 없습니다. 결국 사용자 브라우저에서 실제로 발생하는 데이터를 기반으로, 체감 성능을 모니터링할 수 있는 체계가 필요합니다. 이에 따라서 Zenius BRMS 같은 브라우저 모니터링 시스템이 주목받고 있습니다. Zenius BRMS는 최종 사용자가 브라우저와 모바일 환경에서 겪는 여정을 그대로 추적해 보여줍니다. 페이지 로드 시간, 버튼 클릭 후 반응 속도, 오류 발생 여부까지 사용자가 겪는 체감 성능을 데이터로 전환해 운영자에게 제공합니다. 즉, Zenius BRMS는 사용자 경험의 사각지대를 제거하고, 서비스 품질을 선제적으로 관리하는 필수 솔루션입니다. 단순히 문제가 발생했을 때 대응하는 수준이 아니라, 데이터 기반으로 사용자 여정을 개선하고, 기업의 비즈니스 성과를 높이는 전략적 도구입니다. Zenius BRMS의 주요기능과 특장점을 자세히 살펴보겠습니다. 웹브라우저 모니터링 시스템, Zenius BRMS의 주요 기능 3가지 Zenius BRMS는 브라우저 환경에서 발생하는 성능 데이터와 사용자 행동 데이터를 실시간으로 수집하고 이를 자동으로 축적하여, 서비스 품질을 다각도로 분석할 수 있는 환경을 제공합니다. 운영자는 Core Web Vitals와 같은 성능 지표뿐만 아니라 세션 단위의 사용자 여정, 시간대별 성능 패턴까지 한눈에 조회할 수 있으며, 단일 항목 분석은 물론 복수 항목을 조합한 비교 분석도 수행할 수 있습니다. 이러한 기능은 실제 사용자의 경험을 정량적으로 파악하고 문제 발생 구간을 조기에 식별할 수 있도록 돕습니다. 특히 각 결과는 차트, 색상, 단위로 시각화되어 활용 효율을 높이며, 이를 기반으로 한 분석은 서비스 성능 개선, 사용자 만족도 제고, 예측 기반 운영 전략 수립 등 실질적인 성과 창출에 기여합니다. 1) 사용자 체감 성능 기반 모니터링 Zenius BRMS는 Core Web Vitals(LCP, INP, CLS)를 포함해 브라우저 성능의 핵심 지표를 자동으로 수집합니다. 세션, 페이지, 리소스, 에러 단위로 세분화된 모니터링을 제공하며, 퍼센타일 지표(P50, P75, P95)를 통해 평균값 뒤에 숨은 실제 사용자 분포까지 파악할 수 있습니다. 또한 대시보드를 통해 로드 시간, 에러율, 방문자 수 등의 체감 성능도 직관적으로 확인할 수 있습니다. 이를 통해 운영자는 서비스의 성능 저하 원인을 시스템 관점에서만 확인할 수 있는 것이 아니라 리소스별 응답시간, 지역별 성능 속도 등 사용자 관점에서까지 정량적으로 확인할 수 있습니다. 이러한 데이터는 궁극적으로 사용자 만족도를 높여 이탈률을 줄이고 서비스 신뢰성을 강화하는 데 기여합니다. 2) 사용자 행동 분석과 세션 리플레이 세션 리플레이 기능은 사용자가 실제로 클릭한 버튼, 이동한 페이지, 발생한 에러 상황을 재현하는 것을 지원합니다. 사용자의 유입부터 탐색, 이탈 경로까지의 여정을 재구성 해주어 사용자가 겪은 경험 저하 구간을 쉽게 식별할 수 있습니다. 뿐만 아니라, rage click(사용자가 짧은 시간 안에 같은 위치 반복적 클릭), dead click(사용자가 클릭했지만 아무런 동작도 일어나지 않은 클릭), error click(클릭 시 JavaScript 에러 등 오류가 발생하는 경우)과 같은 품질 저하 요인도 포착합니다. 실무자는 단순 수치 데이터가 아닌 실제 사용자 경험을 재현할 수 있어, 조기 문제 원인 파악을 할 수 있습니다. 이를 토대로 개발자, 운영자, 마케팅 담당자가 시나리오를 공유하고 협업한다면 서비스 개선 주기 단축과 전환율 제고를 기대할 수 있습니다. 3) 일별·시간대별 현황 분석 Zenius BRMS는 일별·시간대별로 성능 현황과 에러 분포를 분석해 시간 패턴 기반 인사이트를 제공합니다. 논리 연산 기반 필터링을 통해 특정 조건에 맞춘 분석도 가능하며 접속 환경별 데이터를 조합해 문제 발생 패턴을 정밀하게 탐지할 수도 있습니다. 예를 들어 이 분석 기능을 통해 매일 12시 모바일 환경에서 결제 오류가 잦은 것을 발견하고 점심시간 대에만 노출되는 팝업 스크립트를 점검할 수도 있습니다. 이처럼, 시간대별로 발생한 문제를 파악하는 것은 성능 저하의 주기적 원인을 식별하는 데 효과적입니다. 또한 서비스 배포 이후 영향도 분석에도 활용하여 QA(Quality Assurarance) 작업을 강화할 수 있습니다. 웹브라우저 모니터링 시스템, Zenius BRMS의 3가지 특장점 Zenius BRMS는 브라우저 성능 모니터링 기능만을 제공하는 것이 아니라, 운영자가 사용자들의 웹 브라우저 만족도 저하 원인을 직관적으로 파악할 수 있도록 설계된 사용자 친화 플랫폼입니다. 다음은 Zenius BRMS가 갖는 세 가지 주요 특장점입니다. 1)지능형 장애 감지와 알림 체계 운영자는 감시 항목별 심각도·임계치를 설정하고, 이벤트 발생 조건을 논리적으로 구성할 수 있습니다. 설정한 이벤트가 발생되면 단계별로 지정해둔 수신자에게 자동으로 알림이 보내집니다. 알림 방식으로 문자, 이메일, 푸시 앱, 음성 메일 등을 지원하며 기존 사용하시던 Slack, Teams 등의 툴과의 연동도 가능합니다. 운영자는 지능형 장애 감지와 알림 체계를 통해 장애 발생 사실을 실시간으로 파악하고 신속히 대응할 수 있습니다. 다단계 알림 구조는 체계적 보고 라인 구축을 통해 서비스 안정성을 제고합니다. 2)운영 관리 효율성과 보안 강화 Zenius BRMS에서는 수집된 데이터에 대해 어플리케이션/사용자 기준으로 개별 및 그룹 단위의 모니터링 권한을 설정할 수 있습니다. 운영 목적 또는 사용자 역할에 따라 권한을 설정할 수 있어 보안 관리에 용이합니다. 또한 브라우저 성능 수집 시의 세션 샘플링 비율, 리플레이 샘플링 비율 설정도 자유롭고 쉽게 변경할 수 있도록 돕기 때문에 운영 관리 효율성도 제고시킬 수 있습니다. 3)EMS 프레임워크 기반의 통합성과 확장성 Zenius BRMS는 EMS(Enterprise Management System) 프레임워크 환경에서 동작하기 때문에, 다른 관제 대상과 손쉽게 연계되어 통합 관리가 가능합니다. 이를 통해 운영자는 브라우저 성능뿐만 아니라 서버, 네트워크, 애플리케이션 등 다양한 관리 대상을 하나의 플랫폼에서 종합적으로 확인할 수 있습니다. 또한 모듈형 구조를 기반으로 해 확장이 용이하므로, 서비스 규모 확대나 신규 모니터링 항목 추가 시에도 유연하게 대응할 수 있습니다. 더불어 APM 성능 항목과 통합상황판(Overview)을 구성한다면, 웹 서비스 전반에 대한 문제 원인과 영향도를 신속히 파악할 수 있습니다. 이러한 EMS 기반 통합성과 확장성은 운영자의 관리 효율성을 높이고, 안정적인 서비스 품질 유지에 기여합니다. Zenius BRMS는 웹 서비스의 성능을 기록하는 것에 머무르지 않고, 실제 사용자가 느낀 속도와 반응을 데이터로 보여주며 행동 흐름까지 되짚어줍니다. Zenius BRMS는 모니터링 외에도 분석, 장애 감지, 알림 등 운영자를 위한 기능으로 안정적인 서비스 운영할 수 있도록 돕겠습니다. 기술 개발에만 힘쓰며 실제 사용자가 서비스를 얼마나 편리하게 사용하는지 고민하는 것을 놓치고 있었다면, 또는 다양한 디바이스나 지역에서의 성능 데이터 수집에 어려움을 가지고 있었다면, Zenius BRMS와 함께 서비스 품질의 한 끝을 달리해보는 것은 어떨까요? 빠르게 변하는 디지털 환경에서 사용자 경험을 놓치지 않으려는 운영자에게 Zenius BRMS 는 의지할 수 있는 기반이 될 것입니다.
2025.09.08
기술이야기
로그 수집기 Fluentd에 대해 알아야 할 5가지!
기술이야기
로그 수집기 Fluentd에 대해 알아야 할 5가지!
IT 환경의 변화가 점점 빨라지면서 기업들은 매일 쏟아지는 데이터를 관리해야 합니다. 특히 로그 데이터는 시스템 상태를 모니터링하고 문제를 사전에 발견하는 데 필수적이죠. 이때 다양한 장치와 프로그램에서 생성되는 로그를 제대로 수집하지 못하면 혼란이 커질 수 있습니다. 따라서 로그 관리를 위한 도구들이 주목을 받고 있는데요, 그 중 하나가 오늘 살펴 볼 Fluentd입니다. Fluentd는 여러 소스에서 발생할 수 있는 로그 데이터를 한 곳에 모아, 일관된 형식으로 변환하고 중앙에서 효율적으로 수집해주는 오픈소스 데이터 수집기인데요. 이번 시간에는 Fluentd가 어떤 방식으로 로그 수집을 하고 효율성을 높이는지, 함께 자세히 살펴보겠습니다. │Fluentd란 무엇일까요? Treasure Data가 게작하고 후원 한, Fluentd는 다양한 소스에서 발생하는 로그 데이터를 한 곳에 모아 수집합니다. 강력한 플러그인 시스템을 갖추어 있어 여러 상황에 유연하게 대처할 수 있죠. Fluentd는 데이터를 주로 *JSON 형식으로 처리하여 기계가 쉽게 읽고 분석할 수 있도록 하는데요. 주로 *Ruby로 개발되었고, 일부 성능 향상을 위해 C언어로 작성된 컴포넌트도 포함되어 있습니다. 대규모 환경에서도 잘 작동하여, 현재는 5만 개 이상의 시스템에서 로그를 수집하고 있는 사용자도 있죠. *JSON: JavaScript Object Notaion 약어로, 데이터를 교환하기 위한 경량 데이터 형식 *Ruby: 간결한 문법을 가진 객체 지향 프로그래밍 언어 이러한 성능과 효율성 덕분에 라인(Line), 아틀라시안(Atlassian), 아마존 웹서비스(AWS) 등과 같은 주요 기업들이 Fluentd를 사용하고 있습니다. │Fluentd가 필요해진 이유 앞에서도 간략히 설명했지만, Fluentd가 필요한 대표적인 이유는 다음과 같은데요. 데이터 통합과 관리의 필요성 증가 첫 번째 이유는 데이터 통합과 관리의 필요성이 증가하고 있다는 점입니다. 디지털 전환이 가속화되면서 기업들은 다양한 소스에서 엄청난 양의 데이터를 수집하고 관리해야 합니다. 이 과정에서 로그 데이터의 통합과 처리가 중요한 과제가 되었는데요. Fluentd가 다양한 로그 데이터를 중앙에서 효율적으로 수집하고 통합하는 데 최적화해 줍니다. 또한 데이터를 일관된 형식으로 변환하여, 다양한 시스템과 쉽게 연동할 수 있게 도와주죠. 클라우드 네이티브 환경에서의 유연한 확장성 두 번째 이유는 클라우드 네이티브 환경에서 쉽게 확장할 수 있다는 점입니다. 클라우드 네이티브 환경이 표준이 되면서, 애플리케이션과 서비스들이 분산된 환경에서 운영되고 있는데요. 이런 환경에서는 로그 수집과 관리가 더욱 까다로워집니다. Fluentd는 가볍과 확장 가능한 구조를 가지고 있어, 클라우드 환경에 최적화되어 있습니다. 특히 쿠버네티스(K8s, Kubernetes)와 같은 오케스트레이션 플랫폼과 잘 통합되어, 로그 데이터를 효율적으로 수집하고 처리할 수 있죠. 이러한 유연한 확장성과 클라우드 친화적인 특성 덕분에 Fluentd가 꾸준히 활용되고 있습니다. │Fluentd의 5가지 특징 Fluentd는 다양한 환경에서 효율적이고 안정적으로 로그 데이터를 수집할 수 있는데요. 대표적인 특장점을 살펴본다면 다음과 같습니다. 다양한 플러그인 지원 500개가 넘는 커뮤니티에서 만든 플러그인을 통해, 다양한 데이터 소스와 출력을 연결할 수 있습니다. 특정 로그 형식을 처리하거나 여러 데이터베이스와 연동할 수 있도록, 필요한 플러그인을 쉽게 추하여 기능을 확장할 수 있죠. 이 덕분에 사용자는 다양한 요구에 맞춰 시스템을 유연하게 구성할 수 있습니다. 효율적인 자원 사용 메모리 사용량이 적고(30-40mb) 높은 성능을 발휘합니다. 이는 시스템 리소스를 절약하면서도 많은 양의 로그 데이터를 빠르게 처리할 수 있게 하죠. 또한 대규모 서버 환경에서도 원활하게 동작하며, 리소스를 효율적으로 운영할 수 있습니다. 안정적인 로그 수집 Fluentd의 메모리와 파일 기반의 버퍼링 옵션을 제공하여, 데이터 손실을 방지합니다. 네트워크 장애가 발생해도 로그 데이터가 손실되지 않도록 보장하죠. 또한 장애 조치 구성과 고가용성(HA, High Availability) 설정을 통해 안정적으로 로그를 수집하고 처리할 수 있습니다. 클라우드 네이티브 친화성 Fluentd는 쿠버네티스와 같은 클라우드 네이티브 환경에서 원활하게 동작하도록 최적화되어 있는데요. 이러한 최적화는 현대적인 인프라에서 로그 수집을 용이하게 하며, 클라우드 기반 애플리케이션의 로그를 효과적으로 전송하고 관리할 수 있습니다. │Fluentd의 주요 구성요소 Fluentd는 로그 데이터를 효율적으로 수집하고 처리할 수 있도록, 8가지 주요 구성 요소로 이루어져 있습니다. 아래 내용을 통해 좀 더 자세히 살펴볼게요. Input Plugins : 로그를 수집 우선 서버나 애플리케이션에서 발생하는 다양한 형식의 데이터를 수집합니다. 대표적인 플러그인으로 tail, forward, http 등이 있는데요. 예를 들어 tail 플러그인은 리눅스의 tail 명령어처럼 파일의 끝부분을 지속적으로 읽습니다. 상황에 맞는 플러그인을 선택하여, 데이터를 중앙에서 효율적으로 수집할 수 있죠. Parser : 로그를 이해할 수 있는 형식으로 변환 Input 플러그인을 통해 들어온 여러 형태의 로그 데이터를 표준화된 형식으로 변환합니다. JSON, 정규 표현식, *Apache 로그 형식 등 다양한 포맷을 지원하여 로그 데이터를 구조화하고 분석에 적합한 형태로 바꿀 수 있습니다. 이를 통해 로그 데이터를 일관성 있게 처리할 수 있죠. *Apache 로그 형식: 웹 서버에서 생성하는 로그 파일의 형식으로, 주로 정보를 기록하는 구조화된 로그 형식 Engine : 로그 처리의 중심 Fluentd의 중앙 처리 장치입니다. Input에서 수집한 데이터를 처리하고, Filter와 Formatter를 거쳐 Output으로 전송합니다. 사용자 설정에 따라 Parser, Buffer, Filter, Formatter를 추가하거나 제외할 수도 있죠. 이를 통해 데이터 흐름을 유연하게 관리하고, 다양한 요구사항에 맞게 로그 처리를 최적화할 수 있습니다. Filter Plugins : 로그 필터링 로그 데이터를 변환하거나 특정 조건에 따라 필터링합니다. 불필요한 데이터를 제거하고 필요한 데이터만 추출할 수 있습니다. 예를 들어 특정 키워드가 포함된 로그만을 추출하거나, 민감한 정보를 마스킹하여 보안성을 높일 수 있습니다. 어렇게 하면 로그 데이터의 품질이 향상되고, 분석과 저장 효율성이 개선됩니다. Buffering : 로그 임시 저장 Input 플러그인에서 들어온 데이터를 바로 Output으로 보내지 않고, 중간에 Buffer에 임시 저장합니다. 데이터를 임시 저장하기 때문에 안정적으로 전달하고, 손실을 최소화하며, 로그 트래픽을 조절할 수 있습니다. Output Plugins : 로그 저장 수집한 로그 데이터를 최종 목적지로 전달하는 플러그인입니다. HDFS, AWS S3, Elasticsearch(엘라스틱서치)와 같은 다양한 저장소뿐만 아니라, Kafka와 같은 대규모 데이터 스트리밍 플랫폼에도 로그 데이터를 효율적으로 보낼 수 있습니다. 이를 통해 여러 저장소와 분석 도구에 로그 데이터를 통합하고, 실시간으로 처리하거나, 일정 시간마다 모아서 한꺼번에 처리하는 방식으로 워크플로우를 구성할 수 있죠. Formatter : 로그를 최종 형식으로 변환 데이터를 목적지에 맞는 형식으로 변환하는 플러그인입니다. 이를 통해 최종목적지에서 데이터를 쉽게 처리할 수 있도록 도와줍니다. 예를 들어 JSON 형식으로 변환해서 Elasticsearch에 저장하면, Elasticsearch가 데이터를 쉽게 검색하고 분석할 수 있습니다. 또는 데이터를 *CSV 형식으로 변환해서 데이터 분석 도구에 전달할 수도 있습니다. *CSV: 쉼표로 구분된 값들로 이루어진 간단한 텍스트 파일 형식 Routing and Tagging : 로그 데이터의 흐름 제어 로그를 수집하고 처리하는 과정에서 각 데이터의 태그를 붙여 분류합니다. 이 태그를 이용해 로그 데이터를 특정 조건에 따라 다양한 목적지로 보냅니다. 이렇게 하면 로그 데이터를 효율적으로 관리하고, 분석 및 모니터링 요구사항에 맞게 데이터를 나눌 수 있습니다. 예를 들어 에러 로그는 즉시 실시간 모니터링 시스템으로 보내고, 일반 정보 로그는 장기 저장소에 보관하는 등 다양한 방식으로 데이터를 처리할 수 있죠. 이렇게 Fluentd는 주요 구성을 통해 로그 수집과 전송 과정을 효과적으로 처리할 수 있습니다. 이 덕분에 로그 관리가 한결 쉬워지고, 수집된 로그 데이터는 다양한 분석 작업에 유용하게 활용될 수 있습니다. 이번 시간에는 Fluentd가 왜 필요해졌는지, 주요 특징과 어떤 주요 구성 요소로 이루어져 있는지 자세히 알아보았습니다. 내용에서도 살펴보았듯이 데이터 통합과 관리의 필요성이 증가하면서 다양한 소스에서 발생하는 로그 데이터를 중앙에서 효율적으로 수집하고 일관된 형식으로 변환할 수 있는, Fluentd의 중요성이 더욱 커지고 있습니다. 특히, 클라우드 네이티브 환경에 최적화된 유연한 확장성과 다양한 플러그인 지원, 안정적인 로그 수집, 효율적인 자원 사용 등으로 AWS, Atlassian 등 주요 기업들이 Fluentd를 채택하고 있죠. 다음 시간에는 Fluentd와 유사한 로그 수집기인 Logstash와 Filebeat에 대해 살펴보겠습니다.
2024.07.28
기술이야기
오픈소스 APM만으로 완벽한 웹 애플리케이션 관리, 가능할까?
기술이야기
오픈소스 APM만으로 완벽한 웹 애플리케이션 관리, 가능할까?
지난 글을 통해 옵저버빌리티(Observability) 중요성과 APM 차이점을 자세히 살펴보았습니다(자세히 보기). 옵저버빌리티는 APM 한계성을 극복하는 방법은 맞지만, 어느 하나가 더 나은 방법이라기 보단 조직이나 사용자 상황에 따라 적합한 선택해야 하는 것이 주요 포인트였습니다. 하지만 상용 APM 제품은 다소 높은 구매 비용으로 인해, 규모가 작은 기업의 경우 부담이 될 수 있는데요. 이 때 오픈소스 APM 솔루션이 효과적인 대안이 될 수 있는데요. 따라서 이번 시간에는 주요 오픈소스 APM 알아보고, APM 상용 제품과는 어떤 차이점이 있는지 살펴보겠습니다. │오픈소스(Open Source) 소프트웨어란? 오픈소스(Open Source)란 개발 핵심 소스 코드를 공개하여 누구나 접근하고, 수정하여, 배포할 수 있는 소프트웨어를 말합니다. 얼핏 자유 소프트웨어와 비슷하게 느껴질 수 있지만 조금 다른 의미를 가지는데요. 자유 소프트웨어는 사용자의 '자유'를 강조하지만, 오픈소스는 소스 코드의 '접근성과 협업'을 중시합니다. 대표적으로 관계형 데이터베이스인 MySQL, 웹 브라우저인 Firefox, 컨테이너 가상화 플랫폼인 Docker가 대표적인 오픈소스 소프트웨어라고 할 수 있습니다. 현재 국내 디지털플랫폼 정부 구축 정책 기조에 따르면, 오픈소스 소프트웨어는 여러가지 장점을 갖고 있는데요. 오픈소스 장점 오픈소스의 첫번 째 장점은 진입 비용이 낮다는 점입니다. 공개된 소스를 기반으로 수정과 배포가 가능하기 때문에 새로운 기반 기술을 만들어 갈 경우, 비용을 줄일 수 있습니다. 두 번째 장점은 MSA 아키텍처의 기술적 토대가 오픈소스에 기반한다는 점입니다. 최근 소프트웨어 개발 환경은 오픈소스 의존도가 높아지고 있는데요. 이는 오픈소스가 특정 벤더에 종속되지 않아 독립성을 보장한다는 점에서, 오픈소스의 가장 큰 장점이라고 할 수 있습니다. 그에 반해 오픈소스 단점도 명확한데요. 오픈소스 단점 첫 번째 단점은 상용 소프트웨어와 비교해 매뉴얼이 빈약한 경우가 많다는 점입니다. 이에 따라 실제 개발 단계에서 운영이 지연될 가능성이 높아지죠. 두 번째 단점으로는 기술 지원 체계는 오픈소스 커뮤니티에 의존하고 있기 때문에, 유지보수에 큰 어려움이 따른다는 점입니다. 물론 특정 벤더에 종속되지 않는 독립성을 취할 수 있지만, 지속적인 기술지원은 어렵죠. 그렇다면 현재 국내에서 가장 많이 사용하는 오픈소스 APM 소프트웨어는 무엇인지, 자세히 살펴보겠습니다. │오픈소스 APM 종류 오픈소스 APM 종류는 다양하지만 대표적으로 Scouter, Pinpoint, Prometheus & Grafana에 대해 알아보겠습니다. 1. Scouter 첫 번째로 소개해 드릴 오픈소스 APM은 스카우터(Scouter)입니다. 스카우터는 LG CNS에서 만든 오픈소스 APM 소프트웨어로, 자바를 사용하는 애플리케이션과 컴퓨터 시스템 성능을 모니터링합니다. 이 소프트웨어는 Window, Linux, Mac 등 다양한 운영체제(OS)에서 사용할 수 있으며, 주로 이클립스 플랫폼에서 개발되었습니다. 즉 여러 환경에서 자바 애플리케이션 데이터를 수집하고, 성능 상태를 효과적으로 할 수 있다는 점이 스카우터의 주요 기능입니다. 1-1. Scouter 아키텍처 Scouter는 주로 네 가지 주요 컴포넌트로 구성되어 있는데요. 자세히 살펴보도록 하겠습니다. Java Agent Java 기반의 웹 애플리케이션(예: Tomcat, JBoss, Resin)과 스탠드얼론 Java 애플리케이션을 모니터링하는 모듈입니다. 이 에이전트는 웹 애플리케이션 서버(WAS)에 설치되어 애플리케이션 성능 정보(예: 메소드 실행 시간, 사용자 요청 처리 시간 등)를 수집하고 Scouter 서버로 전송합니다. Host Agent 이 에이전트는 운영 체제(예: Linux, Unix, Windows 등)에 설치되어 시스템 하드웨어 리소스 사용 상태를 모니터링합니다. CPU 사용률, 메모리 사용량, 디스크 I/O와 같은 정보를 수집하여 Scouter Server로 보내주는 역할을 합니다. Scouter Server(Collector) 이 서버는 Java Agent와 Host Agent로부터 데이터를 수집해 저장합니다. 사용자는 클라이언트를 통해 이 데이터에 접근할 수 있으며, 이를 통해 애플리케이션의 성능을 모니터링하고 분석할 수 있습니다. Scouter Client 사용자는 Scouter Client를 통해 서버에 접속하여, 서버로부터 수집된 데이터를 조회할 수 있습니다. 이 클라이언트는 다양한 성능 지표를 기반으로 한 시각적인 대시보드를 제공하여, 애플리케이션과 시스템 성능 상태를 효과적으로 모니터링할 수 있게 도와줍니다. 1-2. Scouter 주요기능 출처ⓒ tistory_chanchan-father Scouter의 주요기능 중 하나는 'XLog'인데요. 이 기능은 트랜잭션 응답 시간을 시각적으로 표현하여 시스템 성능을 모니터링하는 데 유용합니다. 액티브 서비스가 종료될 때마다 XLog 차트에 점으로 나타나기 때문에, 개발자는 트랜잭션 처리 시간을 간편하게 확인할 수 있습니다. 각 점을 클릭하여 관련 트랜잭션의 자세한 정보를 얻을 수 있으며, 시스템 분석과 성능 개선 작업에도 도움을 줍니다. 2. Pinpoint 두 번째로 소개해 드릴 오픈소스 APM는 '핀포인트(Pinpoint)'입니다. 핀포인트는 네이버에서 2012년 7월부터 개발을 시작해, 15년 초에 배포한 오픈소스 APM 솔루션입니다. 핀포인트는 MSA를 위한 국산 오픈소스 APM으로 각광 받아왔습니다. 2-1. Pinpoint 아키텍처 핀포인트 아키텍처는 다음과 같은 네 가지 주요 구성요소는 이루어져 있는데요. 아래 내용을 통해 자세히 살펴보겠습니다. Agent 핀포인트의 에이전트는 애플리케이션 서버에 java-agent 형태로 추가되어, 애플리케이션 성능 데이터를 실시간으로 수집합니다. 이 에이전트는 수집한 데이터를 Collector로 전송하며, 이 과정을 통해 성능 모니터링과 문제 해결에 필요한 중요 정보를 제공합니다. Collector Agent로부터 받은 프로파일링 데이터를 수집하고 처리하는 역할을 합니다. Collector는 이 데이터를 구조화하여 빅데이터 데이터베이스인 HBase로 전송합니다. 이를 통해 데이터가 안정하게 저장되고 필요할 때 쉽게 접근할 수 있습니다. HBase Hbase는 분산 데이터베이스로서, 핀포인트 시스템에서 성능 데이터를 저장하고 검색하는 중심적인 역할을 합니다. 대규모 데이터 볼륨을 효율적으로 처리할 수 있는 구조로 설계되어 있으며, 수집된 데이터의 신속한 처리와 안정적인 저장을 보장합니다. Web UI 웹 인터페이스를 통해 사용자에게 데이터를 시각적으로 제공하는 구성 요소입니다. 이 데이터는 핀포인트 에이전트가 애플리케이션 서버에서 수집한 정보를 기반으로 생성됩니다. 이렇게 수집된 데이터는 서버를 통해 Web UI로 전송되면, 사용자는 UI를 통해 다양한 형태의 성능 지표를 조회하고 분석할 수 있습니다. 이러한 구성을 통해 네이버 핀포인트는 애플리케이션 성능 문제를 진단하고 해결하는 데 필요한 정보를 제공합니다. 2-2. Pinpoint 주요기능 그 다음으로 핀포인트의 대표적인 주요 기능에 대해 자세히 알아보겠습니다. 서버맵 이 기능은 분산 환경에서 각 노드 간의 트랜잭션 흐름을 시각적으로 표현하여, 트랜잭션 성공/실패와 응답 시간 분포를 실시간으로 모니터링할 수 있습니다. 이를 통해 시스템 부하 상태와 성능 병목 지점을 식별할 수 있죠. 콜스택 콜스택(Call Stack) 기능은 트랜잭션의 세부 실행 과정을 추적하여, 성능 문제 원인을 분석하고, 코드 최적화를 지원합니다. 이 기능은 각 콜스택에서 소요되는 시간과 발생하는 예외 상황까지 자세히 보여주어, 성능 병목 현상 진단에 도움을 줍니다. 트랜잭션 필터 사용자는 트랜잭션 필터 기능을 이용해 응답 시간이 긴 트랜잭션, 특정 사용자나 IP 주소에서 발생한 트랜잭션 등을 세부적으로 필터링하여 분석할 수 있습니다. 이는 특정 조건에 따른 트랜잭션의 세부 사항을 더 깊이 이해하는 데 유용합니다. Application Inspector 이 기능은 애플리케이션 성능 지표를 시간별/일별로 분석하며 CPU 사용률, 메모리 사용량, JVM 상태 등을 체계적으로 관리하는 기능을 제공합니다. 이를 통해 애플리케이션의 전반적인 성능 관리가 가능합니다. 3. Prometheus 세 번째로 소개해 드릴 오픈소스 APM는 '프로메테우스(Prometheus)'입니다. 프로메테우스는 관제 대상으로부터 모니터링 메트릭 데이터를 저장하고, 검색할 수 있는 시스템인데요. 무엇보다 CNCF 재단으로부터 '클라우드 네이티브에 적합한 오픈소스 모니터링'으로 각광 받아 쿠버네티스(Kubernetes, K8s) 이후 두번째로 졸업한 프로젝트입니다. 프로메테우스는 CNCF 졸업 인증서를 받은 이후 시장에서 많은 주목을 받았습니다. 구조가 간단해서 운영이 쉽고, 다양한 모니터링 시스템과 연계할 수 있는 여러 플러그인을 보유하고 있기 때문이죠. 이러한 장점은 클라우드 네이티브를 위한 기초적인 오픈소스로 각광 받게 되었습니다. 3-1. Prometheus 아키텍처 프로메테우스에서 가장 큰 특징은 에이전트(Agent)가 아닌, 메트릭(Metric)을 통해 데이터를 수집한다는 점입니다. 메트릭이란 이전 시간에도 살펴봤듯이, 현재 상태를 보기 위한 시계열 데이터를 의미합니다. 프로메테우스는 이러한 메트릭 수집을 위해 다양한 수집 도구를 사용하는데요. 좀 더 자세히 살펴보도록 하겠습니다. Application 위 아키텍처에서 수집하고자 하는 대상은, 애플리케이션으로 표현됩니다. 주로 MySQL DB과 Tomcat과 같은 웹 서버까지 다양한 서버와 WAS가 모니터링 대상이 됩니다. 프로메테우스는 이를 주로 Target System으로 표현하고 있습니다. Pulling 프로메테우스에서는 각 Target System에 대한 메트릭 데이터 수집을 풀링(Pulling) 방식을 통해 데이터를 수집합니다. 프로메테우스는 앞서 언급했듯 별도의 에이전트로 데이터를 수집하지 않습니다. Prometheus Server에서 자체적인 Exporter를 통해 메트릭 읽는 방식을 사용하죠. 보통 모니터링 시스템 에이전트는, 모니터링 시스템으로 메트릭을 보내는 푸쉬(Push) 방식을 사용합니다. 특히 푸쉬 방식은 서비스가 오토 스케일링 등과 같이 환경이 가변적일 경우 유리한데요. 풀링 방식의 경우 모니터링 대상이 가변적으로 변경될 경우, 모니터링 대상의 IP 주소를 알 수 없기 때문에 정확한 데이터 수집이 어려워집니다. Service Discovery 이처럼 정확한 데이터 수집을 해결하기 위한 방안이 서비스 디스커버리(Service Discovery) 방식입니다. 서비스 디스커버리는 현재 운영 중인 대상 목록과 IP 주소를 동적으로 수집하는 프로세스입니다. 예를 들어 file_sd, http_sd 방식부터 디스커버리 전용 솔루션인 Consul을 사용하죠. Exporter Exporter는 모니터링 대상 시스템에서 데이터를 수집하는 역할을 합니다. 별도의 에이전트는 아니지만, 에이전트와 비슷하게 데이터를 수집하는 역할을 합니다. HTTP 통신을 통해 메트릭 데이터를 수집하며, Exporter를 사용하기 어려울 경우 별도 Push gateway를 사용합니다. Prometheus Server 프로메테우스 서버는 데이터 수집, 저장, 쿼리를 담당하는 중앙 구성 요소입니다. HTTP 프로토콜을 사용하는 것이 특징이며, Exporter가 제공하는 HTTP 엔드포인트에 접속해 메트릭 데이터를 수집합니다. Alert Manager 사용자에게 알람을 주는 역할을 담당합니다. Prometheus는 타 오픈소스 모니터링 솔루션과 달리 Alert Manager UI 기능을 제공하여 일부 제한된 데이터를 시각화할 수 있습니다. 하지만 시각화 기능이 제한적이므로, 보통 Grafana라는 오픈소스 대시보드 툴을 사용하여 UI를 보완합니다. 3-2. Grafana '그라파나(Grafana)'에 좀 더 자세히 설명한다면, 데이터 분석을 시각화하기 위한 오픈소스 대시보드 도구입니다. 다양한 플러그인을 이용해 프로메테우스와 같은 모니터링 툴과 *그라파이트(Graphite)1, *엘라스틱서치(Elasticsearch)2, *인플럭스DB(InfluxDB)3 와 같은 데이터베이스와 연동하여 사용자 맞춤형 UI를 제공합니다. 특히 방대한 데이터를 활용해 맞춤형 대시보드를 쉽게 만들 수 있는 것이 그라파나의 큰 장점이죠. *1. Graphite: 시계열 데이터를 수집하고 저장하며, 이를 그래프로 시각화하는 모니터링 도구 *2. Elasticsearch: 다양한 유형의 문서 데이터를 실시간으로 검색하고 분석하는 분산형 검색 엔진 *3. InfluxDB: 시계열 데이터의 저장과 조회에 특화된 고성능 데이터베이스 그라파나의 주요 특징은 플러그인 확장을 통한 데이터 시각화와 템플릿 지원으로, 다른 사용자 대시보드 템플릿을 쉽게 가져와 사용할 수 있다는 점입니다. 이처럼 Promeheus 장점은 Exporter를 통한 다양한 메트릭 데이터 수집과 3rd Party 솔루션과 연계가 수월하다는 점입니다. 오픈소스로 IT 인프라를 구성하는 기업의 경우 Prometheus와 Grafana를 연계하여, 서비스 운영현황을 모니터링 할 수 있습니다. 지금까지 오픈소스 APM가 무엇이고, 각각의 아키텍처와 주요 기능은 무엇인지 살펴보았는데요. 그렇다면 상용 APM 제품과, 오픈소스 APM는 어떤 차이점이 있을까요? │상용 APM 제품 vs 오픈소스 APM 제품 앞에서 소개해 드린 오픈소스 APM 중, 대표적으로 프로메테우스와 핀포인트를 상용 APM 제품과 비교해 보겠습니다. Prometheus vs 상용 APM 제품 우선 프로메테우스를 대표하는 장점은 유연한 통합성입니다. 마이크로서비스가 대세 기술로 자리 잡으면서, 인스턴스를 자주 확장하거나 축소하는 것이 자유로운 요즘인데요. 만약 이 작업을 수동으로 관리한다면 매우 어려울 수 있습니다. 하지만 프로메테우스를 사용하면 이런 문제를 해결할 수 있죠. 프로메테우스는 쿠버네티스와 같은 여러 서비스 디스커버리 시스템과 통합되어, 쿠버네티스 클러스터 내의 모든 노드와 파드에 발생하는 매트릭을 자동으로 수집할 수 있습니다. 이러한 기능은 마이크로서비스 환경에서 효율적으로 모니터링 할 수 있습니다. 하지만 한계점도 있는데요. 바로 실시간 데이터 확인이 어렵다는 점입니다. 프로메테우스는 풀링(Pulling) 주기를 기반으로 메트릭 데이터를 수집하기 때문에, 순간적인 스냅샷 기능이 없습니다. 수집된 데이터는 풀링하는 순간 스냅샷 데이터라고 볼 수 있죠. 이러한 단점은 APM에서 일반적으로 지원하는 실시간성 트랜잭션 데이터를 대체하기 어렵습니다. 반면에 상용 APM 제품은 어떨까요? 대표적으로 Zenius APM 사례를 통해 살펴보겠습니다. Zenius APM은 에이전트가 자동으로 메트릭을 수집하여 서버로 전송하여, 데이터를 실시간으로 처리할 수 있습니다. 또한 에이전트가 푸쉬(Push) 방식이기 때문에, 데이터의 지연이 풀링 방식에 비해 적고 데이터가 더 정확하게 수집되죠. 또한 Raw Data 기반의 실시간 과거 데이터를 통해 정밀한 장애 원인 분석이 가능합니다. 과거 시점 스냅샷 기능도 있어 문제 발생 시점을 정확히 파악하여, 문제 해결 시간을 단축시킬 수 있죠. Pinpoint 장단점 vs 상용 APM 제품 그 다음으로는 핀포인트를 대표하는 장점에 대해 알아 보겠습니다. 핀포인트 장점으로는 클라우드 환경에서 뛰어난 가시성을 보여준다는 점입니다. 클라우드에서의 웹 애플리케이션 서버(WAS)는 유연성과 확장성이 뛰어나지만, 복잡한 시스템 구조로 인해 모니터링이 어려울 수 있는데요. 핀포인트는 이러한 환경에서, 각 가상 서버의 성능을 실시간으로 파악하고 문제를 신속하게 진단하는데 큰 도움을 줍니다. 그에 반해 핀포인트에 단점은 다양한 기능이 부족합니다. 핀포인트는 JVM 기반 데이터의 모니터링이 일부 제한되는데요. 대시보드의 'Inspector'와 같은 일부 기능이 지원되지 않아, 이용에 어려움이 있습니다. 또한 다수 트랜잭션이 동시에 실행될 때 특정 트랜잭션이 오래 걸리거나 에러가 발생할 경우, 그 원인을 파악하기 어렵습니다. 이는 세부적인 콜백 정보를 충분히 제공하지 않았기 때문이죠. 그렇다면 상용 APM 제품은 어떨까요? 이번에도 Zenius APM를 통해 자세히 살펴보겠습니다. Zenius APM은 다양한 트랜잭션 모니터링 기능을 제공하는데요. 이를 통해 사용자는 트랜잭션 성능을 실시간으로 파악하고, 잠재적 문제를 빠르게 진단할 수 있습니다. 또한 이 시스템은 대량으로 동시 접속자를 대량으로 관리할 수 있어, 피크 타임에 발생할 수 있는 성능 저하를 사전에 감지하고 대응할 수 있도록 지원합니다. 비교표 구분 Zenius APM Prometheus Pinpoint Scouter 기술지원 벤더 지원을 통한 빠른 초기 설정, 기술지원 용이 오픈소스 기반의 기술지원 불가로 초기 학습 필요 오픈소스 기반의 기술 지원 불가로 초기 학습 필요 오픈소스 기반의 기술 지원 불가로 초기 학습 필요 사용자 인터페이스 실시간 트랜잭션 처리, 액티브 서비스 모니터링, 동시 접속 사용자 수 등, 사용자 정의 실시간 모니터링 상황판 구성 Grafana 플러그인 연계로 다양한 컴포넌트 모니터링 가능 토폴로지 일부 모니터링 불가, 제한적으로 사용자 동시 접속자 수 모니터링 가능, 사용자 정의 기반 모니터링 불가 기능 제한에 따른 간소화된 UI 제공, 사용자 정의 기반 모니터링 불가 컨테이너 모니터링 가능 가능 가능 불가 쿠버네티스 모니터링 가능 가능 불가 불가 연관 인프라 정보 모니터링 연관된 WAS 서버, DB서버, DB확인, 해당 인프라 상세 정보 제공 불가 재한적으로 연관 인프라 모니터링 제공 불가 Raw Data 과거 시점 재현 초 단위 데이터를 기준으로 장애 발생시점 등 과거 상황을 그대로 재현함 불가 불가 불가 리포팅 사용자 정의 기반 리포팅 서비스 제공 써드 파티를 이용한 제한적인 리포팅 기능 제공 불가 불가 이번 시간에는 주요 오픈소스 APM와 상용 APM 차이점을 살펴보았습니다. 각 솔루션은 분명한 장단점을 갖고 있으며, 모든 상황에 완벽한 솔루션은 없습니다. 그러나 여기서 주목해야 할 것은, APM의 핵심이 '트랜잭션을 얼마나 효과적으로 모니터링할 수 있는가'라는 점입니다. 이 측면에서 오픈소스 APM은 한계가 있으나, 상용 APM 제품은 이를 효과적으로 수행할 수 있습니다. 물론 비용 면에서 오픈소스 APM와 비교해, 상용 APM 제품이 부담스러울 순 있습니다. 하지만 트랜잭션 모니터링 관리의 중요성을 고려한다면, 이러한 투자는 가치가 있습니다. 더 나아가 심층적인 실시간 데이터 모니터링, 신속한 데이터 처리, 전문적인 기술적인 기술 지원, 보다 복잡한 시스템 환경에서 효과적인 트랜잭션 관리를 우선시 한다면 Zenius APM 제품이 더더욱 적합할 것입니다. ?더보기 Zenius APM 더 자세히 보기 ?함께 읽으면 더 좋아요 • APM에서 꼭 관리해야 할 주요 지표는? • APM의 핵심요소와 주요기능은? • 옵저버빌리티 vs APM, 우리 기업에 맞는 솔루션은?
2024.07.26
기술이야기
메모리 누수 위험있는 FinalReference 참조 분석하기
기술이야기
메모리 누수 위험있는 FinalReference 참조 분석하기
Java에서 가장 많이 접하는 문제는 무엇이라 생각하시나요? 바로 리소스 부족 특히 ‘JVM(Java Virtual Machine) 메모리 부족 오류’가 아닐까 생각해요. 메모리 부족 원인에는 우리가 일반적으로 자주 접하는 누수, 긴 생명주기, 다량의 데이터 처리 등 몇 가지 패턴들이 있는데요. 오늘은 좀 일반적이지 않은(?) 유형에 대해 이야기해 볼게요! Java 객체 참조 시스템은 강력한 참조 외에도 4가지 참조를 구현해요. 바로 성능과 확장성 기타 고려사항에 대한 SoftReference, WeakReference, PhantomReference, FinalReference이죠. 이번 포스팅은 FinalReference를 대표적인 사례로 다루어 볼게요. PART1. 분석툴을 활용해 메모리 누수 발생 원인 파악하기 메모리 분석 도구를 통해 힙 덤프(Heap Dump)를 분석할 때, java.lang.ref.Finalizer 객체가 많은 메모리를 점유하는 경우가 있어요. 이 클래스는 FinalReference와 불가분의 관계에요. 나눌 수 없는 관계라는 의미죠. 아래 그림 사례는 힙 메모리(Heap Memory)의 지속적인 증가 후 최대 Heap에 근접 도달 시, 서비스 무응답 현상에 빠지는 분석 사례인데요. 이를 통해 FinalReference 참조가 메모리 누수를 발생시킬 수 있는 조건을 살펴볼게요! Heap Analyzer 분석툴을 활용하여, 힙 덤프 전체 메모리 요약 현황을 볼게요. java.lang.ref.Finalizer의 점유율이 메모리의 대부분을 점유하고 있죠. 여기서 Finalizer는, 앞에서 언급된 FinalReference를 확장하여 구현한 클래스에요. JVM은 GC(Garbage Collection) 실행 시 해제 대상 객체(Object)를 수집하기 전, Finalize를 처리해야 해요. Java Object 클래스에는 아래 그림과 같이 Finalize 메서드(Method)가 존재하는데요. 모든 객체가 Finalize 대상은 아니에요. JVM은 클래스 로드 시, Finalize 메서드가 재정의(Override)된 객체를 식별해요. 객체 생성 시에는 Finalizer.register() 메서드를 통해, 해당 객체를 참조하는 Finalizer 객체를 생성하죠. 그다음은 Unfinalized 체인(Chain)에 등록해요. 이러한 객체는 GC 발생 시 즉시 Heap에서 수집되진 않아요. Finalizer의 대기 큐(Queue)에 들어가 객체에 재정의된 Finalize 처리를 위해 대기(Pending) 상태에 놓여있죠. 위 그림과 같이 참조 트리(Tree)를 확인해 보면, 많은 Finalizer 객체가 체인처럼 연결되어 있어요. 그럼 Finalizer 객체가 실제 참조하고 있는 객체는 무엇인지 바로 살펴볼까요? 그림에 나온 바와 같이 PostgreSql JDBC Driver의 org.postgresql.jdbc3g.Jdbc3gPreparedStatement인 점을 확인할 수 있어요. 해당 시스템은 PostgreSql DB를 사용하고 있었네요. 이처럼 Finalizer 참조 객체 대부분은 Jdbc3gPreparedStatement 객체임을 알 수 있어요. 여기서 Statement 객체는, DB에 SQL Query를 실행하기 위한 객체에요. 그렇다면, 아직 Finalize 처리되지 않은 Statement 객체가 증가하는 이유는 무엇일까요? 먼저 해당 Statement 객체는 실제로 어디서 참조하는지 살펴볼게요. 해당 객체는 TimerThread가 참조하는 TaskQueue에 들어가 있어요. 해당 Timer는 Postgresql Driver의 CancelTimer이죠. 해당 Timer의 작업 큐를 확인해 보면 PostgreSql Statement 객체와 관련된 Task 객체도 알 수도 있어요. 그럼 org.postgresql.jdbc3g.Jdbc3gPreparedStatement 클래스가 어떻게 동작하는지 자세히 알아볼까요? org.postgresql.jdbc3g.Jdbc3gPreparedStatement는 org.postgresql.jdbc2.AbstractJdbc2Statement의 상속 클래스이며 finalize() 메서드를 재정의한 클래스에요. Finalize 처리를 위해 객체 생성 시, JVM에 의해 Finalizer 체인으로 등록되죠. 위와 같은 코드로 보아 CancelTimer는, Query 실행 후 일정 시간이 지나면 자동으로 TimeOut 취소 처리를 위한 Timer에요. 정해진 시간 내에 정상적으로 Query가 수행되고 객체를 종료(Close) 시, Timer를 취소하도록 되어 있어요. 이때 취소된 Task는 상태 값만 변경되고, 실제로는 Timer의 큐에서 아직 사라지진 않아요. Timer에 등록된 작업은, TimerThread에 의해 순차적으로 처리돼요. Task는 TimerThread에서 처리를 해야 비로소 큐에서 제거되거든요. 이때 가져온 Task는 취소 상태가 아니며, 처리 시간에 아직 도달하지 않은 경우 해당 Task의 실행 예정 시간까지 대기해야 돼요. 여기서 문제점이 발생해요. 이 대기 시간이 길어지면 TimerThread의 처리가 지연되기 때문이죠. 이후 대기 Task들은 상태 여부에 상관없이, 큐에 지속적으로 남아있게 돼요. 만약 오랜 시간 동안 처리가 진행되지 않는다면, 여러 번의 Minor GC 발생 후 참조 객체들은 영구 영역(Old Gen)으로 이동될 수 있어요. 영구 영역으로 이동된 객체는, 메모리에 즉시 제거되지 못하고 오랜 기간 남게 되죠. 이는 Old(Full) GC를 발생시켜 시스템 부하를 유발하게 해요. 실제로 시스템에 설정된 TimeOut 값은 3,000초(50분)에요. Finalizer 참조 객체는 GC 발생 시, 즉시 메모리에서 수집되지 않고 Finalize 처리를 위한 대기 큐에 들어가요. 그다음 FinalizerThread에 의해 Finalize 처리 후 GC 발생 시 비로소 제거되죠. 때문에 리소스의 수집 처리가 지연될 수 있어요. 또한 FinalizerThread 스레드는 우선순위가 낮아요. Finalize 처리 객체가 많은 경우, CPU 리소스가 상대적으로 부족해지면 개체의 Finalize 메서드 실행을 지연하게 만들어요. 처리되지 못한 객체는 누적되게 만들죠. 요약한다면 FinalReference 참조 객체의 잘못된 관리는 1) 객체의 재 참조를 유발 2) 불필요한 객체의 누적을 유발 3) Finalize 처리 지연으로 인한 리소스 누적을 유발하게 해요. PART2. 제니우스 APM을 통해 Finalize 객체를 모니터링하는 방법 Zenius APM에서는 JVM 메모리를 모니터링하고 분석하기 위한, 다양한 데이터를 수집하고 있어요. 상단에서 보았던 FinalReference 참조 객체의 현황에 대한 항목도 확인할 수 있죠. APM 모니터링을 통해 Finalize 처리에 대한 문제 발생 가능성도 ‘사전’에 확인 할 수 있답니다! 위에 있는 그림은 Finalize 처리 대기(Pending)중인 객체의 개수를 확인 가능한 컴포넌트에요. 이외에도 영역별 메모리 현황 정보와 GC 처리 현황에 대해서도 다양한 정보를 확인 할 수 있어요! 이상으로 Finalize 처리 객체에 의한 리소스 문제 발생 가능성을, 사례를 통해 살펴봤어요. 서비스에 리소스 문제가 발생하고 있다면, 꼭 도움이 되었길 바라요! ------------------------------------------------------------ ©참고 자료 ◾ uxys, http://www.uxys.com/html/JavaKfjs/20200117/101590.html ◾ Peter Lawrey, 「is memory leak? why java.lang.ref.Finalizer eat so much memory」, stackoverflow, https://stackoverflow.com/questions/8355064/is-memory-leak-why-java-lang-ref-finalizer-eat-so-much-memory ◾ Florian Weimer, 「Performance issues with Java finalizersenyo」, enyo, https://www.enyo.de/fw/notes/java-gc-finalizers.html ------------------------------------------------------------
2023.10.12
기술이야기
시련이 많았던 경험자의 CI/CD 간략 소개
기술이야기
시련이 많았던 경험자의 CI/CD 간략 소개
과거에는 근로자 1명이 기획/설계/구현 테스트까지 진행이 가능했다고 합니다. 하지만 최근에는 근로자 1명이 기획부터 테스트까지 진행하는 일은 거의 드물다고 볼 수 있습니다. OLD SCHOOL 지금 이 시간에도 많은 회사 내의 개발자들은 자신에게 주어진 기능 구현을 훌륭하게 완수하기 위해서 모니터를 째려보고 있습니다. 모니터를 째려보다가 자신이 작성한 내용을 다른 팀원에게 공유하고자 혹은 반대로 다른 팀원이 작성한 내용을 공유받고자 '형상 관리 시스템'을 사용하고 있습니다. CVS와 SVN으로 대표되는 이 시스템은 최근들어 Git을 많이 사용하는 추세라고 합니다. 필자 역시 여러 프로젝트에서 해당 시스템을 사용도 해보았고, 연동하여 다른 시스템을 구현한 경험이 있습니다. 하지만 프로젝트 마다 해당 시스템 사용에 있어서 몇몇 시련이 있었습니다. "차주에 전체 기능 리뷰가 있습니다. 각 파트 별로 코드 커밋해주세요." 라고 PM(Project Manager) 또는 PL(Project Leader)이 요청을 하면, 각 하위 PL(Part Leader)은 파트(Part)에 돌아가 파트원들에게 이 내용을 공유하고, 개별 개발자들은 자신이 작성한 코드를 관리 시스템에 커밋하게 됩니다. 잠시 후 형상 관리 시스템에서 작성 코드를 내려 받은 PL(Part Leader)은 아래와 같은 상황에 직면하게 됩니다. - 동료의 작성 코드에는 관심 없이, 본인의 작성물만 커밋하는 경우 - 별도의 공지 없이 이미 작성된 파일 등을 삭제하여 커밋하는 경우 - 약속되지 않은 환경이나 lib으로 작성한 코드를 커밋하는 경우 프로젝트에 따라 기간이 길어지거나 다른 여러 상황이 발생하면 위의 문제보다 더 많은 문제를 경험하게 됩니다. 각 파트 단위로 위와 같은 문제가 해결되고 정상적으로 컴파일, 빌드까지 완료되면, PL(Part Leader)들은 파트별로 단위테스트를 완료하고 결과가 정상적이면 결과를 품질관리자에게 통보합니다. 각 파트별로 완료 통보를 받은 품질관리자는 다시 관리 시스템에서 전체 작성물을 수동으로 내려받아 통합테스트를 진행합니다. 통합테스트까지 완료되었다면 해당 내용을 릴리즈관리자에게 통보합니다. 릴리즈관리자는 바뀐 부분만 찾아서 변경하면 시간적으로 적용이 빠르겠지만 '바뀐 부분만 변경하면 될까?'라는 의심으로 전체 작성물을 수작업으로 전처리(컴파일 & 빌드)하고 다시 수작업으로 릴리즈하게 됩니다. 만약 진행상의 이슈가 없다면 이제 기능 리뷰 준비가 완료됩니다. 단계별로 문제 없이 진행되고 모든 기능을 확인하였다고 하지만 기능 리뷰 혹은 데모만하면 꼭! 오류가 발생하여 난처한 상황이 종종 발생하곤 합니다. 필자 역시 이런 경우가 많았으며 그때마다 문제 부분을 찾기 위해 많이 고생했습니다. 아래의 개념은 아마도 저 같은 경험을 하고 있는 많은 사람들을 위한 것이 아닌가 싶습니다. CI (Continuous Integration, 지속적인 통합) '지속적인 통합'이란 개발 과정에서 생산되는 코드의 관리와 코드의 문법적인 오류 확인 및 기능 점검(=테스트)을 특정한 일정에 진행하는 것이 아니라 날마다 혹은 특정 시간마다 진행하여 코드 및 기능에 대한 품질을 유지하는 개념이라고 말할 수 있을 것입니다. 앞에서 언급했던 과거 모습을 개선하는 노력은 CI 라는 개념이 나오기 이전부터 많은 개발사 혹은 팀에서 그들만의 문화나 관습으로 처리하는 경우가 있었을 것입니다. 하지만 문제는 새로운 구성원이 생겼을 때 입니다. 조직 문화를 새로이 접하는 이들에게는 이를 설명하고 이해시키는 일은 시간과 노력이 드는 일이니까요. 하지만 이젠 일반적인 Java 개발팀에서는 SVN(or GitHub)+Jenkins+Maven+JUnit으로 구성하는 개발 환경을 사용하고 있습니다. 다만, 프로젝트 목표나 목적되는 환경에 따라 약간씩 다른 환경을 구성하기도 합니다. 그러나 대부분의 경우 Open Source 기반으로 CI 개념을 구성하는 경우가 많습니다. 이는 일단 무료라는 큰 장점과 많은 레퍼런스가 있어 구성하기 편리하고 "우린 Open Source인 SVN과 Jenkins를 사용합니다. 일단 자세한 개념과 동작 원리는 너트뷰 선생님께..." 라고 하며 짧은 노력으로 교육을 끝낼 수 있어 그런 것이 아닌가 합니다. CI 개념을 활용하는 개발 프로젝트에서는 UI 메뉴 혹은 구현 단위 기준으로 구분하여 개발파트나 개발자를 할당하고는 합니다. 각각의 개발자는 할당받은 구현 범위에 대한 문제를 개별적으로 개발 도구를 활용하여 구현하고 구현 내용을 형상 관리 시스템에 커밋합니다. 이런 과정을 다른 개발자들도 같이 수행한 후에 빌드 자동화 환경에서 컴파일 및 빌드 스크립트에 맞춰서 문법적으로 확인된 결과물을 만들고 이를 다시 기능이 확인이 가능한 테스트 스크립트에 맞춰서 테스까지 진행합니다. 만약 테스트 과정에서 비정상적인 결과가 발생할 경우, 해당 내용 수정 후 위의 작업을 다시 진행하게 됩니다. 이런 일련의 절차는 일정 시간 준위 단위로 수행되어 구현하고 있는 기능을 주기적으로 확인하는 과정을 수행합니다. 올바른 진행을 위하여 개발자 개개인에게 분장되는 업무의 크기가 비슷해야 한다고 생각됩니다. 개발자별로 업무의 크기가 서로 다른 겨우, 결과물이 정상적이라고 볼 수 없게 될 것이고 그렇게 된다면 테스트 결과 역시 믿을 수 없는 경우가 발생할 것입니다. CD (Continuous Delivery/Deploy, 지속적 제공/배포) 지속적인 통합(CI)을 사용하던, 기존의 개발 환경을 사용하던, 결국 작성된 결과물은 최종적으로 운영환경에 적용되어 사용작 혹은 타 시스템과 연결되어야 합니다. 그래야 제품 개발 또는 프로젝트가 완료됩니다. CD는 결과물을 운영환경에 적용하는 방식을 나타내는 환경으로써 결과물 적용 여부를 판단하는 행위를 담당하는 주체가 누구냐에 따라, Continuous Delivery와 Continuous Deploy로 구분됩니다. Continuous Delivery는 CI 환경을 통하여 자동으로 컴파일 및 빌드가 되고, 테스트된 결과물에 대해서 릴리즈 관리자가 적용 시점마다 테스트 결과 및 서비스 영향도를 판단하여 수동으로 적용하는 방식이며, Continuous Deploy는 결과물은 항상 옳고 서비스 영향도는 없다고 미리 판단하여 자동으로 적용하는 방식입니다. 아마도 대부분의 개발 환경에서는 Continuous Delivery로 적용하고 있기에 CD라고 표기되는 경우 Continuous Delivery를 의미하는 경우가 많을 것입니다. 소프트웨어 솔루션을 제작하는 개발팀에서는 아마도 Continuous Delivery로 또한 MSA 기반의 서비스를 제공하는 개발팀에서는 Continuous Deploy를 사용하는 편이 여러 관계를 보았을 때 유리하다고 판단합니다. 하지만, 개발팀의 업무 성격과 제품 혹은 서비스의 출시 시기 등이 CD 방식을 결정하는 가장 중요한 요소가 될 것입니다. 지금까지 CI/CD 도입 배경과 내용을 필자의 경험을 바탕으로 간략하게 정리하였습니다. 개발자들이 자기가 맡은 기능 혹은 프로세스에만 전념할 수 있는 훌륭하고 편리한 개발 환경 및 적용 환경이 언제 어떻게 나타나게 될지 궁금합니다. 가능하다면, 많이 바꿔서 따라가기 귀찮은 시니어들과 새롭게 따라가야하는 주니어 개발자 모두에게 즐거운 환경이 등장했으면 합니다. 감사합니다.
2023.08.22
사람이야기
신입 개발자의 브레인즈컴퍼니 합류 여정
사람이야기
신입 개발자의 브레인즈컴퍼니 합류 여정
안녕하세요. 저는 개발 2그룹 인프라웹팀의 신입 개발자 홍유석입니다. 2023년 1월 30일에 합류해 벌써 3달이 훌쩍 지났네요. 제가 브레인즈에 지원 후 서류 합격을 하고, 코딩 테스트와 인터뷰를 준비해야 했을 때, 관련 정보나 후기가 거의 없어 어떻게 준비해야 할지 많이 고민했던 기억이 납니다. 그래서 이 글이 브레인저를 꿈꾸시는 분들에게 조금이나마 도움이 됐으면 하는 마음으로, 브레인즈컴퍼니 지원부터 합격 후 입사 준비 과정까지의 제 경험을 이야기해 드리려 합니다. ----------------------------------------------------- 합류 과정 브레인즈컴퍼니 합류 과정은 지원서를 제출하는 ‘서류 지원’, 기본적인 코딩 능력을 갖추고 있는지 확인하기 위한 ‘코딩 테스트’, 기술 역량을 확인하기 위한 ‘인터뷰’, 그리고 앞에 모든 과정을 통과한 후 입사에 필요한 서류를 준비하고 제출하는 ‘프리 보딩’ 순으로 진행됐습니다. 지금부터 각각의 과정이 어떻게 진행됐고, 무엇을 준비하면 좋을지 좀 더 자세히 전달해 드리도록 하겠습니다. 서류 지원 저는 채용 사이트를 통해서 브레인즈컴퍼니의 공고를 확인하고 지원하게 됐습니다. 지원 서류에 크게 정해진 형식이 없었기 때문에 이력서 겸 포트폴리오를 작성해 제출했습니다. 이때 지원 서류를 작성하며 가장 신경 썼던 부분이 적정한 분량으로 저의 역량을 잘 드러나게 하는 것이었습니다. 지금까지 개발자를 준비하며 많은 것들을 경험하고 공부했지만 이러한 내용들을 모두 담으면 지원 서류가 너무 길어지게 됐습니다. 또, 이러한 점은 여러 지원자들의 서류를 검토하는 분들에게 읽기 힘든 지원 서류가 될 수 있다고 생각해 제 역량을 잘 드러낼 수 있는 프로젝트를 선택해 내용을 구성했습니다. 프로젝트에 대한 내용을 담을 때도 모든 내용을 담지 않고 제가 맡은 부분에서 문제를 어떻게 해결했는지를 중심으로 작성했습니다. 코딩 테스트 코딩 테스트 안내는 굉장히 빠르게 이뤄졌습니다. 서류 지원 이틀 후에 채용 담당자분이 전화와 메일로 테스트 방법과 시간에 대해 자세한 안내를 해 주셨습니다. 코딩 테스트는 온라인 플랫폼에 원하는 시간에 접속해 정해진 시간 동안 문제를 푸는 방식으로 진행됐습니다. 총 50분의 시간이 주어졌으며 SQL, Java, Javascript, HTML, JQuery 등으로 이뤄진 10문제를 해결해야 했습니다. 50분에 10문제를 풀어야 하는 만큼 오래 고민해야 하는 문제가 아닌 기본적인 개념을 잘 이해하고 있는지 확인하는 문제들이었습니다. 따라서 평소에 기본기를 잘 다져 놓으시거나 짧게라도 코딩 테스트를 준비해 보셨다면 큰 어려움 없이 문제를 해결하실 수 있을 것으로 생각됩니다. 추가로 브레인즈컴퍼니의 코딩테스트를 푸는 방법에 대한 팁을 좀 더 드리자면, 시간이 짧기 때문에 자신있는 문제들을 먼저 풀어 점수를 확보하고, 잘 모르는 문제들은 나중에 도전해 보면서 부분 점수를 확보하는 방법을 추천해 드립니다. 면접 면접에 대한 안내 역시 빠르게 이뤄졌습니다. 코딩 테스트 후 바로 다음 날 채용 담당자분이 연락을 주셨고 면접 날짜와 시간을 조율해 3일 후 면접을 보게 됐습니다. 면접까지 남은 시간 동안에는 지금까지 공부했던 내용들을 다시 정리하고, 회사 사이트에 들어가 회사가 무슨 일을 하고 어떠한 가치관을 중요하게 여기는지 파악하며 면접을 준비했습니다. 면접은 회사에서 오프라인으로 1시간 30분 동안 이뤄졌으며, 인사 면접과 기술 면접을 담당하시는 두 분이 면접관으로 들어오셨습니다. 기억나는 질문을 정리해 보자면, ∙ 자기소개 ∙ 앞서 본 코딩 테스트에 대한 질문 ∙ 지원서 기반의 질문 ∙ 기본 CS 지식에 대한 질문 ∙ 인성 및 회사 문화에 관련된 질문이 주어졌습니다. 질문 대부분이 실제로 겪은 문제, 또는 특정 상황에서 주어진 문제를 어떻게 해결할 수 있는지 물어보고 있었기 때문에 문제 해결 방법과 이유를 잘 전달하기 위해 노력했습니다. 물론 모든 질문들에 대답할 수 있었던 것은 아니었습니다. 모르는 질문 또한 있었으며 이러한 경우 아는 만큼 대답하되 모르는 것을 아는 척하지 않으려 노력했습니다. 면접이 끝난 후 들었던 생각은 “면접관분들의 배려로 편안한 분위기에서 면접이 진행돼, 준비한 내용들을 잘 전달할 수 있었다”라는 것입니다. 따라서 면접을 보게 되시는 분들이 기본적인 CS 지식을 열심히 공부하셨고, 자신이 한 프로젝트의 내용을 잘 정리해 준비하셨다면 좋은 결과를 얻으실 수 있을 것으로 생각됩니다. 합격 안내와 프리 보딩 합격 안내까지도 빠르게 이뤄졌습니다. 면접 당일 오후 5시 정도에 전화 연락과 오퍼 레터를 메일로 받았습니다. 이후 저 또한 입사를 결정해 첫 출근 날짜를 정하고 입사 수락 메일을 보냈습니다. 첫 출근까지 9일 정도의 여유 시간이 있었기에 가족들과 시간을 보내는 등 충분한 휴식을 취하면서 입사 준비를 했습니다. 프리 보딩의 경우, 브레인즈의 인사 담당자가 보낸 안내 메일에 따라 첫 출근 전까지 필요한 서류들을 준비하고, 프로필 사진 및 자기소개를 메일로 보내는 형태로 진행됐습니다. 인사 담당자가 안내도 상세히 해 주셨고, 준비해야 할 것들도 간단했기에 큰 어려움 없이 필요한 것들 모두 첫 출근까지 준비할 수 있었습니다. 글을 마치며 이 글을 쓰고 있는 지금 저는 브레인즈컴퍼니에서 근무한지 어느덧 3개월이 지나, 수습 기간을 잘 마무리하고 정직원이 됐습니다. 첫 출근부터 지금까지 과제와 실제 업무를 수행하고 신입 사원 공유 회의에 참여하며, 회사의 서비스와 업무 프로세스를 파악하는 시간을 가졌습니다. 실수도 많고 부족한 점도 많았지만 항상 자신의 일처럼 도와주는 좋은 팀원분들 덕분에 잘 적응하고 성장할 수 있었습니다. 제 글이 브레인즈컴퍼니 입사를 목표로 하는 분들에게 도움이 됐으면 좋겠습니다. 그리고 원하는 결과를 얻어 회사의 좋은 팀원분들과 함께 일하면서 서로의 성장을 도와주게 되길 바라며, 브레인즈컴퍼니의 합류 과정에 대한 글을 마무리하도록 하겠습니다. 시간 내어 긴 글 읽어주셔서 감사합니다.
2023.05.02
기술이야기
옵저버빌리티 향상을 위한 제니우스 대표 기능들
기술이야기
옵저버빌리티 향상을 위한 제니우스 대표 기능들
이번 블로그에서는 지난 블로그에서 다루었던 옵저버빌리티를 구현하기 위한 오픈 소스들은 어떤 것들이 있는지 간략히 알아보고, 제니우스(Zenius-EMS)에서는 옵저버빌리티 향상을 위해서 어떤 제품들을 제공하고 있는 지 살펴보겠습니다. 옵저버빌리티 구현을 위해 널리 활용되는 대표적인 오픈소스로는 아래 네 가지 정도를 들 수 있습니다. l Prometheus: 메트릭 수집 및 저장을 전문으로 하는 도구입니다. Prometheus는 강력한 쿼리 기능을 가지고 있으며, 다양한 기본 메트릭을 제공하며 데이터 시각화를 위해 Grafana와 같은 도구와 통합될 수 있습니다. 또한 이메일, Slack 및 PagerDuty와 같은 다양한 채널을 통해 알림을 보낼 수 있습니다. l OpenTelemetry: 에이전트 추가 없이 원격으로 클라우드 기반의 애플리케이션이나 인프라에서 측정한 데이터, 트레이스와 로그를 백엔드에 전달하는 기술을 제공합니다. Java, Go, Python 및 .NET을 포함한 다양한 언어를 지원하며 추적 및 로그에 대한 통합 API를 제공합니다. l Jaeger: 분산 서비스 환경에서는 한번의 요청으로 서로 다른 마이크로서비스가 실행될 수 있습니다. Jaeger는 서비스 간 트랜잭션을 추적하는 기능을 가지고 있는 오픈 소스 소프트웨어입니다. 이 기능을 통해 애플리케이션 속도를 저해하는 병목지점을 찾을 수 있으며 동작에 문제가 있는 애플리케이션에서 문제의 시작점을 찾는데 유용합니다. l Grafana: 시계열 메트릭 데이터를 시각화 하는데 필요한 도구를 제공하는 툴킷입니다. 다양한 DB를 연결하여 데이터를 가져와 시각화 할 수 있으며, 그래프를 그릴 수도 있습니다. 시각화한 그래프에서 특정 수치 이상일 때 알람 기능을 제공하며 다양한 플러그인으로 기능확장이 가능합니다. ------------------------------------------------- 오픈 기술을 이용해 Do It Yourself 방식으로 옵저버빌리티를 구현한다면 어떨까요? 직접 옵저버빌리티를 구현하기 위해서는 먼저 필요한 데이터를 수집해야 합니다. 필요한 데이터가 무엇인지, 어떤 방식으로 수집할지 결정하고 Prometheus, OpenTelemetry 같은 도구들을 이용해 설치 및 설정합니다. 이 단계는 시간이 가장 오래 걸리고, 나중에 잘못된 구성이나 누락이 발견되기도 합니다. 다음 단계는 데이터 저장입니다. 이 단계에서 주의할 점은 예전처럼 여러 소스에서 수집한 데이터를 단순하게 저장하는 것이 아니라, 전체적인 관점에서 어떤 이벤트가 일어나는지를 추적이 가능하도록 데이터 간의 연결과 선후 관계를 설정하는 것입니다. 어려운 점은 새로운 클라우드 기술을 도입하거나 기존의 인프라나 애플리케이션에서 변경이 발생할 때마다 데이터를 계속해서 정리를 해야 하는데, 이를 위해 플랫폼을 지속적으로 수정하고 구성을 추가해야 한다는 것입니다. 마지막으로 부정확한 경고들은 제거해야 합니다. 비즈니스 상황과 데이터는 계속해서 변화하기 때문에 이에 맞게 베이스 라인을 지속적으로 확인하고, 임계치를 조정해서 불필요한 알람이나 노이즈 데이터가 생기는 것을 방지해야 합니다. 결론적으로 직접 옵저버빌리티를 구현하는 것은 처음에는 쉬워 보여도 고급 인력과 많은 시간을 확보해야 하며, 별개로 시간이 지남에 따라서 효율성과 확장성이 떨어진다는 점을 감안하면 대부분의 기업은 감당하기 어렵다고 할 수 있습니다. 그렇다면, Zenius(제니우스) EMS는 옵저버빌리티를 어떻게 확보하고 있을까요? 옵저버빌리티 향상을 위한 가장 기본적인 기능은 토폴로지맵 또는 대시보드입니다. 다양한 인프라의 물리적 논리적 연결구조들을 한 눈에 시각적으로 파악할 수 있도록 해야 합니다. Zenius는 각 인프라별 상황을 한 눈에 볼 수 있는 오버뷰와 시스템 전체를 조망할 수 있는 토폴로지맵, 그리고 서비스 별 상황들을 감시할 수 있는 대시보드 등 크게 세가지의 뷰어(Viewer)를 제공합니다. 인프라의 구성 상황에 따라 다층적으로 구성되어 고객들이 인프라에서 일어나는 상황을 즉각 알 수 있도록 해 줍니다. 이러한 뷰어들은 기존 ‘모니터링’의 개념에서 ‘옵저버빌리티’ 개념으로 진화화면서 좀 더 다층적, 다양화되는 형태로 진화하고 있습니다. 또한, Zenius는 기존의 각 인프라별로 단순히 감시를 설정하는 방식이 아닌 다양한 인프라로부터의 로그와 메트릭 정보를 이용해 어떤 상관관계가 있는지 분석하는 ‘복합감시’라는 서비스가 기본적으로 탑재돼 있습니다. 복합감시를 대표 기능에는 ERMS(Event Relation Management System), 스냅샷 그리고 조치 자동화 등을 들 수 있습니다. l ERMS 기능은 로깅, 메트릭 정보와 장비의 상태를 이용해 새로운 감시 기준을 만들어, 의미있는 이벤트를 생성해 사용자에게 개별 장비 수준이 아닌 서비스 관점에서 정확한 상황 정 보를 제공합니다. l 스냅샷은 서비스 동작에서 이벤트가 발생했을 때, 당시 상황을 Rawdata 기반으로 그대로 재현하는 기능으로 SMS, DBMS, APM, NMS 등 모든 인프라를 동시에 볼 수 있습니다. l 조치 자동화는 ERMS를 자동운영시스템과 연동해, 특정 상황에서 자동으로 스크립트를 실행해 제어하는 기능입니다. 트레이싱 기능은 APM에서 제공하는 기능으로, WAS(Web Application Server)에 인입되고 처리되는 모든 트랜잭션들을 실시간으로 모니터링하고 지연되고 있는 상황을 토폴로지 뷰를 통해 가시적으로 분석할 수 있습니다. 사용자는 토폴로지 뷰를 통해 수행 중인 액티브 트랜잭션의 상세정보와 WAS와 연결된 DB, 네트워크 등 여러 노드들 간의 응답속도 및 시간들을 직관적으로 파악할 수 있습니다. 제니우스의 또 다른 옵저버빌리티는 인공지능 기반의 미래 예측 기능으로 미래 상황을 시각적으로 보여줍니다. 인프라 종류에 상관없이 인공신경망 등 다양한 알고리즘을 통해 미래 데이터를 생성하고, 장애발생 가능성을 빠르게 파악해 서비스 다운타임이 없도록 도와줍니다. 또한 이상 탐지 기능은 보안 침해 또는 기타 비정상적인 활동을 나타낼 수 있는 시스템 로그, 메트릭 및 네트워크 트래픽의 비정상적인 패턴을 식별할 수 있습니다. 이상탐지 알고리즘은 시간이 지남에 따라 시스템 동작의 변화에 적응하고 새로운 유형의 위협을 식별하는 방법을 학습할 수 있습니다. 이상과 같이 Zenius(제니우스) EMS는 최고의 옵저버빌리티를 제공하기 위해서 연구개발에 매진하고 있습니다. 옵저버빌리티 향상을 위한 다양한 기능/제품들은 고객의 시스템과 조직 상황에 맞게 선별적으로 사용될 수 있습니다.
2023.04.19
사람이야기
입사 5개월 차 신입 개발자의 브레인즈 적응기
사람이야기
입사 5개월 차 신입 개발자의 브레인즈 적응기
안녕하세요. 저는 개발2그룹 인프라웹팀의 신입 사원 김예지입니다. 이제 입사한 지 5개월 차의 따끈따끈한 신입 개발자인데요. 브레인즈컴퍼니 홈페이지 및 블로그를 정독하며 면접 준비에 열을 올리던 게 엊그제 같은데, 예비 브레인저들을 위해 글을 쓰게 되다니 감회가 새롭네요. 개발자로 취업 준비를 하거나 취업 후 입사를 앞뒀을 때 막막함을 느낀 적 있으시죠? “앞으로 어떤 일을 하게 될까”, “일을 하기에 내가 충분한 실력을 갖췄을까?”, “입사 후 적응은 잘 할 수 있을까?”등의 생각을 하게 될텐데요. 저 또한 개발자로 커리어 전환을 하며 취업 준비를 할 때뿐만 아니라, 최종 합격 전화를 받은 이후에도 이런 걱정들 때문에 편히 잠을 이루지 못했는데요. “누가 미리 알려주면 좋겠다”라고 많이 생각했던 것 같아요! 그래서 저와 같은 분들을 위해 브레인즈컴퍼니 인프라웹팀의 신입 사원은 어떤 과정을 거치면서 팀에 적응해 나가게 되는지를 알려드리려고 합니다. 3개월간의 시용평가, 평가 종료 후 업무 그리고 제가 성장하는데 가장 큰 도움이 된 신입 사원 공유회의에 대해 이야기 드릴게요. ---------------------------------- 1. 입사 후 첫 3개월, 시용평가 브레인즈컴퍼니의 채용공고를 보신 분이라면 아시겠지만, 저희 회사에는 3개월의 시용평가 기간이 존재하는데요. 시용평가는 각 팀의 성격에 맞게 팀 마다 다른 방식으로 이뤄집니다. 제가 소속된 인프라웹팀의 경우, 이 3개월 동안 앞으로 해나가야 할 업무에 익숙해지기 위한 프로세스가 아주 체계적으로 구성돼 있습니다. 3개월 동안 총 3번의 발표를 진행하고, 이 3번의 평가를 취합해 최종 채용 여부가 결정됩니다. ‘최종 채용’, ‘평가’ 이런 말들이 너무 살벌하게 들릴지도 모르겠습니다만, 회사에 단계적으로 적응할 수 있는 프로세스라고 생각하고 그 단계에 맞는 일들을 열심히 수행해 나가면 되는 것 같습니다. 뭐든 그렇겠지만 정말로 ‘열심히!’가 중요하거든요.(‘잘’이 중요했다면 어쩌면 저는 이 글을 쓰고 있지 못했을지도 몰라요!) 그럼, 3번의 발표가 어떻게 진행됐는지 제 경험담을 바탕으로 자세히 설명해보겠습니다. 1) 1차 발표 1개월 차에는 약 2주 동안 IT인프라 통합관리 소프트웨어인 Zenius의 특정 인프라 화면을 구현하고 해당 내용을 발표합니다. 기존의 소스코드를 분석 및 참고해 요구 사항에 맞는 서비스 화면을 개발하면서, 앞으로 업무를 하며 꼭 알아야 할 인프라의 기본적 구조와 기능에 대해 파악하는 기간이라고 보면 될 것 같습니다. 처음 과제를 받았을 땐 “와… 할 수 있을까?”하는 생각이 잠시 스치기도 하는데요. 너무 걱정하실 필요는 없습니다. 발표를 준비하며 개발하는 기간 동안에 신입사원 교육을 주관하시는 보람님께서 꾸준히 개발 진행 상황을 점검하며 코드 리뷰를 해주시고, 이외에도 개발에 필요한 내용들이 문서화로 잘 정리돼 있어서 많은 도움을 얻을 수 있거든요! 또 약간 자랑을 하자면, 저희 팀원 분들이 정말 다 좋으신 분들이어서 뭘 물어봐도 대충 알려주는 일 없이 관련 내용을 자세히 설명해주세요. 또, 참고할 만한 자료까지 찾아 보내주시기 때문에 본인이 열심히 할수록 그에 맞는 충분히 좋은 결과를 얻을 수 있어요! 이렇게 열심히 준비를 마치면 그룹장님이신 성준님을 비롯해 팀원분들 앞에서 발표를 하게 됩니다. 당연하지만 정말 떨리고 토할 것 같은 기분을 느끼게 됩니다. 물론 발표를 들으시는 분들은 일부러 분위기를 무섭게 하시지는 않고, 오히려 웃는 얼굴로 왜 이렇게 긴장했냐며 분위기를 풀어주지만... 그렇다고 긴장이 풀리지는 않더라고요. 이때에는 Zenius에 대해 얼마나 이해했는지를 중점적으로 보고 질문을 던지고 피드백을 주십니다. 얼마나 이해했는지에 대해서 합격과 불합격을 결정짓는 절대적인 기준이 있기보단 이 기간 동안 얼마나 노력했는지를 함께 봐주시는 것 같습니다. 2) 2차 발표 2개월 차에는 한 달 동안 실제 고객사에 배포될 개발요청 업무를 진행하고, 그 중에 몇 가지를 추려 발표를 합니다. 신입 사원임을 고려해 비교적 난이도가 쉬운 개발요청을 주시고 공수도 여유있게 산정해 주시기 때문에, 이 기간에도 1차 때와 마찬가지로 단순히 일에 그치지 않고 Zenius의 기능과 인프라를 이해하는 데 시간을 많이 할애하는 게 좋습니다! 주어진 업무에 대해 단순히 개발만 하는 게 아니라, 이게 왜 필요할지에 대해서 생각해보는 것 또한 중요한 것 같습니다. 업무를 시작하기 전 기능을 추가하거나 수정해야 할 인프라의 역할과 구조를 설명해주시고, 참고할 만한 비슷한 업무 등을 함께 알려주시기 때문에 개발요청 자체에 큰 어려움은 없습니다. 모든 업무가 문서화돼 관리되고 있기 때문에 업무를 시작하기 전 항상 도움을 받을 수 있어요. 고객사에 실제로 배포되기 전까지 [개발자 테스트> 관리자 테스트> QA 테스트]를 거쳐 오류를 걸러내고 수정한 후에 배포가 이루어지는 구조라서, “신입 사원으로서 내가 사고를 치진 않을까”하는 부담을 덜 수 있습니다. 또, 이 기간에 주어진 개발요청에는 만약 신입 사원이 해당 개발요청을 제대로 해내지 못했을 경우를 대비해 커버해 줄 팀원 분을 함께 배정해주시기도 하는데요! 애초에 능력을 고려해서 업무를 배정하고, 일정을 조정해주시므로 커버가 필요한 경우까지 가는 일은 아마 없지 않을까 싶습니다. 2차도 당연히 발표를 하는데요.(2번째라고 덜 떨린다거나 하진 않습니다.) 주로 기존에 있던 코드를 활용한 1차 발표에 비해, 2차의 경우 요건을 충족하도록 본인이 작성한 코드와 로직이 발표의 주가 됩니다. 당연히 1차에 비해 조금 더 다양한 질문을 받게 되고 더 좋은 코드를 작성할 수 있는 방법에 대해 피드백을 주시며, 더 고민해 볼만한 부분을 숙제로 내주시기도 합니다. 3) 3차 발표 3개월 차에는 커스터마이징 보고서 개발 업무에 대해 배우고, 해당 내용을 발표하게 됩니다. Zenius는 여러 인프라 장비 혹은 서버의 데이터를 수집하고, 사용자가 수집한 데이터를 원하는 형태로 볼 수 있도록 보고서를 제공해주고 있습니다. 고객사의 요구사항에 따라 어느 데이터를 어떤 형태로 볼지는 달라지지만, 하나의 보고서를 만드는 프로세스와 설계는 동일하기 때문에 이 기간에 꼭 보고서가 생성되는 프로세스를 잘 이해하고 넘어가야 합니다. 개인적으로는 이 기간에 가장 많은 깨달음을 얻었습니다. 또, 이 기간엔 'OzReport'라는 다소 낯선 툴에 대해서도 배워야 하는데요. Report 교육을 받으러 본사에도 다녀오긴 하지만, 그것만으로는 심히 부족해 팀원분들에게 매우 많은 도움을 받아야 하는 기간이기도 합니다. 물론 언제나 그랬듯이 정말 친절하고 알 때까지 친절히 설명해 주신답니다! 그리고 언제나처럼 발표를 하게 되는데요. 보고서를 만들 때 꼭 알아야 하고, 실수하기 쉬운 부분들 전반에 대해 피드백을 주십니다. 이렇게 마지막 발표까지 3번의 발표를 모두 마치면 시용평가가 끝이 나게 됩니다! 그리고 이렇게 3개월을 마치고 나면 팀이 어떻게 돌아가는지, 내가 무슨 일을 해야 하고 그 일을 하기 위해서 무엇이 부족한지 그리고 그 부족함은 어떻게 채워나가야 하는지 스스로 깨닫게 되고 팀의 일원으로 자연스럽게 섞일 수 있게 되는 것 같습니다. 2. 업무 시용평가가 끝나면 본격적으로 개발 요청 업무를 맡아 진행하게 됩니다. 2차 발표에서 말했던 것처럼 [업무설명> 개발> 검토> 관리자 테스트> QA테스트> 배포]의 순서로 한 사이클이 진행됩니다. Java/Spirng, javaScript, postgreSql을 사용하고, 백/프론트를 나누지 않고 전체적으로 아울러 개발합니다. 본인이 잘 모르거나 부족한 부분이 있을 경우, 회사에 교육 신청서를 내서 인강을 지원받을 수 있습니다.(*참고로 시용평가 3개월 기간에는 의무로 3가지 인강을 듣습니다. 과제의 진행 상황이 스스로 여유롭다고 판단되면 업무 시간 중 강의를 수강하는 것도 가능합니다. 이후로는 자유롭게 필요한 인강을 선택해 신청하면 됩니다.) 업무는 모두 문서화돼 관리하고 있습니다. 조금 더 자세히 설명하자면, 먼저 회사 내부에 등록된 업무(팀에서는 일감이라도 부릅니다.) 문서를 통해 개발요건과 공수를 확인합니다. 고객사마다 패키지가 다르므로 각각의 개발환경을 세팅하게 되는데요. 이 과정에서 만약 신규 고객사라면 고객사의 테스트서버와 배포 폴더를 생성하는 등의 일을 하게 됩니다.(SVN과 Jenkins를 사용합니다.) 이러한 내용들 또한 문서화돼 있어, 신입 사원 교육과정의 일부로 차근히 알려주시기 때문에 혹시 모르는 개념이 있으시더라도 너무 걱정하실 필요 없습니다! 모든 건 다 정말 친절히 알려주시고 적응할 때까지 기다려주시니까요. 가장 중요한 건, 개발기간을 지켜야 한다는 점인데! 보시는 것처럼 주어진 업무마다 개발일정이 정해져 있는데요. 개발일정을 픽스하기 전에 먼저 기간 내에 특이사항은 없는지, 공수는 충분한지 등을 확인 차 물어봐 주세요. 이 때 뭔가 특이사항이 있거나, 공수가 모자라다고 생각된다면 사유를 말씀드리고 일정을 수정할 수 있습니다. 예를 들면, 휴가! 휴가가 있다면 피해서 일정을 잡아주세요. 참고로 휴가는 미리 말만 한다면 언제든 자유롭게 사용할 수 있습니다. 업무 자체가 타이트하게 관리되기도 하고, 아까 말씀드린 것처럼 모든 업무가 문서화돼 관리하고 있다는 게 장점인 만큼, 개발자도 개발요청을 하면서 문서로 기록해둬야 하는 일이 많다는 얘기이기도 한데요. 그래서 저희 팀에 가장 필요한 성격 중 하나는 꼼꼼함과 정확함이 아닐까 합니다. 실제로 성준님께서도 “속도보다는 정확함이 중요하다!” 라는 말씀을 신입 사원 면담 때 해주시기도 했거든요! 그리고 이건 팀에 맞는 인재인지를 판별하는데 꽤 중요하게 작용하는 것 같다고 생각합니다. 본인이 정해진 일정 속에서 체계적으로 일하는 걸 선호하거나, 신입 사원으로서 팀에 잘 적응해 나가기 위해 항상 나를 돌봐주는(?) 누군가가 필요한 편이라면 저희 팀은 굉장히 좋은 선택이 되지 않을까 합니다. 3. 신입 사원 공유회의 마지막으로 소개하고 싶은 건 신입사원 공유회의입니다. 개인적으로 회의라기보다는 스터디에 가깝다고 생각하는데요. 신입 사원을 대상으로 1차 평가가 끝난 이후 매주 화, 목에 1시간씩 6개월 이상 동안 진행되고, 1주일에 하나씩 Zenius나 회사 업무와 관련해 알게 된 지식을 정리해 공유하고 발표하는 자리입니다. 신입 사원 공유회의라고는 하지만 신입 사원끼리만 진행하는 건 아니고 저희 이사님이신 성준님도 함께하는데요. 그렇기 때문에 사실 시용평가는 끝났지만 발표는 계속된다…의 느낌이기도 합니다.(발표를 하다 보면 내용이 길어지기도 하고, 알려주시는 것도 많아 지기 때문에 사실 1시간 내에 끝난 적은 별로 없습니다.) 부담되지 않는다면 거짓말이겠지만 실로 엄청나게 도움이 되고, 업무에 국한되지 않고 더 깊고 근본적인 지식을 많이 얻어갈 수 있는 자리입니다. 일단, 나도 모르게 더 좋은 개발자가 될 수 있도록 생각의 근간을 뜯어고치는 느낌이고, 하나의 내용에 대해서도 심도 있게 다루는 시간이기 때문에 발표는 부담스럽지만 알아가는 자체가 즐겁고 재밌습니다! 사실 신입 사원 공유회의를 하고 난 뒤에 “가장 많이 뭔가 스스로 발전했다!”라고 느끼게 되는 것 같아요. ---------------------------------- 사실 아직도 신입이고 저희 팀을 100% 안다고 할 수 없지만, 분명히 말씀드릴 수 있는 건! 인프라웹팀은 입사 당시에 많이 부족했던 제가 한 명의 개발자로서 잘 적응할 수 있을 만큼 신입 사원을 위한 프로세스가 잘 갖춰져 있다는 것입니다. 프로세스마다 코드리뷰를 통해 개발을 하면서 기본적으로 가져야 할 개념이나 마인드 그리고 고쳐야 할 습관들을 알려주시고, 나아가 공부해야 할 부분도 알려주시기 때문에 느리더라도 확실하게 발전해 나갈 수 있습니다. 그리고 이런 과정을 통해 스스로 “더 좋은 개발자로 성장할 수 있겠다”라는 확신을 가질 수 있습니다. 너무 장점만 소개해드린 건 아닌가 싶지만, 저는 정말 다니면서 단점이라고 느낄만한 부분을 아직은 찾지 못했어요! (굳이 따지자면 신입 사원 공유회의의 발표가 매주 있다는 것이 다소 부담스럽다는 점…. 하지만 이 또한 본인의 마음가짐에 따라 즐길 수 있는 부분이지 않을까요?! 실력은 확실히 느니까요!) 이 글이 예비 브레인저에게 조금이나마 도움이 되면 너무 기쁠 것 같습니다. 혹시 지원을 망설이고 계시거나 걱정하는 분이 이 글을 읽으면서 “와, 브레인즈컴퍼니 좋다! 나도 지원해야지!”라는 생각이 들면 좋겠네요. 이렇게 약 5개월 간의 신입 사원 적응기를 마무리하겠습니다!
2023.02.02
기술이야기
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
사람이야기
업계 1위 회사에서 개발 경험을 쌓고 싶다면?
사람이야기
업계 1위 회사에서 개발 경험을 쌓고 싶다면?
브레인즈컴퍼니는 IT 인프라 통합관리 소프트웨어 업계에서 20년 넘게 선두 자리를 지켜오고 있습니다. 20년 역사 중 절반인 10년 가량을 브레인즈에서 함께 성장해 온 개발자들이 있는데요. 업계 1위 제품을 개발하고 있다는 자부심으로 근무 중인 백엔드 개발자, 신호진님&프런트엔드 개발자 김범호님의 이야기를 들어보겠습니다. ----------------------------------------------------------------- Q. 안녕하세요, 자기소개 부탁드릴게요. 호진님: 안녕하세요. 2014년에 입사해 개발1그룹 인프라코어팀에서 근무 중인 신호진입니다. 첫 직장이 브레인즈컴퍼니라, 이제 8년차에 접어든 백엔드 개발자입니다. 범호님: 저는 2012년에 입사해서 10년이 흘렀네요. 개발2그룹 인프라웹팀에서 근무 중인 프런트엔드 개발자 김범호입니다. Q. 각자 맡고 있는 업무에 대해 설명해 주세요. 호진님: 브레인즈컴퍼니의 지능형 IT 인프라 통합관리 소프트웨어인 ZENIUS EMS(제니우스 이엠에스)의 통보 매니저, MRTG 매니저, 서버 Agent를 담당하고 있어요. 통보 매니저는 장애 발생 시 메일, 문자, App 등으로 통보해 사용자가 인지할 수 있도록 하고요. MRTG매니저는 다양한 IT 인프라에 대해 모니터링 분석 데이터를 제공해요. 서버 Agent는 장애 감시, OS 별 성능항목 초 단위 모니터링, 프로세스 모니터링을 제공합니다. 범호님: 호진님 팀에서 실시간 모니터링 작업을 통해 데이터를 수집하면, 그 수집된 데이터를 보고서나 차트, 오버뷰 등으로 사용자가 한눈에 볼 수 있도록 기획/설계/개발하는 업무를 하고 있습니다. Q. 이번 기회를 빌려 Zenius(제니우스)에 대해 홍보해 보자면? 범호님: 긴 말이 필요 없을 것 같아요. 관제 시스템으로서 갖출 수 있는 건 다 갖추고 있어요. 그러니까 업계 1위겠죠? 호진님: Zenius(제니우스)는 다양한 IT 인프라를 관리하는 제품이지만, 복잡하지 않고 사용자가 이용하기 쉽게 직관적으로 잘 만들어진 제품이에요. 국내에서 가장 인기있는 통합관제 솔루션입니다. Q. Zenius(제니우스) 제품을 개발할 때 주로 어떠한 언어를 사용하고 계시나요? 호진님: 주로 C, C++ 언어를 사용하고 있습니다. 범호님: 저는 주로 Java를 사용해요. 현재 팀 이전에는 ITSM팀에서 근무했는데, 그때는 Kotlin을 사용했어요. Q. 두 분은 프런트엔드/백엔드 커리어를 선택한 계기가 있나요? 호진님: 저는 컴퓨터공학을 전공했고, 프로젝트 때마다 담당하던 부분이 백엔드였어요. 그러다 보니 자연스럽게 백엔드 개발자가 됐어요. 그리고 C, C++ 언어를 배우면서 이 분야가 전망이 좋다는 점도 직무를 선택하는데 영향을 미친 것 같아요. 범호님: 저도 호진님과 비슷해요. 전공이기도 했고, 개발 업무가 성격에 잘 맞았어요. Q. 두 분 모두 개발 일을 하신 지 10년 정도가 흘렀네요. 개발 환경이 10년 전과 비교했을 땐 어떻게 달라졌나요? 호진님: 예전에는 개발자라 하면 야근도 많았고 연봉도 그렇게 높지 않았죠. 지금은 개발자 품귀 현상이 나타날 정도로 인기있는 직종이 되다 보니, 연봉도 높아지고 야근도 없는 편이에요. 얼마 전에 연봉이 천만원 인상되면서 매우 만족하며 다니고 있습니다. (웃음) 범호님: 10년 전만 해도 개발자는 3D 업종이라는 말이 있을 만큼 힘든 직업이었던 것 같아요. 예전에는 “적성에 맞는 일을 꼭 해야겠다”라는 인식이 있었다면, 요즘은 개발자가 좋은 이미지로 비치다 보니 사람들이 쉽게 접할 수 있게 되면서 적성보다는 “개발 일을 한 번 해 봐도 괜찮지 않을까”라는 인식으로 바뀐 것 같아요. Q. 이제 팀에 대해 이야기 나눠볼게요. 각자 팀 분위기는 어떤가요? 범호님: 저희는 자유로운 분위기인 것 같아요. 혼자 밥 먹고 싶으면 혼자만의 시간을 갖기도 하고, 다른 사람과 어울리고 싶으면 함께하기도 하고요. 각자 취향을 존중해 주고 있습니다. 호진님: 인프라코어팀은 그 어떤 팀보다 밝은 팀이에요. 저희 팀은 10명 가량으로 구성돼 있는데, 그중 절반 이상이 10~15년 이상의 근속자분들이자 베테랑 개발자예요. 모두 겸손하고 유머러스해서 입사 초부터 잘 해주시다 보니 적응하기도 쉬웠어요. 평소 서로 인사도 잘 하고 이야기도 자주 나누고요. 다른 팀들이 저희 팀을 무서워(?) 하는 것 같은데, 실상은 전혀 그렇지 않거든요. 특히 그룹장인 상호님은 겉으로는 차가워 보이지만, 속은 누구보다 따뜻해서 이야기 나눠보면 그 매력을 느낄 수 있을 거예요. (웃음) Q. 장기 근속자가 많다는 것이 배울 점이 많아 좋기도 하지만, 세대 차이가 발생할 수도 있을 것 같은데요. 그 간극을 좁히기 위해 어떤 노력을 하시나요? 호진님: 시니어 개발자들과 주니어 개발자들이 서로의 차이를 극복하기 위해 대화를 정말 많이 합니다. 그러다 보면, 서로 생각하지 못한 부분을 채워줄 수 있더라고요. 그리고 저희 팀은 함께 밥도 자주 먹고 강제성 없이 원하는 사람들끼리 술도 마시면서 동료애를 쌓아가고 있어요. 범호님: 코드 리뷰를 통해 서로 피드백을 주고받고 있어요. 연차가 낮은 동료가 먼저 신기술을 접하고 오면 제가 배우려고 할 때도 있고요. 또, 저희 팀도 대화를 많이 해요. 설득하는 과정이 필요할 때마다 대화를 통해 의사소통을 해 나가요. 서로 존중해주는 과정이라고 생각해요. 내 의견이 맞다고 생각하다가도 상대 의견이 타당한 내용이라면 믿어주고 서로 응원하면서 일하고 있습니다. Q. 동료들은 본인들을 어떤 사람이라고 이야기할 것 같은가요? 호진님: 아주 쑥스러운 질문이네요. (웃음) 음... 괜찮은 사람이라고 할 것 같습니다. (웃음) 앞으로 “같이 일하면 즐겁고, 어떤 일이든 믿고 맡길 수 있는 사람!”이라는 평가를 들을 수 있도록 더 노력해야죠. 범호님: 믿을 수 있는 사람. 그래서 의지할 수 있고 항상 같이 일하기 좋은 사람이고 싶습니다. (웃음) Q. 그럼 반대로 어떤 동료와 함께 일하고 싶은가요? 호진님: 예의 있고 끈기 있는 동료요. 예의는 직장 생활의 기본이라고 생각해요. 업무 관련해서는 개발과정에서 막히는 부분이 있을 때 오래 앉아있으면 해결책이 나오기 때문에 끈기가 정말 중요해요. 여기에 하나 더 덧붙이자면, 책임감 있는 동료들과 일하고 싶어요. 데드라인은 정말 중요하니까요. 범호님: 바보 같은 질문을 스스럼없이 하는 동료. 터무니없는 질문을 시작으로 되게 괜찮은 아이디어가 나오기도 하거든요. 그래서 때와 장소에 따라 질문을 하는 용기가 필요해요. 상대 이야기를 듣다가 모르는 부분에 대해서는 질문을 해야 업무를 하는데 문제가 없거든요. 보통 질문을 하지 않는 사람들은 이해를 하지 못했는데도 불구하고, 마치 다 알고 있는 것처럼 근엄하게 있다가 넘어가는 경우들이 많아요. 그렇다 보면 업무를 진행하는데 문제가 발생하죠. 그래서 아무 말없이 듣기만 하기보다는 질문할 수 있는 용기를 가진 동료가 좋습니다. Q. 차후에 합류하게 될 개발자들에게 브레인즈에 대해 꼭 알려주고 싶은 것은? 범호님: 저는 장기근속자다 보니, 그동안 회사가 바뀌는 과정을 봐왔는데요. 브레인즈컴퍼니는 지난 10년간 꾸준히 성장해오고 있어요. 그래서 새로운 개발자들이 합류한다면, 10년 후에는 더 큰 회사로 성장해 있을 것이라고 확신해요. 특히 브레인즈컴퍼니는 인재에 많이 투자를 하고 있습니다. 웬만한 교육은 지원을 해주고 있기 때문에, 이렇게 노력을 들이는 회사에서 본인 스스로 노력하고 발전하고자 하는 의지만 있다면 좋은 방향으로 성장할 수 있습니다. 호진님: 브레인즈컴퍼니는 직원을 많이 생각하는 회사예요. 복지가 좋고, 사람들도 좋아요. 이렇게 말하면 잘 와 닿지 않을 것 같은데, 입사하셔서 직접 느껴 보시기 바랍니다! Q. 마지막 질문입니다. 나에게 브레인즈컴퍼니란? 범호님: 동반자. 저는 그동안 운이 좋은 케이스였던 것 같아요. 프로젝트를 하기 위해 외부로 나갔다가 다시 돌아오기도 했고, 팀도 옮겨 봤고요. 그 와중에 회사가 리모델링도 하고 인력이 충원되면서 커졌고요. 또, 기존 제품을 아예 새로 만들어 보기도 했죠. 안주할 새도 없이 여러 변화를 겪으며 회사와 함께 성장해왔기 때문에 동반자 같은 존재가 됐습니다. 호진님: 성장할 수 있는 기회를 주는 곳. 또, 밥 굶지 않고 살아갈 수 있도록 아낌없이 지원해주는 곳이기도 하고요. (웃음)
2022.11.22
회사이야기
공공분야 관제 SW 1위, 제니우스(Zenius)
회사이야기
공공분야 관제 SW 1위, 제니우스(Zenius)
공공 정보화 시장의 외산 소프트웨어 쏠림 현상이 여전한 가운데, 관제 분야는 반대로 국산화 비율이 90%를 넘었습니다. 브레인즈컴퍼니가 해당 분야에서 1위를 차지하며, 국산 SW의 자존심을 지켰습니다. 행정안전부가 공개한 ‘2022년 범정부EA 기반 공공부문 정보자원 현황 통계보고서’에 따르면, 지난해 공공부문 전체 SW 국산화 비율은 40.7%에 불과합니다. 반면, 관제 분야는 외산화 비율이 9.75%, 국산화 비율이 90.25%로 나타났습니다. 이번 보고서는 SW 유형별(OS, DBMS, WEB/WAS, 백업, 정보보호, 관제) 국산화 정도, 운영기간별 현황과 운영 상위 벤더 등에 대한 통계 정보를 제공하고 있습니다. 그 중, 관제 분야의 Top4 벤더 정보부터 살펴보겠습니다. 벤더 2019년 2020년 2021년 브레인즈컴퍼니 709 1,137 1,201 제니퍼소프트 406 952 921 이글루시큐리티 786 1,145 872 와치텍 629 689 718 [표1] 관제분야 SW 벤더의 연도별 운영 수량(단위: 개) 브레인즈컴퍼니는 그동안 간발의 차이로 2위였다가 드디어 1위가 됐습니다. 2021년 기준 전체 4,991개 관제 SW 중 브레인즈컴퍼니는 1,201개로 24.06%의 점유율을 보이고 있습니다. 이는 “공공분야의 관제 소프트웨어 1위는 브레인즈컴퍼니다”라는 객관적 지표입니다. 지난 3년간 연도별 관제 SW 도입수량과 점유율을 보면 브레인즈컴퍼니가 어떤 환경에서 어떻게 1위가 됐는지 유추가 가능합니다. 기타 점유수량이 현저히 줄어들고 있고 동시에 상위 벤더 쏠림현상이 나타났습니다. 브레인즈컴퍼니는 치열한 경쟁 환경 속에서 꾸준히 성장을 이뤄왔다고 볼 수 있습니다. 공공부문의 경쟁환경이 어떻게 변화하고 있는지 영업그룹 상무 은숙님에게 물어봤습니다. "공공분야는 더욱 공정한 제품 도입을 위해 기술과 가격평가를 통한 입찰, 제조사에게 직접 구매하는 방식으로 변화하고 있습니다. 상위 벤더 쏠림 현상은 관제대상의 고도화 속도를 따라가야 하고, 동시에 기존 운영 노하우 및 고객 니즈가 축적되는 제품이라 더욱 심화될 것으로 예측합니다." 다음은 소프트웨어 유형별 국산화 정도를 보겠습니다. 유형별 OS DBMS WEB/WAS 백업 정보보호 관제 외산 98.26 81.48 63.53 79.64 26.28 9.75 국산 1.74 18.52 36.47 20.36 73.72 90.25 1위 기업 레드햇 (40.10) 오라클 (63.56) 티맥스소프트 (36.47) 컴볼트 (38.65) 트렌드마이크로 (31.55) 브레인즈컴퍼니 (24.06) [표2] SW 유형별 도입률과 1위 기업(단위: %) 우선, 관제 부분의 국산화율은 90.25%로 전체 SW에서 가장 높으며, 정보보호와 관제를 제외한 다른 분야는 40% 이하인 것이 특징입니다. 쟁쟁한 글로벌 기업 사이에서 브레인즈컴퍼니가 국내기업의 위상을 높인 거 같아 뿌듯합니다. 그런데 욕심일까요? 내심 다른 분야 1위 기업처럼 도입률이 30% 이상되면 좋겠습니다. 브레인즈컴퍼니가 30% 이상 점유가 가능할 지 은숙님의 의견 들어봤습니다. "[표1]을 보시면 브레인즈컴퍼니가 기울기 변화없이 우상향하는 것을 볼 수 있는데요. 관제 SW는 그 특성상 일회성 도입이 아닌 통합관리 및 운영편의성을 위해 지속적으로 확장되게 구성돼 있습니다. 브레인즈컴퍼니의 제니우스가 기능이나 기술 지원이 퇴보하지 않는 한, 일회성으로 끝날 일이 없기 때문에 가능하다고 봅니다. 하지만 공공 시장이 빠르게 클라우드로 전환되는 상황에서 관제분야도 이 흐름에 대비해야 합니다. 즉, 클라우드 환경의 가용성, 성능, 보안을 사전에 모니터링해 문제가 최종 사용자 환경에 영향을 주기 전에 찾아서 해결하는 역할이 추가적으로 필요합니다." 다음은 관제 SW 운영기간별 현황을 살펴보겠습니다. 구분 3년 미만 3~5년 5~8년 8~10년 10년 이상 수량 2,743 1,275 1,654 1,530 2,669 비율 27.8 12.9 16.8 15.5 27.0 [표3] 관제 SW 운영기간 현황(단위: 개, %) 우리가 주목할 것은 3년 미만과 10년 이상입니다. 10년 이상 비율은 “관제 SW는 그 특성상 일회성이 아닌 한 번 구축하면 지속적으로 확장된다”는 은숙님 의견을 뒷받침해주는 수치입니다. 3년 미만 비율이 높은 것은 그만큼 관제 SW의 필요성이 늘어 신규 도입이 증가했고, 해당 수량은 향후 몇 년 간 쭉 지속될 것이라고 유추해볼 수 있습니다. 이에 대한 은숙님의 의견입니다. "10년이면 강산이 변한다는 말이 있죠. 2000년 초 경쟁하던 제조사가 없어지거나, 불과 몇해 전 치열하게 경쟁했던 회사가 아예 언급조차 되지 않거나, 또 거기는 빼고... 하는 말들을 듣게 됩니다. 제니우스는 잠시 반짝하거나, 일부 영업적 베네핏에 의해서 점유되는 제품이 아닙니다. 고객들이 다음 버전을 기대하고 써 본 분들이 추천하는 제품이라, 현재 개발 중인 차세대 제니우스는 더 많은 고객분들과 함께 할 수 있을 것이라고 자신합니다." 이번 소식은 브레인즈컴퍼니가 IT인프라 통합 관제 소프트웨어 분야에서 국내 1위가 맞는지, 아니면 몇 위쯤 인지 항상 궁금했던 분에게는 유용한 정보가 될 것 같습니다. 앞으로 차세대 제니우스를 통해 관제 SW 분야에서 최고의 서비스를 제공하도록 하겠습니다. [부록] 함께 알아 두면 좋은 정보 §공공부문은 중앙행정기관, 법기관, 광역 및 기초자치단체, 공공기관으로 구분된다. §중앙행정기관 중 국방부, 감사원, 방통위, 법제처, 공수처, 소방청은 관제 소프트웨어를 운영하고 있지 않다. 광역자치단체의 총 소프트웨어 도입비 중 관제 소프트웨어 비중은 평균 6.9%이다. 가장 낮은 지역은 경기도 1.4%, 다음은 광주 2.4%이다. 1위는 부산이며 16.3%이다. §공공부문 소프트웨어는 총 20만6천개이며 총 도입비는 17조6천억원이다. 이중 중앙행정기관이 84%를 차지한다. 반면 하드웨어는 총 23만 5천개, 총 도입비는 9조9천억원이다. §관제분야 소프트웨어의 운영 기준 도입비는 6천6백억원이다. 운영체제 8천억원, 정보보호 7조5천억원, WAS 1조5천억원, DBMS 1조6천억원, 백업 2조3천억원, 기타 3조원. §소프트웨어 중 기타로 분류되는 것에는 가상화, 리포팅툴, 그래픽툴, 검색엔진, EAI/ESB, 클러스터, 메일 등이 있다. §도입률과 점유율이 혼재돼 사용했는데, 도입 후 사용하지 않는 SW는 통계자료에서 제외됐으므로 결국 같은 의미이다. §공공부문이 운영중인 정보시스템에서 가장 많이 사용하고 있는 개발언어는 JAVA(70.26%), 다음으로 JSP(46.5%)이다. 개발 프레임워크의 경우 1위는 전자정부표준으로 48.5%, 2위는 Spring 15.7%, 꼴찌는 .NET 5.7%
2022.10.24
기술이야기
벽을 넘어서고 싶은 신입 개발자의 브레인즈 생활기
기술이야기
벽을 넘어서고 싶은 신입 개발자의 브레인즈 생활기
지원 이유와 여정 대학교 졸업 후, 부족한 웹개발 역량을 쌓기 위해 5달간의 풀스택 부트캠프 교육을 수료하고 1달간의 기업 협업 인턴을 마쳤습니다. 이후, 제 역량을 마음껏 펼쳐내며 지속적으로 성장할 수 있는 회사에서 일하고 싶다는 생각이 들었습니다. 그러다 풀스택 기술뿐만 아니라, 빅데이터 및 AI 기술을 활용해 차세대 기술을 개발하는 브레인즈컴퍼니의 채용공고를 발견했습니다. 이 회사에서라면 많은 것을 배워 역량을 키우고 성장하며 일할 수 있겠다는 생각에 지원했고, 면접 끝에 첫 직장에 취업하게 됐습니다. 웹개발도 재밌지만 개발자로서 지속적으로 새로운 기술들을 습득하며 성장하는 것에서 성취감과 보람을 느끼는 것이 컸고, 그럴 수 있는 부서에서 첫 회사 생활을 시작할 수 있다는 생각에 기뻤습니다. 채용 과정 면접에서 기억에 남는 질문은 "우리 부서는 프론트엔드 보다 백엔드를 더 추구하는 편이라 함께 일을 하게 된다면, 프론트엔드와 백엔드 모두를 아울러 사용할 것인데 할 수 있습니까?"였습니다. 풀스택 개발자로서 일을 하게 된다는 질문이었고, 저는 이 부분에 대해 긍정적이었기 때문에 자신 있게 할 수 있다고 대답했습니다. 백엔드 개발자보다 많은 영역에서 발전하며 성장할 수 있다는 생각에 더욱 기대되고 설렜던 기억이 있습니다. 그렇게 저의 첫 직장 생활이 시작됐습니다. 입사 후, 지난 3달간의 일대기 채용이 된 후, 출근까지 2주간의 자유 시간이 주어졌습니다. 졸업 후 부트캠프 교육을 이수하면서 줄곧 달려왔고, 즐겁게 공부했지만 지쳐있는 심신을 달래기 위해 여행도 다녀오고 친구들과 가족들과 시간을 보내면서 출근 준비를 했습니다. 그렇게 2주 후 첫 출근을 하는 날이 됐고, 본격적으로 사원으로 근무하는 날이 다가왔습니다! 브레인즈컴퍼니의 개발 그룹은 1~5그룹으로 나눠져 있으며, 저는 개발4그룹에 소속됐습니다. 개발4그룹은 프론트엔드와 백엔드 개발뿐만 아니라, 빅데이터 및 AI 기술을 동원한 신기술 개발을 담당하고 있어, 배울 점도 많고 나아가야할 길도 멀리 펼쳐져 있다고 느꼈습니다. 1st Month_적응기 입사 첫 달은, 개발4그룹에서 집중적으로 개발 진행 중인 로그매니저와 Zenius AI의 제품 매뉴얼과 웹페이지에서 실제로 사용되고 있는 각각의 기능들을 학습하며 제품을 파악하고 익숙해지는 기간을 가졌습니다. 그렇게 한 달 간은 개발에 투입되기보다는 제품 및 사용된 기능들에 대한 학습과 공부를 하는 기간이었습니다. 단순히 제품의 매뉴얼만을 보며 학습을 했다면 집중도가 떨어졌을 수 있지만, 제품에서 사용하고 있는 다양한 기술들, Elasticsearch, Kibana, Kafka, Cluster 등 스택들에 대해 공부하면서 흥미와 재미를 느끼며 학습을 이어갈 수 있었습니다. 잘 몰랐던 신 기술들을 접하면서, 앞으로도 배우게 될 다양한 기술들에 대해 기대감이 부풀었던 한달이었습니다. 이외에도 학습을 진행하면서 원래 사용하던 스택인 JavaScript와 Linux의 Base부터 차근차근 다시 복습하며 결점을 보완하고, 제 자신을 Refactoring하기도 했던 한 달이었습니다. 2nd Month_개인정보 마스킹 기능 개발 입사 두 달째 부터는, 로그매니저와 Zenius AI의 기능들과 매뉴얼에 대해 전반적인 이해를 갖게 됐고, 각 사이트 기능들의 동작 원리 등을 대략적으로 파악할 수 있었습니다. 두 달이 된 이 시점부터 프론트엔드와 백엔드 모두를 사용하는 프로젝트가 주어졌습니다. 주어진 프로젝트는 ‘개인정보 마스킹 기능 개발’ 이었습니다. 로그매니저 내에서 수집되는 대용량의 로그들 안에 개인 정보가 포함될 경우가 있는데, 개인정보가 그대로 노출되는 것을 방지하기 위해 개인정보에 해당하는 정보는 마스킹처리를 자동적으로 진행하는 기능 개발을 진행하게 됐습니다. 예를 들어, 로그에 ‘961219-1234567’, ‘서울시 성동구 성수이로’, ‘010-1234-5678’ 등과 같은 주민등록번호, 주소, 연락처 뿐만 아니라 다양한 개인정보들을 지정한 특수문자(Default로는 *을 사용) 로 마스킹 처리를 해주는 기능을 개발하는 과정이 중점이 되는 프로젝트였습니다. 풀스택 공부를 하면서, 백엔드는 Node.js와 MySQL, PrismaOrm 등을 사용해 기능 개발을 진행했지만, 이번 프로젝트는 Elasticsearch, Kafka.js, Cluster.js 및 커스텀마이징된 다양한 메소드와 함수들을 통해 진행했기 때문에 배울 점이 매우 많았고, 성장하는 것을 느낄 수 있었습니다. 이외에도 프론트엔드에서 Ace.js를 통한 텍스트 편집기를 개발하고, 개인정보유형에 해당하는 정보가 입력되면 Syntax Highlighting 기능을 통해 해당 부분에 형광펜 효과를 적용시켜주는 기능의 개발을 진행했습니다. 개인정보 유형에 해당하는 정보에 대응되는 정규표현식, 그리고 백엔드에서 마스킹 처리될 특수문자 타입의 데이터 등은 Elasticsearch의 Index를 통해서 데이터의 저장과 반환작업 처리를 진행해줬으며, 이 데이터들을 기반으로 프론트엔드와 백엔드에서 모두 정상적인 마스킹 기능과 Syntax Highlighting 기능을 개발할 수 있었습니다. 새로운 기술을 활용해 프로젝트를 진행하면서 어려운 점도 많았고 시행착오도 겪었지만, 그만큼얻어가고 배워가는 것이 많았던 첫 업무였습니다. Elasticsearch, Kibana, Cluster, Kafka 등 새로운 기술 스택에 대해 배우고 적용할 수 있었다는 점이 매우 흥미로웠고 뿌듯한 경험이었습니다. <사진 설명: 개인정보 유형과 마스킹 여부, 정규표현식 관리와 마스킹 기능 ON/OFF가 가능한 페이지> <사진 설명: 선택한 개인정보 정규표현식에 해당되는 데이터 Syntax Hilighting 기능 구현> 3rd Month_데몬프로세스 그룹화 작업 및 테스트케이스 입사 세 달째 부터는, 어느 정도 회사 생활에 적응이 된 상태가 됐습니다. 아침 일찍 일어나는 것에도 적응이 됐고, 초반에는 어색했던 업무회의와 주간업무보고서 작성도 이제는 자연스럽게 하고 있는 모습을 발견할 수 있었습니다. 첫번째 프로젝트를 마친 후, 두번째로는 로그매니저의 데몬프로세스 기능을 그룹별로 정렬하는 업무를 맡게 됐습니다. 데몬프로세스가 각각의 그룹 속성을 지니고 있지만, 이를 그룹별로 나눠서 보여준다면 좀 더 가독성과 가시성이 높아질 것이기 때문에, Elasticsearch에서 반환 받는 데이터를 그룹의 조건에 따라 분류해주는 작업이 주가 됐습니다. 두번째 개발 후에는 로그매니저의 각 기능들에 대한 테스트 케이스 및 오류 사항 확인의 과정을 거쳤고, 제가 개발한 ‘개인정보 관리’ 기능에 대한 테스트 케이스 작성도 진행했습니다. 개발자가 개발을 잘하는 것도 중요하지만, 이렇게 자신이 개발한 기능에 대해 테스트케이스를 작성하면서 유저가 해당 테스트케이스를 확인하고, 개발한 기능을 자연스레 사용할 수 있게 해야 하는 것은 개발만큼이나 중요하다고 생각하기 때문에 기분 좋게 테스트케이스 작성을 진행할 수 있었습니다. 또, 로그매니저 제품 각 기술들의 테스트케이스들을 확인하며 각각의 기능들을 모두 테스트해볼 수 있는 기회가 됐으며, 개발하고 서비스되고 있는 기술들에 대해 좀더 명확하게 인지하고 확인할 수 있어 제품 이해에 큰 도움이 됐습니다. 이를 기회로 개발만이 중요한 것이 아닌 테스트케이스의 중요성을 절실히 깨닫고, 제가 개발하는 기술들에 대한 테스트케이스 작성이 필수불가결하다는 것을 느끼게 됐습니다. 느낀 점 브레인즈컴퍼니 개발4그룹에 입사 후, 3달간 근무하며 느낀 점은 제가 만족하며 회사를 다니고 있다는 점입니다. 그룹의 모든 구성원분들이 잘 적응할 수 있도록 도와주고 챙겨주셨고, 문제가 될 수도 있는 실수가 발생해도 모든 그룹원들이 다 잘 다독여 주셨습니다. 또, 좋은 피드백을 줘서 지속적으로 배워가고 성장할 수 있는 회사의 성장할 수 있는 부서라고 생각합니다. 그룹의 상래님, 신후님, 천웅님, 태민님 모두 제게 좋은 피드백과 도움을 주시고, 개선돼야할 점과 공부해야 할 부분, 그리고 개발을 하면서 고쳐야 할 습관들을 알려주셔서 점차 앞으로 나아갈 수 있다고 생각합니다. 일을 하면서 빼놓을 수 없는 게 워라밸일 것이라고 생각합니다. 첫 회사에서 일과 삶의 밸런스가 매우 적절하다고 생각하고 만족하며 근무를 하고 있습니다. 퇴근을 한 뒤에도 운동을 할 수 있고, 식단 관리도 병행하며 몸을 기르고 있습니다. 만약, 워라밸이 좋지 않았더라면 이렇게 삶을 유지할 수 없을 거라는 생각이 듭니다. 글을 마치며 면접에서 제가 했던 말이 있습니다. 저는 앞에 벽이 있다면 돌아가 다른 길을 찾으려 하기보다는 그 벽을 넘을 수 있는 방법을 생각합니다. 앞으로 나아갈 수 있고 성장할 수 있는 삶을 추구하고 있습니다. 비록 그 벽을 넘지 못하더라도, 다음에 그 벽보다 낮은 벽은 넘을 수 있을 것입니다. 시도조차 하지 않으면 당연히 발전도 없다고 생각합니다. 매번 도전하고 또 도전하며 발전하는 개발4그룹의 일원이 돼, 신기술 개발에도 큰 보탬이 되는 개발자로 성장하고 싶습니다. 그리고 브레인즈컴퍼니 개발4그룹에서 반드시 실현 가능하다고 생각합니다. 다양한 기술들을 배우고 학습해 제 것으로 만들고, 그룹과 회사에 보탬이 되는 개발자로 성장하겠습니다! [출처] https://twitter.com/gom_translate https://me2.kr/wvu3p http://jjaltoon.gallery/?p=11311 https://me2.kr/eq144
2022.08.25
1
2