RetoIn
Secure WebCore Engine
초경량 · 고성능 · 보안 중심
Java Web Server Framework
왜 자체 WebCore Engine을 개발했는가?
Tomcat, Jetty, JBoss 같은 표준 WAS는 훌륭한 플랫폼이지만
구조와 취약점, 공격 패턴까지 모두 공개된 만큼 공격 표면 또한 매우 넓습니다.
RetoIn은 “간결함 + 통제 가능한 코드 + 예측 가능한 보안”을 추구합니다.
그래서 외부 스택에 의존하지 않고, 직접 통제 가능한 WebCore 엔진을 개발했습니다.
RetoIn
Secure WebCore Engine 소개
Secure WebCore Engine은 RetoIn이 직접 설계하고 운영 중인
순수 Java 기반 초경량 Web Server & WebSocket Engine입니다.
  • Servlet/JSP 기반 아키텍처 부재
  • 최신 HTTPS/TLS 스택을 활용한 암호화 통신 지원
  • HTTP 파서 / URL 보안 정규화 / WebSocket 직접 구현
  • HtmlAutoTag를 통한 HTML 네이티브 템플릿 처리
  • Zero-dependency 구조
  • 단순하고 검증 가능하며 공격면이 매우 작음
엔진 구성 요소
RetoIn Secure WebCore Engine 구성 요소
WebCore Engine
├─ HTTP Core
│ ├─ HttpQ (HTTP 파서)
│ ├─ SecURL (보안 URL 정규화)
│ └─ SimURL (경량 URL 파서)

├─ Session & State
│ └─ HSession (메모리 세션)

├─ Template & View
│ └─ HtmlAutoTag (HTML 네이티브 템플릿 엔진)

├─ Localization
│ └─ H_locale (i18n 엔진)

├─ Protocol Extensions
│ └─ WebSocket Engine (커스텀 WS 프로토콜)

└─ System
└─ HttpStatus (HTTP 상태 코드)
HtmlAutoTag – HTML 네이티브 템플릿 엔진
HtmlAutoTag는 단순한 HTML 생성기가 아니라,
기존 HTML 문법을 그대로 사용하면서 서버에서만 아주 얇게 확장되는 템플릿 엔진입니다.
  • 디자이너/프론트엔드 개발자는 순수 HTML/CSS만 작성
  • if, loop, ${...} 플레이스홀더로 조건/반복/치환 처리
  • Java 코드에서는 Map<String,Object>에 데이터만 채워 전달
  • HtmlAutoTag.doit(...) 호출 한 번으로 템플릿 렌더링 + ETag 관리
예: 단말 목록과 권한, 다국어 문구를 사용하는 템플릿은 다음과 같이 작성할 수 있습니다.
<div if="terminal_list" class="gd_sw_terminal"> <div loop="terminal_list" class="gd_sw_vector sub1"<br/> option="${terminal_list.name}"> <div>${terminal_list.displayname}</div> </div> <div if="ADMIN"<br/> class="gd_sw_vector sub1 sub1all" option="ALL"> <span class="sub1all">ALL</span> </div> <div class="gd_sw<br/> sub1">ARCHIVE</div> <div class="gd_sw_vector sub2" option="ARCHIVE_USER">ADDRESS BASED<br/></div> <div if="ADMIN" class="gd_sw_vector sub2" option="ARCHIVE_DATE">DATE BASED</div> </div></div>
Java 측에서는 다음과 같이 데이터를 vmap에 채워 넣습니다. (실제 구현과 키 이름은 서비스에 맞게 조정 가능합니다.)
// 예시: 템플릿에 전달할 데이터 구성 Map<String, Object> vmap = new HashMap<>(); // terminal_list: 단말 목록 (예시) List<Map<String, Object>> terminalList = new ArrayList<>(); // terminalList에 name / displayname 필드 채우기 // ... vmap.put("terminal_list", terminalList); // 관리자 여부 vmap.put("ADMIN", this_user.isAdmin());// 다국 어 문구 (예: 로그 아카이브 화면) Map<String, Object> L_mlog = new HashMap<>(); L_mlog.put("archive","Archive"); L_mlog.put("archive_user", "Archive by User"); L_mlog.put("archive_date", "Archive by Date"); vmap.put("L_mlog", L_mlog); // 템플릿 파일 렌더링 File htmlf = new File("html_v2/sample/terminal_archive.html"); HS.sendHttpData(htmlf, vmap, System.currentTimeMillis(), this_user.id);
이처럼 HtmlAutoTag는 JSP나 복잡한 템플릿 문법 없이도,
순수 HTML 구조를 유지한 채 서버 사이드 렌더링을 수행하는 엔진입니다.
보안 설계 철학
Security by Simplicity
  • 작은 것이 안전하다: 최소 기능으로 공격면 축소
  • 표준 스택 배제: 자동화된 공격 도구가 엔진 구조를 인식하지 못함
  • 최신 HTTPS/TLS: 현대적인 TLS 프로토콜 스택 위에서 암호화 트래픽을 처리
  • TOTP 기반 관리자 인증: 관리자 콘솔 접근 시 기본적으로 TOTP 2단계 인증을 요구
  • 직접 구현: 모든 레이어의 동작을 100% 이해하고 통제 가능
  • 예측 가능한 동작: 불필요한 복잡성을 제거한 설계
관리자 인증과 TOTP
WebCore Engine 위에서 동작하는 관리자 콘솔은
기본값으로 TOTP 기반 2단계 인증(시간 기반 일회용 비밀번호)을 사용합니다.
  • 관리자 계정은 ID/비밀번호만으로 로그인할 수 없고, TOTP 코드가 반드시 필요
  • 최초 설정 시 TOTP 시크릿을 생성하고, QR 코드(예: TOTP 앱 스캔)로 간편하게 등록
  • 서버에서 직접 TOTP 검증 로직을 구현하여 외부 인증 서비스에 의존하지 않음
  • HSession(세션 엔진)과 HtmlAutoTag 템플릿, HTTPS/TLS 통신과 자연스럽게 연동
※ 관리 콘솔의 TOTP 인증 흐름은 RetoIn이 운영 중인 실서비스에 이미 적용되어 있으며,
관리 계정 탈취·세션 하이재킹 위험을 크게 줄이기 위한 기본 보안 정책입니다.
RetoIn Secure WebCore Engine의
현재와 미래
실제 적용 사례
  • RetoIn 공식 홈페이지(retoin.com)
  • SpamPrism / Prism 내부 시스템 일부 모듈
  • 사내 자동화 및 관리 웹도구 엔진
※ 특정 내부 시스템의 상세 구조와 구현은 보안상 공개하지 않습니다.
엔진 성능 요약
  • 메모리 사용량: Tomcat 대비 약 1/20 수준
  • 요청 수신부터 HTML 응답까지 호출되는 메서드 스택 깊이가 Tomcat 대비 약 10% 수준으로, 레이턴시와 오버헤드가 매우 작음
  • 요청 처리 오버헤드: 수 밀리초 수준
  • WebSocket: 수백 클라이언트 무리 없이 처리
  • Zero-dependency → 빌드 및 메모리 낭비 없음
  • Java8 기반으로 CPU 효율 극대화
향후 로드맵
  • Router DSL 및 정적 파일 서버 기능 정식화
  • 엔진 문서화 및 샘플 제공
  • 정제된 버전의 오픈소스 공개 준비
  • WS 성능 강화 및 Lightweight API Gateway 기능 연구