다나와 검색 서비스 개발팀이 처리 키워드 업데이트 수작업을 Kotlin + Spring Boot 기반 자동화 도구로 대체한 사례를 다룬다. SSH 터널링, 파일 업로드, API 호출을 순서대로 반복하던 작업을 자동화하고 전략 패턴으로 여러 검색 서버에 유연하게 배포 가능하게 만들었다.
핵심 포인트- 기존 수작업: 엑셀 수신 → SSH 서버 접속 → 파일 다운로드 → 키워드 업데이트 → 업로드 → API 호출을 여러 검색 서버에 반복했다.
- JSch 라이브러리로 SSH 터널링을 구현하고 Kotlin 확장 함수로 use()를 작성해 세션·채널 자원 해제를 자동화했다.
- 전략 패턴으로 SSH 연결 이후 수행할 작업(파일 업로드, 백업 활성화 등)을 인터페이스로 추상화해 연결 로직과 작업 로직을 분리했다.
- Docker + Gitlab CI 파이프라인으로 자동화 도구 자체도 빌드·배포를 자동화했다.
상세 정리- 배경: 처리/비처리 키워드 목록을 정기적으로 업데이트해야 하는 작업이 있었는데, 프로세스가 복잡해 매번 문서를 다시 찾아 확인해야 했다.
- 기존 흐름: 엑셀 파일 수신 → SSH로 검색 서버 접속 → 키워드 파일 다운로드 → 내용 업데이트 → 업로드 → API 호출로 반영 → 여러 서버에 반복 수행.
- 문제: 여러 대의 검색 서버에 같은 작업을 반복하다 보니 시간 소모가 크고 누락 위험도 있었다.
- 기술 선택: Kotlin 1.8.22 + Spring Boot 3.1.5 조합으로 자동화 도구를 개발했다.
- JSch SSH 터널링: JSch 라이브러리로 프로그래밍 방식 SSH 연결을 구현했다. Kotlin의 확장 함수로 use() 함수를 직접 작성해 try-with-resources 패턴을 적용, 세션·채널 자원이 자동으로 닫히게 했다.
- 전략 패턴 적용: SSH 연결 이후 수행할 작업(파일 업로드, 백업 파일 활성화 등)을 전략 인터페이스로 추상화했다. SSH 연결 코드와 실제 작업 코드를 명확히 분리해 새 작업 유형 추가 시 기존 연결 코드를 건드리지 않는다.
- Docker 컨테이너화: 자동화 도구를 Docker 이미지로 패키징해 환경 일관성을 유지했다.
- Gitlab CI 파이프라인: 도구 코드 변경 시 빌드·배포가 자동으로 진행되도록 파이프라인을 설정했다.
왜 읽나Kotlin + Spring Boot로 SSH 기반 서버 자동화 도구를 처음 만들 때 JSch 터널링 구현과 전략 패턴 적용 방법을 실무 사례로 함께 참고할 수 있다.