미리보기
기본 정보
비지니스 성장을 위해 스스로 발전하며 성장하는 이민호 입니다.
기술 스택
Java, Spring Boot, JavaScript, React, Linux, Docker, gitlab, nginx, jQuery, Node.js, rabbitmq, MariaDB, PostgreSQL, Redis, Figma
자기소개
"시스템의 효율성과 가치를 끌어올리고 싶은 개발자, 이민호 입니다."
저는 CGV에서 데이터 분석을 기반으로 업무 최적화와 프로세스 개선을 통해 매출 증대 성과를 이루었습니다. 이러한 경험을 통해 문제의 본질을 파악하고 실행 가능한 해결책을 제시하는 역량을 키웠습니다. 이후 최적화의 가치를 기술적으로 구현하며 직접 문제를 해결하고 변화의 결과물을 만들어내고자 개발자의 길을 선택했습니다.
현재는 자사 연구소에서 콜봇 관련 애플리케이션을 담당하고 있습니다. 관리자 시스템, 빌더 시스템, 그리고 실시간 통신 기반의 비주얼 콜봇 개발 및 운영을 진행하고 있습니다. 시스템을 통합적으로 관리하며 프로젝트의 과정을 주도한 경험은 시스템 설계의 중요성과 기술적 해결 능력을 크게 향상할 수 있었습니다.
특히, 프로젝트 리더로서 팀원들과 협업하며, 요구 사항 분석 / 일정 관리 / 문제 해결을 주도한 경험은 저의 리더십과 커뮤니케이션 능력을 한 단계 성장하는 계기가 되었습니다. 단순한 코드 작성에 머무르지 않고, 기술을 기반으로 팀과 조직이 목표를 달성할 수 있도록 기여하는 방법을 배워 나가고 있습니다.
저는 단순한 과제 해결을 넘어 근본적인 문제를 정의하고 해결 방안을 제시하는 데 집중합니다. 이를 통해 제품의 품질과 사용자 경험을 개선하며, 팀과 조직에 긍정적인 영향을 미치는 것을 목표로 하고 있습니다.
경력
브로드씨엔에스
선임연구원 | 기술연구소 | 재직 중
2022.01. ~ 재직 중 (3년 1개월)
‘상급 종합병원 국내 최다 IPCC 레퍼런스 보유’
기술연구소 | 선임연구원 (2023.05 ~ 현재)
콜봇 빌더
사용자 중심의 워크플로 작성 도구 및 시뮬레이터 개발
NLU(자연어) 서버와 상호 작용을 하기 위한 인터페이스 개발
콜봇 웹 푸시 서비스
실시간 통화 정보를 위한 사용자 인터페이스 설계 및 개발
서버와의 실시간 동기화를 위한 이벤트 기반 설계
콜봇 관리자 시스템
운영에 필요한 대시보드, 통계, 이력 관리, 실시간 모니터링 등 웹 기반 환경 구현
서비스 구축에 필요한 작업 관리를 웹으로 대체하여 사용성 향상
통합 로그 시스템
기술연구소 Spring 통합 로그 패키지 개발 및 배포
솔루션개발본부 | 연구원 (2022.01 ~ 2023.05)
옴니채널 AI-CRM 프로젝트 (1~2차)
병원 EMR API 연동 및 진료 예약 시스템 개발
사용자 정의가 가능한 동적 대시보드 개발
프론트엔드 MDI Frame 화면 및 공통 모듈 개발
CJCGV
매니저 | 국내사업본부
2018.07. ~ 2022.01. (3년 7개월)
국내사업본부 | 매니저 (2018.07 ~ 2022.01)
유인보안 해지 후 무인보안 설치를 통한 고정비 절감
운영 종료 이후 '유인보안'에서 '무인보안' 변경으로 매년 약 29백만원 절감
매점 재고 관리 및 운영 효율화를 통한 절감
판매 데이터를 분석하여 적정 발주 수량을 산출하고, 재고 관리를 최적화
발주량 및 폐기량을 관리하여 비용 효율성 개선을 통한 원가율 10% 절감
매점 프로모션 활성화를 통한 매출 증대 기여
과재고 품목 대상 프로모션 진행을 통한 3개월 간 매출 17% 상승
코로나 19 확산에 따른 입점 건물 대상 커피 사이즈업을 통한 매출 26% 상승
씨네샵 리뉴얼 오픈 기념 프로모션을 통한 매출비중 14% 상승
유휴 공간을 활용한 매출 증대 기여
매장 내 부대사업 (즉석사진) 설치 진행으로 연간 약 7백만원 매출 기여
프로젝트
콜봇 빌더
브로드씨엔에스/기술연구소
2024.06. ~ 진행 중
콜봇의 시나리오를 구성하고 관리하는 빌더 플랫폼 개발 및 고도화
역할: 프로젝트 리더 (기여도 50%)
참여 인원: 기술연구소 AI 서비스개발팀 3명, NLP연구개발팀 2명, 퍼블리셔 1명
스킬 및 사용 툴:
프론트엔드: React, Vite, Zustand, React Flow, React Query, Styled-Components
백엔드: Spring Boot, Spring Security, OAuth 2.0, JPA, MyBatis, Rest Client
데이터베이스: MariaDB, Redis
운영 환경: Linux(Ubuntu), Docker
디자인 시스템: Ant Design, Figma
주요 성과
프로젝트의 전반적인 기획부터 설계, 개발, 테스트, 배포까지 주도
다이어그램을 통한 시나리오 작성 및 시뮬레이터를 통한 테스트를 진행할 수 있도록 생산성 향상
NLU(자연어) 서버 연동을 통해 CRUD 방식으로 직접 관리할 수 있도록 구현
GitLab CI/CD를 활용한 자동화된 배포 프로세스 구축으로 안정성 개선
코드 가이드 수립 및 리뷰 프로세스 도입을 통한 코드 품질 강화
코드 일관성과 유지보수성을 고려한 가이드라인을 적용하여 기술연구소 내 웹 코드 전반에 적용 중
문제 해결 과정
코드 가이드라인 부재
각자의 스타일에 따라 개발이 진행되면서 코드의 일관성이 부족해지고, 리팩토링에 많은 시간을 소모하는 문제가 발생했습니다. 이에 따라 추후 개발 속도가 저하되고, 유지보수 또한 어려워질 것이라고 판단이 되었습니다. 단순 이번 프로젝트의 문제가 아닌 팀이 가진 웹 프로젝트의 공통된 점이라고 생각이 되었습니다. 이를 위해 2주마다 진행하는 정기 회의 및 코드 리뷰를 도입하여 프로젝트 전반의 코드 품질을 높이고, 팀원들과 의견 공유를 하면서 프로세스 구축을 위한 노력을 기울이고 있습니다.
콜봇 웹 푸시 서비스
브로드씨엔에스/기술연구소
2023.11. ~ 진행 중
화면을 보면서 통화하는 비쥬얼 콜봇 서비스
역할: 풀스택 개발자
참여 인원: 기술연구소 | AI 서비스개발팀 5명 (기여도 30%)
스킬 및 사용 툴:
프론트엔드: React, Vite, TypeScript, Zustand
백엔드: Spring Boot, Rest Client
통신: RabbitMQ, WebSocket(Stomp)
데이터베이스: Redis
운영 환경: Linux(Ubuntu), Docker, Nginx
주요 성과
현재 통화 상태를 화면으로 제공하여 콜봇 서비스 접근성 향상
실시간 통신 시스템 구축으로 사용자와 콜봇 서버 간 양방향 데이터 처리 지원
메시지 인터페이스 구조 관리를 위한 TypeScript 도입으로 런타임 오류 감소 및 유지보수 개선
송신자 역할에 따라 컨텍스트 기반 메시지 인터페이스 설계로 메시지 흐름 처리 단순화 및 확장성 개선
문제 해결 과정
양방향 통신 동기화 문제
기존에는 프론트엔드에서 낙관적 업데이트를 수행한 후 백엔드로 메시지를 전송하고 처리 결과를 기다리는 방식이었습니다. 그러나 백엔드 또는 콜봇 서버의 처리가 지연될 경우 동기화 불일치 문제가 발생했습니다.
이를 해결하기 위해 메시지 처리 방식을 아래와 같이 변경하게 되었습니다.
프론트엔드 역할을 수신 전용으로 단순화: 메시지를 전송 후 즉시 대기 상태로 전환
백엔드에서 후 처리 완료 후 그대로 프론트엔드 전송:
프론트엔드로부터 전송받은 메시지를 RabbitMQ를 통해 보장된 순서와 상태로 처리
위 사항을 통해서 및 서버 간 상태 문제를 유지하는 중이며, 아래 기술적 접근을 통해 보다 효율적인 개선을 하기 위해 현재 기획 중입니다.
RabbitMQ ACK(확인 응답) 전송 도입
Redis를 활용한 백엔드 및 서버 간 공통 상태 관리
React Query와 같은 라이브러리를 활용한 대기 상태 관리로 UI 비동기 렌더링 최적화
프론트엔드의 메시지 구조 관리 개선
초기 구조는 단순한 형태였지만, 메시지의 구조와 필드가 점차 다양해지면서 데이터 타입의 부재로 인한 관리의 어려움이 발생했습니다. 특히, 메시지가 같은
KEY
라도, 송수신 자에 따라 인터페이스가 달라지는 경우가 생기면서 메시지 필드의 불일치나 누락으로 인한 런타임 오류가 발생하기 시작했습니다.
이를 위해 TypeScript를 도입하여 메시지 구조를 엄격히 관리하고, 코드의 안정성을 강화하고자 했습니다.모든 메시지 인터페이스를 정의하여 명확한 데이터 구조 정의
타입 검증을 통한 컴파일 단계에서 데이터 불일치 문제를 최소화
특히 처음 코드를 보는 분들도 메시지 타입에 따른 흐름을 파악할 수 있게 되어서 유지보수성이 크게 향상 되었습니다. 추후 메시지 스키마 불일치 가능성을 조금 더 줄이기 위해 GraphQL 도입을 고려 중입니다.
콜봇 관리자 시스템
브로드씨엔에스
2023.05. ~ 진행 중
콜봇 서비스 및 모니터링을 위한 시스템
역할: 풀스택 개발자 (기여도 50%)
참여 인원: 기술연구소 AI 서비스개발팀 4명
스킬 및 사용 툴:
언어: Java, JavaScript
프레임워크 및 라이브러리: Spring Boot, MyBatis, Thymeleaf, jQuery
데이터베이스: MariaDB, Redis
통신: WebSocket (Stomp), RabbitMQ
운영 환경: Linux(Ubuntu), Docker
주요성과
서버 자원 및 도커 상태 정보 시각화(차트)로 시스템 관리 효율성 증대
통계 페이지의 불필요한 JOIN 및 INDEX 재정의를 통한 조회 속도 개선 (최대 20~30초 -> 2~3초)
콜봇 서비스 구축에 필요한 작업 관리를 웹으로 대체하여 사용성 향상
Redis Pub/Sub 이벤트 시스템을 통한 실시간 상담 모니터링 기능 개선
통화 내용 청취 기능 추가
(타임라인에 따라 원하는 대화를 선택하여 청취할 수 있도록 개발)
실시간 모니터링 페이지 내 히스토리 내역 제공으로 편의성 향상
서비스 알람 고도화로 문제 발생 서비스 식별 기능 제공
문제 해결 과정
통화 청취 기능 개발 지연 문제
통화 데이터를 저장하는 서버 기능의 개발 지연으로 의존적인 기능 개발도 함께 지연되는 문제가 있었습니다. 이러한 상황에서 테스트 케이스를 대폭 확장하여 개발 지연을 최소화하고 향후 통합을 원활히 진행하고자 했습니다.
다양한 예외 상황을 고려한 테스트 케이스 설계 및 구현
서버 응답에 대한 시나리오별 테스트 환경 구축
향후 실제 데이터 연동을 고려한 인터페이스 설계
이를 통해 여러 케이스를 식별할 수 있었고, 서버 개발이 완료된 후 빠른 통합이 가능했습니다. 예상치 못한 예외 상황에도 효과적으로 대응할 수 있었습니다.
DB 속도 개선
과거순으로 조회하도록 설계된 기존 인덱스는 사용자가 원하는 최신 날짜의 데이터를 빠르게 가져오지 못하는 문제가 있었습니다.
이를 해결하기 위해, 불필요한 JOIN을 개선하고 최신 날짜를 기준으로 인덱스를 변경하여 더 빠르게 조회할 수 있도록 최적화를 진행했습니다. 이 작업으로 인해 조회 성능을 약 90% (최대 20~30초에서 2~3초) 개선하게 되었습니다. 추후 5초 이상 걸리는 슬로우 쿼리를 점검하여, 쿼리 실행 계획을 분석하고 인덱스를 추가하는 방식으로 성능 최적화를 계획 중입니다.
폴링 시스템 개선
실시간 모니터링 페이지에서 발생하는 1초 단위의 폴링(polling)은 서버 부하를 높이는 원인 중 하나였습니다. 이를 해결하기 위해 Redis의 Pub/Sub 기능을 도입하여 폴링을 제거하고 이벤트 기반 실시간 통신으로 전환했습니다. 클라이언트는 콜봇이 업데이트 되는 시점에만 실시간으로 메시지를 받을 수 있었습니다. 서버 부하를 대폭 줄이면서도 실시간 모니터링의 신속성과 정확성을 유지할 수 있었습니다.
통합 로그 개발
브로드씨엔에스/기술연구소
2024.06. ~ 2024.07.
Java 기반 프로젝트에 사용되는 통합 로그 개발
역할: 백엔드 개발자
참여 인원: 기술연구소 AI서비스개발팀 1명
스킬 및 사용 툴: Spring Boot, Maven, GitLab
주요성과
사내 GitLab package registry를 통하여 Maven에 패키지를 추가할 수 있도록 개발
기존 로그 형식을 최대한 유지할 수 있도록 개발하여 변경에 따른 리스크 최소화
AI-CRM 프로그램 개발 (1~2차)
브로드씨엔에스/솔루션개발본부
2022.01. ~ 2023.05.
옴니채널 CRM 신규 개발
역할:
1차: 풀스택 개발 (기여도 10%)
2차: 프로젝트 리더 및 풀스택 개발 (기여도 20%)
참여 인원: CRM파트 9명
스킬 및 사용 툴:
언어: Java, JavaScript
프레임워크 및 라이브러리: 전자정부 Framework(3.10), jQuery
데이터베이스: PostgreSQL, MyBatis
주요성과
병원 EMR API 통신 모듈 및 CRM 진료예약 페이지 연동 개발
프론트엔드 공통 모듈 개발
사용자 정의가 가능한 동적 대시보드 개발
프론트엔드 MDI Frame 화면 구현 (대시보드, 상담관리, 쪽지관리, 단어사전, 테넌트 기준정보 등)
회고 및 문제 해결 과정
프로젝트 리더 역할 및 중점 사항
프로젝트 리더로서 처음 팀을 이끄는 중요한 경험이었습니다. 팀 내 저보다 경력이 많은 팀원들이 있었고, 그분들과 협업하면서 의사결정을 내리는 것이 쉽지 않았습니다. 팀의 방향성을 정하고 기술적인 선택을 할 때, 팀원들 사이에서 다양한 의견이 있었고, 이를 조율하는 것이 리더로서의 큰 도전이었습니다.
다양한 의사결정을 취합하기 위해 매주 월요일 회의를 진행하며 팀의 목표와 프로젝트 일정을 맞추기 위해 명확한 커뮤니케이션을 기반으로 조율했습니다. 연계 작업이 많았던 프로젝트였기에 현재의 우선순위를 어디에 두어야 하고 주요 이슈들을 함께 논의하고, 기술적인 결정에 있어 팀원들과의 협의를 통해 최종 선택을 했습니다.
리더 역할을 수행하며, 팀 간의 조율과 문제 해결 능력을 더욱 강화할 수 있었습니다.
인수 받은 대시보드의 재개발
원래 대시보드는 사용자가 원하는 다양한 화면을 추가하거나 맞춤 설정할 수 있도록 설계된 구조였습니다. 그러나 실제로 확인해 보니, 설계 의도와는 달리 특정 화면에 종속적이고 확장성이 부족한 상태로 개발되어 있었습니다.
이 문제를 해결하기 위해 재개발의 필요성을 제안했으며, 이를 바탕으로 기획자와 협력하여 대시보드를 다시 설계하기로 결정했습니다. 기획자의 설계 의도와 비전을 명확히 이해하기 위해 여러 차례 논의와 미팅을 진행했고, 대시보드가 다양한 사용자 요구를 충족할 수 있도록 동적으로 변하는 구조로 재개발을 진행했습니다.
설계 의도를 충분히 이해하고, 이를 기반으로 현실적인 솔루션을 도출하는 것이 얼마나 중요한지 깨달을 수 있었습니다.
개발의 시작은 문서 작성
처음 프로젝트에 투입되었을 때 당시 PM님께서 개발을 시작하기 전에 철저한 문서화의 중요성을 강조하셨습니다.
빠르게 개발하고 싶은 마음에 당시에는 번거로운 작업이었습니다. 하지만 문서를 작성하며
내가 만드는 프로그램이 어떠한 기능을 가지는지 명확하게 정의하고, 그것이 설계자의 의도에 따라 진행되는지 한 번 더 점검해 볼 수 있었습니다.
데이터 흐름을 작성하면서 프로그램에 대해 이해할 수 있었고, 복잡한 모듈 개발 중에 기능 통합에서 잠재적인 충돌을 확인하는 데 도움이 되었습니다.
특히 단위 & 통합 테스트 진행 시 프로그램 명세서에 맞게 진행하게 되고, 다른 개발자가 문서를 보더라도 프로그램에 대해 이해할 수 있는 점입니다. 이를 통해 문서 작성은 개발자에게 필수적인 역량이라고 생각하고 있습니다.
교육
멀티캠퍼스
사설 교육 | 데이터 사이언스/엔지니어링 전문가 과정
2021.07. ~ 2021.12. | 졸업
신안산대학교
대학교(전문학사) | 실용음악과 / 보컬전공
2009.03. ~ 2013.02. | 졸업