반복영역 건너뛰기
주메뉴 바로가기
본문 바로가기
제품/서비스
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
블로그
열기
메인 페이지로 이동
블로그
최신이야기
블로그
최신이야기
사람이야기
회사이야기
기술이야기
다양한이야기
최신이야기
검색
사람이야기
브레인즈컴퍼니에 새롭게 합류한 브레인저를 소개합니다. (김민호, 조희윤, 서동석 님)
사람이야기
브레인즈컴퍼니에 새롭게 합류한 브레인저를 소개합니다. (김민호, 조희윤, 서동석 님)
브레인즈에 새로운 경험과 시선을 더해줄 세 명의 새로운 브레인저가 합류했습니다. 각자 걸어온 길과 맡은 역할은 다르지만, 새로운 환경에서 배우고 동료들과 함께 더 나은 결과를 만들어가고자 한다는 점에서는 닮아 있는데요. 피드백을 빠르게 반영하며 완성도를 높여가는 김민호 님, 기술에 대한 이해와 소통을 바탕으로 고객의 요구를 현실로 연결하는 조희윤 님, 그리고 새로운 배움을 즐기며 꾸준히 성장하는 서동석 님까지. 서로 다른 경험과 강점을 가진 세 분이 브레인즈에서 어떤 역할을 만들어가고 싶은지, 그리고 일을 대하는 각자의 생각은 무엇인지 이야기를 들어보았습니다. Q1. 간단한 자기소개 부탁드립니다. 안녕하세요. 제2연구개발본부 솔루션사업팀에 경력직으로 합류한 김민호입니다. 저는 맡은 업무에 책임감을 가지고 끝까지 몰입하는 것과 동료들과 원활하게 소통하며 협업하는 것을 중요하게 생각합니다. 이전 직장에서 쌓은 경험을 바탕으로 브레인즈에서도 맡은 역할을 안정적으로 수행하며 팀에 도움이 되는 구성원이 되고 싶습니다. 새로운 환경과 업무 방식에도 빠르게 적응해 자연스럽게 팀에 녹아드는 것이 현재의 첫 번째 목표입니다. Q2. 현재 맡고 계신 업무에 대해 소개해주세요. 현재 ITSM 서비스 개발과 시스템 유지보수 업무를 담당하고 있습니다. 사용자가 서비스를 이용하면서 겪는 문제를 빠르게 해결하고, 기존 기능을 지속적으로 개선해 보다 안정적이고 효율적인 IT 서비스 환경을 만드는 것이 주요 업무입니다. ITSM은 실제 사용자의 업무 프로세스와 밀접하게 연결되어 있기 때문에 작은 기능이나 개선 사항도 업무 효율에 영향을 줄 수 있다고 생각합니다. 따라서 사용자가 시스템 자체를 크게 의식하지 않고도 원활하게 업무를 처리할 수 있도록 서비스의 안정성과 완성도를 높이는 데 집중하고 있습니다. Q3. 업무를 할 때 김민호 님만의 강점이나 원칙이 있다면 무엇인가요? 피드백을 적극적으로 받아들이고 빠르게 업무에 반영하는 것이 제 강점이라고 생각합니다. 혼자만의 생각에 머무르기보다 동료들의 의견을 충분히 듣고, 필요한 부분은 우선순위를 정해 바로 적용하려고 합니다. 특히 업무 과정에서 받은 피드백을 단순히 해당 문제를 해결하는 데 그치지 않고, 비슷한 상황에서도 활용할 수 있도록 제 것으로 만드는 것을 중요하게 생각합니다. 같은 실수를 반복하지 않고 조금씩 더 나은 결과물을 만들어가는 과정이 결국 개인의 성장과 업무의 완성도로 이어진다고 생각합니다. Q4. 동료들과 협업할 때 가장 중요하게 생각하는 것은 무엇인가요? 약속된 원칙을 지키는 책임감과 동료에 대한 배려를 가장 중요하게 생각합니다. 일정이나 개발 표준을 준수하는 것은 자신의 업무를 잘하는 것뿐 아니라 함께 일하는 동료의 시간과 업무를 존중하는 일이기도 합니다. 또한 협업에서는 각자의 역할을 명확하게 수행하는 것만큼 서로의 상황을 이해하고 필요한 내용을 충분히 공유하는 것도 중요하다고 생각합니다. 각자가 맡은 역할에 책임을 다하면서도 어려움이 있을 때 자연스럽게 도움을 주고받을 수 있을 때 신뢰가 쌓이고, 좋은 협업으로 이어진다고 생각합니다. Q5. 입사 후 느낀 브레인즈의 첫인상은 어땠나요? ‘든든한 동료’라는 말로 표현하고 싶습니다. 입사 후 만난 팀원분들은 각자의 분야에서 전문성을 갖추고 있으면서도 새로운 구성원이 잘 적응할 수 있도록 세심하게 배려해주셨습니다. 업무 중 궁금한 점이나 의견도 비교적 편하게 나눌 수 있었고, 피드백을 주고받는 과정에서도 단순히 답을 알려주기보다 함께 문제를 해결해 나간다는 느낌을 많이 받았습니다. 덕분에 새로운 환경에 대한 부담을 줄이고 업무에도 빠르게 적응할 수 있었고, 저 역시 동료들에게 그런 안정감을 줄 수 있는 사람이 되고 싶다는 생각을 하게 됐습니다. Q6. 앞으로 브레인즈에서 어떤 구성원으로 성장하고 싶으신가요? 우선 맡은 업무에서 제 역할을 충실히 수행하며 팀에 안정적으로 기여하는 구성원이 되고 싶습니다. 그 과정에서 ITSM과 서비스 운영에 대한 이해와 경험을 더욱 넓히고, 다양한 상황에서 스스로 해결책을 찾을 수 있는 역량도 키워가고 싶습니다. 기술적인 부분뿐 아니라 사용자와 동료의 입장까지 함께 고려하면서 더 나은 방향을 제안할 수 있는 구성원이 되는 것이 목표입니다. 시간이 지나 저 역시 새로운 구성원이 들어왔을 때 편하게 질문하고 의지할 수 있는 ‘든든한 동료’로 기억되고 싶습니다. Q1. 간단한 자기소개 부탁드립니다. 안녕하세요. 전략사업본부 영업그룹 프리세일즈팀에 새롭게 합류한 조희윤입니다. 저는 약 8년간 다양한 프로젝트에서 개발과 PL 역할을 맡으며 시스템 구조 설계부터 요구사항 정의, 사업 안정화까지 폭넓게 경험해 왔습니다. 그 과정에서 비즈니스의 요구와 개발 현장을 효과적으로 연결하고, 발생할 수 있는 이슈를 미리 살피며 프로젝트를 안정적으로 이끌어가는 것을 중요하게 생각해 왔습니다. 그동안 쌓아온 경험과 기술적 이해를 바탕으로 브레인즈에서도 빠르게 적응하며 제 역할을 해나가고 싶습니다. Q2. 현재 맡고 계신 업무에 대해 소개해주세요. 현재 프리세일즈팀에서 Zenius ITSM을 고객에게 소개하고, 실제 고객 환경에 안정적으로 구축·적용될 수 있도록 지원하는 업무를 담당하고 있습니다. 프로젝트 초기에는 고객의 요구사항과 업무 환경을 파악하고, 이를 실제 시스템에 어떻게 반영할지 여러 관계자와 함께 조율합니다. 이후 구축부터 오픈까지 일정과 품질을 관리하고 현장에서 발생하는 다양한 이슈에도 대응하면서 프로젝트가 원활하게 마무리될 수 있도록 지원하고 있습니다. 결국 고객의 요구와 제품, 개발 현장을 연결해 Zenius ITSM이 실제 업무 환경에 잘 안착하도록 만드는 역할이라고 생각합니다. Q3. 업무를 할 때 조희윤 님만의 강점이나 원칙이 있다면 무엇인가요? 저만의 강점을 하나 꼽는다면 기록하는 습관이라고 생각합니다. 모든 내용을 기억에만 의존하기는 어렵기 때문에 작은 내용이라도 가능한 한 기록으로 남겨두려고 합니다. 프로젝트를 진행하다 보면 여러 요구사항과 결정 사항, 변경 내용이 동시에 오가기 때문에 이전 기록을 다시 확인하는 것만으로도 놓쳤던 부분을 발견하거나 불필요한 실수를 줄일 수 있습니다. 특히 여러 사람이 함께 움직이는 프로젝트에서는 정확한 기록과 정보 공유가 결국 업무의 안정성과도 연결된다고 생각합니다. Q4. 입사 후 느낀 브레인즈의 첫인상은 어땠나요? 한마디로 표현한다면 ‘탈권위적’이라는 인상이었습니다. 직급이나 형식에 지나치게 얽매이기보다 구성원들이 비교적 편하게 의견을 나누고, 업무에 필요한 이야기를 솔직하게 주고받는 모습이 인상적이었습니다. 각자의 의견을 이야기하는 데 불필요하게 눈치를 보기보다는 문제를 어떻게 해결할 것인지에 집중하는 분위기라고 느꼈습니다. 새로운 조직에 합류한 입장에서도 질문이나 의견을 편하게 나눌 수 있어 빠르게 적응하는 데 도움이 되고 있습니다. Q5. 동료들과 협업할 때 가장 중요하게 생각하는 것은 무엇인가요? 저는 소통과 책임감을 가장 중요하게 생각합니다. 개발과 PL 업무를 경험하면서 하나의 프로젝트는 어느 한 사람의 업무만으로 완성되는 것이 아니라는 점을 많이 느꼈습니다. 특히 고객의 요구사항이나 프로젝트 상황에 대한 정보를 정확하게 공유하지 않으면 작은 오해가 이후 큰 이슈로 이어질 수도 있습니다. 그래서 필요한 내용을 적시에 공유하고 서로의 입장을 충분히 이해하면서, 자신이 맡은 부분에 대해서는 끝까지 책임지는 것이 좋은 협업의 기본이라고 생각합니다. Q6. 앞으로 브레인즈에서 어떤 구성원으로 성장하고 싶으신가요? 우선 지금까지 쌓아온 개발과 프로젝트 경험을 바탕으로 Zenius와 고객의 업무 환경을 빠르게 이해하고, 프로젝트가 안정적으로 진행될 수 있도록 기여하고 싶습니다. 앞으로는 제품에 대한 이해뿐 아니라 다양한 고객의 요구와 현장 경험도 꾸준히 쌓아, 고객과 개발 조직 모두가 신뢰할 수 있는 프리세일즈 담당자로 성장하는 것이 목표입니다. 문제가 발생한 뒤 대응하는 것에 그치지 않고, 미리 필요한 부분을 살펴보고 더 나은 방향을 제안할 수 있는 구성원이 되고 싶습니다. Q1. 간단한 자기소개 부탁드립니다. 안녕하세요. 제2연구개발본부 솔루션사업팀에 합류한 서동석입니다. 저는 다양한 업무를 경험하며 문제를 해결하고, 그 과정에서 새로운 것을 배우는 데 큰 보람을 느끼는 편입니다. 새로운 사람들과도 편하게 소통하는 성격이라 업무를 할 때도 서로 의견을 나누고, 도움이 필요한 부분이 있으면 먼저 다가가려고 합니다. 지금까지 쌓아온 경험을 바탕으로 새로운 환경에도 빠르게 적응하고, 꾸준히 배우면서 팀에 도움이 되는 구성원으로 성장하고 싶습니다. Q2. 개발 직무를 선택하게 된 계기는 무엇인가요? 대학교에서 우연히 코딩을 접한 것이 개발에 관심을 갖게 된 계기였습니다. 제가 작성한 코드가 실제 기능으로 구현되고 눈앞에서 결과로 나타나는 과정이 흥미롭게 느껴졌습니다. 이후 이전 직장에서도 솔루션 제품을 다뤄보면서 개발 업무에 대한 경험을 쌓았고, 새로운 솔루션과 기술을 계속 익히고 활용해보고 싶다는 생각도 커졌습니다. 지금도 직접 고민하고 만든 결과가 실제 서비스에 적용되는 과정에서 개발 업무만의 매력을 느끼고 있습니다. Q3. 업무를 할 때 서동석 님만의 강점이나 원칙이 있다면 무엇인가요? 저의 강점은 하나의 문제를 이해할 때까지 파고드는 집중력이라고 생각합니다. 모르는 내용이 나오면 대충 넘어가기보다 하나씩 찾아보고 충분히 이해하려고 하는 편입니다. 최근에는 AI도 적극적으로 활용하면서 궁금한 내용을 질문하거나 새로운 기술과 방법을 익히는 데 도움을 받고 있습니다. 이렇게 하나씩 이해하고 경험한 내용들이 쌓이면 비슷한 문제를 만났을 때 더 빠르게 해결할 수 있기 때문에, 작은 부분이라도 제대로 이해하고 넘어가려고 합니다. Q4. 입사 후 느낀 브레인즈의 첫인상은 어땠나요? 다섯 글자로 표현한다면 ‘새로운 경험’이라고 말씀드리고 싶습니다. 첫 이직이기도 하고, 이전 회사와 다른 업무 환경에서 새로운 솔루션을 접하면서 자연스럽게 배우는 것도 많았습니다. 특히 AI를 활용한 바이브 코딩처럼 이전에는 경험하지 못했던 방식도 직접 접해보고 있습니다. 새로운 동료들과 함께 일하면서 서로 다른 경험과 방식을 배우는 과정도 흥미롭게 느껴지고 있어, 앞으로 브레인즈에서 경험하게 될 새로운 것들이 더욱 기대됩니다. Q5. 동료들과 협업할 때 가장 중요하게 생각하는 것은 무엇인가요? 저는 커뮤니케이션이 가장 중요하다고 생각합니다. 서로의 생각이나 업무 진행 상황을 충분히 공유하고, 필요한 부분은 바로 이야기해야 불필요한 오해를 줄이고 업무도 원활하게 진행할 수 있기 때문입니다. 저 역시 혼자 판단하기보다는 모르는 부분은 적극적으로 질문하고, 제가 알고 있는 내용은 동료들과 공유하려고 합니다. 서로 편하게 의견을 주고받을 수 있는 분위기가 만들어질 때 개인의 업무뿐 아니라 팀 전체의 결과도 더 좋아질 수 있다고 생각합니다. Q6. 앞으로 브레인즈에서 어떤 구성원으로 성장하고 싶으신가요? 새로운 기술과 업무를 꾸준히 배우면서, 맡은 일을 믿고 맡길 수 있는 개발자로 성장하고 싶습니다. 기능을 개발하거나 개선했을 때 서비스가 조금씩 더 나아지고, 제가 만든 결과물이 실제로 적용돼 긍정적인 피드백을 받을 때 특히 큰 보람을 느낍니다. 앞으로도 이러한 경험을 하나씩 쌓으면서 개발 역량을 높이는 동시에, 주변 동료들과 적극적으로 소통하고 함께 문제를 해결할 수 있는 구성원이 되고 싶습니다. 꾸준히 달리면서 조금씩 기록을 높여가는 러닝처럼, 업무에서도 작은 성장을 계속 이어가는 것이 목표입니다. 지금까지 김민호 님, 조희윤 님, 서동석 님의 이야기를 들어봤습니다. 각자의 경험과 업무 방식은 다르지만, 새로운 환경에서 배우고 동료들과 함께 성장해가고 있다는 점은 세 분 모두 같습니다. 앞으로 브레인즈에서 더 많은 경험을 쌓으며 각자의 분야에서 자신만의 역할을 만들어가길 바랍니다.
2026.09.23
기술이야기
LLM Wiki로 프로젝트 지식 관리하기: Obsidian과 AI 에이전트 적용 사례
기술이야기
LLM Wiki로 프로젝트 지식 관리하기: Obsidian과 AI 에이전트 적용 사례
프로젝트가 길어지면 문서도 함께 늘어납니다. 기획서와 기술 조사 자료, 일정표, 설계서가 쌓이고 요구사항도 계속 바뀝니다. 문제는 필요한 문서를 찾는 것보다, 여러 문서 가운데 지금 무엇을 기준으로 봐야 하는지 판단하는 일이었습니다. AI를 개발 업무에 활용하면서 이 문제가 더 분명해졌습니다. 여러 자료를 빠르게 읽고 정리할 수는 있었지만, 과거 문서와 현재 기준이 함께 있으면 어떤 내용을 우선해야 하는지까지 AI가 스스로 알 수는 없었습니다. 이를 정리하기 위해 Andrej Karpathy가 공개한 LLM Wiki 패턴을 프로젝트 문서 관리에 적용했습니다. 원본과 현재 기준을 분리하고, 문서 우선순위와 변경 이력을 관리하면서 Obsidian과 AI 에이전트를 실제 기획·설계 업무에 활용했습니다. 이 글을 통해서 그 과정에서 어떤 구조를 만들고, 실제 업무에 어떻게 적용했는지 소개하려고 합니다. 이 글에서 말하는 LLM Wiki Andrej Karpathy가 제안한 패턴을 프로젝트 환경에 적용한 것입니다. 원본 자료와 LLM이 관리하는 Markdown Wiki를 분리하고, 사람은 자료를 선택하며 Obsidian에서 문서 연결과 변경 결과를 검토합니다. 이 프로젝트에서는 여기에 문서별 우선순위, 대체 관계, 변경 이력과 기획·설계 산출물 연결 규칙을 구체화했습니다. 원형 출처: Andrej Karpathy, “LLM Wiki — A pattern for building personal knowledge bases using LLMs” 01. 프로젝트 문서가 늘어날수록 ‘현재 기준’이 불분명해졌다 프로젝트 자료는 PPT, PDF, Excel, Markdown으로 나뉘어 있었습니다. PPT에는 합의된 방향이, PDF에는 기술 조사 결과가, Excel에는 기능 목록이, Markdown에는 구현 검토가 들어 있었습니다. 어느 한 문서만 읽어서는 전체 범위를 알 수 없었습니다. 기획이 변경될 때마다 서로 다른 기준을 담은 문서가 함께 남았고, 각각의 문서는 당시 결정과 검토 과정을 담고 있었습니다. 과거 문서를 삭제하면 결정의 맥락을 잃고, 그대로 두면 AI가 오래된 내용을 현재 기준으로 사용할 가능성이 생겼습니다. 검색할 수 있다는 것과, 무엇을 현재 기준으로 적용해야 하는지 안다는 것은 다른 문제였습니다. 프로젝트 문서 관리에서 확인한 핵심 문제 그래서 문서를 더 잘 검색하는 것보다 먼저, 원본과 현재 기준을 구분하고 문서 간 우선순위와 대체 관계를 명시하는 방식이 필요했습니다. 이 문제를 해결하기 위한 출발점으로 LLM Wiki의 기본 구조를 프로젝트 환경에 맞게 다시 정리했습니다. 02. LLM Wiki를 프로젝트 문서 관리 구조로 구체화했다 Karpathy의 원형은 Raw Sources, Wiki, Schema를 분리합니다. 이 구조를 그대로 가져오기보다 프로젝트 문서가 실제로 쌓이고 변경되는 방식에 맞춰 역할을 구체화했습니다. 원본은 수정하지 않고 보존하고, 여러 원본을 대조한 현재 기준은 별도의 Wiki로 관리했습니다. Schema의 역할은 프로젝트 운영 규칙과 문서 우선순위로 구체화했습니다. Karpathy의 LLM Wiki 원형을 프로젝트 문서 관리 방식에 맞게 구체화한 구조 raw/에는 기획서와 일정표 같은 원본을 그대로 보존했습니다. wiki/에는 여러 자료에서 공통으로 확인된 사실, 현재 적용할 요구사항, 설계 결정과 제약을 정리했습니다. index.md에는 어디서부터 읽어야 하는지와 문서 우선순위를, log.md에는 무엇이 언제 바뀌었는지를 기록했습니다. 일반 문서 검색과 무엇이 다른가 LLM Wiki가 RAG를 대체하는 것은 아닙니다. 자료가 많아질수록 검색은 여전히 필요합니다. 검색이 ‘관련 문서를 찾는 일’이라면, LLM Wiki는 ‘찾은 문서를 어떤 기준으로 해석하고 재사용할지 유지하는 일’에 가깝습니다. 이렇게 기준을 구조화한 뒤에는 AI와 사람이 각각 어디까지 판단할지 역할을 나누는 과정이 필요했습니다. 03. AI가 판단하고, 사람은 최종 기준을 결정했다 LLM은 raw 자료를 기존 Wiki, 문서 우선순위, 변경 이력과 비교해 어떤 자료를 우선 적용할지 먼저 판단했습니다. 판단 근거가 충분하면 반영안을 제시하고, 기존 기준과 충돌하거나 해석이 불분명하면 ‘어느 문서를 우선할지’, ‘기존 기준을 대체할지’를 구체적인 질문으로 다시 전달했습니다.사람은 그 질문에 답하고 최종 반영 여부를 확인했습니다. LLM은 우선순위를 먼저 판단하고 질문하며, 사람은 답변과 최종 확인을 담당합니다. Karpathy의 원형에서도 LLM Agent와 Obsidian을 나란히 두고, LLM이 Wiki를 수정하는 동안 사람이 결과를 탐색·검토하는 역할 구분을 제안합니다. 이 프로젝트에서는 문서 연결을 통해 기획 기준에서 설계와 화면 문서로 이동하고, 역방향 연결로 한 정책 변경이 어떤 문서에 영향을 주는지 확인했습니다. Graph View는 핵심 문서와 연결되지 않은 문서를 살펴보는 보조 수단으로 사용했습니다. Obsidian Graph View로 확인한 LLM Wiki 연결 구조 기획·요건·설계·구현·검증 문서가 어떤 기준 문서를 중심으로 연결되는지 살펴보고, 연결이 약하거나 고립된 문서를 사람이 점검하는 데 사용한 실제 화면입니다. Graph View 자체가 최신 승인 문서를 판정하는 것은 아닙니다. 내부 검토용 실제 캡처이며, 외부 공개본에서는 프로젝트명과 내부 문서명을 비식별화해야 합니다. 도구가 해결하지 않는 부분 Obsidian은 최신 승인 문서를 자동으로 판별하지 않으며, LLM이 작성한 문서의 정확성을 보장하지도 않습니다. 문서 우선순위, 원본 근거와 사람의 검토가 계속 필요합니다. 이렇게 역할을 나누자 Wiki는 단순한 문서 저장소가 아니라, 변경된 기준을 실제 업무에 다시 적용하기 위한 출발점이 됐습니다. 다음으로 이 구조를 정책 변경과 화면설계에 어떻게 사용했는지 살펴보겠습니다. 04. 실제 설계 업무에서 LLM Wiki를 어떻게 사용했는가 구조를 만든 뒤에는 이 기준이 실제 기획·설계 업무에서도 일관되게 작동하는지 확인했습니다. 여기서는 인증·권한 정책 변경과 화면설계 두 가지 사례를 중심으로 살펴보겠습니다. CASE 01. 정책 변경을 관련 설계 전체에 반영했다 API Key 정책이 바뀌었을 때 인증 문서 하나만 수정하지 않았습니다. 관련 Wiki를 찾아 권한 범위, 상태 모델, 감사 기록, 화면 표시와 개발 책임을 함께 대조했습니다. 변경 이유와 우선 적용 문서를 기록해 구형 설계가 다시 사용되지 않도록 했습니다. 확인한 결과: 한 정책 변경이 상태·감사 모델, 화면과 개발 설계까지 함께 반영됐습니다. CASE 02. Wiki의 기준을 사용자 화면과 개발 설계까지 연결했다 화면설계는 ‘API Key 관리 화면을 만들어 달라’는 한 문장의 지시로 시작하지 않았습니다. 먼저 Wiki 문서 우선순위에서 현재 적용해야 할 기획·인증·권한·보안 기준을 확인하고, 기존 UI 참고 자료와 서로 충돌하는 항목을 대조했습니다. 자료 Ingest → LLM 우선순위 판단 → 충돌·불확실성 질문 → 사용자 답변·확인 → Wiki 반영 → 화면 정책 추출 → 사용자용 HTML → 개발자용 설계 ① 입력 자료와 현재 기준을 분리했다 원본 UI 참고 이미지와 기획 자료는 근거로 보존했습니다. AI 에이전트는 wiki/index.md의 우선순위와 기존 변경 이력을 바탕으로 권한 설계, API Key 보안 정책과 개발 가이드 중 현재 적용할 기준을 먼저 판단했습니다. 과거 문서와 충돌하는 항목은 질문으로 분리했고, 사용자의 답변과 확인을 거쳐 최종 기준과 판단 이유를 변경 이력에 남겼습니다. ② 사용자 관점의 화면 흐름을 HTML로 만들었다 관리 목록, 간편·상세검색, 등록, 재발급, 폐기, 폐기 재확인과 감사 이력 조회를 하나의 화면설계 HTML에 구성했습니다. 이 단계의 목적은 코드를 정하는 것이 아니라 사용자가 어떤 순서로 선택하고 확인하는지를 검토하는 것이었습니다. Wiki의 실제 화면설계 HTML을 렌더링한 화면입니다. 목록에서 전체 흐름을 확인하고, 등록·1회 표시·재발급·폐기·재확인·이력 조회를 함께 검토할 수 있도록 구성했습니다. 계정명, 제품명, Key와 내부 주소는 외부 설명용 값으로 비식별화했습니다. ③ 사용자 검토 결과를 다시 화면에 반영했다 별도 사용자 선택 팝업은 등록 창 내부 Selectbox로 변경했고, 폐기에는 최종 재확인 단계를 추가했습니다. 사용자가 알 필요 없는 내부 Reason Code와 Key ID 검색은 제거했으며, 내부 상태 코드는 표시명으로 바꿨습니다. Key 원문은 발급·재발급 성공 직후 한 번만 표시하도록 제한했습니다. ④ 확정된 화면을 개발 책임 단위로 분해했다 검색, 목록, 행 선택, 등록, 1회 표시, 재발급, 폐기, 재확인과 이력 조회를 포함한 12개 기능 단위에 고유 ID를 부여했습니다. 각 기능마다 사용자 동작, 선행 권한, 업무 처리, 현재 데이터 변경, 감사 기록과 다음 화면을 연결해 개발자가 화면 뒤의 책임까지 확인할 수 있도록 했습니다. 개발자용 화면·구현 설계 결과 사용자 화면을 12개 기능 단위로 나누고, UI 동작에서 권한 확인·업무 처리·데이터 변경·감사 기록·후속 화면으로 이어지는 구조를 정리했습니다. 실제 DB 테이블명과 내부 클래스명은 설명용 표현으로 일반화했습니다. 확인한 결과: 화면 모양만 생성한 것이 아니라, 어떤 기획·보안 기준이 어떤 사용자 동작으로 바뀌었고 그 동작이 어떤 개발 책임으로 이어지는지 한 흐름으로 추적할 수 있는 산출물을 만들었습니다. AI 에이전트로 필요한 기준만 다시 조회했다 AI 에이전트에게 전체 프로젝트를 막연하게 읽도록 맡기지 않았습니다. 먼저 사용자가 지정한 자료만 Ingest 대상으로 한정하고, 원본 보존과 Wiki 갱신 결과를 확인했습니다. 이후 화면설계에 필요한 항목만 질문해 기준 문서·요구사항·보안 제약·미결정 사항으로 나눠 추출하는 방식으로 작업 범위를 줄였습니다. ① Ingest — 지정한 원본을 Wiki의 근거와 현재 기준으로 연결 [입력] 사용자가 명시한 raw 원본 파일 목록 [비교] 기존 Wiki·index 우선순위·변경 이력과 신규 자료 대조 [판단] LLM이 일치·추가·충돌·대체 관계와 적용 우선순위를 잠정 결정 [질문] 근거가 부족하거나 충돌하면 선택지를 포함해 사용자에게 재질문 [확정] 사용자 답변과 확인에 따라 현재 기준·대체 관계 확정 [기록] 관련 Wiki 갱신, index에 우선순위 반영, log에 판단 사유 추가 [검증] 원본 보존, 변경 파일 목록, 미해결 충돌 확인 원본 파일을 복사하는 것만으로 Ingest가 끝난 것으로 보지 않았습니다. Wiki와 연결된 LLM이 신규 raw 자료를 기존 기준과 비교해 우선순위를 먼저 판단하고, 충돌·모호함·근거 부족이 있으면 사용자에게 다시 질문합니다. 사용자의 답변으로 판단을 확정한 뒤 관련 Wiki, 문서 우선순위와 변경 이력을 함께 갱신해야 다음 질의에서도 같은 기준을 사용할 수 있습니다. ② Query — 화면설계에 필요한 데이터만 구조화해 추출 [질문] 현재 우선순위를 적용해 API Key 관리 화면에 필요한 사용자 동작과 보안 제약을 추출한다. [조회 기준] 문서 우선순위 / 권한 설계 / Key 보안 정책 / 개발 가이드 / 변경 이력 [출력 항목] 사용자 동작 / 표시 항목 / 노출 금지 정보 / 권한 조건 / 감사 요건 [근거] 각 항목이 나온 Wiki 문서와 변경 이유 [사람 판단] 문서 간 충돌 / UX 선택 / 최종 승인 필요 항목 이 질의에서는 화면에 필요한 요구사항과 보안·권한 제약을 근거 문서, 변경 이유와 함께 구조화했습니다. AI 에이전트가 결론을 승인한 것이 아니라, 사람이 쟁점과 근거를 같은 형식에서 검토할 수 있도록 정리한 것입니다. ③Screen Design — 조회 결과를 사용자 흐름과 개발 책임으로 변환 구조화한 기준과 기존 UI 참고 자료를 함께 사용해 사용자용 HTML을 만들고, 검토 의견을 다시 반영했습니다. 확정된 화면은 12개 기능 단위로 나눠 사용자 동작에서 권한·업무 처리·데이터 변경·감사 기록으로 이어지는 개발자용 설계서로 확장했습니다. 05. 적용하며 확인한 이점과 남은 과제 적용 과정에서 가장 크게 달라진 점은 문서를 단순히 모아 두는 데서 그치지 않고, 현재 기준과 그 판단 근거를 함께 추적할 수 있게 됐다는 점입니다. AI 에이전트는 신규 raw 자료를 기존 Wiki와 비교해 충돌과 대체 관계를 먼저 드러내고, 확정하기 어려운 내용은 질문으로 돌려줍니다. 사람은 모든 문서를 처음부터 다시 대조하는 대신 쟁점과 근거를 중심으로 판단하면서 최종 통제권을 유지할 수 있었습니다. 변경의 영향 범위도 한 문서 안에 머물지 않았습니다. 하나의 정책 변경을 관련 요구사항, 상태·감사 모델, 사용자 화면과 개발 설계까지 연결해 확인하고, 어느 기준이 왜 바뀌었는지를 변경 이력에 남겼습니다. 이후 다른 AI 에이전트나 새로운 작업 세션에서도 원본 전체를 매번 다시 해석하기보다 같은 현재 기준과 결정 맥락에서 작업을 시작할 수 있는 기반이 마련됐습니다. 다만 이번 적용 결과만으로 생산성이 얼마나 향상됐는지를 수치로 표현하기에는 무리가 있습니다. 실제 효과를 확인하려면 신규 AI 세션에서 맥락을 전달하는 데 걸리는 시간, 현재 기준을 찾는 시간, 설계 변경 누락이나 재작업이 얼마나 줄었는지 등을 지속적으로 확인할 필요가 있습니다. 또한 LLM은 문서 간 충돌을 찾고 판단을 지원할 수 있지만, 최종 기준을 정하는 것은 여전히 사람의 검토와 확인이 필요한 영역입니다. 마치며 Karpathy가 제안한 LLM Wiki 패턴을 프로젝트에 적용하면서 확인한 것은, AI에게 많은 문서를 제공하는 것만으로 프로젝트 맥락이 안정적으로 유지되지는 않는다는 점입니다. 원본과 현재 기준을 분리하고, 무엇을 우선 적용할지와 무엇이 변경됐는지를 함께 관리해야 다음 작업에서도 같은 기준을 이어갈 수 있었습니다. LLM Wiki 자체를 새롭게 제안한 것은 아닙니다. 이번 적용에서는 공개된 원형을 실제 기획·설계 업무에 맞춰 문서 우선순위, 대체 관계, 변경 이력과 사람의 승인 지점까지 구체화했습니다. LLM은 원본 분석과 지식 정리를 지원하고, 사람은 Obsidian에서 결과를 검토하며 최종 결정을 내리는 방식입니다.
2026.09.17
사람이야기
브레인즈컴퍼니 신규 구성원(브레인저)을 소개합니다. (변효상, 이경돈, 임수현 님)
사람이야기
브레인즈컴퍼니 신규 구성원(브레인저)을 소개합니다. (변효상, 이경돈, 임수현 님)
브레인즈컴퍼니에서 함께 일하는 사람들과 각자의 이야기를 조금 더 가까이 전하기 위해, 브레인즈컴퍼니의 구성원 ‘브레인저(BRAINSER)’를 소개합니다. 이번에 소개할 브레인저는 새롭게 합류한 변효상 님, 이경돈 님, 임수현 님입니다. 세 분 모두 제1연구개발본부 소속으로, 브레인즈컴퍼니의 IT 인프라 통합관리 솔루션 Zenius의 개발과 제품 고도화에 함께하고 있습니다. 개발을 시작하게 된 계기부터 브레인즈컴퍼니를 선택한 이유, 입사 후 직접 경험한 회사의 모습과 개발자로서 중요하게 생각하는 가치까지. 세 분의 이야기를 자세히 들어보겠습니다. Q1. 간단한 자기소개 부탁드립니다. 안녕하세요. 개발그룹 ZNG팀에 입사한 변효상입니다. 저는 맡은 일은 끝까지 책임지고 해결하려는 태도를 중요하게 생각합니다. 새로운 환경에서는 부족한 부분도 있겠지만, 모르는 것은 적극적으로 질문하고 새롭게 알게 된 내용은 하나씩 제 것으로 만들어가려고 노력하고 있습니다. 또 혼자서 업무를 해결하는 것뿐만 아니라 팀원들과 원활하게 소통하면서 함께 좋은 결과를 만들어가는 것도 중요하게 생각합니다. 아직 배워야 할 것이 많지만, 꾸준히 경험을 쌓으면서 신뢰받을 수 있는 개발자로 성장하고 싶습니다. Q2. 개발자의 길을 선택하게 된 계기가 궁금합니다. 컴퓨터공학을 전공하면서 자연스럽게 프로그래밍을 접하게 됐습니다. 처음에는 수업과 과제를 통해 코딩을 배웠지만, 직접 작성한 코드가 원하는 대로 동작하고 하나의 기능으로 완성되는 과정에서 점점 흥미를 느끼게 됐습니다. 특히 문제가 발생했을 때 원인을 찾고 여러 방법을 시도하면서 해결해나가는 과정에서 큰 보람을 느꼈습니다. 새로운 기술을 배우면 이전에는 해결하지 못했던 문제를 해결할 수 있게 된다는 점도 개발의 매력이라고 생각합니다. 이런 경험이 쌓이면서 개발 분야에서 꾸준히 전문성을 키워가고 싶다는 생각을 하게 됐습니다. Q3. 브레인즈컴퍼니에 합류하게 된 이유는 무엇인가요? 개발자로 성장하기 위해서는 다양한 기술을 접하고, 실제 제품과 서비스를 개발하면서 경험을 쌓는 것이 중요하다고 생각했습니다. 브레인즈컴퍼니는 자체 솔루션을 지속적으로 개발하고 고도화하고 있기 때문에 단순히 하나의 기능을 구현하는 것에 그치지 않고, 제품이 어떤 구조와 흐름으로 만들어지는지 깊이 있게 경험할 수 있을 것이라고 생각했습니다. 특히 하나의 기술에 머무르지 않고 여러 기술과 환경을 경험하면서 개발 역량을 넓혀갈 수 있다는 점이 제가 생각하는 성장 방향과 잘 맞는다고 느껴 합류하게 됐습니다. Q4. 입사 후 경험해 본 브레인즈컴퍼니는 어떤 회사인가요? 입사 후 느낀 브레인즈컴퍼니는 각자의 전문성을 바탕으로 깊이 있게 고민하는 회사인 것 같습니다. 실제로 업무를 접해보니 하나의 기능을 구현할 때도 단순히 동작 여부만 확인하는 것이 아니라 기존 시스템과의 연계나 실제 사용 환경 등 여러 부분을 함께 고려하고 있었습니다. 그만큼 하나의 제품을 오랫동안 개발하고 발전시켜온 경험과 노하우가 축적되어 있다는 인상을 받았습니다. 또 모르는 부분을 질문했을 때 단순히 답을 알려주는 데서 그치지 않고 배경과 이유까지 함께 설명해주시는 경우가 많았습니다. 저도 이런 환경 속에서 단순히 코드를 작성하는 개발자를 넘어 제품과 서비스의 구조를 깊이 이해할 수 있는 개발자로 성장하고 싶습니다. Q5. 업무를 할 때 가장 중요하게 생각하는 원칙이 있다면요? 저는 계획과 책임감, 그리고 소통을 중요하게 생각합니다.업무를 시작하기 전에 해야 할 일을 정리하고 우선순위를 세우면 보다 체계적으로 업무를 진행할 수 있다고 생각합니다. 동시에 개발은 혼자서 완성하는 일이 아니기 때문에 진행 상황이나 문제가 있는 부분을 동료들과 적절히 공유하는 것도 중요합니다. 특히 예상하지 못한 문제가 발생했을 때 쉽게 포기하기보다 원인을 충분히 확인해보고, 필요한 경우 적극적으로 의견을 나누면서 해결해나가려고 합니다. 앞으로 경험이 쌓이더라도 이런 기본적인 업무 태도는 꾸준히 유지하고 싶습니다. Q6. 브레인즈컴퍼니에서 어떤 개발자로 성장하고 싶나요? 앞으로 제가 담당하는 영역에서는 “이 부분은 믿고 맡길 수 있다”는 이야기를 들을 수 있는 개발자가 되고 싶습니다. 새로운 기술을 단순히 배우는 데 그치지 않고 실제 업무와 코드에 적용하면서 제 경험으로 만들어가고 싶습니다. 또한 하나의 기능만 보는 것이 아니라 제품과 서비스 전체가 어떻게 연결되고 동작하는지 이해할 수 있도록 경험의 폭도 계속 넓혀가려고 합니다. 장기적으로는 제가 쌓은 경험과 지식을 다시 동료들과 나누면서 팀의 성장에도 기여할 수 있는 개발자로 성장하는 것이 목표입니다. Q1. 간단한 자기소개 부탁드립니다. 안녕하세요. 제1연구개발본부 개발그룹 인프라웹팀에 입사한 이경돈입니다. 저는 문제가 발생했을 때 상황을 분석하고 해결 방법을 찾아가는 과정을 좋아합니다. 개발을 하다 보면 예상하지 못한 문제를 만나는 경우가 많은데, 하나씩 원인을 좁혀가며 해결했을 때 큰 성취감을 느끼는 편입니다. 또 새롭게 배운 내용은 가능하면 기록으로 남겨두려고 합니다. 처음 접하는 기술이나 업무가 많더라도 그때그때 알게 된 내용을 정리하고 다시 활용하면서 꾸준히 성장하는 개발자가 되고 싶습니다. Q2. 개발자의 길을 선택하게 된 계기가 궁금합니다. 전공 수업을 통해 프로그래밍을 본격적으로 접하면서 개발에 관심을 갖게 됐습니다. 과제를 수행하면서 어려운 문제를 만나기도 했지만, 코드를 수정하고 여러 방법을 시도하면서 결국 원하는 결과를 만들어냈을 때 느끼는 성취감이 컸습니다. 특히 작성한 코드가 실제 화면에 구현되고 사용자가 직접 이용할 수 있는 서비스가 된다는 점이 흥미롭게 느껴졌습니다. 이런 경험을 통해 단순히 코드를 작성하는 것을 넘어 사용자가 직접 경험하는 서비스를 만드는 웹 개발에 매력을 느끼게 됐고, 자연스럽게 개발자의 길을 선택했습니다. Q3. 브레인즈컴퍼니에 합류하게 된 이유는 무엇인가요? 개발자로 성장하려면 다양한 기능을 직접 구현해보고 실제 서비스가 개발되고 운영되는 과정을 경험하는 것이 중요하다고 생각했습니다. 브레인즈컴퍼니는 자체 제품을 지속적으로 개발하고 있기 때문에 단순히 주어진 기능만 구현하는 것이 아니라 제품의 전체적인 구조와 흐름을 이해하면서 개발 경험을 쌓을 수 있다는 점이 매력적으로 느껴졌습니다. 또 하나의 기술에 한정되기보다 업무를 수행하면서 다양한 기술과 환경을 접할 수 있다는 점도 좋았습니다. 새로운 것을 배우고 문제를 해결하는 과정을 좋아하는 저에게 경험의 폭을 넓힐 수 있는 환경이라고 생각해 합류하게 됐습니다. Q4. 입사 후 경험해 본 브레인즈컴퍼니는 어떤 회사인가요? 입사 후 느낀 브레인즈컴퍼니는 각자의 업무에 몰입하면서도 필요할 때는 자연스럽게 협업할 수 있는 회사입니다.처음에는 회사 생활이라고 하면 조금 경직된 분위기를 예상하기도 했는데, 실제로는 각자가 자신의 업무에 집중하면서도 질문이나 의견이 필요할 때 편하게 이야기를 나눌 수 있다는 점이 인상적이었습니다. 특히 개발 업무에서는 혼자 고민해서 해결할 수 있는 문제도 있지만 다른 사람의 경험이나 관점이 필요한 경우도 많습니다. 그런 상황에서 서로 질문하고 의견을 공유할 수 있는 분위기가 업무에 적응하는 데 큰 도움이 되고 있습니다. 저도 앞으로 제 역할에 충분히 몰입하면서 동시에 동료들과 적극적으로 소통할 수 있는 구성원이 되고 싶습니다. Q5. 업무를 할 때 가장 중요하게 생각하는 원칙이 있다면요? 저는 문제를 회피하지 않고 원인을 찾아보는 태도와 열린 소통을 중요하게 생각합니다.개발을 하다 보면 예상하지 못했던 오류나 문제가 발생하기 마련입니다. 이럴 때 단순히 눈앞의 현상만 해결하기보다 왜 그런 문제가 생겼는지 원인을 분석하고, 같은 문제가 반복되지 않도록 개선할 수 있는 방법까지 고민하려고 합니다. 동시에 모든 문제를 혼자 해결하려고 하기보다는 필요한 경우 동료들의 의견을 듣는 것도 중요하다고 생각합니다. 제가 생각한 해결 방향을 공유하고 피드백을 받다 보면 혼자서는 생각하지 못했던 더 좋은 방법을 발견하기도 합니다. 이런 경험을 하나씩 쌓으면서 문제 해결 능력과 협업 역량을 함께 키워가고 싶습니다. Q6. 브레인즈컴퍼니에서 어떤 개발자로 성장하고 싶나요? 우선 제가 맡은 업무를 안정적으로 수행하면서 팀에서 믿고 맡길 수 있는 개발자가 되는 것이 첫 번째 목표입니다. 새로운 기술이나 업무를 접했을 때 단순히 사용하는 방법만 익히는 것이 아니라 왜 그렇게 동작하는지 원리와 구조까지 이해하려고 노력하고 있습니다. 또 배운 내용은 꾸준히 기록하고 정리하면서 필요할 때 다시 활용할 수 있는 제 경험으로 축적하고 싶습니다. 장기적으로는 문제가 발생했을 때 스스로 원인을 분석하고 해결 방향을 제시할 수 있는 개발자, 그리고 제가 쌓은 경험을 동료들과 공유하며 함께 성장할 수 있는 개발자가 되고 싶습니다. Q1. 간단한 자기소개 부탁드립니다. 안녕하세요. 제1연구개발본부 개발2그룹에 새로 입사한 임수현입니다. 저는 긍정적인 마음가짐으로 새로운 것을 배우고 성장하는 과정을 즐기는 편입니다. 프론트엔드 개발자로 일하면서 React, Next.js, TypeScript 등을 활용해 다양한 프로젝트를 경험해왔고, 새로운 환경에서도 적극적으로 배우고 적응하려고 노력하고 있습니다. 또 새롭게 알게 된 내용이나 중요한 부분은 꾸준히 기록해두는 편입니다. 업무뿐만 아니라 동료들과 원활하게 소통하면서 함께 더 좋은 결과를 만들어가는 것도 중요하게 생각합니다. Q2. 프론트엔드 개발자의 길을 선택하게 된 계기가 궁금합니다. 대학 졸업 후 취업을 준비하는 과정에서 우연히 코딩을 접하면서 개발에 관심을 갖게 됐습니다. 특히 코드를 작성하면 그 결과가 화면에 바로 구현된다는 점에서 재미와 보람을 느꼈습니다. 제가 만든 기능을 사용자가 직접 경험할 수 있다는 점 역시 흥미롭게 다가왔습니다. 프론트엔드 개발은 단순히 화면을 만드는 것에서 끝나는 것이 아니라 사용자가 서비스를 어떻게 경험하는지 계속 고민하고 개선하는 과정이라고 생각합니다. 이런 점에 매력을 느끼면서 자연스럽게 프론트엔드 개발자의 길을 선택하게 됐고, 지금까지 이어오고 있습니다. Q3. 브레인즈컴퍼니에 합류하게 된 이유는 무엇인가요? 그동안 프론트엔드 개발자로 여러 프로젝트를 경험하면서 다양한 서비스를 개발해왔습니다.앞으로는 단순히 새로운 프로젝트를 반복하는 것보다 하나의 제품과 서비스를 지속적으로 개발하고 개선하면서 좀 더 깊이 있는 경험을 쌓고 싶다는 생각이 있었습니다. 브레인즈컴퍼니는 자체 솔루션을 오랫동안 개발하고 있고, 지속적으로 제품을 개선해나가고 있다는 점에서 제가 원하는 개발 경험을 쌓을 수 있는 환경이라고 생각했습니다. 그동안 쌓아온 프론트엔드 경험을 활용하면서 새로운 기술과 환경도 배우고, 장기적으로 제품의 완성도를 높이는 과정에 함께할 수 있다는 점이 매력적으로 느껴져 합류하게 됐습니다. Q4. 입사 후 경험해 본 브레인즈컴퍼니는 어떤 회사인가요? 처음 느낀 브레인즈컴퍼니의 인상은 각자의 전문성을 가지고 있으면서도 서로 자연스럽게 의견을 나누는 회사였습니다. 입사 후 동료분들과 이야기를 나누고 업무를 접하면서 각자가 자신의 영역에 대한 경험과 전문성을 가지고 있다는 점이 인상적이었습니다. 동시에 필요한 상황에서는 서로 의견을 공유하면서 해결 방향을 함께 찾아가는 분위기도 느낄 수 있었습니다. 특히 처음에는 회사 생활이 조금 딱딱하거나 경직되어 있을 수도 있겠다고 생각했는데, 실제로는 편하게 질문하고 의견을 나눌 수 있는 분위기라 빠르게 적응하는 데 도움이 됐습니다.저 역시 제가 가지고 있는 경험은 적극적으로 공유하고, 동료들의 다양한 경험과 노하우를 배우면서 함께 성장하고 싶습니다. Q5. 업무를 할 때 가장 중요하게 생각하는 원칙이 있다면요? 저는 커뮤니케이션과 기록을 중요하게 생각합니다. 개발 업무는 혼자만 잘한다고 좋은 결과가 나오는 일이 아니라고 생각합니다. 여러 사람이 함께 하나의 제품을 만드는 만큼 서로 어떤 방향으로 업무를 진행하고 있는지 충분히 공유하고, 의견이 다른 부분은 대화를 통해 맞춰가는 과정이 중요합니다. 특히 작은 오해나 정보의 차이가 쌓이면 결과물에도 영향을 줄 수 있기 때문에 필요한 내용은 명확하게 공유하려고 노력합니다. 또 새로운 기술이나 업무를 배웠을 때는 기억에만 의존하기보다 기록으로 남기려고 합니다. 배운 내용을 정리해두면 이후 비슷한 상황에서 보다 빠르게 활용할 수 있고, 부족했던 부분을 다시 확인하면서 계속 발전할 수 있기 때문입니다. Q6. 브레인즈컴퍼니에서 어떤 개발자로 성장하고 싶나요? 제가 개발한 기능이 실제 서비스에 반영되고, 그것을 사용하는 분들에게 긍정적인 경험을 제공할 때 가장 큰 보람을 느낍니다. 그래서 앞으로는 단순히 요구된 기능을 구현하는 데 그치지 않고 사용자의 입장까지 고민하면서 더 나은 서비스를 만드는 개발자로 성장하고 싶습니다. 기술적인 측면에서도 새로운 프론트엔드 기술과 개발 방식을 꾸준히 학습하면서, 단순히 새로운 기술을 사용하는 것이 아니라 제품에 적절한 기술을 판단하고 적용할 수 있는 역량을 키우고 싶습니다. 장기적으로는 제 의견과 경험이 실제 제품을 개선하는 데 도움이 되고, 동료들과 함께 더 좋은 결과를 만들어갈 수 있는 개발자로 성장하는 것이 목표입니다. 지금까지 새롭게 합류한 변효상 님, 이경돈 님, 임수현 님의 이야기를 들어봤습니다. 세 분 모두 각자의 경험과 강점을 바탕으로 새로운 업무와 환경을 익혀가고 있습니다. 앞으로도 다양한 경험을 쌓으며 각자의 분야에서 전문성을 넓혀가는 브레인저로 성장하길 기대하겠습니다.
2026.08.12
기술이야기
Spring MVC: 반복되는 검증 로직 한 번에 끝내기
기술이야기
Spring MVC: 반복되는 검증 로직 한 번에 끝내기
인프라 관리 도메인에서 API 설계 시 가장 빈번하게 등장하는 파라미터는 단연 targetId입니다. 하지만 이 식별자는 비즈니스 로직이 실행되기 전, 반드시 통과해야 하는 '삼중 관문'을 가지고 있습니다. 유효성 검사, 도메인 객체 변환, 그리고 권한 확인이 그것입니다. 초기 구현 단계에서는 이 관문들을 각 컨트롤러 메서드 내부에서 직접 제어하는 방식을 택했습니다. 하지만 인프라 규모가 커지고 API 엔드포인트가 늘어날수록, 이 직관적인 방식은 코드 중복과 유지보수 효율성 저하라는 아키텍처적 부채로 돌아오기 시작했습니다. API 엔드포인트가 수십 개로 늘어남에 따라, 동일한 검증 코드가 여러 컨트롤러에 산재하게 되는 구조적 문제가 발생했습니다. 이는 단순한 코드 중복(Boilerplate Code)을 넘어, 타겟 검증 정책이 변경될 때마다 관련된 모든 API를 수정해야 하는 유지보수의 취약점으로 이어졌습니다. 또한 비즈니스 로직과 검증 로직이 한 곳에 혼재됨에 따라 코드의 가독성이 저하되고, 수정 과정에서 누락이 발생할 경우 장애로 직결될 위험이 높습니다. 반복되는 검증 로직과 분산된 수정 포인트(N개의 지점) 문제를 근본적으로 해결하기 위해, 다음과 같은 명확한 엔지니어링 목표를 수립했습니다. “타겟 검증, 변환을 메서드 파라미터 주입 시점에 끝낸다” Spring MVC는 이미 @PathVariable, @RequestParam, @AuthenticationPrincipal과 같이 요청 데이터를 가공하여 컨트롤러 메서드 파라미터에 바인딩하는 표준화된 메커니즘을 제공하고 있습니다. 이 아키텍처 패턴에 착안하여, [ URL에서 타겟 ID 추출 → 유효성 검증 → 도메인 객체 변환 ]으로 이어지는 일련의 과정을 비즈니스 로직 진입 전인 '파라미터 주입 단계'에서 완결짓도록 HandlerMethodArgumentResolver를 적용했습니다. 이 아키텍처를 실제 코드로 구현하기 위해, 프로세스를 크게 세 가지 단계로 나누어 진행했습니다. 1. 메타데이터 정의 (Annotation): 어떤 파라미터를 검증할지 식별하고 정책을 부여 2. 로직 구현 (Resolver & Helper): 실제 값을 추출하고 도메인 객체로 변환하는 바인딩 로직 작성 3. 설정 등록 (Configuration): Spring MVC가 해당 리졸버를 인식하도록 설정 가장 먼저, 컨트롤러 파라미터에 검증 요구사항을 명시할 커스텀 어노테이션을 정의합니다. 1. 커스텀 어노테이션 정의 - @ToTargetInfoRecords 구현의 첫 단계로, 파라미터에 메타데이터를 부여할 커스텀 어노테이션을 정의합니다. 타겟에 대한 모든 정보를 TargetInfoRecord라는 도메인 객체로 캡슐화하여 관리하고 있습니다. 따라서 '해당 파라미터를 TargetInfoRecord 객체로 변환하라'는 명시적인 의미를 담아 @ToTargetInfoRecords라는 어노테이션을 설계했습니다. 이 어노테이션은 런타임 시점에 Resolver가 식별할 수 있어야 하므로 RUNTIME 정책을 사용하며, 파라미터 레벨에 적용되도록 타겟을 한정했습니다. - VALUE_PARAMETER로 메서드 파라미터에서만 사용하도록 제한합니다. - RUNTIME 보존으로 요청 처리 시점에 리졸버가 어노테이션 값을 읽습니다. 2. ArgumentResolver 구현 다음으로 Spring MVC의 HandlerMethodArgumentResolver 인터페이스를 구현하여 실질적인 바인딩 로직을 처리하는 ToTargetInfoRecordResolver를 작성합니다. HandlerMethodArgumentResolver를 상속한 ToTargetInfoRecordsResolver를 생성합니다. 3. 리졸버 등록 방법 구현한 리졸버가 실제로 동작하기 위해서는 Spring MVC의 Argument Resolver 체인에 등록해야 합니다. WebMvcConfigurer를 구현하여 우리가 만든 리졸버를 추가해주면, 이후 들어오는 요청에 대해 Spring이 자동으로 개입하게 됩니다. 이 리졸버를 등록한 후에 클라이언트로부터 요청이 들어오면, 컨트롤러 메서드 호출 직전에 파라미터 단위로 다음 순서가 진행됩니다. 1. Spring이 컨트롤러 메서드의 각 파라미터에 대해 등록된 리졸버 리스트를 순서대로 확인합니다. 2. supportsParameter(...)가 true인 첫 번째 리졸버를 선택합니다. 3. 선택된 리졸버의 resolveArgument(...)를 호출하여 값을 만들고, 그 반환값을 해당 파라미터에 주입합니다. 자세한 구현은 다음과 같습니다. 1) 어떤 파라미터를 내가 담당하는가 — supportsParameter 파라미터에 @ToTargetInfoRecords가 붙어 있으면 자신의 책임으로 판단합니다. 2) 값을 어떻게 만들고 주입하는가 — resolveArgument 3) URL에서 값은 어떻게 추출하는가 — 쿼리 vs 경로 - 쿼리스트링은 webRequest.getParameterValues()로, 경로 변수는HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE로 추출합니다. - 메서드 파라미터 타입이 List인지도 구분하고 검증합니다. 이렇게 헬퍼 클래스를 통해 요청 위치나 데이터 타입에 구애받지 않고 무결성이 검증된 데이터가 준비되면, 변환된 객체가 마침내 컨트롤러 메소드의 파라미터에 주입됩니다. 결과적으로 컨트롤러는 HTTP 요청의 복잡한 세부 사항을 전혀 모른 채, 안전하게 가공된 도메인 객체를 즉시 사용할 수 있게 됩니다. 실제 적용 사례 가장 눈에 띄는 변화는 컨트롤러의 간결함입니다. 기존에는 비즈니스 로직과 섞여 있던 '타겟 ID 추출', '유효성 검사', '도메인 변환', '권한 체크' 등의 횡단 관심사(Cross-cutting Concerns)가 완벽하게 분리되었습니다. 덕분에 개발자는 신규 API를 작성할 때 불필요한 반복 코드(Boilerplate)를 작성하는 수고를 덜고, 핵심 비즈니스 로직 구현에만 온전히 집중할 수 있게 되었습니다. 또한, 유지보수 측면에서도 강력한 이점을 가집니다. 만약 타겟 검증 정책이 변경되더라도 수십 개의 컨트롤러를 일일이 수정할 필요 없이, ArgumentResolver의 로직 한 곳만 수정하면 전사적으로 변경 사항이 반영됩니다. 다수의 API에서 [URL로부터 값 추출 → 검증 → 도메인 객체 변환]의 패턴이 반복되는 프로젝트라면, HandlerMethodArgumentResolver를 적극적으로 도입하여 코드의 품질과 생산성을 높여보시는 것을 권장합니다.
2026.03.06
기술이야기
IT 인프라 모니터링 시스템의 컨트롤러 개선기, ArgumentResolver를 통한 중복 제거
기술이야기
IT 인프라 모니터링 시스템의 컨트롤러 개선기, ArgumentResolver를 통한 중복 제거
대규모 IT 인프라를 모니터링하는 도메인에서는 서버나 네트워크 장비와 같은 관리 대상을 통칭하여 타겟(Target)이라고 부릅니다. 이에 따라 대다수의 API는 리소스 식별을 위해 URL 경로(Path Variable)나 쿼리 스트링(Query Parameter)을 통해 targetId를 필수적으로 전달받는 구조를 가지고 있습니다. 이 targetId는 단순한 문자열 식별자가 아니라, 실제 비즈니스 로직이 수행되기 전 반드시 선행되어야 하는 일련의 검증 절차를 요구합니다. 구체적으로는 클라이언트 입력값에 대한 유효성 검사, 해당 ID를 기반으로 한 DB 조회 및 도메인 객체(TargetInfoRecord)로의 매핑, 그리고 해당 타겟에 대한 사용자 접근 권한(Authorization) 확인 과정이 포함됩니다. 프로젝트 초기 구현 단계에서는 이러한 전처리 로직을 각 컨트롤러 메서드 바디 상단에 직접 구현하는 방식을 취했습니다. 하지만 API 엔드포인트가 수십 개로 늘어남에 따라, 동일한 검증 코드가 여러 컨트롤러에 산재하게 되는 구조적 문제가 발생했습니다. 이는 단순한 코드 중복(Boilerplate Code)을 넘어, 타겟 검증 정책이 변경될 때마다 관련된 모든 API를 수정해야 하는 유지보수의 취약점으로 이어졌습니다. 또한 비즈니스 로직과 검증 로직이 한 곳에 혼재됨에 따라 코드의 가독성이 저하되고, 수정 과정에서 누락이 발생할 경우 장애로 직결될 위험이 높습니다. 반복되는 검증 로직과 분산된 수정 포인트(N개의 지점) 문제를 근본적으로 해결하기 위해, 다음과 같은 명확한 엔지니어링 목표를 수립했습니다. “타겟 검증, 변환을 메서드 파라미터 주입 시점에 끝낸다.” Spring MVC는 이미 @PathVariable, @RequestParam, @AuthenticationPrincipal과 같이 요청 데이터를 가공하여 컨트롤러 메서드 파라미터에 바인딩하는 표준화된 메커니즘을 제공하고 있습니다. 이 아키텍처 패턴에 착안하여, [ URL에서 타겟 ID 추출 → 유효성 검증 → 도메인 객체 변환 ]으로 이어지는 일련의 과정을 비즈니스 로직 진입 전인 '파라미터 주입 단계'에서 완결짓도록 HandlerMethodArgumentResolver를 적용했습니다. 이 아키텍처를 실제 코드로 구현하기 위해, 프로세스를 크게 세 가지 단계로 나누어 진행했습니다. 메타데이터 정의 (Annotation): 어떤 파라미터를 검증할지 식별하고 정책을 부여 로직 구현 (Resolver & Helper): 실제 값을 추출하고 도메인 객체로 변환하는 바인딩 로직 작성 설정 등록 (Configuration): Spring MVC가 해당 리졸버를 인식하도록 설정 가장 먼저, 컨트롤러 파라미터에 검증 요구사항을 명시할 커스텀 어노테이션을 정의합니다. 1. 커스텀 어노테이션 정의 - @ToTargetInfoRecords 구현의 첫 단계로, 파라미터에 메타데이터를 부여할 커스텀 어노테이션을 정의합니다. 타겟에 대한 모든 정보를 TargetInfoRecord라는 도메인 객체로 캡슐화하여 관리하고 있습니다. 따라서 '해당 파라미터를 TargetInfoRecord 객체로 변환하라'는 명시적인 의미를 담아 @ToTargetInfoRecords라는 어노테이션을 설계했습니다. 이 어노테이션은 런타임 시점에 Resolver가 식별할 수 있어야 하므로 RUNTIME 정책을 사용하며, 파라미터 레벨에 적용되도록 타겟을 한정했습니다. - VALUE_PARAMETER로 메서드 파라미터에서만 사용하도록 제한합니다. - RUNTIME 보존으로 요청 처리 시점에 리졸버가 어노테이션 값을 읽습니다. 2. ArgumentResolver 구현 다음으로 Spring MVC의 HandlerMethodArgumentResolver 인터페이스를 구현하여 실질적인 바인딩 로직을 처리하는 ToTargetInfoRecordResolver를 작성합니다. HandlerMethodArgumentResolver를 상속한 ToTargetInfoRecordsResolver를 생성합니다. 3. 리졸버 등록 방법 구현한 리졸버가 실제로 동작하기 위해서는 Spring MVC의 Argument Resolver 체인에 등록해야 합니다. WebMvcConfigurer를 구현하여 우리가 만든 리졸버를 추가해주면, 이후 들어오는 요청에 대해 Spring이 자동으로 개입하게 됩니다. 이 리졸버를 등록한 후에 클라이언트로부터 요청이 들어오면, 컨트롤러 메서드 호출 직전에 파라미터 단위로 다음 순서가 진행됩니다. 1. Spring이 컨트롤러 메서드의 각 파라미터에 대해 등록된 리졸버 리스트를 순서대로 확인합니다. 2. supportsParameter(...)가 true인 첫 번째 리졸버를 선택합니다. 3. 선택된 리졸버의 resolveArgument(...)를 호출하여 값을 만들고, 그 반환값을 해당 파라미터에 주입합니다. 자세한 구현은 다음과 같습니다. 1) 어떤 파라미터를 내가 담당하는가 — supportsParameter 파라미터에 @ToTargetInfoRecords가 붙어 있으면 자신의 책임으로 판단합니다. 2) 값을 어떻게 만들고 주입하는가 — resolveArgument 3) URL에서 값은 어떻게 추출하는가 — 쿼리 vs 경로 - 쿼리스트링은 webRequest.getParameterValues()로, 경로 변수 HandlerMapping.URI_TEMPLATE_VARIABLES_ATTRIBUTE로 추출합니다. - 메서드 파라미터 타입이 List인지도 구분하고 검증합니다. 이렇게 헬퍼 클래스를 통해 요청 위치나 데이터 타입에 구애받지 않고 무결성이 검증된 데이터가 준비되면, 변환된 객체가 마침내 컨트롤러 메소드의 파라미터에 주입됩니다. 결과적으로 컨트롤러는 HTTP 요청의 복잡한 세부 사항을 전혀 모른 채, 안전하게 가공된 도메인 객체를 즉시 사용할 수 있게 됩니다. 실제 적용 사례 가장 눈에 띄는 변화는 컨트롤러의 간결함입니다. 기존에는 비즈니스 로직과 섞여 있던 '타겟 ID 추출', '유효성 검사', '도메인 변환', '권한 체크' 등의 횡단 관심사(Cross-cutting Concerns)가 완벽하게 분리되었습니다. 덕분에 개발자는 신규 API를 작성할 때 불필요한 반복 코드(Boilerplate)를 작성하는 수고를 덜고, 핵심 비즈니스 로직 구현에만 온전히 집중할 수 있게 되었습니다. 또한, 유지보수 측면에서도 강력한 이점을 가집니다. 만약 타겟 검증 정책이 변경되더라도 수십 개의 컨트롤러를 일일이 수정할 필요 없이, ArgumentResolver의 로직 한 곳만 수정하면 전사적으로 변경 사항이 반영됩니다. 다수의 API에서 [URL로부터 값 추출 → 검증 → 도메인 객체 변환]의 패턴이 반복되는 프로젝트라면, HandlerMethodArgumentResolver를 적극적으로 도입하여 코드의 품질과 생산성을 높여보시는 것을 권장합니다.
2026.02.06
기술이야기
효율적인 로그 모니터링과 실시간 로그 분석을 위한 OpenSearch PPL 활용 가이드
기술이야기
효율적인 로그 모니터링과 실시간 로그 분석을 위한 OpenSearch PPL 활용 가이드
오늘날 대규모 인프라 환경에서 발생하는 방대한 데이터를 관리하기 위해 로그 모니터링과 로그분석은 필수적인 요소가 되었습니다. OpenSearch(및 Elasticsearch)는 이 분야의 사실상 표준으로 자리 잡았으나, 이를 활용하는 엔지니어와 분석가들은 강력한 기능의 이면에 있는 ‘Query DSL’이라는 높은 진입 장벽을 마주하곤 합니다. JSON 형식을 기반으로 하는 DSL은 검색 조건을 매우 정밀하게 정의할 수 있다는 장점이 있습니다. 하지만 쿼리가 복잡해질수록 로직이 깊게 중첩되어 가독성이 떨어지고 생산성이 저하되는 구조적 문제를 안고 있습니다. 특히 1분 1초가 급한 장애 상황이나 보안 침해 사고를 분석해야 하는 SIEM(보안 정보 및 이벤트 관리) 환경에서, 수십 줄의 JSON 괄호를 맞추는 작업은 민첩한 대응을 방해하는 실질적인 걸림돌이 됩니다. 이러한 문제를 해결하기 위해 등장한 것이 바로 PPL(Piped Processing Language)입니다. PPL이 제안하는 새로운 분석 방식을 살펴보기 전, 먼저 우리가 기존 DSL 환경에서 겪어온 실제적인 어려움들을 통해 왜 방식의 변화가 필요한지 짚어보겠습니다. 1. 데이터 탐색의 어려움 1.1. OpenSearch DSL OpenSearch(및 Elasticsearch)는 검색 엔진 시장의 사실상 표준으로 자리 잡았지만, 데이터 분석가나 엔지니어들에게는 한 가지 큰 진입 장벽이 존재했습니다. 바로 Query DSL(Domain Specific Language)입니다. DSL은 JSON(JavaScript Object Notation) 형식을 기반으로 하며, 검색 쿼리의 구조를 매우 정밀하게 정의할 수 있다는 강력한 장점이 있습니다. 하지만 이는 동시에 인간의 직관과는 거리가 먼 방식이기도 합니다. DSL은 쿼리가 복잡해질수록 JSON 객체가 깊게 중첩되는 특성이 있기 때문입니다. 예를 들어 단순한 GROUP BY 집계를 수행하려 해도 aggs안에 terms, 그 안에 다시 aggs를 정의해야 하는 피라미드 구조가 형성됩니다. 일반적으로 데이터를 탐색하는 과정은 "A를 찾고, B를 제외한 뒤, C로 묶어서 계산한다"라는 선형적인 사고를 따릅니다. 하지만 DSL은 이 모든 조건을 하나의 거대한 JSON 객체로 구조화해야 하므로, 작성과 수정 시 높은 집중력을 요합니다. 또한 로그를 분석하거나 장애 원인을 파악하는 긴급한 상황에서, 수십 줄의 JSON 괄호 짝들은 가독성과 생산성을 저하시키는 요인이 됩니다. <예시 1.1: 지난 1시간 동안 500 에러가 발생한 상위 5개 IP 추출하기 위한 DSL문> 1.2. PPL(Piped Processing Language) PPL은 이러한 구조적 복잡성을 해결하기 위해 등장했습니다. 이름에서 알 수 있듯이, 파이프(Pipe, |)를 통해 데이터를 순차적으로 처리하는 언어입니다. PPL이 가져온 변화는 단순히 문법의 형태를 바꾼 수준에 그치지 않습니다. 데이터에 접근하는 패러다임 자체를 선언적 구조(JSON)에서 절차적 흐름(Pipeline)으로 전환시킨 것입니다. 이는 Unix와 Linux에서 익숙하게 사용되는 명령어 파이프라인 철학을 데이터 검색 엔진에 이식한 결과이기도 합니다. 이러한 방식의 변화 덕분에 사용자는 더 이상 복잡한 JSON의 계층 구조를 설계할 필요가 없습니다. 대신 "데이터를 가져오고, 필터링한 뒤, 통계를 낸다"는 인간의 자연스러운 사고 흐름에 맞춰 질의를 작성할 수 있게 되었습니다. 이는 결과적으로 쿼리 작성 시간을 단축시키고, 분석가의 의도를 더욱 명확하게 코드에 투영할 수 있게 해줍니다. <예시 1.2: 예시 1.2와 동일한 로직을 PPL로 작성한 경우> 2. PPL의 핵심 특징 및 장점 PPL을 도입해야 하는 이유는 단순히 쓰기 편해서가 아닙니다. 이는 데이터 분석의 접근성(Accessibility), 가독성(Readability), 유연성(Flexibility) 측면에서 근본적인 이점을 제공하기 때문입니다. 2.1. SQL-like Syntax 데이터 업계에서 SQL은 가장 보편적인 언어입니다. PPL은 SQL의 문법적 특성을 차용하여 접근성을 높였습니다. SELECT, WHERE, LIKE 등 익숙한 키워드를 그대로 사용하므로, 새로운 도구 도입에 따른 저항감을 최소화합니다. 2.2. Pipe ($|$) PPL의 가장 강력한 무기는 | (파이프) 연산자입니다. 이는 쿼리를 논리적 단계로 분해합니다. 1단계: 전체 데이터 가져오기 (source=logs) 2단계: 필요한 부분만 남기기 (| where status=500) 3단계: 불필요한 필드 버리기 (| fields timestamp, message) 이처럼 하나의 문제를 단계별로 쪼개며 순차적으로 해결할 수 있습니다. 이러한 방식은 디버깅의 용이성도 증가시킵니다. DSL은 쿼리가 실패하면 전체 JSON 구조를 다시 살펴봐야 하지만, PPL은 파이프를 하나씩 끊어가며 어느 단계에서 데이터가 의도와 다르게 변형되었는지 즉시 확인할 수 있습니다. 2.3. Aggregation의 추상화 OpenSearch의 집계(Aggregation) 기능은 강력하지만 DSL 작성이 매우 까다롭습니다. PPL은 이를 stats 명령어로 추상화했습니다. 기존 DSL 방식에서 집계를 하려면 버킷(Buckets)과 메트릭(Metrics)의 개념을 이해하고, 이를 JSON의 계층 구조로 쌓아 올려야 했습니다. 하지만 PPL은 이 복잡한 과정을 우리가 흔히 쓰는 SQL 스타일로 탈바꿈시켰습니다. 간단한 시나리오인 “카테고리별 평균 가격 구하기”를 DSL로 작성하면 aggs 안에 그룹핑을 위한 terms를 정의하고, 그 안에 다시 계산을 위한 aggs를 중첩해야 합니다. 평균을 구한다라는 쿼리의 의도보다 괄호와 같은 문법적 구조에 더 신경 써야 합니다. 그룹핑 조건이 늘어날수록 JSON은 기하급수적으로 깊어집니다. 반면 동일한 시나리오를 PPL로 작성하면 stats 이라는 명령어로 간단하게 표현할 수 있습니다. stats: "집계를 시작하겠다"는 선언입니다. avg(price): "무엇을 계산할지" 명시합니다. (Metric) by category: "무엇을 기준으로 묶을지" 명시합니다. (Bucket) 단 한 줄의 코드로 DSL의 복잡한 로직을 완벽하게 대체할 수 있습니다. 2.4. 동적 필드 생성 데이터 분석을 하다 보면, 인덱스에 저장된 원본 데이터(Raw Data)만으로는 부족할 때가 많습니다. - 용량이 bytes 단위로 저장되어 있어 보기 불편한 경우 - 파일 경로와 파일 이름이 하나의 필드에 있어 각각 분리해야 하는 경우 - 보낸 용량, 받은 용량만 있고 총 용량이 없는 경우 이를 해결하기 위해 데이터를 재색인(Reindexing)하는 것은 너무 복잡한 과정입니다. 하지만 PPL은 eval 명령어 하나로 쿼리 실행 시점에 필드를 즉석에서 생성합니다. 바이트 단위를 메가바이트로 변환하여 새로운 필드 size_mb를 만드는 로직은 eval 명령어와 간단한 연산자를 이용하여 작성할 수 있습니다. 원본 데이터에는 size_mb라는 필드가 존재하지 않습니다. 하지만 PPL이 실행되는 순간 계산되어, 마치 원래 있던 필드처럼 where 절에서 필터링 조건으로 사용하거나 fields로 출력할 수 있습니다. PPL의 eval은 데이터 저장 구조(Schema)가 분석의 한계가 되지 않도록, 분석가에게 데이터를 재정의할 수 있는 강력한 권한을 부여하는 기능입니다. 3. PPL 문법 해부 앞서 PPL이 데이터 분석에 제공하는 근본적인 이점들을 살펴보았습니다. 하지만 이러한 장점들을 실무에 온전히 녹여내기 위해서는 PPL이 데이터를 처리하는 방식, 즉 문법의 구조를 정확히 이해하는 과정이 필요합니다. PPL의 문법은 단순한 규칙의 나열이 아니라, 데이터의 흐름을 제어하는 그 자체입니다. 각 명령어는 이전 단계에서 넘어온 데이터를 가공하여 다음 단계로 넘겨주는 '필터' 역할을 수행합니다. 마치 공장의 컨베이어 벨트 위에서 원재료가 각 공정을 거쳐 완성품이 되는 것과 같은 원리입니다. 그럼 지금부터 데이터 분석 현장에서 가장 빈번하게 사용되는 6가지 핵심 명령어를 통해 PPL의 구조를 깊이 있게 살펴보겠습니다. 3.1. source 모든 PPL 쿼리의 시작점입니다. SQL의 FROM 절에 해당하지만, PPL에서는 search source=... 형태로 명시합니다. 단일 인덱스뿐만 아니라 와일드카드(*)를 사용하여 여러 인덱스를 동시에 조회할 수 있습니다. search source=logs-* : 'logs-'로 시작하는 모든 인덱스 조회. 3.2. where 분석에 불필요한 데이터를 걸러내는 단계입니다. SQL의 WHERE 절과 동일합니다. where는 파이프라인의 가장 앞단에 위치시키는 것이 성능상 유리합니다. 처리해야 할 데이터의 총량을 줄여주기 때문입니다. where는 AND, OR, NOT 논리 연산자와 in, like 등의 비교 연산자를 모두 지원합니다. 3.3. eval 원본 데이터에는 없지만 분석 시점에 필요한 새로운 데이터를 만들어냅니다. 기존 필드 값을 이용해 계산을 하거나 문자열을 조합하여 새로운 필드를 정의합니다. 3.4. stats SQL의 GROUP BY와 집계 함수를 합친 개념입니다. 문법: stats <function>(<field>) by <grouping_field> 집계함수: count, sum, avg, min, max와 같은 통계 분석에 필요한 함수를 제공합니다. 3.5. fields 최종 사용자에게 보여줄 데이터를 다듬는 과정입니다. SELECT 절과 유사합니다. 수백 개의 필드 중 분석에 필요한 핵심 필드만 남깁니다 (+로 포함, -로 제외 가능). rename: 기술적인 필드명(예: req_ts_ms)을 비즈니스 친화적인 이름(예: Response Time)으로 변경하여 가독성을 높입니다. 3.6. sort & head sort: 데이터의 정렬 순서를 정합니다. - 기호를 붙이면 내림차순(DESC)이 됩니다. (sort -count) head: SQL의 LIMIT와 같습니다. 상위 N개의 결과만 잘라냅니다. 대량의 데이터 분석 시 결과를 끊어서 확인하는 데 필수적입니다. 4. 실전 예제 지금까지 PPL의 기본 개념과 주요 명령어들을 살펴보았습니다. 하지만 도구의 진정한 가치는 이론적인 문법을 아는 것에 그치지 않고, 이를 실제 복잡한 데이터 환경에 어떻게 적용하느냐에 있습니다. 이제 우리가 현업에서 흔히 마주할 수 있는 구체적인 시나리오들을 통해, PPL이 실무적인 문제들을 얼마나 직관적이고 효율적으로 해결하는지 단계별로 알아보겠습니다. 4.1. Brute Force 공격 탐지 상황: 과도한 로그인 실패(401 Error) IP 식별 1) search source=access_logs: 엑세스 로그 전체를 가져옵니다. 2) where status = 401: 전체 로그 중 로그인 실패 로그만 남깁니다. 3) stats count() as fail_count by client_ip: IP 주소별로 실패 횟수를 집계합니다. 이제 데이터는 개별 로그가 아니라 'IP별 요약 정보'가 됩니다. 4) where fail_count > 50: 50회 이상 실패한 의심 IP만 필터링합니다. (집계 후 필터링 - SQL의 HAVING 절과 유사) 5) sort -fail_count: 가장 공격 빈도가 높은 IP를 최상단에 노출합니다. 4.2. 카테고리별 매출 분석 상황: 상품 카테고리별 매출 현황과 평균 단가 확인 1) eval revenue = price * quantity: price와 quantity 필드를 곱하여, 원본 데이터에 없던 revenue(매출액) 필드를 실시간으로 계산해냅니다. 2) stats sum(revenue) as total_sales, avg(revenue) as avg_order_value by category: 카테고리 기준으로 총 매출(sum)과 평균 주문액(avg)을 동시에 계산합니다. 3) head 10: 상위 10개 카테고리만 추출하여 리포트용 데이터를 완성합니다. 4.3. 시간대별 트래픽 추이 시각화 상황: 지난 24시간 동안 웹 서버의 트래픽 변화 1) span(timestamp, 10m): 연속적인 시간 데이터를 10분 단위로 자릅니다. 2) stats count() as request_count by ...: 잘라낸 10분 단위별로 요청 수(count)를 셉니다. 결과: 이 쿼리의 결과는 그대로 라인 차트(Line Chart)나 바 차트(Bar Chart)로 시각화하기 완벽한 형태(X축: 시간, Y축: 횟수)가 됩니다. 5. PPL 성능 최적화와 고려사항 PPL은 사용자가 직관적으로 쿼리를 작성할 수 있게 돕지만, 그 이면에서는 방대한 데이터를 처리하는 무거운 작업이 수행됩니다. 도구의 편리함이 시스템의 부하로 이어지지 않도록, 쿼리 효율성을 고려하는 분석 습관을 갖추는 것이 중요합니다 5.1. 성능 최적화 방안 PPL 쿼리는 파이프라인 구조이기 때문에, 앞단에서 데이터의 크기를 줄일수록 전체 실행 속도가 기하급수적으로 빨라집니다. 1) where는 search 바로 뒤에 오는 것이 좋습니다. 데이터를 집계(stats)하거나 정렬(sort)한 뒤에 필터링하는 것은 낭비입니다. 불필요한 데이터를 메모리에 올리기 전에 where 절로 과감하게 잘라내야 합니다. 2) 필요한 필드만 명시하는 것이 좋습니다. OpenSearch 문서는 수십, 수백 개의 필드를 가질 수 있습니다. fields 명령어를 사용하여 분석에 꼭 필요한 필드만 남기면 네트워크 전송량과 메모리 사용량을 획기적으로 줄일 수 있습니다. 5.2. PPL vs DSL 언제 무엇을 써야 할까? PPL이 등장했다고 해서 기존의 DSL(Domain Specific Language)이 사라지는 것은 아닙니다. 두 언어는 태생적 목적이 다릅니다. 이 둘을 상호 보완적인 관계로 이해하고 적재적소에 사용하는 것이 좋습니다. 1) PPL을 써야 하는 경우 - 사람 중심, 탐색, Ad-hoc 분석, 운영/보안 PPL은 사람이 데이터를 봐야 하는 상황에 최적화되어 있습니다. 사고의 흐름이 끊기지 않고 빠르게 질문을 던지고 답을 얻어야 하는 상황입니다. * 상황 A: 장애 발생 시 긴급 원인 분석 "지금 500 에러가 급증하는데, 특정 API에서만 발생하는 건가?" 긴급 상황에서 복잡한 JSON 괄호를 맞출 시간은 없습니다. PPL로 빠르게 필터링(where)하고 집계(stats)하여 원인을 좁혀나가야 합니다. * 상황 B: 보안 위협 헌팅 "지난 1주일간 새벽 시간에만 접속한 관리자 계정이 있는가?" 데이터를 이리저리 돌려보고, 조건을 바꿔가며 숨겨진 패턴을 찾아내는 '탐색적 분석'에는 수정이 용이한 PPL이 압도적으로 유리합니다. * 상황 C: 비개발 직군의 데이터 접근 기획자(PM), 마케터, 데이터 분석가가 직접 데이터를 추출해야 할 때. SQL에 익숙한 이들에게 JSON DSL을 학습시키는 것은 비효율적입니다. PPL은 이들에게 데이터 접근 권한을 열어주는 열쇠가 됩니다. 2) DSL을 써야 하는 경우 키워드: 기계 중심, 애플리케이션 개발, 정밀도, 검색 튜닝 DSL은 애플리케이션이 데이터를 조회할 때 최적화되어 있습니다. 코드로 구현되어 시스템의 일부로 동작하거나, 매우 정교한 검색 로직이 필요할 때 사용합니다. * 상황 A: 검색 서비스 기능 구현 쇼핑몰 검색창, 자동 완성, 추천 시스템 등 최종 사용자에게 노출되는 기능을 개발할 때. Java, Python, Go 등의 클라이언트 라이브러리(SDK)는 객체 지향적인 JSON 구조(DSL)와 완벽하게 매핑됩니다. 코드로 쿼리를 조립하기에는 DSL이 훨씬 안정적입니다. * 상황 B: 정교한 검색 랭킹 튜닝 function_score, boosting, slop 등 검색 품질을 미세하게 조정하는 기능은 DSL만이 100% 지원합니다. PPL은 '분석'에 강하지만 '검색 랭킹' 제어력은 약합니다. * 상황 C: 초고성능 최적화가 필요한 고정 쿼리 수천만 건의 데이터를 0.1초 안에 조회해야 하는 API 백엔드. DSL은 필터 캐싱, 라우팅 제어 등 엔진 내부의 최적화 기능을 극한까지 활용할 수 있는 세밀한 옵션들을 제공합니다.\ 3) 정리 지금까지 OpenSearch의 PPL(Piped Processing Language)에 대해 깊이 있게 살펴보았습니다. 과거에는 OpenSearch 데이터를 분석하려면 'JSON 괄호와의 싸움'을 피할 수 없었습니다. 하지만 PPL의 등장으로 이제 SQL을 아는 개발자, 데이터 분석가, 심지어 비개발 직군까지도 데이터와 직접 대화할 수 있는 길이 열렸습니다. PPL이 가져온 변화는 명확합니다. - 직관성: 사고의 흐름대로 파이프(|)를 연결하여 로직을 구현합니다. - 생산성: 복잡한 집계 코드를 단 한 줄로 압축합니다. - 협업: 누구나 읽고 이해할 수 있는 코드로 팀 간 커뮤니케이션이 원활해집니다. 여러분의 데이터 인프라에 OpenSearch가 있다면, 오늘 당장 복잡한 JSON 대신 PPL을 입력해 보시길 권합니다. 단순히 쿼리 언어를 바꾸는 것을 넘어, 데이터 속에 숨겨진 인사이트를 발견하는 속도가 달라질 것입니다.
2026.01.07
기술이야기
브라우저 모니터링 시스템 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
회사이야기
2025 브레인즈컴퍼니 대만 해외 연수단 후기
회사이야기
2025 브레인즈컴퍼니 대만 해외 연수단 후기
브레인즈컴퍼니는 구성원들이 더 넓은 시야로 IT 기술과 시장을 바라보고, 새로운 환경 속에서 각자의 방식으로 재충전할 수 있도록 매년 ‘해외연수단’ 제도를 운영하고 있습니다. 해외연수단 프로그램은 IT 전시회를 참관하는 것에서 그치지 않고, 글로벌 기술의 흐름을 현장에서 직접 느끼고, 도시 곳곳을 돌아보며 일상, 문화를 자유롭게 체험하는 시간으로 구성됩니다. 올해 해외 연수단의 목적지는 대만 타이베이였습니다. 아시아 최대 IT 박람회인 [COMPUTEX 2025]에 직접 참석하며 글로벌 기술의 변화 흐름을 현장에서 체감했고, 이어지는 개별 일정에서는 각자의 관심사에 따라 자유롭게 타이베이를 경험하고 리프레시하는 시간을 가졌습니다. │COMPUTEX 2025, 최신 IT 트렌드를 직접 경험하다. 해외 연수단 일정의 본격적인 시작은 [COMPUTEX 2025] 참관이었습니다. 매년 타이베이에서 열리는 이 행사는 세계 유수의 IT 기업들이 참가해 반도체, AI, 클라우드, IoT, 시스템 운영 등 다양한 기술을 소개하며, 업계의 미래 방향성을 제시하는 무대이기도 합니다. 올해의 주제는 ‘AI NEXT’. AI 기술이 어디까지 왔고, 이제 어떤 방식으로 운영과 인프라에 스며드는지를 중심으로 다루는 전시였습니다. 해외연수단이 전시회를 통해 어떤 것을 경험하고 느꼈는지 직접 들어보았습니다. 연수단 구성원들은 전시장을 자세히 둘러보며 기술의 흐름을 체감할 수 있었는데요. 전시를 통해 어떤 점이 인상 깊었고 무엇을 느꼈는지, 구성원들의 생생한 후기를 통해 들어보겠습니다. “1관은 글로벌 대기업 위주로 구성되어 있었고, 부스마다 콘셉트를 뚜렷하게 드러낸 디자인이 인상적이었습니다. 친환경 테마를 시각적으로 표현하거나, 하드웨어를 조형물처럼 전시한 방식 등에서 디자인의 전략적 역할을 다시금 느낄 수 있었습니다. 2관에서는 하드웨어와 스타트업 중심의 전시가 이어졌고, 특히 다양한 산업 분야의 모니터링 솔루션을 접할 수 있었습니다. IoT와 CCTV 기반의 실시간 화면 구성은 실무와 연결해볼 수 있는 부분이 많았고, 향후 사내 프로젝트에 적용 가능한 아이디어도 얻을 수 있는 유익한 시간이었습니다” - 디자인팀 강다혜 님 “개인적으로 게임 산업에 관심이 많은 입장에서 G.SKILL과 GIGABYTE 부스가 특히 인상적이었습니다. G.SKILL은 직접 조립한 부품으로 성능 대결을 펼치는 이벤트가 흥미로웠고, GIGABYTE는 게이밍 시연존과 디지털 디스플레이 등 관람객 체험 중심으로 부스를 구성해 볼거리가 많았습니다. 또한 스마트 팩토리와 IoT 기반 매장 운영 시스템을 통해 고객의 구매 패턴을 분석하고 이를 대시보드로 시각화하는 방식이 눈에 띄었습니다. 일상 속에서 데이터가 다양한 방식으로 수집되고 활용되는 흐름을 자연스럽게 느낄 수 있었고, 앞으로의 기술 트렌드를 조금 더 현실적으로 생각해보는 계기가 되었습니다” - 솔루션 사업팀 우다정 님 "전시장 곳곳에서 가장 많이 접한 키워드는 단연 ‘AI’였고, 그그 중에서도 스마트 시티 분야의 AI 기술이 가장 인상적이었습니다. 교통 흐름을 실시간 분석해 사고를 감지하고, 긴급 차량의 최적 경로를 안내하는 시스템 등은 도시 운영의 효율성과 안전성을 높이는 데 AI가 실질적으로 기여할 수 있음을 확인할 수 있었습니다. 특히 복잡한 데이터를 실시간으로 시각화하고, 사용자에게 명확하게 전달하는 방식은 제니우스(Zenius) 대시보드 설계에도 참고할 수 있는 좋은 레퍼런스가가 되었습니다" - 웹 시각화팀 이소현 님 “기술지원 업무를 하다 보면 결국 중요한 건 ‘현장에서 기술이 잘 적용되고 운영되는가'라는 것을 많이 느낍니다. 실제 이번 전시에서는 단순한 기술 설명을 넘어, 다양한 환경에서 실제로 시스템이 어떻게 운영되고 있는지를 시연하는 부스가 많아 특히 흥미로웠습니다. 예를 들어, 헬스케어 AI 솔루션 부스에서는 생체 데이터를 기반으로 한 실시간 진단과 알림 시스템이 구현되어 있었고, 이를 어떻게 병원 운영 시스템과 연동하는지까지 상세히 보여주었는데요, 이런 구조는 실제 고객사 현장에서 기술을 적용하고 설명할 때 어떤 점을 고려해야 하는지에 대한 실질적인 인사이트를 주었습니다” - TC(기술지원)팀 박수범님 “개발자로서 이번 전시에서 가장 인상 깊었던 부분은 다양한 분야에 적용된 AI 모델의 실제 운영 방식과 이를 뒷받침하는 시스템 구조였습니다. 특히, 실시간 데이터를 수집·분석하고, 상황에 따라 자동으로 판단하거나 알림을 생성하는 흐름은 저희가 구현하고 있는 모듈 구조나 이벤트 기반 설계와도 유사한 부분이 많았습니다. 기술이 추상적인 개념이 아닌, 실제 현장에서 어떻게 운영되는지를 직접 확인할 수 있어 유익한 경험이었습니다.” - 연구개발본부 정태민 님 이처럼 이번 전시회에 참가한 구성원들은 글로벌 IT 기술의 흐름과 최신 트렌드를 현장에서 직접 체감하며, AI, 클라우드, IoT, 시스템 인프라 등 다양한 기술이 실제 운영 환경에 어떻게 통합되고 실질적인 가치를 만들어내는지를 구체적으로 살펴볼 수 있었습니다. 뿐만 아니라 각자의 전문 분야에서 기술이 사용자와 어떻게 연결되고 경험으로 확장되는지를 다각도로 고민하며, 향후 자사의 제품 방향성과 전략을 구상하는 데 필요한 인사이트도 얻을 수 있었습니다. │각자의 방식으로 재충전의 시간을 갖다 이번 해외연수단은 전시회 참관 외에도 현지의 문화와 일상을 직접 체험하는 시간을 가졌습니다. 타이베이의 거리와 공간을 걸으며 도시의 분위기와 사람들의 삶을 가까이에서 마주한 경험은, 잠시 일상에서 벗어나 생각을 환기하고 스스로를 재정비할 수 있는 소중한 시간이었습니다. 각자의 시선으로 바라본 가장 인상 깊은 순간들을 지금부터 함께 살펴보겠습니다. "시먼 거리의 신호등에 있는 달리는 사람 아이콘은 시간이 줄어들수록 점점 속도가 빨라지는 독특한 연출로 시선을 끌었습니다. 일상 속 동선에 사용자 경험을 녹여낸 이처럼 작지만 정교한 공공디자인 요소는, 평소 디자인에 관심 있는 저에게 신선한 자극이 되었습니다. 화산 1914 문화창의원구에서는 과거 주조장이었던 공간이 감각적인 전시와 창작 콘텐츠로 채워져 있었고, 대만의 창의성과 문화적 해석력을 가까이서 체감할 수 있었습니다. 잠시 일상에서 벗어나 디자인을 새로운 시각으로 바라보는 소중한 리프레시의 시간이었습니다" - 디자인팀 강다혜 님 "현지 기사님의 안내로 예류, 스펀, 진과스, 지우펀 등 주요 명소를 도는 택시 투어를 진행했습니다. 기사님은 단순한 안내를 넘어 명소마다 사진 포인트를 추천하고, 먼저 나서서 단체 사진을 찍어주시는 등 세심한 배려를 아끼지 않으셨습니다. 어떤 산업이든 결국 사람의 진심과 친절함이 전달되는 서비스가 가장 오래 기억에 남는 것 같습니다. 오랜만에 느껴본 따뜻한 배려 덕분에 마음이 훈훈하게 정리되는 기분이었습니다" - 솔루션사업팀 우다정 님 "중정기념당에서는 장제스의 유품과 민주주의 관련 전시를 관람했습니다. 전시를 보며 자연스럽게 한국의 역사도 떠올라 마음이 숙연해졌고, 정각에 진행된 의장대 교대식은 절도 있는 움직임으로 당시의 시대 분위기를 전하는 듯해 인상 깊었습니다. 국가의 가치와 그것이 문화로 이어지는 방식을 바라보며, 그동안 당연하게 여겨온 것들을 다시 생각해보게 되었고, 저 자신도 잠시 차분히 돌아볼 수 있는 시간이었습니다." - 웹시각화팀 이소현 님 "국립고궁박물관에서 마주한 청나라 시기의 옥 조각 ‘배추상’은 단순한 장식을 넘어, 그 자체로 하나의 언어처럼 느껴졌습니다. 상징성과 장인정신이 고스란히 담긴 정교한 조각을 바라보며, 전통 속에 깃든 섬세한 사고와 표현의 깊이를 새삼 느낄 수 있었습니다. 첨단 기술로 가득했던 전시회와는 또 다른 결을 지닌 이 경험은, 복잡했던 마음을 잠시 내려놓고 조용히 쉬어갈 수 있었던 잔잔한 힐링의 순간이었습니다" - 연구개발본부 정태민 님 "평소 바쁜 일상으로 식사 한 끼 함께하기 어려웠던 동료들과 저녁 식사를 나눴습니다. 대화가 이어지고, 웃음이 번지는 그 짧은 시간 속에서 우리는 함께 일하는 사람을 넘어 서로를 조금 더 이해하게 되었고, 잊지 못할 소소한 힐링을 얻었습니다. 짧지만 진심 어린 교감이 큰 위안이 되었습니다" - 품질보증팀 장규은 님 "마지막 날, 비행기 탑승 전 들른 스타벅스에서 받은 음료 컵 위에 한글로 적힌 “좋은 하루~”라는 손글씨가 눈에 들어왔습니다. 그 아래 정성스럽게 써 내려간 중국어 인사도 함께였죠. 짧은 문장이었지만 그 안에 담긴 따뜻함은 대만에서 마주한 모든 친절함을 응축한 듯했고, 여운처럼 마음에 오래 남았습니다" -TC(기술 지원)팀 박수범 님 이번 해외연수는 구성원들이 평소와는 다른 환경 속에서 새로운 기술과 문화를 직접 경험하고, 각자의 방식으로 재충전할 수 있었던 의미 있는 시간이었습니다. 전시회를 통해 최신 IT 트렌드를 체감하고, 현지에서의 다양한 일상을 경험하며 시야를 넓혔으며, 팀원들과의 시간 속에서 서로에 대한 이해도 깊어졌습니다. 브레인즈컴퍼니는 앞으로도 구성원들이 글로벌 IT 트렌드 및 시장에 대한 이해를 넓히고, 개인적으로도 회복과 재정비의 시간을 가질 수 있는 기회를 이어가겠습니다.
2025.06.12
기술이야기
오픈소스 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
기술이야기
옵저버빌리티(Observability) vs APM, 우리 기업에 맞는 솔루션은?!
기술이야기
옵저버빌리티(Observability) vs APM, 우리 기업에 맞는 솔루션은?!
지난 글을 통해 웹 애플리케이션을 전반적으로 모니터링하고 관리하기 위한 좋은 도구인, APM의 핵심요소와 기능에 대해서 알아봤습니다(지난 글 보기). APM은 분명 좋은 도구이지만 문제 원인이 애플리케이션, 웹, WAS, DB가 아닌 특정한 시스템 오류이거나 클라우드 네이티브 환경에서의 장애일 경우 문제 발생 원인을 명확히 밝히기 어려울 수 있습니다. 따라서 이번 시간에는 APM의 한계성은 무엇이고, 이를 보완하기 위한 방법은 무엇인지 자세히 살펴보겠습니다. │APM 한계성 불과 얼마 전까지만 해도 예상치 못한 장애를 탐지하고 분석하는 것은, 기존 APM만으로 충분했었습니다. 기존에는 모놀리식 구조로 되어있어 애플리케이션이 적은 수로 구성되어 있었고, Web-WAS-DB가 모두 단일 구조로 구성되어 있었기 때문입니다. 하지만 현재 대다수 기업들은 MSA 환경에서 서비스를 구축하고, DevOps 구조로 업무를 진행하는 경우가 많습니다. 즉 클라우드 네이티브 환경에서는 기존 모놀리식 구조의 APM의 한계가 하나둘씩 보이기 시작한 것이죠. 이러한 이유로 클라우드 네이티브 방식에는 서비스 장애 원인을 분석하기 위한 새로운 모니터링 툴이 필요했습니다. 이때 등장하는 것이 바로 옵저버빌리티(Observability)입니다. │Observability란? 그렇다면 Observability란 무엇일까요? 옵저버빌리티는 IT 인프라에 대한 근본적인 장애 원인을 분석하기 위한 방법론입니다. 관찰 가능성이라고 표현되기도 하죠. Obsevability는 비교적 최근에 사용한 용어이지만, 옵저버빌리티를 위한 고민은 오래전부터 지속되어왔습니다. 시스템이 내가 의도한 대로 작동하고 있을까? 예상치 못한 장애 탐지와 장애 근본 원인은 어떻게 분석할 수 있을까? IT 인프라 운영 환경에 문제가 발생했을 때, 문제 식별을 위해 필요한 객관적인 지표는 어떻게 도출할 수 있을까? 하지만 소프트웨어 애플리케이션에서 Observability는, 위와 같은 고민이 발생하거나 겪어보지 못했던 현상이 생길 때 이를 이해하고 설명할 수 있는 지표를 분석해 줍니다. │Obsevability의 등장배경 및 필요성 앞에서 옵저버빌리티가 무엇인지 살펴봤는데요. 이어서 Observability가 등장하게 된 이유와 필요성에 대해 자세히 살펴보겠습니다. MSA 전환에 따른 복잡성 증가 옵저버빌리티가 등장하게 된 첫 번째 이유는, 모놀리식 아키텍처에서 MSA 환경으로 전환함에 따라 복잡성이 증가했기 때문입니다. 우선 그림을 통해 자세히 살펴보겠습니다. [그림(왼)]은 모놀리식 아키텍처를 나타내는데요. 애플리케이션의 모든 구성 요소가 하나의 인프라로 통합되어 있는 형태입니다. 배포가 간단하며, 확장성이 쉽고, E2E 테스트가 용이하다는 장점이 있습니다. 하지만 조그마한 수정 사항이 있으면, 다시 구성 환경을 빌드하고 배포해야 한다는 단점이 있습니다. 또한 일부 오류가 전체 아키텍처에 영향을 미친다는 치명적인 단점도 존재하죠. 반면 [그림(오)]에 해당하는 MSA(Micro Service Architecture)는 하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어, 변경과 조합이 가능합니다. 작은 서비스의 독립적 배포라는 강력한 장점을 앞세워 Netflix, PAYCO와 같은 다양한 기업들이 앞다투어 MSA를 받아들였습니다. 여기서 문제는 MSA로 변화함에 따라 통합 테스트나 E2E 테스트 검증이 필요해졌는데요. 이처럼 여러 서비스의 API를 검증해야 하므로, 복잡성이 증가하고 많은 시간과 비용이 소모되었습니다. 무엇보다 각 서비스 별로 자체적인 데이터베이스가 있어, 트랜잭션에 대한 파악이 어려워지기도 했죠. 따라서 기존 APM이 담당하는 트랜잭션 모니터링의 복잡성은 더욱 증가했고, Observability의 필요성이 대두되었습니다. DevOps와 클라우드 네이티브 환경으로서의 전환 옵저버빌리티가 등장하게 된 두 번째 이유는, DevOps와 클라우드 네이티브 환경으로 전환하기 위해 필요한 도구이기 때문입니다. DevOps의 핵심은 소프트웨어의 개발(Deployment)과 운영(Operation)을 분리하는 것이 아닌, 하나로 통합된 업무 처리 방식으로 진행됩니다. 이때 관리하는 서비스 전반에 대한 가시성이 충분히 확보되지 않으면, DevOps 조직은 근본적인 원인을 찾는 데 어려움을 겪게 됩니다. 이러한 어려움을 해결하기 위해서는 서비스를 구성하는 아키텍처부터 트랜잭션까지 가시성이 확보되어야 합니다. 이를 통해 DevOps의 목표인 지속적인 개발과 운영의 통합을 만들어낼 수 있죠. 또한 Observability는 클라우드 네이티브 환경으로 전환하기 위한 필수 조건입니다. 기업에서 운영 중인 서비스/IT 인프라가 클라우드 네이티브 환경으로 전환되면서, 이전에 발생하지 않았던 모든 장애 가능성에 대한 인지를 위해 Observability가 선행되어야 합니다. │Observability와 Monitoring 차이점 그렇다면 기존의 모니터링(Monitoring)과 옵저버벌리티(Observability)의 차이점은 무엇일까요? 기존의 모니터링 역할은 IT 인프라의 '정상 작동 확인'을 위한 도구 역할에 초점이 맞춰져 있었습니다. 모니터링 구성 요소인 대시보드와 사용자 알람을 통해 가시성을 확보하고, 장애를 쉽게 감지할 수 있었죠. 즉 모니터링은 인프라 성능 지표, 구성 관리, 사용자 알람에 주 목적을 둔 IT 운영 담당자에 포커스를 맞춘 도구입니다. Observability는 기존 모니터링이 맡는 알람(Alerting), 메트릭(Metric) 외에도 로그(시스템, 애플리케이션), 트레이스, 디버깅과 같은 작업이 가능합니다. 이를 통해 앞으로 발생할 수 있는 장애를 미리 예측하고, 발생한 장애에 대한 근본적인 원인을 찾아내는 데 초점이 맞춰져 있습니다. │Observability 확보를 위한 핵심 구성 요소 옵저버빌리티는 앞서 언급했듯이 메트릭(Metric), 로깅(Logging), 트레이싱(Tracing) 등 작업이 가능한데요. 좀 더 자세히 살펴보겠습니다. Metric 모니터링 분야에서 Metric(메트릭)이란, 인프라 혹은 서비스 성능과 상태를 나타내는 지표입니다. 여기서 중요한 점은 단순히 현재 상태를 보기 쉽게 표현하는 것에서 더 나아가 '시계열 데이터' 형태로 변화하는 데이터를 보여줘야 합니다. 예를 들어 CPU 사용률, 메모리 사용률, 스레드 사용률과 같이 시간이 지남에 따라 어떻게 변화하는지 효율적으로 보여줄 수 있어야 하죠. 또한 메트릭은 여러 AI 분석툴과 오픈소스와 결합하여, 직관적인 파라미터를 통해 시계열 데이터의 다양한 패턴을 자동 감지할 수 있어야 합니다. 운영자와 개발자에게 필요한 리소스를 선택할 수 있도록 성능 예측하는 지표도 필요합니다. Logging Logging(로깅)은 운영 중인 시스템과 애플리케이션에서 발생하는 다양한 이벤트와 에러 등을 기록하는 과정입니다. Observability는 여기서 더 나아가 클라우드 시스템의 모든 로그를 수집하여, 해당 로그를 통해 문제 원인을 식별할 수 있어야 합니다. 물론 각 로그 스트림은 단일 인스턴스에 대한 이벤트를 알려주기 때문에, 마이크로 서비스 환경에서 전체적인 문제 원인을 파악하기 어려울 수 있습니다. 하지만 중앙 집중식 로깅을 사용하면, 애플리케이션 로그를 한곳에 저장할 수 있습니다. 이를 통해 여러 서비스로 구성된 MSA 환경에서 로그를 효과적으로 검색하고 모니터링할 수 있죠. 이러한 작업을 하기 위해서 ELK Stack1 과 같은 로그 수집 활용 도구가 필요한데요. 이 도구는 로그 관리를 단순화화여, 전체 시스템 문제를 더 쉽게 분석할 수 있도록 도와줍니다. *ELK Stack1: Elastic Search. Logstash, Kibana의 약자로 데이터를 수집하고 분석하는 도구 모음 Tracing 트레이싱은 애플리케이션 실행 정보를 기록하는 '특별한 로깅' 방식을 의미합니다. 사실 로깅과 트레이싱을 구분하는 것에 큰 의미는 없습니다. 하지만 Observability 관점에서 트레이싱은, 전체 로그 중 문제를 일으키는 특정 로그들을 시각화하고 이를 선택적으로 관찰하는데 의미가 있습니다. Debugging Observability에서 말하는 디버깅은, 시스템과 서비스 성능을 확인하고 검사할 수 있는 다양한 도구입니다. 장애 원인을 찾을 경우 그 장애 원인뿐만 아니라, 연관관계를 가진 여러 인프라와 애플리케이션을 함께 보여줄 수 있어야 하죠. RUM RUM은 Real User Monitoring 약자로, 사용자의 인터랙션을 추적하여 웹사이트나 애플리케이션 성능을 실시간으로 모니터링하는 기술입니다. 옵저버빌리티는 앞서 언급했듯, 더 이상 IT 인프라 운영자를 위한 도구가 아닙니다. DevOps를 위한 통합적인 가시성을 제공하는 도구이죠. 따라서 운영자와 개발자를 위한 '실제 사용자 관점'에서 모니터링을 제공해야 합니다. 이처럼 옵저버빌리티 시스템은 애플리케이션의 전체적인 상태를 깊이 있게 파악하고, 문제 원인을 분석하는 데 중점을 두는 접근 방식입니다. 그렇다면 애플리케이션 성능 관리 시스템인 APM 도구와는 어떤 차이점이 있을까요? │APM과 Observability 차이점 어떻게 보면 APM과 Observability는 비슷해 보이지만, 문제 원인과 인프라를 분석하는 시각에 따라서 다양한 차이점을 지니고 있습니다. 우선 첫 번째 차이점으로는 모니터링 목적 대상에 따른 차이가 있습니다. APM은 E2E(End-to-End) 성능 구간에 주목합니다. WEB-WAS-DB에 걸친 이 과정을 실제 서비스 사용자의 *액티브 서비스2에 초점을 맞춰, 애플리케이션 성능을 분석하고 모니터링하죠. *액티브 서비스: 현재 시점에서 사용자에게 제공되고 있는 상태 Observability는 APM에서 주목하는 E2E보다, 더 많은 범위를 모니터링합니다. 시스템 인프라, WAS, DB에 대한 정밀 성능 분석과 장애 감지는 물론. 운영 중인 인프라와 서비스를 통합하여 문제 원인을 찾는 데 집중합니다. [그림] Zenius-APM 사용자 정의 실시간 모니터링 상황판 따라서 두 번째 차이점으로는, 측정하는 지표에도 많은 차이가 있는데요. APM은 사용자 요청에 따른 응답 시간과 응답 분포, 액티브 서비스 상태, 트랜잭션 처리율, 이슈 중심으로 '사용자 요청' 관점에 따라 주요 지표를 확인할 수 있습니다. Observability는 사용자의 요청 관점이 아닌, 발생할 수 있는 '모든 이벤트 지표'에 주목합니다. 보다 더 전방위적인 모니터링이 가능하죠. 또한 옵저버빌리티는 기존 APM에서 발생하는 주요 장애 원인뿐 아니라, 예측하지 못한 장애를 객관적인 지표로 보여줍니다. 정리한다면 인프라와 서비스를 분석하고 장애를 탐지한다는 점에서 APM과 Observability는 동일한 역할을 갖지만, 결국 사용자가 무엇을 더 초점에 맞추느냐에 따라 사용 목적은 아래와 같이 달라질 수 있습니다. 우리 기업은 Observability가 맞을까, APM가 맞을까? APM Type Observability Type 애플리케이션 성능 최적화가 필요한 경우 애플리케이션 코드 내의 문제를 식별하고 해결하는 데 중점을 둘 경우 MSA 환경이 아닌 모놀리식 아키텍처에서 서비스를 구성하고 있는 경우 MSA 환경에서의 분산 시스템을 통해 서비스를 구성하는 경우 단순한 애플리케이션 성능을 넘어 전체 IT 인프라 환경에 대한 통찰력 확보가 필요한 경우 인프라 운영자, 개발자, 보안담당자 모두가 통합 모니터링 환경이 필요한 경우 이번 글에서는 옵저버빌리티의 중요성과 APM의 차이점을 자세히 살펴보았습니다. 결론적으로 옵저버빌리티와 APM 중 어느 하나를 더 좋다고 할 수 없으며, 각 조직의 요구사항과 사용 편의성에 맞춰 선택해야 합니다. 그러나 점점 복잡해지는 IT 환경을 고려한다면, 옵저버빌리티를 기반으로 한 Zenius-APM과 같은 도구를 활용하여 좀 더 효율적으로 웹 애플리케이션을 관리해 보는 것은 어떨까요? ?더보기 Zenius APM 더 자세히 보기 ?함께 읽으면 더 좋아요 • APM에서 꼭 관리해야 할 주요 지표는?! • APM의 핵심요소와 주요기능은?!
2024.07.24
기술이야기
APM의 핵심요소와 주요기능은?!
기술이야기
APM의 핵심요소와 주요기능은?!
지난 글을 통해서 APM의 필요성과 '트랜잭션' 현황 파악의 중요성에 대해서 알아봤습니다. 이번 시간에는 트랜잭션을 어떤 방식으로 추적하는지 APM 동작 과정을 통해 살펴보고, APM 시스템을 최적화하는 핵심 요소와 기능은 무엇인지 자세히 알아보겠습니다. │APM 동작 과정 APM은 Client-Web Application-DBMS와 같은 구성요소 사이에 트랜잭션1을 추적할 수 있어야 합니다. 이를 통해 웹 서비스 전반적인 성능을 모니터링하고, 문제가 발생했을 때 원인을 신속하게 진단할 수 있기 때문인데요. 그렇다면 각 단계별로 APM가 어떻게 트랜잭션1을 추적하는지 좀 더 자세히 살펴보겠습니다. *트랜잭션1: 쉽게 말해 데이터베이스에 실행되는 작업 단위를 의미합니다. 트랜잭션은 작은 여러 작업들을 하나의 그룹으로 묶어 처리하기 때문에, A라는 작업에서 일부가 성공했다고 하더라도 하나의 트랜잭션 처리가 비정상적으로 종료되면 모두 실패한 것이죠. 클라이언트(Client) 웹 서비스 사용자가 이용하는 디바이스 또는 브라우저입니다. 클라이언트에서 발생하는 요청과 응답을 추적하여 페이지 로딩 시간, 사용자 활동, 에러 발생 등을 파악할 수 있습니다. 이 정보들을 통해 사용자 경험을 분석하고 개선하는데 기초 자료로 사용되죠. 웹서버(Web Server) 클라이언트 요청을 받아, 적절한 답을 생성하여 보내는 서버입니다. 이 단계에서 APM은 서버(예: Apache, Nginx) 로그와 성능 지표를 분석하여 요청 처리 시간, 데이터 전송량, 서버 오류 등 정보를 모니터링하고 기록합니다. 웹 애플리케이션 서버(WAS) WAS는 Web Application Server의 약자로, 애플리케이션에서 사용하는 데이터를 저장하고 관리하는 시스템입니다. 이 단계에서 APM은 데이터베이스 성능을 모니터링하여 DB 쿼리 실행시간과 DB 서버 부하 등을 측정하고, 성능 문제를 파악하는 데 도움을 줍니다. WAS 종류로는 WebLogic, Websphere, JEUS, Tomcat 등이 있습니다. 데이터베이스(DBMS) DBMS(Database Management System)는 기업에서 발생하는 모든 데이터를 저장하고 관리하는 소프트웨어입니다. 이 단계에서는 DB 성능 관리 솔루션을 통해, 애플리케이션 개발자가 작성한 SQL 튜닝과 DBMS 소프트웨어 병목 현상 등을 모니터링할 수 있습니다. 특히 데이터베이스는 IT 인프라에서 필수 요소입니다. 기업 서비스 대부분이 데이터베이스에 접근하여, 데이터를 조회하고 수정해야 하기 때문에 DB 관리는 매우 중요하다 할 수 있죠. 이처럼 APM은 Client-Web Server-Was-DB 각 구성요소 사이에 있는 트랜잭션을 추적하여 웹 서비스 성능을 평가할 수 있습니다. 그다음으로는 APM 시스템 전체적인 성능을 평가하고 최적화하는 핵심 요소는 무엇인지 살펴보겠습니다. │APM 성능을 최적화하는 핵심요소 APM 시스템은 크게 5가지 요소를 통해, 전체적인 성능을 최적화할 수 있습니다. 우선 Resource는 시스템 성능과 안정성을 평가하는데 중요한 역할을 하며, DataBase는 SQL 쿼리의 실행 계획이나 DB 연결 상태와 같은 세부 정보를 분석하여 데이터베이스 성능을 최적화합니다. Alert는 모니터링된 데이터에서 문제를 식별하고 사용자나 운영자에게 경고를 보내며, User 경험과 행동을 추적하여 서비스 품질을 평가합니다. WAS는 서버 내부에서 발생하는 이벤트를 모니터링하고, 서버 성능을 평가하는 역할을 합니다. Resource-Database-Alert-User-WAS 이 5가지 요소는 APM 아키텍처를 구성하는 핵심 요소이기도 한데요. 다음 내용을 통해 APM 아키텍처를 좀 더 자세히 살펴보겠습니다. │APM 아키텍처 APM 아키텍처는 Agent를 통해 WAS(관리대상) 실시간 데이터를 수집하고 → Manager에서 데이터를 수집/분석/가공 한 뒤 → 다양한 UI로 시각화합니다. 특히 꼭 기억해야 할 APM 아키텍처 핵심 3가지는 에이전트, 데이터베이스, 통신방식인데요. 좀 더 자세히 알아보겠습니다. 에이전트 APM 관리대상(예시: WebSphere, WebLogic, JBoss, JEUS, Tomcat 등)에 Agent라고 불리는 소프트웨어를 설치합니다. 그다음 모니터링 대상 시스템(WAS)에서 데이터를 수집하죠. 에이전트는 애플리케이션 내부 동작을 모니터링하고, 성능 데이터를 수집하는 역할을 합니다. 이러한 데이터를 활용하여 에이전트는 서비스 구간별 현황과 초당 처리 건수, 서비스 응답시간, 동시 접속자 수, 트랜잭션 거래량, 에러 등 상세한 지표를 제공해 주죠. 데이터베이스 수집된 데이터를 보관하고 분석하기 위해서는, 데이터베이스(DataBase)를 사용합니다. 이 데이터베이스는 대규모 데이터를 저장하고 관리하는 구조여야 하며, 분석하고 보고서를 생성하는데 필요한 데이터를 효율적으로 쿼리 할 수 있어야 합니다. 통신방식 APM 시스템은 보통 다양한 통신 프로토콜(Communication Protocol)을 사용하여, 데이터를 수집하고 전송합니다. 예를 들어 웹 소켓(WebSocket)을 통해 실시간 데이터를 전송하거나 http(s)를 사용하여 주기적으로 데이터를 전송하는 방식이 일반적입니다. 그다음으로는 APM은 어떤 주요 기능을 제공하는지 알아보도록 하겠습니다. │APM 주요기능 APM은 대표적으로 웹사이트와 소프트웨어 애플리케이션 및 서비스에서, 성능을 모니터링하고 분석하는 기능이 있는데요. 좀 더 자세한 APM 기능을 살펴보겠습니다. 실시간 성능 통합 모니터링 [그림] Zenius-APM 토폴로지 맵 APM은 Tomcat, Jboss, WebLogic, JEUS 등 다양한 애플리케이션 서버(WAS) 환경에서 실행되는 애플리케이션 통합 모니터링을 제공합니다. 시스템 간의 처리 성능과 현황 정보는 토폴로지 뷰를 통해 시각적으로 파악할 수 있죠. [그림] Zenius-APM 모니터링 상황판 또한 각 서버의 트랜잭션 처리량, 처리 속도, 자원 사용량을 실시간으로 분석하여 시스템 성능을 관리합니다. 특정 트랜잭션 실행 경로를 추적하고 분석하여, 성능 병목 현상도 식별할 수 있습니다. [그림] Zenius-APM 모니터링 서비스 응답분포 APM은 서비스 응답 분포도를 제공하여, 비정상적인 트랜잭션을 집중적으로 조회하고 분석할 수 있습니다. 장애관리 APM은 메모리 누수, 서비스 응답 지연과 같은 장애 원인을 실시간으로 추적하고 분석하는 기능을 제공합니다. Rawdata를 기반으로 장애 발생 시점을 재현하여, 문제의 근본 원인을 파악하는 데 도움을 주죠. 또한 자동 이벤트 처리는 장애 관리 규칙(Rule)에 따라 이루어지며, 문제 발생 시에는 사용자에게 즉각적인 알림을 제공합니다. 성능 분석과 통계 APM은 애플리케이션 성능을 다양한 지표(예: 성능비교, 기간비교, 증설 필요성, 시간대별 등)를 통해 분석하고, 여러 파일 형식의 보고서로 제공합니다. 또한 애플리케이션 성능 문제와 SQL 쿼리 간의 연관성을 분석하여 성능 개선 방안을 제안합니다. 다양한 환경 지원 레거시 시스템에서 클라우드 인프라에 이르기까지, APM은 다양한 IT 환경을 효과적으로 지원합니다. 또한 WAS 중심 성능 관리와 MSA(마이크로 서비스 아키텍처) 환경 모니터링을 가능하게 하는 기술을 제공하죠. 이번 시간에 알아본 내용처럼 APM은 다양한 애플리케이션 서버(WAS) 환경에서 실행되며, 트랜잭션 성능을 관리하는 통합 모니터링 제품입니다. Zenius-APM와 같이 다양한 WAS 환경에서의 통합 모니터링과 트랜잭션 처리 현황을 체계적으로 파악할 수 있는 APM을 통해, 효과적으로 웹 애플리케이션을 관리해 보세요!
2024.07.19
기술이야기
APM에서 꼭 관리해야 할 주요 지표는?
기술이야기
APM에서 꼭 관리해야 할 주요 지표는?
웹 애플리케이션, 모바일 애플리케이션, 데스크탑 소프트웨어, 그리고 클라우드 기반 서비스까지 애플리케이션 서비스의 범위는 점점 더 광범위해지고 있습니다. 온라인 쇼핑, OTT, 게임, 금융, SNS, 기업 ERP 서비스 등 거의 모든 산업 분야에서 애플리케이션을 활용하는 가운데 애플리케이션 서비스가 원활하게 제공되지 않으면 기업은 고객의 신뢰를 잃고, 브랜드 이미지와 매출에도 큰 타격을 입게 됩니다. 이에 따라서 애플리케이션의 성능을 지속적으로 모니터링하고 문제를 신속하게 감지하고 해결하게 해주는 APM(Application Performance Monitoring)의 중요성이 빠르게 커지고 있습니다. 그렇다면 구체적으로 APM이 왜 필요한지와 APM을 통해 꼭 살펴봐야 하는 지표들에 대해서 자세히 알아보겠습니다. │APM(Application Performance Monitoring)의 필요성 앞서 언급한 것처럼 APM은 애플리케이션의 성능을 추적하여, 사용자 만족도를 높이기 위한 필수적인 도구입니다. APM이 왜 점점 더 중요해졌는지 좀 더 구체적으로 살펴볼게요. 시스템 복잡성 관리 현대 IT 환경은 마이크로서비스(MSA), 클라우드, 서버리스 컴퓨팅 등 다양한 기술을 복합적으로 사용합니다. 이로 인해 시스템은 점점 더 복잡해지고, 전통적인 모니터링 도구로는 파악하기 어려운 문제가 발생할 수 있는데요. APM은 이러한 복잡한 시스템에서 발생하는 성능 저하나 오류를 정확히 파악하고, 문제의 근원지를 신속하게 찾아내는 데 도움을 줍니다. 예를 들어 대형 은행이 APM을 통해 실시간 거래 처리 시스템의 성능 저하를 조기에 발견하고 해결하여, 고객 불편을 최소화한 사례가 있습니다. 비즈니스 효율성 및 비용절감 오늘날 기업들은 웹사이트, 모바일 앱, 클라우드 서비스 등 다양한 디지털 플랫폼을 원활하게 운영하기를 원합니다. 동시에 어떻게 하면 이 많은 플랫폼들을 효율적으로 운영하면서, 비용을 절감할지 고민하는데요. APM은 이러한 고민을 해결해 줍니다. 예를 든다면 APM은 클라우드 환경에서 비효율적으로 사용되는 리소스를 식별하고, 필요한 경우에만 리소스를 확장하거나 축소할 수 있도록 지원합니다. 이를 통해 클라우드 비용을 절감하면서도, 시스템 성능을 유지할 수 있게 도와주죠. 고객 경험 개선 다양한 웹/모바일 서비스들이 생겨나면서 소비자들은 점점 더 빠르고, 안정적이며, 개인에게 특화된 맞춤형 서비스를 원하고 있습니다. 애플리케이션의 성능을 개선할수록 사용자 만족도 역시 높아지죠. 만약 소비자 입장에서 필요한 물건을 구매하려고 할 때 버그가 발생하여 구매페이지가 넘어가지 않거나, 결제 과정에 문제가 생긴다면, 고객은 구매를 포기할 수도 있습니다. 이러한 상황에서 APM은 웹 애플리케이션의 성능을 실시간으로 감시하고 문제를 빠르게 해결해 줍니다. 이를 통해 사용자 만족도를 높이고 기업의 잠재적인 매출을 방지할 수 있습니다. 이번엔 개발자/운영자의 관점으로 보는 APM의 필요성을 살펴보겠습니다. 개발자: 개발자는 APM을 통해 애플리케이션의 성능 저하를 유발하는 코드 문제점을 상세히 파악합니다. 예를 들어 느린 데이터베이스 쿼리라던지, 비효율적인 로직, 예기치 않은 오류나 버그 등을 실시간으로 개선합니다. 운영자: 웹/모바일 서비스에 성능 저하나 장애가 발생할 경우 운영자는 APM을 사용하면 어떤 부분이 원인인지 신속하게 진단하고, 필요한 조치를 취할 수 있습니다. 예를 들어 시스템의 디스크, 네트워크, 애플리케이션 등 어느 부분이 문제인지 빠르게 파악할 수 있죠. 또한 시스템의 리소스 사용률을 분석하여, 비효율적으로 사용되는 리소스를 조정합니다. 이처럼 APM을 적극적으로 활용하는 기업은, 웹 애플리케이션 성능을 효과적으로 관리할 수 있어 고객 만족을 높일 수 있습니다. 그렇다면 APM을 통해 웹 애플리케이션을 효율적으로 관리하기 위해서는 어떤 지표를 구체적으로 확인하고 관리해야 할까요? │APM에서 꼭 확인해야 할 주요 지표들 APM으로 웹 애플리케이션을 효과적으로 관리하기 위해서는, 먼저 트랜잭션(Transaction) 처리 현황을 확인하는 것이 중요합니다. APM을 통해 사용자가 웹페이지를 조회하거나, API 호출을 통해 특정 작업을 요청할 때, 이 요청이 정상적으로 활성화되고 완료되기까지 전 과정을 살펴볼 수 있어야 하죠. 이밖에도 확인해야 할 주요 지표들이 있는데요. 좀 더 자세히 살펴보겠습니다. 트랜잭션 처리량 [그림] Zenius-APM 서비스 처리 현황 이 차트는 시스템이 일정 시간동안 처리할 수 있는 트랜잭션의 수를 말합니다. 쉽게 말해 웹 애플리케이션이 얼마나 많은 일을 할 수 있는지를 보여주는 지표이죠. 예를 든다면 온라인 쇼핑몰에는 초당 몇 건의 주문을 처리할 수 있는지를 나타냅니다. 여기서 트랜잭션 처리량이 높다는 것은 그만큼 많은 작업을 빠르게 처리할 수 있다는 것을 의미합니다. 정리한다면 시스템 부하가 증가할 경우 처리량이 어떻게 변화하는지 파악하여, 시스템이 사용자 요구와 피크 타임에 충분한 성능을 발휘할 수 있는지 확인하는데 유용합니다. 트랜잭션 상세 성능 : CPU, 힙메모리 등 [그림] Zenius-APM CPU, 힙 메모리 사용률 APM은 트랜잭션의 상세 성능인 CPU 사용률, 힙 메모리 사용률 등 같은 중요한 지표들을 측정합니다. 'CPU 사용률'은 애플리케이션이 얼마나 많은 리소스를 사용하는지를 보여줍니다. '힙 메모리 사용률'은 애플리케이션의 메모리 관리 효율성을 진단하는 지표인데요. 높은 사용률은 메모리 누수를, 낮은 사용률은 리소스 부족과 성능 저하를 나타낼 수 있죠. 이 지표를 모니터링함으로써 개발자는 메모리 관리를 최적화할 수 있습니다. 트랜잭션 응답 분포 : 응답시간 [그림] Zenius-APM 서비스 응답분포 트랜잭션 응답 분포는 사용자의 요청에 대한 시스템의 응답 시간을 말합니다. 사용자가 웹 애플리케이션에 어떤 요청을 했을 때, 시스템이 얼마나 빨리 응답하는지를 나타내주죠. 예를 들어 웹사이트에서 페이지를 클릭했을 때, 그 페이지가 얼마나 빨리 응답하는지에 대한 시간을 말합니다. 응답 시간이 짧으면 사용자는 웹사이트에 더 오래 머무르고, 더 많은 페이지를 탐색하게 해, 사용자의 이탈률을 줄일 수 있겠죠. 사용자 수 모니터링 지표 제공 : 동시 접속 사용자 수, 시간당 방문자 수, 액티브 사용자 수 [그림] Zenius-APM 동시 사용자수, 시간대별 방문자 수 등 이 지표는 웹 애플리케이션을 이용하는 사용자 활동을 측정합니다. 여기서 꼭 확인해야 하는 세 가지 지표가 있는데요. '동시 접속 사용자 수'는 특정 시점에 애플리케이션을 이용하는 사용자 수를 나타내며, 시스템의 부하를 파악하는 데 중요한 지표입니다. '시간당 방문자 수'는 한 시간 동안 애플리케이션 트래픽 패턴을 이해하는 데 도움을 주며 '액티브 사용자 수'는 일정 기간 동안 활동적으로 애플리케이션을 이용하는 사용자 수를 의미하죠. 예를 든다면 온라인 게임 서버에 동시 접속 사용자 수가 급격히 증가하는 시간대를 파악하여, 그 시간대에 서버 리소스를 늘리거나 최적화하여 끊김 없는 게임을 경험할 수 있게 하죠. 이처럼 APM은 트랜잭션을 모니터링하여, 애플리케이션의 성능을 측정하고 분석할 수 있어야 합니다. 이를 통해 웹 애플리케이션에 문제가 발생했을 때 어디서부터 해결해야 할지에 대한 방향을 잡을 수 있죠. │APM, 효과적으로 활용하고 있으신가요? 이번 시간에는 APM이 왜 점차 중요해지고, 웹 애플리케이션을 효과적으로 관리하기 위해 어떤 APM 핵심 지표를 살펴봐야 하는지 알아보았습니다. 다양한 분야에서 애플리케이션 활용이 필수가 되고 있고 AI와 클라우드 컴퓨팅 기술 채택으로 인한 복잡성이 증가하고 있습니다. 이에 따라서 Mordor Intelligence는 APM 시장의 가치가 2024년에 약 94억 달러에 이른 후 2029년까지 연평균 성장률(CAGR) 31%로 급성장할 것으로 예측했습니다. 이처럼 급격하게 중요성과 활용도가 커지는 APM. 혹시 아직 도입하지 않으셨다면 Zenius-APM과 같은 효율적인 솔루션을 통해 애플리케이션 성능을 최적화 하시기 바랍니다.
2024.07.12
1
2
3
4