경력기술서

전문 분야

구분 내용
주요 포지션 Java/Kotlin Spring 백엔드 개발자
일하는 축 레거시 현대화 → 개발 프로세스 자동화 → AI 활용. 멈춘 시스템을 옮겨 놓는 데서 끝내지 않고, 그 위에서 반복되던 요청·반영 과정을 자동화하며, AI를 제품 기능과 개발 과정 양쪽에 설계해 넣는 것을 하나의 흐름으로 봅니다.
핵심 도메인 레거시 ERP 전환과 사내 운영 자동화, 교육·심리검사 서비스(검사 실시/채점/결과표), AI 기반 서비스 개발
강점 오래 운영돼 문서가 없는 시스템에서 규칙을 읽어내 다시 세우고, 사람이 반복하던 판단 중 자동화할 것과 사람에게 남길 것을 갈라 설계하는 일

Java/Kotlin Spring 기반 백엔드 개발을 중심으로 레거시 시스템 전환, 사내 요구사항 반영 자동화, 검사/채점 API와 결과표 리포트, 플랫폼 운영을 수행했습니다. Guidance에서는 Rails·ASP로 운영되던 ERP를 Spring으로 옮기는 일에서 출발해, 이관한 기반 위에서 요청이 코드에 반영되기까지의 과정 자체를 자동화하는 쪽으로 작업 범위를 넓혀 왔습니다.

핵심 요약

영역 대표 성과
레거시 전환 Rails 기반 ERP를 Spring Boot + Thymeleaf로 전환 완료하고 Rails 원본을 제거. ASP로만 남아 있던 주문·정산 흐름은 원본에서 직접 이관했고, 인증/인가, 접근제어, ID 생성 전략, OMR 매퍼 관리, 검사 주문 파이프라인, 출퇴근 운영까지 도메인 단위로 이식
개발 프로세스 자동화 사내 요구사항 접수 → 구현 → 검증 → PR → 머지 후 반영 대조까지의 루프를 에이전트 스킬로 정의. 설계 판단이나 위험이 개입되는 요구사항만 사람에게 넘기고, 나머지는 담당 개발자가 붙어 있지 않아도 진행되도록 구성. 기능 변경 시 비개발자용 매뉴얼 자동 갱신까지 연결
AI 활용 설계 만성질환 식이관리 서비스 케어테이블을 1인 개발해 api.kcalai.link로 실배포·운영 — AI를 쓸 경로와 배제할 경로를 갈라 설계. 매매 터미널에서는 역할이 다른 에이전트 다섯을 나누고 실주문 권한을 하나에만 부여
플랫폼 운영 신규 ERP/홈페이지에서 검사 주문, 인증코드, OMR, 결과 조회, 통계/보고서 흐름 개발·운영, 조회 성능과 이상 트래픽 대응
레거시 연동 Ruby + ASP 기반 기존 플랫폼 흐름을 이해하고 신규 Java/Kotlin Spring API와 호환되도록 경로와 데이터 흐름 정리
검사 개발 SPS/LDAT 신규 검사 설계도 기반 채점, 규준, 소견, 결과 속성, 결과표 API 구현. OMR 동적 필드 처리와 데이터 보정 로직 개선. 서로 다른 스택에 흩어져 있던 레거시 검사들을 공통 검사 스택으로 통합하고, 연구소 정본과 대조해 판정이 죽어 있던 지점을 복원
인프라/문서화 AWS 실제 상태와 Terraform 설정 동기화, 배포 교착 해소, 자원 산정 근거 확보, 프로젝트 컨벤션 문서 정리
실시간 서비스 Kafka, Socket IO 기반 실시간 퀴즈/판서 서비스 구축. 최대 동시 접속자 600명 규모 실시간 통신 안정화

Guidance - 심리검사/교육검사 플랫폼

항목 내용
기간 2025.11 ~ 현재
역할 레거시 ERP 전환, 사내 요구사항 반영 자동화, 신규 ERP/홈페이지 개발·운영, 신규 검사 개발과 결과표/통계, 레거시 시스템 연동. 개발에서 멈추지 않고 배포·인프라와 DB 운영, 제휴 기관·외부 연동처의 요구사항 수집과 규격 협의, 장애·문의의 1차 대응 창구까지 맡고 있습니다
전환 스택 Java, Kotlin, Spring Boot, Thymeleaf, MyBatis, Spring JDBC, MS-SQL
자동화 구성 에이전트 스킬 정의, 사내 요구사항 관리 도구 연동, GitHub PR 워크플로우, 빌드·스타일 검증 관문
검사 개발 스택 Java, Kotlin, Spring Boot, JPA, QueryDSL, JDBC, MS-SQL
플랫폼/레거시 스택 Ruby, ASP, Rails, 기존 ERP/홈페이지, 레거시 검사 운영 흐름
프론트/운영 스택 React, TypeScript, Docker, AWS ECS/EC2/ECR/CodeBuild/CodeDeploy, Terraform

1. 레거시 ERP 전환 - Rails·ASP → Spring Boot

Ruby on Rails로 운영되던 사내 ERP를 Java/Kotlin Spring Boot + Thymeleaf 구조로 전환했습니다. 기존 운영을 멈추지 않은 채 도메인 단위로 순차 이식하는 것이 원칙이었고, 이식 경로는 두 가지였습니다. Rails 도메인을 옮기는 경로와, Rails를 거치지 않고 ASP 원본에만 남아 있는 주문·정산 흐름을 원본 로직을 기준으로 직접 재구현하는 경로입니다. 현재는 이관이 끝나 Rails 원본 앱을 제거했고, 코드와 문서에 남아 있던 이전 스택의 흔적과 더 이상 호출되지 않는 엔드포인트를 정리했습니다.

전환 축 설명
전환 골격 Spring Boot 전환 골격과 아키텍처 기준을 수립하고, 화면·도메인 식별자 체계와 작업 현황판을 정의
영속성 전략 연도별로 분리된 레거시 DB를 동적으로 선택하고 교차 DB 질의와 기존 SQL 이식을 명시적으로 다뤄야 하므로, JPA 대신 MyBatis와 Spring JDBC를 주 축으로 선택. JPA는 신규 단순 테이블에만 제한 적용
인증/인가 이식 JWT 쿠키 인증과 RBAC 인가 컴포넌트 구성, 로그인/가입 API와 직원 인증 도메인 이식, Rails의 36진수 타임스탬프 ID 생성기 이식으로 기존 식별자 호환성 유지. 접근 거부 사유 로깅과 오류 페이지 정비
검사 주문 이관 (ASP 직접) 학교 주문 접수부터 조회·수정·삭제, 상태 전이와 취소, 결제완료 후처리까지 주문 파이프라인 전구간을 ASP 원본 기준으로 이식. 접수 단가를 클라이언트 값이 아니라 서버에서 확정하도록 바꾸고 필수값 검증을 추가
주문 부속 문서 이관 주문에 딸린 실시내역표(작업지시서)와 취소·반품 내역을 구 ERP 원본 기준으로 이식해, 접수 이후의 처리 문서까지 신규 스택에서 끊기지 않게 함
정가 규칙 단일화 여러 페이지에 흩어져 있던 정가·할인 산정을 단일 규칙 컴포넌트로 추출해 원본 단가 기준과 일치시킴. 단가가 저장돼 있지 않은 과거 주문도 단가표 기준으로 채워 보이게 하고, 총액을 항목 합계 하나로 통일해 접힘·펼침과 화면·엑셀이 서로 어긋나지 않도록 정리
인증코드 수동 발급 이관 검사 인증코드를 수작업으로 발급하는 화면을 이식하고, 코드 채번 로직을 공통 모듈로 추출해 외부 쇼핑몰 연동 발급과 기준을 공유
검사 카운트 원장화 검사 카운트를 레거시 집계 컬럼 하나로 관리하던 것을 증감 원장 구조로 바꿈. 부여·차감 경로를 회원별 카운트 관리 화면 하나로 모으고, 인증코드 발급 차감과 전환 복구를 이력으로 남겨 잔여 수량이 왜 그 값인지 되짚을 수 있게 함. 기관×검사 상세를 허브로 삼아 발급·발급내역·증감 이력을 한 화면에서 보도록 정리. 애플리케이션을 거치지 않은 잔량 변경까지 남기기 위해 DB 트리거로 원장을 기록하고, 원장을 잔량과 같은 DB로 옮겨 한 트랜잭션 안에서 끝나게 함. 원장 기록 실패는 조용히 넘기지 않고 남기며, 카운트를 쓰는 쪽이 읽는 판별 값을 모든 생성 경로에서 채우도록 정리. 인증코드 발급은 ERP에서 걷어내 발급의 주인을 한쪽으로 모으고, 무료 지급도 구매 이력으로 세도록 기준을 통일
OMR 매퍼·업로드 이식 매퍼 목록·상세·휴지통 조회와 등록·인라인 편집·복제·삭제·복원 CRUD, 업로드 이력 화면 이식. 대용량 업로드를 chunk 단위 요청으로 분리해 60초 타임아웃 해소
오프라인 OMR 업로드 이관 학교 표준화 OMR 업로드를 이식하면서 미리보기와 저장이 같은 채점 경로를 타도록 구성해, 확인한 값과 저장되는 값이 갈라질 여지를 없앰. 검사 계열마다 다른 채점기는 공통 골격 위에 붙여 계열이 늘어도 같은 자리에서 확장되게 함
계정 관리 재정비 문자열로 입력되던 소속을 부서 마스터 테이블로 옮기고, 셀프 회원가입을 폐지해 계정 생성 경로를 관리자 하나로 일원화. 엑셀 일괄등록과 임시비밀번호 발급·최초 로그인 강제 변경을 도입하고, 삭제된 계정의 복구와 삭제 이메일 재등록 차단을 구분
권한 반영의 즉시성 권한·역할을 바꿔도 이미 발급된 토큰이 살아 있으면 반영이 미뤄지므로, 토큰 버전을 두어 해당 직원만 강제 로그아웃되게 함. 저장 권한이 없으면 진입 버튼 자체를 감추는 화면 게이팅을 전 화면에 전수 적용하고, 권한 항목을 기능 단위로 묶어 보여 운영자가 엔드포인트를 몰라도 부여할 수 있게 정리
권한 목록의 코드 동기화 권한 부여 대상이 되는 엔드포인트를 코드에서 읽어 기동 시점에 자동으로 맞추고, 이전 스택에만 존재하던 항목을 일괄 정리해 권한 목록이 실제 기능과 어긋나지 않게 함. 권한 항목을 기능 이름과 REST 순서로 보이게 하고, 차단 화면에 막힌 기능명을 드러내 운영자가 무엇을 요청해야 하는지 알 수 있게 함
출퇴근 관리 이관 별도 운영되던 출퇴근 시스템을 ERP로 통합 이식 — 인증 통합, 출퇴근 대시보드, 관리자 현황(CSV)·기록 보정·변경 이력·근무계획·공휴일·공지(슬랙 알림)·패턴 분석, 반차/반반차 실근무 변환 로직
근태 운영 워크플로우 근무계획을 월 단위로 확정·잠금하고, 확정된 달의 변경은 예외 없이 요청·승인을 거치도록 경로를 단일화. 수정 여부와 변경 전·후를 화면에 드러내고, 마감일 이후 변경은 알림으로 남김. 외근은 시간대로 기록해 그만큼을 근무로 산입하고, 확정된 달에서도 휴가·외근처럼 승인이 필요 없는 항목은 직접 저장되도록 예외를 명시. 전 직원 근무표를 한 화면에 모으고, 근태 상태를 색으로 가르며 목록의 열 제목과 식별 열을 함께 고정해 긴 표에서 기준을 잃지 않게 함. 근무 시각을 직접 넣으면 그 날짜부터 남은 평일에 퍼뜨리고, 마감된 자기 근태는 본인이 직접 확인하도록 경로를 열어 둠. 이후 메뉴를 근태 현황·근무계획 관리·지문 대조·운영 설정 네 묶음으로 다시 나누고 탭 단위 권한 규칙을 화면 정책에 명시했으며, 코드에서 사라진 경로는 권한 목록에서도 걷어냄. 직원이 보던 출퇴근·근무계획·근태 기록 세 화면을 한 표로 합쳐 같은 것을 두 번 묻지 않게 하고, 휴가처럼 승인이 필요 없는 항목과 근무시간대처럼 승인이 필요한 항목을 같은 버튼에서 갈라 보냄. 확정된 달은 저장 경로를 닫고 일괄 변경 요청만 남겼고, 외근은 사후에도 직원 요청·승인과 관리자 직접 수정으로 시간대와 근무시간을 함께 고칠 수 있게 함. 변경 요청은 상태 필터와 대기 건수를 한 묶음으로 보이고 여러 건을 한 번에 승인하며, 승인·반려 결과를 그 요청이 처음 올라온 알림 스레드에 처리자와 함께 댓글로 되돌림. 변경 이력의 '변경 전'은 승인 순간의 계획을 그대로 남겨 이후 계획이 바뀌어도 이력이 흔들리지 않게 함. 근태가 마감되는 날에는 지난 달 근무계획 수정이 관리자에게 몰리는데 날짜마다 편집창을 열어 한 건씩 저장해야 했던 것을, 직원 화면의 한 달 표를 공용 조각으로 떼어 관리자도 같은 표에서 바뀐 날짜만 한 트랜잭션으로 저장하게 함. 선택지에 없는 옛 값은 그대로 보여 주고 손대지 않아, 한 달을 저장하는 일이 과거 기록을 지우지 않게 함. 변경 이력은 '언제 고쳤나'보다 '어느 날의 무엇이 바뀌었나'를 찾는 화면이라 근무일 기준으로 다시 정렬
근태 판정 기준 정리 지각 판정을 하나의 기준으로 통합하고 출근 유예를 초 단위로 명시, 반차의 기준을 일률값이 아닌 개인 근무시간대로 바꿈. 근무시각이 없는 종일부재는 대조 판정에서 제외하고, 경계 시나리오를 회귀 테스트로 고정. 기기 시계 오차는 허용 범위로 흡수하고 그 밖의 예외는 사유와 함께 정상 처리하도록 갈라, 기계적 불일치와 실제 근태 문제를 구분. 기준 근무시간이 없으면 반차를 추측하지 않고 먼저 채우게 하고, 반차 판정 시간대를 화면과 서버가 한 벌로 쓰도록 통일. 연차처럼 기록이 없는 것이 정상인 날은 누락으로 세지 않음. 반차인 날은 시간대가 이미 좁혀져 있어 기준이 그 달 대표 시간대로 떨어졌고, 그 탓에 다른 날을 고치려고 저장할 때마다 손대지 않은 반차 시각이 알림·승인 없이 바뀌고 반차끼리 바꾸면 엉뚱한 시간대가 나왔음. 좁혀진 시간대에서 원래 근무시간대를 거슬러 찾고 기준을 고르는 곳을 한 벌로 모아, 사람이 고친 단축근무처럼 거슬러 찾을 수 없는 경우만 대표 시간대로 떨어지게 함. 외근·연차를 넣었다 빼면 그날 근무계획이 통째로 사라지던 것, 삭제한 직원이 계획만 남아 매일 누락으로 뜨던 것도 함께 정정
근태 대조 보관 지문 인식기 기록과 근무계획의 월별 대조를 차이만이 아니라 그 달 출퇴근 전부로 보관하고, 보관본을 열 때마다 현재 근무계획으로 다시 재도록 해 계획이 바뀐 뒤에도 과거 판정이 굳어 남지 않게 함. 대량 적재가 매개변수 한계에 걸려 통째로 실패하던 것을 배치 전송으로 바꾸고, 오래 걸리는 대조의 진행 상황을 서버 전송 이벤트로 화면에 내보냄
데이터 모델 정리 열두 개가 넘는 DB에 같은 성격의 데이터가 흩어져 있어, 이관하기 전에 도메인별로 원천을 가려내는 작업을 먼저 함. 회원·계정, 인증코드·검사 카운트, 주문, 검사 상품 네 도메인으로 나눠 어느 테이블이 정본인지 식별하고 ERD로 정리했습니다. 특히 주문은 프로 채널과 교육 채널이 서로 다른 로직을 써 왔기 때문에 둘을 나란히 놓고 비교해, 통합할 때 누락되면 안 되는 컬럼과 개선이 필요한 지점을 먼저 밝혀 두었습니다. 이 정리가 이후 카운트 원장화와 배분 구조 설계의 근거가 됐습니다
학교 기준정보·NEIS 이관 학교 도메인(목록·상세·CRUD)과 NEIS 대량 동기화를 seed→scan→apply 3단계 파이프라인으로 이식
검사 상품 마스터 이관 검사·상품·OMR 시트·검사코드가 서로 다른 마스터 테이블에 흩어져 등록되던 것을 한 화면에서 등록·수정하도록 이식하고, 코드 중복 확인을 관련 테이블 전체로 확장해 어느 한 곳에만 값이 들어가는 상태를 막음. 목록 조회에서 건별로 반복되던 질의를 조인 하나로 정리
제휴사 요구사항 수집과 협의 제휴 기관과 외부 연동처의 요구사항을 직접 수집해 개발 범위로 정리하고 일정을 조율함. 연동 규격과 결과 전송 경로·인증 방식을 협의해 확정하고, 연동처마다 다른 식별자 규칙과 응답 형식을 표준 경로가 흡수하도록 정리
제휴사 주문·배분 관리 제휴사 등록과 주문, 기관 단위 배분(순차·그룹·무제한)을 ERP에서 관리하되 실제 차감은 검사 API가 맡도록 주인을 나눠, 주문 원장과 소모 기록이 한쪽에만 남는 상태를 방지. 기관에 나눠 준 몫의 합계와 주문 잔여의 관계를 상세 화면에 드러내고, 제휴사 대시보드에서 주문 소진과 검사 진행 현황, 응시자 결과 조회까지 한 흐름으로 연결. 기관 배분은 엑셀 양식으로 다건 등록하되, 업로드된 기관코드가 회원 정본에 있는지 확인해 없는 줄만 반려하도록 함. 제휴 응시자에게 대학 채널 통계를 주려면 응시자 원장의 시행 회차와 그 회차의 학과 목록이 맞아야 했는데 둘 다 DB를 손으로 고쳐 왔음. 배분에 시행 회차를 두고 회차·학과 목록·응시자 학과명을 설정 화면 하나에서 한 트랜잭션으로 맞추며, 검사 API는 진입 시 그 회차를 원장에 그대로 남기게 함. 학과 목록은 회차 단위로 통째로 바뀌므로 이미 다른 경로로 들어온 응시자가 있으면 교체를 거절해 로그인이 막히지 않게 하고, 학과명 길이 상한이 원본과 원장에서 달라 긴 학과명이면 응시자 생성이 실패하던 것을 원장 쪽을 넓혀 맞춤
검사 진행 모니터링 검사 진행 상황을 프로·학교 표준화·검사코드 축으로 모아 보는 화면을 구성하고, 기본 조회 기간을 학년도 시작 기준으로 두어 운영자가 매번 기간을 고쳐 잡지 않게 함. 날짜 조건을 집계 안쪽으로 내리고 목록에 서버 페이징을 넣어 조회 부하를 줄임
개인정보 파기 이관 응시자 개인정보 파기 대상을 신규 검사 테이블까지 넓히고, 실행 전에 무엇이 지워지는지 확인하는 단계를 앞에 둠
커머스·콘텐츠 이관 네이버 스마트스토어(주문 재처리·상품 매핑·인증코드 발급)와 배너·팝업 노출 관리, 회원 통합검색·상세·수정 화면 이식
UI 전면 개편 전 화면을 공통 디자인 시스템으로 통일(웹폰트 번들), 사이드바를 상단 네비로 전환하고 RBAC 기반 메뉴 동적화
목록 화면 공통화 정렬이 있던 화면은 열마다 링크를 손으로 그려, 필터를 하나 더할 때마다 정렬 링크도 고쳐야 했고 빠뜨리면 정렬하는 순간 필터가 풀렸음. 표 머리에 정렬 키만 달면 되는 공통 장치로 바꿔 지금 주소의 조건을 그대로 둔 채 정렬만 바꾸게 하고, 걸려 있는 조회 조건을 표 위에 칩으로 드러내 하나씩 풀 수 있게 함. 목록 영역만 부분 갱신하되 주소를 함께 바꿔 넣어 새로고침·북마크·뒤로가기가 그대로 동작하게 하고, 로그인이 풀렸거나 응답이 이상하면 빈 표 대신 그 주소로 이동. 갈아 끼운 영역 밖의 조회 조건·링크가 옛 상태에 머물거나 버튼이 떨어져 나간 옛 요소를 붙들던 것은 이벤트 위임과 영역 밖 값 동기화로 정리
운영 보안·연결 운영 MSSQL TLS 핸드셰이크 문제 해소, CSRF·쿠키 SameSite 정비로 간헐 403 종결, 환경별 시크릿을 전용 경로로 분리
정리를 결함 탐지 경로로 이관이 끝난 뒤 남은 중복과 죽은 코드를 걷어내는 일을 버그를 찾는 경로로 삼음. 매퍼가 도메인 타입을 바로 반환하게 해 옮겨 담기만 하던 중간 타입과 폼 복사층, 손으로 짠 파서를 제거하고, 호출되지 않는 코드·설정과 발급만 되고 쓰이지 않던 토큰을 걷어냄. 검색어 정리, 목록 정렬, 화면 스크립트 헬퍼, 트랜잭션 경계를 각각 한 벌로 모음. 위치 기반 생성자 매핑은 컬럼 순서가 바뀌면 오류 없이 어긋나므로 순서를 정적으로 대조하는 가드를 두었고, 이 정리 과정에서 검사 수정 시 OMR 검사지·검사코드 값이 초기화되던 것, 학교주문 목록과 정산 엑셀의 금액 칸이 한 칸씩 밀려 들어가던 것, 설명·메모를 비워 저장하면 실패하던 것을 함께 잡음
전환 안정화 매퍼 XML 주석이 SQL 파서와 충돌해 부팅이 실패하는 문제를 잡고, 동일 유형을 방지하는 XML 파싱 테스트 추가. 운영과 개발 DB를 실측 대조해 결손 항목을 정리하고 이관 기능을 실제 데이터로 검증. 오류를 내지 않고 조건식만 조용히 무력화돼 검색 조건이 사라지던 매퍼 문제처럼, 실패가 드러나지 않는 유형을 찾아내 회귀 테스트로 고정

2. 요구사항 반영 파이프라인 자동화

이관을 마친 뒤 남은 문제는 속도가 아니라 병목이었습니다. 요구사항은 개발자가 아닌 팀에서 올라오는데, 그것이 코드에 닿으려면 매번 같은 사람을 거쳐야 했습니다. 그래서 요구사항을 읽고 구현해 PR을 여는 과정을 에이전트 스킬로 정의해 레포에 두었습니다. 실행에 코드 수정이 필요 없으므로 담당자가 자리에 없어도, 스킬을 만든 사람이 아니어도 같은 절차가 돌아갑니다. 핵심은 자동화의 범위를 넓히는 것이 아니라 어디서 멈춰야 하는지를 정하는 것이었습니다.

설계 축 내용과 판단 근거
루프 정의 요구사항 관리 도구에서 신규 항목을 집어 상태를 전이시키고, 레포 문서 기준에 맞춰 구현한 뒤, 빌드·코드 스타일 검증을 통과한 경우에만 PR을 여는 데까지를 한 절차로 묶음. 상태를 지정하지 않고 올라오는 요청이 많아 빈 값도 신규로 취급하도록 보완
멈추는 지점의 설계 PR까지만 열고 머지는 사람이 한다를 절대 원칙으로 둠. 자동화가 코드베이스에 무엇을 남길지는 사람이 마지막에 판단해야 한다고 보고, 기본 브랜치 직접 푸시와 자동 머지를 원천 금지
보류 게이트 구현 전에 반드시 통과해야 하는 게이트를 두어, 요구가 모호하거나 결제·개인정보·권한 체계·스키마 변경처럼 위험이 크거나 여러 화면에 걸친 설계가 먼저 필요한 건은 구현하지 않고 보류로 돌려 사유와 함께 사람에게 넘김. 자동화가 판단할 수 있는 범위를 스스로 좁히는 것이 신뢰의 조건이라고 봄
반영 대조 요구사항 본문은 PR을 연 뒤에도 요청자가 고치거나 덧붙일 수 있음. 그래서 머지 이후 현재 본문을 다시 읽어 실제 반영 여부를 대조하고, 그새 늘어난 요구가 있으면 무엇이 어떻게 달라졌는지 적어 재작업으로 되돌림. "PR을 열었다"가 아니라 "지금 요구가 반영됐다"를 완료 기준으로 삼음
멱등성 이미 진행 중이거나 처리된 항목은 건드리지 않도록 상태로 구분해, 주기 실행이나 중복 실행에서도 같은 요구사항이 두 번 구현되지 않게 함. 항목을 집는 즉시 담당과 상태를 갱신해 동시 실행 충돌을 차단
문서 동기화 기능이 바뀌면 일반 직원용 사용 매뉴얼과 업데이트 이력을 갱신하는 스킬을 별도로 두어, 코드 변경과 사용자가 보는 문서가 어긋나지 않게 함. 매뉴얼 구조를 앱의 메뉴 카탈로그와 1:1로 맞춰 새 화면이 어디에 설명돼야 하는지 자동으로 결정되게 하고, 개발자 용어를 쓰지 않는 서술 규칙을 명시
확장성 결과적으로 비개발자가 올린 요구사항이 설계가 필요한 지점만 아니라면 개발자 병목 없이 반영되는 경로가 생김. 자동화 대상을 늘리기보다, 사람이 반드시 개입해야 할 지점을 명시적으로 남긴 것이 이 파이프라인의 핵심

3. 플랫폼 운영과 레거시 연동 - Ruby + ASP

프로젝트 축 설명
신규 ERP/홈페이지 검사 주문, 인증코드, OMR 업로드, 결과 조회, 통계/보고서, 홈페이지 검사 실시·출력 흐름 개발·운영
GERP 기준 OMR 흐름 OMR 업로드/매퍼 등록 검사 선택을 GERP 기준으로 변경하고, 검사 요약을 GERP OMRSHEET 기준으로 고정
기존 ASP 플랫폼 학교 검색 gubun 차이로 발생한 리다이렉트 문제 수정, 지사 페이지네이션 이슈 대응. 주문 금액 계산이 화면과 질의문 양쪽에 나뉘어 있어 같은 주문이 보는 위치에 따라 다르게 더해지던 것을 한 곳으로 모음
상품 노출 판정 판매 상품 노출을 분류 코드의 조합으로 판정하던 것을 검사 진행 상태 기준으로 바꿔, 분류 체계가 바뀔 때마다 조회 조건을 따라가야 하는 종속을 끊음
호환성 관리 기존 레거시 경로와 /v1/api/testhub/{assessment} 표준 API를 병행 제공해 외부 연동 안정성 확보
홈페이지 운영 안정화 비정상 포맷 요청을 집계해 알리는 이상 트래픽 대응과 에러 응답 정비, 시간 저장 기준을 KST로 통일해 문의·주문 처리 시각 정합성 확보
장애 대응 창구 서비스 장애와 외부 문의의 1차 대응을 맡아 시간대와 무관하게 원인 파악부터 조치까지 담당. 그 자리에서 끝내지 않고 같은 유형이 다음부터는 자동으로 드러나도록 감지 경로와 회귀 테스트를 남기는 것을 대응의 마지막 단계로 둠. 로그인 시도 제한에서 성공한 로그인까지 한도에 누적돼 정상 이용자가 차단되던 문제도 이 경로로 잡음
PG 결제 연동 장바구니·체크아웃은 신규 스택이, 결제 승인과 주문 확정은 레거시가 맡는 분리 구조를 다룸. 결제 데이터를 레거시 경로로 넘기고 주문 상세에서는 PG사 매출전표 조회를 연결함. 결제에 따라 나가는 재화가 인증코드·카운트·마일리지 셋으로 갈라져 있어, 산정 기준(10원 단위 내림, 등급별 추가 적립)과 후결제 제약을 한 곳으로 모음
PG 대사 설계 (진행 중) 승인과 주문이 서로 다른 시스템에서 확정되므로 한쪽만 성공하는 구간이 구조적으로 존재합니다. PG사 거래 원장·자사 결제 원장·주문 원장·재화 지급 원장을 세 축으로 대조해 미아 승인, 미아 주문, 금액 불일치, 취소 미반영, 결제됐는데 재화가 안 나간 건을 가려내는 일 배치를 설계 중. 돈이 오가는 경로라 판정만 하고 자동 보정은 넣지 않는 것을 원칙으로 잡았고, 대조 결과를 원장으로 적재해 월 정산 근거로 쓰며, 정상일 때도 하루 한 번 결과를 보고해 대사 자체가 조용히 죽는 것을 막도록 구성하고 있습니다
재화 차감 경로의 방어 인증코드 생성 경로에 남아 있던 SQL 인젝션 가능성을 막고, 화면 검사 시작을 재요청으로 다시 실행되지 않는 구조로 바꿔 새로고침·뒤로가기로 카운트가 연쇄 차감되던 것을 차단. 발송 가능 건수와 차감 안내를 레거시의 실제 차감 순서에 맞추고, 잔액 조회를 기다리는 사이 발송 버튼이 두 번 눌리지 않게 함
회원번호 채번 채번 충돌 시 빠져나오지 못하고 무한 재시도하는 구조와, 생성된 번호가 번호 공간의 한쪽으로 쓸리는 편향을 함께 수정
조회 성능 개선 인증코드·카운트 화면의 DB 타임아웃을 인덱스 설계, N+1 쿼리 제거, 쿼리 계측 도입으로 해소해 응답 지연 개선
대량 처리 안정화 인증코드 대량 삭제와 카운트 전환에서 발생하던 데드락과 쿼리 타임아웃을 처리 단위를 끊는 방식으로 해소. 엑셀 양식 생성의 ASP 의존을 끊고 표준 xlsx로 전환하면서, 서식이 실제로 적용되는지까지 확인. 대량 발급은 행마다 돌던 INSERT를 다중 행으로 묶고, 카운트 전환 삭제의 비교 타입을 맞춰 대량 전환에서 나던 타임아웃을 없앰. 발급 전에 명단을 미리 보는 단계를 두되 확인한 명단이 그대로 발급되도록 서명 토큰으로 넘겨 화면과 발급 대상이 갈라질 여지를 없앰
로그인 시도 제한 정정 성공한 로그인까지 시도 한도에 쌓여 정상 이용자가 막히던 것을 바로잡고, 공용으로 쓰이는 계정은 예외 경로로 분리
회원 탈퇴 흐름 탈퇴 이력 기록과 안내 동의 저장, 탈퇴 사유 화이트리스트 검증, DB 오류 시 500 대신 사용자 안내로 전환
견적·계산서 정산 정합성 문서에서 확정한 수량·단가가 정산 기준으로 그대로 남도록 저장 경로를 정비하고, 공급가액·합계 자동 재계산과 단가 수정 잠금 규칙을 반영
발행 오판정 방어 계산서 취소가 실패했는데도 성공으로 판정되던 문제를 정정하고, 중복 발행을 사전 확인하는 흐름 추가

4. 신규 검사 개발 - Java/Kotlin Spring

| --- | --- |

5. 인쇄 시스템 분리 - 온프레미스 → 클라우드 + 에이전트