
미리보기
- 직업
- Backend Developer
- 이름
- 장수현
- 이메일
- honan24@naver.com
- 간단소개

경력
- 회사명
- (주)센티널테크놀로지
- 직책 • 부서
- 연구원 • 기술연구소
- 근무 기간 (근무 형태)
- 2019.10. - 2024.11.
- (5년 2개월 | 정규직)
- 담당 업무
검색 기능 쿼리의 다중 테이블 JOIN과 LIKE절 조건으로 인한 2.9sec의 느린 조회 성능
사용자(직원)의 검색 키워드 분포 조사 후, 카테고리별 검색 쿼리 분리를 통한 조회 성능 개선(2.9sec -> 0.5sec, 83% 단축)
직원용 시스템이기 때문에 조사 작업이 수월했으며, 직원들의 업무 효율성 상승에 기여
언어: Java 17, JavaScript
프레임워크: Spring(eGovFrame) 3
데이터베이스: MySQL 8
시스템 메인의 연관 페이지(6개)를 로드할 때 평균 3.3sec의 페이지 로딩 지연 발생
지연의 원인으로 한 페이지에 5~6개의 쿼리를 호출하고 있었으며, INDEX가 제대로 동작하지 않고 있던 것을 파악
각 쿼리의 실행계획(explain)을 분석하고 JOIN절에서 필요한 내용만 호출하도록 수정했으며, INDEX를 수정하여 평균 로드 시간을 1초 단축(3.3sec -> 2.1sec)
2.1sec도 느린 속도이지만, 다른 프로젝트(Ajax 비동기 처리 등)를 통한 추가 개선으로, 사용자 불만 해소 완료
개발 공수를 고려하여 각 페이지별 메인 쿼리 튜닝만 진행했었으나, 여전히 많은 쿼리들의 튜닝이 필요
언어: Java 17, JavaScript
프레임워크: Spring(eGovFrame) 3
데이터베이스: MySQL 8
시스템 운영과 유지보수 담당으로, 버그(49건) 및 개선(72건) 사항을 처리하여 기술 부채를 해소하고 안정적인 운영 환경 구축에 기여
연별 발행/수금 금액 자동분배 기능 사용 후, 수동으로 금액을 변경 시 Type Error 발생 문제 해결
이전 글 불러오기 기능에서 신규 추가된 카테고리 데이터를 누락하여 가져오는 문제 해결
간헐적인 팝업의 오류(HTTP 500)를 분석해서 타입(Int)의 값 범위 초과 현상을 파악하여, 타입을 수정(long)하여 해결
MySQL Cursor를 사용하여 글 목록에서 기관명에 마우스 오버 시, 제품 및 판매개수(완료/진행/보류) 팝업 개발
대시보드의 사이드바 영역 접기 기능과 브라우저 캐시 기능을 통한 사이드바의 상태 저장 기능 개발
언어: Java 17, JavaScript
프레임워크: Spring(eGovFrame) 3
데이터베이스: MySQL 8
복잡한 비즈니스의 요구사항 반영의 한계와 차트 코드 유지보수의 어려움으로 인한 APM 도입 필요성 발생
Prometheus를 활용한 시스템 메트릭 수집과 Grafana를 사용하여 다양한 형태의 데이터 시각화 기능 도입
Grafana에 솔루션 데이터를 연동하기 위해 MySQL 쿼리를 프로시저화하여 데이터를 호출하였고, 차트 플러그인을 사용하여 맞춤형 데이터 차트를 지원
시스템 자원 현황(CPU, RAM, Storage, Network, DB 등)을 실시간 모니터링할 수 있게 되었으며, 솔루션 운영 데이터를 다양한 차트와 표로 시각화하여 효과적인 데이터 분석 환경을 제공
렌더링된 대시보드를 iframe으로 받아와서 대시보드의 로드 시간이 단축되었으며, 쿼리를 프로시저화하여 보안성과 관리성 향상
사용자는 맞춤형 대시보드를 구성하여 시스템과 솔루션의 현황을 실시간으로 확인 가능
Prometheus를 사용하여 DB 부하분산과 데이터의 신뢰성과 활용도 향상
언어: PHP 7, JavaScript
프레임워크: CodeIgniter 3, 4
데이터베이스: MySQL 8
APM: Grafana & Prometheus
공공기관 대상 솔루션 판매를 위해 취득해야하는 인증으로, 소프트웨어의 취약점, UI/UX, 성능 등 다양한 영역을 심사
출력 데이터 수에 따라, 통계 페이지 출력에 많은 시간이 소모되거나 Session Timeout이 발생
데이터 List와 Count 쿼리를 각각 호출하는데 Count 쿼리가 Index를 타지않고, 테이블을 Full Scan하고 있는 것을 파악하여 MySQL의 ‘SQL_CALC_FOUND_ROWS’ 옵션을 사용
옵션을 통해 Count 쿼리를 삭제하고 List 쿼리에서 ROWS를 추출이 가능해졌으며, 이것으로 Slow Query의 원인을 제거
해당 옵션을 사용하면 쿼리가 Index를 사용하지 않고 테이블을 Full Scan 하지만, 기존 쿼리에서 이미 Full Scan을 했기 때문에 ‘Full Scan + @’ 대신 ‘Full Scan’ 시간만을 사용하도록 변경
이로 인해, 페이지 출력 시간을 단축하여 Session Timeout을 방지하고 인증 심사 과정에서 부하 테스트를 성공적으로 통과
언어: PHP 7, JavaScript
프레임워크: CodeIgniter 3, 4
데이터베이스: MySQL 8
기존에 JavaScript의 정규식(Regex)을 통해 웹 취약점 필터링을 진행했으나, API 또는 파라미터가 추가되거나 비즈니스 로직이 변경되면 필터링 로직도 변경해줘야 하는 의존성이 존재
웹 서버에 WAF(modsecurity)를 구축하고, OWASP 재단의 CRS(Core Rule Set)를 적용하여 웹 취약점(XSS, SQL Injection 등) 필터링을 방화벽에서 처리하도록 변경
정상적인 파라미터(RANK, ID)의 값을 공격으로 간주하여 차단되는 사이드 이펙트가 발생하여, Custom Rule을 통한 예외 패턴 등록
웹 취약점 필터링 책임을 서버(방화벽)로 이관하여 개발 부담 하락
CRS 관리를 통한 새로운 웹 취약점에 대한 대비 가능
OS: RockyLinux 8
WEB: Apache
솔루션 서버나 엔진 현황 또는 점검 결과를 확인하기 위해 웹페이지를 계속 모니터링해야 했으며, 주말이나 담당자의 휴가로 인해 이상 현상을 늦게 발견하는 일이 발생
솔루션의 ERROR와 중요 Alert을 관리자에게 전송할 수 있도록 외부 SMS 플랫폼 연동을 진행
솔루션 서버에서 주기적으로 외부 플랫폼 API에 SMS 데이터와 인증키(authKey)를 전송
솔루션 가동/종료 및 결과 데이터와 같이 중요한 알림과 에러를 관리자가 실시간으로 확인할 수 있게되어, 솔루션 안정성을 높이고 장애를 예방
언어: PHP 7, JavaScript
프레임워크: CodeIgniter 3, 4
데이터베이스: MySQL 8
기존 홈페이지가 레거시 코드(JSP)로 개발되어 있었고, 관리자페이지가 존재하지 않았기 때문에 운영(팝업, 베너, 글등록, 문의답변)에 여러 제약사항이 존재
클라우드를 고려했으나, 기존에도 물리서버를 이용했었고 솔루션 개발사인만큼 물리서버의 구축과 운영에 대한 노하우가 충분하여 물리 서버에 서비스를 구축
서비스 환경(WEB, DB, PHP)을 구축하고 WordPress와 플러그인(JavaScript, MySQL 기반)을 사용하여 개발을 진행
기존 코드를 재사용하지 못했지만, 유지보수성을 개선하고 플러그인을 통한 쉬운 관리(SEO 최적화, 반응형 웹 등)가 가능
WordPress의 관리자페이지를 활용하여 팝업, 베너, 문의답변 등에 대한 운영이 가능
OS: RockyLinux 8
언어: PHP 7, JavaScript
프레임워크: WordPress
데이터베이스: MySQL 8
SVN 환경에서 Convention 통합과 로그 추적의 어려움과 Review가 누락되는 일이 발생
가장 널리 사용되고 부족한 기능을 보완할 수 있는 Git을 도입했고, 테스트 기간을 거치면서 Convention과 Review 프로세스를 정리하여 신규 개발에 Git을 사용하면서 기존 SVN의 데이터 보존
로컬 코드 관리와 코드 통합이 수월해졌으며, 코드 리뷰와 테스트 코드 문화가 정착할 수 있는 환경을 구축
반복적인 업무를 줄여서 업무 효율성을 높이기 위해 Python Selenium을 사용
1일 1회 홈페이지의 서비스를 테스트하고 자동 스크린샷을 통해 증적 자료를 남기고 검증
월 1회 진행하는 솔루션 정기 보고서 생성 업무를 자동화하고, 메일 발송 전 검증
업무 경험
민간 및 공공기관 대상 개인정보 관련 솔루션 개발사로, 홈페이지 내 개인정보 솔루션(CPMS)과 서버 내 개인정보 점검 솔루션(Coolcheck for Server)을 개발했습니다.
두 솔루션의 메인 개발자로서, 프로젝트 수립부터 개발 QA까지 관리하여 솔루션 완성도를 높이는 데에 기여하였습니다.
또한, 업무관리시스템 운영과 유지보수, Git 도입, 업무 자동화, 인트라넷 관리 등 다양한 업무를 수행하여 동료들의 업무 효율을 높이고 협업할 수 있는 환경을 조성하기 위해 노력했습니다.
업무 프로젝트
업무관리시스템 / 검색 기능 Slow Query 개선(조회 시간 83% 단축)
2022.05 ~ 2022.05
문제
해결
결과 및 회고
개발 환경
업무관리시스템 / 페이지 출력 Slow Query 개선(출력 시간 36% 단축)
2022.03 ~ 2022.03
문제
해결
결과 및 회고
개발 환경
업무관리시스템 / 운영 및 유지보수
2021.07 ~ 2023.12
버그(트러블슈팅)
개선
개발 환경
개인정보 점검 솔루션 / Grafana 모니터링 대시보드 구축
2024.07 ~ 2024.09
문제
해결
결과 및 회고
개발 환경
개인정보 점검 솔루션 / 소프트웨어 품질인증(GS 인증) 취득
2024.06 ~ 2024.08
문제
해결
결과 및 회고
개발 환경
개인정보 점검 솔루션 / 웹 취약점 필터링 자동화를 위한 애플리케이션 방화벽(WAF) 도입
2024.06 ~ 2024.08
문제
해결
결과 및 회고
개발 환경
개인정보 점검 솔루션 / ERROR 및 Alert 전파를 위한 SMS 외부 플랫폼 연동
2023.02 ~ 2023.02
문제
해결
결과 및 회고
개발 환경
기업 홈페이지 / 홈페이지 (물리)서버 구축 및 개발
2022.01 ~ 2022.06
기업 홈페이지 리뉴얼과 서버 구축을 수행
문제
해결
결과 및 회고
개발 환경
비 개발 프로젝트 / SVN의 Log와 Review 기능의 한계로 인한 Git 도입
2024.10 ~ 2024.10
문제
해결
결과 및 회고
업무 자동화 / Selenium을 통한 반복적인 웹 기반 업무 자동화
2023.12 ~ 2023.12
문제 및 해결
결과 및 회고
프로젝트
- 프로젝트명
- 이커머스 서비스 BE 개발
- 소속/기관명
- 개인 프로젝트
- 프로젝트 기간
- 2024.12. - 진행 중
- (6개월)
- 프로젝트 설명
클린 아키텍처를 구현하기 위한 계층 분리와 의존성 역전 적용
Docker로 Redis, MySQL, Kafka 서비스 컨테이너 생성 및 테스트 컨테이너를 통한 테스트 환경 구축
Postman API 명세 작성 및 Swagger UI 연동을 통한 API 명세 작성 자동화
JPA로 CRUD 작업을 SQL 언어에 의존하지 않고 데이터베이스 작업을 추상화
동시성 제어(선착순 쿠폰 발급)를 위한 DB 락(낙관적/비관적 락) 적용과 Redis의 분산 락을 통한 데드락 방지와 처리속도 개선
Redis 기반 글로벌 캐시를 적용하여 빠른 데이터 접근과 DB 부하 분산(캐시 스토리지)을 유도하는 Redis 활용에 대해 학습하고, 이를 상위 판매 제품 기능에 적용
Kafka로 EDA(이벤트 기반 아키텍처)를 적용하여 애플리케이션 이벤트 발행 및 Pub-Sub 방식의 비동기 메세지 아키텍처 학습
부하테스트 시나리오 작성과 해당 시나리오에 기반한 k6 스크립트를 통한 부하테스트 수행
APM(Grafana&Prometheus) 시스템을 구축하여 테스트 결과를 분석하고, 가상 시스템 장애 예방 및 대응 보고서 작성
백엔드: SpringBoot 3.2, JPA
인프라: Redis, Kafka, Grafana
데이터베이스: MySQL 8, H2
테스트: JUnit, AssertJ
개요
동시성 제어(선착순 쿠폰 발급)가 적용된 이커머스 서비스 개발
학습 내용
학습 환경
자기소개
- 자기소개
Spring Framework 기반 업무관리시스템 개발
PHP 기반 솔루션 시스템 개발
MySQL 테이블 구조와 Index 설계 및 수정 경험과 실행계획(explain) 분석을 통한 Slow Query 개선
Slack과 Notion, Figma 등을 통한 협업과 클라이언트와의 적극적인 커뮤니케이션
물리서버(CentOS, RockyLinux) 서비스(Tomcat, MySQL 등) 구축 및 운영
Introduce
공공기관 대상 B2B 솔루션의 메인 개발자로서, 데이터 가공과 시각화 시스템 구축 경험을 쌓으며 10만건 이상의 개인정보 유·노출을 방지했습니다.
담당자들과의 유기적인 커뮤니케이션을 위해 노력합니다.
업무 중 가장 중요하게 여긴 가치는 유기적인 커뮤니케이션이었습니다.
5년간 50여 개 이상의 클라이언트들과 협업하며, 원활한 소통을 통해 신뢰 기반의 협업 환경을 구축했습니다.
이로 인해 업무 누락을 줄이고 불필요한 비용을 절감하는 성과를 얻을 수 있었습니다.
문제를 해결하고, 개선해 나가는 것을 좋아합니다.
시스템 운영 과정에서 약 120건의 기술 부채(bug, feat)를 해소하며, 안정성과 효율성 향상에 기여했습니다.
단순한 버그 수정뿐 아니라, 네트워크, DB 등 다양한 영역의 문제를 분석하고 해결하는 것에 적극적으로 참여했습니다.
또한, 반복 작업을 자동화하는 등 작은 불편을 개선하며 워크플로우를 최적화하는 데 흥미를 갖고 일해왔습니다.
Skills
자격증
- 자격증명
- 정보처리기능사
- 점수/급 | 발급 기관
- 기능사 | 한국산업인력공단
- 취득월
- 2019.03
교육
- 소속/기관
- 서울과학기술대학교
- 종류 | 전공명/전공계열
- 대학교(학사) | 정보통신융합공학과
- 재학 기간 (재학 상태)
- 2024.03. - 재학 중
- 소속/기관
- 세명컴퓨터고등학교
- 종류 | 전공명/전공계열
- 고등학교 | 스마트디바이스
- 재학 기간 (재학 상태)
- 2017.03. - 2020.02. (졸업)
기술 스택
- 기술 스택
- Java
- Spring
- PHP
- JavaScript
- Docker
- Redis
- grafana
- MySQL