eGovFrame SpringBoot AI

전자정부 표준프레임워크 5.0 베타: Spring Boot 3.5.6과 AI RAG 지원

표준프레임워크 5.0 베타가 출시되었습니다. Spring Boot 3.5.6, Spring AI 기반 RAG 예제, Kubernetes/Istio 클라우드 서비스 메시, 그리고 Flutter 기반 모바일 API까지 지원합니다.

d

devfreshi85

Author

Published

Jan 16, 2026

들어가며

전자정부 표준프레임워크센터에서 표준프레임워크 5.0 베타 버전을 공식 배포했습니다. 이번 5.0 버전은 단순한 버전 업그레이드가 아닙니다. Spring Boot 3.5.6 지원, AI RAG 예제, 클라우드 네이티브 아키텍처, Flutter 기반 모바일 API 등 현대적인 개발 환경을 종합적으로 갖춘 대규모 업데이트입니다.

2011년 첫 출시 이후, 표준프레임워크는 한국 공공기관의 정보화 개발 표준으로 자리 잡았습니다. 약 15년간 수많은 공공시스템이 이 프레임워크 기반으로 구축되었으며, 이번 5.0 베타는 그 역사상 가장 큰 변화를 담고 있다고 해도 과언이 아닙니다.

실행환경 v5.0 (Beta)

Spring Boot 3.5.6 지원

가장 큰 변화는 Spring Boot 3.5.6을 지원한다는 점입니다. 이는 Java 17+과 Jakarta EE 10+ 기반의 최신 Spring 생태계를 활용할 수 있게 해줍니다. 기존 3.x, 4.x 버전에서 사용하던 Spring Legacy 방식에서 완전히 벗어나, 현대적인 Spring Boot 개발 방식을 공공기관에서도 적용할 수 있게 되었습니다.

Spring Boot 3.5.6의 주요 특징:

  1. AOT(Ahead-of-Time) 컴파일: GraalVM 네이티브 이미지 지원으로 시작 시간 단축
  2. Virtual Threads (Project Loom): Java 21의 가상 스레드 지원으로 높은 동시성 처리
  3. Observability 내장: Micrometer Tracing 기반 분산 트레이싱 지원
  4. ProblemDetail API: RFC 7807 표준 에러 응답 지원
  5. HTTP Interface Client: 선언적 HTTP 클라이언트 지원

주요 오픈소스 업그레이드

컴포넌트 이전 버전 5.0 버전 주요 변화
Spring Framework 5.3.37 6.2.11 Jakarta EE 10, AOT 컴파일
Spring Security 5.8.13 6.5.5 Lambda DSL, 메서드 보안 강화
Spring Batch 4.3.10 5.2.3 Job 구성 방식 변경
Spring Boot - 3.5.6 신규 지원
MyBatis 3.5.16 3.5.19 안정성 향상
Hibernate 5.6.15 6.6.9 Jakarta Persistence

Spring Framework 6.x 대로의 업그레이드는 상당한 변화입니다. 단순히 버전 숫자가 올라간 것이 아니라, 근본적인 패러다임 변화가 있습니다.

Jakarta EE 10 네임스페이스 변경

가장 큰 영향을 미치는 변화는 javax.* 패키지에서 jakarta.* 패키지로의 변경입니다.

// 기존 (javax.*)
import javax.servlet.http.HttpServletRequest;
import javax.persistence.Entity;
import javax.validation.constraints.NotNull;

// 변경 (jakarta.*)
import jakarta.servlet.http.HttpServletRequest;
import jakarta.persistence.Entity;
import jakarta.validation.constraints.NotNull;

이 변경은 모든 Java EE 관련 코드에 영향을 미치며, 특히 다음 영역에서 주의가 필요합니다:

  • Servlet/JSP 관련 코드
  • JPA Entity 클래스
  • Bean Validation 어노테이션
  • Dependency Injection (@Inject)
  • Transaction 관련 코드

Spring Security 6.x Lambda DSL

Spring Security 6.x에서는 설정 방식이 Lambda DSL로 변경되었습니다.

// 기존 방식 (Spring Security 5.x)
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/public/**").permitAll()
            .antMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .formLogin()
            .loginPage("/login")
            .permitAll();
    }
}

// 새로운 방식 (Spring Security 6.x)
@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public/**").permitAll()
                .requestMatchers("/admin/**").hasRole("ADMIN")
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .permitAll()
            );
        return http.build();
    }
}

주요 변경 사항:

  • WebSecurityConfigurerAdapter deprecated
  • antMatchers()requestMatchers()
  • @EnableGlobalMethodSecurity@EnableMethodSecurity
  • Lambda 기반 체이닝 설정

AI RAG 예제 v5.0 (Beta)

이번 버전의 하이라이트 중 하나는 Spring AI 기반 RAG(Retrieval-Augmented Generation) 예제입니다. 공공기관에서 생성형 AI를 활용할 수 있는 구체적인 가이드를 제공합니다.

RAG 아키텍처 이해하기

RAG(Retrieval-Augmented Generation)는 LLM의 한계를 극복하기 위한 핵심 기술입니다. LLM은 학습 데이터에 포함된 정보만 알 수 있으며, 최신 정보나 조직 내부 문서에 대한 지식이 없습니다. RAG는 이 문제를 해결합니다.

RAG 동작 방식:

  1. 문서 수집 및 분할: 내부 문서를 적절한 크기의 청크로 분할
  2. 임베딩 생성: 각 청크를 벡터로 변환
  3. 벡터 저장: Vector Database에 저장
  4. 질문 처리: 사용자 질문을 벡터로 변환
  5. 유사도 검색: 질문 벡터와 유사한 문서 청크 검색
  6. 컨텍스트 구성: 검색된 청크와 질문을 결합
  7. 답변 생성: LLM이 컨텍스트를 기반으로 답변 생성

구성 요소

Spring AI: 스프링 생태계에서 AI 애플리케이션을 구축하기 위한 프레임워크입니다. OpenAI, Azure OpenAI, Ollama, Vertex AI 등 다양한 AI 백엔드를 추상화하여 일관된 API를 제공합니다.

@Service
public class RagService {

    private final ChatClient chatClient;
    private final VectorStore vectorStore;
    private final EmbeddingModel embeddingModel;

    public RagService(ChatClient chatClient, VectorStore vectorStore,
                      EmbeddingModel embeddingModel) {
        this.chatClient = chatClient;
        this.vectorStore = vectorStore;
        this.embeddingModel = embeddingModel;
    }

    public String query(String question) {
        // 1. 질문을 벡터로 변환
        float[] queryEmbedding = embeddingModel.embed(question);

        // 2. 유사한 문서 검색
        List<Document> similarDocs = vectorStore.similaritySearch(
            SearchRequest.query(question).withTopK(5)
        );

        // 3. 컨텍스트 구성
        String context = similarDocs.stream()
            .map(Document::getContent)
            .collect(Collectors.joining("\n\n"));

        // 4. 프롬프트 구성 및 답변 생성
        String prompt = """
            다음 컨텍스트를 기반으로 질문에 답변하세요.

            컨텍스트:
            %s

            질문: %s
            """.formatted(context, question);

        return chatClient.call(prompt);
    }
}

Ollama: 로컬 환경에서 LLM을 실행할 수 있는 도구입니다. 공공기관에서는 보안상 클라우드 API 사용이 제한될 수 있으므로, Ollama를 통해 내부망에서 LLM을 운영할 수 있습니다.

# Ollama 설치 및 모델 다운로드
curl -fsSL https://ollama.ai/install.sh | sh
ollama pull llama3.2
ollama serve

Redis Stack: Redis의 벡터 검색 기능을 활용하여 Vector Database로 사용합니다. 기존 Redis 인프라를 활용하면서도 벡터 검색 기능을 추가할 수 있습니다.

# application.yml
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: llama3.2
      embedding:
        model: nomic-embed-text
    vectorstore:
      redis:
        uri: redis://localhost:6379
        index: egov-docs
        prefix: "doc:"

공공기관 활용 시나리오

  1. 행정 문서 Q&A: 민원 처리 가이드, 법령 해석, 업무 매뉴얼 등에 대한 질의응답
  2. 법령 검색: 관련 법령, 시행령, 고시 등의 검색 및 요약
  3. 회의록 분석: 과거 회의록에서 특정 의제에 대한 논의 내용 검색
  4. 계약 문서 검토: 유사 계약 사례 검색 및 조항 비교

개발환경 v5.0 (Beta)

Eclipse IDE

Eclipse 2025-03 (4.35.0)이 적용되어 최신 IDE 환경을 제공합니다.

주요 특징:

  • 실행환경 5.0.0 및 공통컴포넌트 254종 통합
  • SVN Connectors를 Subversive에서 ArSysOp SVN Connectors로 교체
  • Java 21 지원
  • 성능 개선 및 메모리 최적화

통합 개발 도구:

  • egovframe Data Editor: 데이터베이스 쿼리 및 매핑 파일 편집
  • egovframe Code Generator: 템플릿 기반 코드 자동 생성
  • egovframe Validator: 소스코드 품질 검증

VS Code Extension v5.0 (Beta)

VS Code 사용자를 위한 확장 프로그램도 대폭 업데이트되었습니다. 경량 IDE를 선호하는 개발자들을 위한 완전한 개발 환경을 제공합니다.

지원 기능:

기능 설명
Project Generation Web, Template, Boot, MSA, Mobile, Batch, AI 프로젝트 생성
CRUD Code Generation DDL 기반 CRUD 코드 자동 생성 (Controller, Service, Mapper)
Configuration Generation Datasource, ID Generation, Logging, Property, Scheduling, Transaction 설정
Template Management 프로젝트 템플릿 관리 및 커스터마이징
Domain Generation 도메인 엔티티 및 DTO 자동 생성

기술 스택:

  • React Framework: 확장 프로그램 UI 개발
  • Handlebars 템플릿 엔진: 코드 템플릿 렌더링
  • Monaco Editor: VS Code의 핵심 에디터 컴포넌트 활용

CRUD 코드 생성 예시:

DDL을 입력하면 다음 코드들이 자동 생성됩니다:

-- 입력 DDL
CREATE TABLE COMTNBOARD (
    BBS_ID VARCHAR(20) PRIMARY KEY,
    BBS_NM VARCHAR(100) NOT NULL,
    BBS_INTRCN VARCHAR(500),
    REGIST_DT DATETIME DEFAULT CURRENT_TIMESTAMP,
    UPDT_DT DATETIME
);

생성되는 파일:

  • BoardVO.java - Value Object
  • BoardMapper.java - MyBatis Mapper Interface
  • BoardMapper.xml - SQL Mapping XML
  • BoardService.java - Service Interface
  • BoardServiceImpl.java - Service Implementation
  • BoardController.java - REST Controller

운영환경 v5.0 (Beta)

클라우드 서비스 메시

MSA(Microservices Architecture) 환경을 위한 클라우드 네이티브 구성을 지원합니다. 단순한 컨테이너 오케스트레이션을 넘어, 서비스 메시 아키텍처를 표준으로 제공합니다.

구성 요소 버전 용도
Kubernetes v1.32.5 컨테이너 오케스트레이션
Istio v1.25.3 서비스 메시

Kubernetes 배포 구성

# deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: egov-service
  namespace: egov-system
spec:
  replicas: 3
  selector:
    matchLabels:
      app: egov-service
  template:
    metadata:
      labels:
        app: egov-service
        version: v1
    spec:
      containers:
      - name: egov-service
        image: egov-service:5.0.0
        ports:
        - containerPort: 8080
        resources:
          requests:
            memory: "512Mi"
            cpu: "500m"
          limits:
            memory: "1Gi"
            cpu: "1000m"
        livenessProbe:
          httpGet:
            path: /actuator/health/liveness
            port: 8080
          initialDelaySeconds: 30
          periodSeconds: 10
        readinessProbe:
          httpGet:
            path: /actuator/health/readiness
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 5

Istio 서비스 메시 구성

# destination-rule.yaml
apiVersion: networking.istio.io/v1beta1
kind: DestinationRule
metadata:
  name: egov-service
spec:
  host: egov-service
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        h2UpgradePolicy: UPGRADE
        http1MaxPendingRequests: 100
        http2MaxRequests: 1000
    outlierDetection:
      consecutive5xxErrors: 5
      interval: 30s
      baseEjectionTime: 30s
      maxEjectionPercent: 50
---
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: egov-service
spec:
  hosts:
  - egov-service
  http:
  - route:
    - destination:
        host: egov-service
        subset: v1
      weight: 90
    - destination:
        host: egov-service
        subset: v2
      weight: 10
    retries:
      attempts: 3
      perTryTimeout: 2s

관찰가능성(Observability) 도구

분산 시스템의 모니터링과 트러블슈팅을 위한 완전한 옵저버빌리티 스택을 제공합니다. 이는 단순한 모니터링을 넘어, 마이크로서비스 간의 통신 패턴 분석, 성능 병목 식별, 장애 원인 파악까지 지원합니다.

도구 버전 용도
OpenTelemetry v0.120.0 통합 수집 (Traces, Metrics, Logs)
Prometheus - 메트릭 수집 및 알림
Grafana - 시각화 대시보드
Loki - 로그 집계
Jaeger - 분산 트레이싱
Kiali - 서비스 메시 시각화
Tempo - 트레이스 백엔드

OpenTelemetry 구성

# application.yml
management:
  tracing:
    enabled: true
    sampling:
      probability: 1.0
  otlp:
    tracing:
      endpoint: http://otel-collector:4317
    metrics:
      export:
        enabled: true
        step: 60s

spring:
  application:
    name: egov-service

Three Pillars of Observability

1. Metrics (메트릭)

  • CPU, 메모리, 디스크 사용량
  • HTTP 요청 수, 응답 시간, 에러율
  • JVM 메트릭 (GC, Heap, Thread)
  • 커스텀 비즈니스 메트릭

2. Logs (로그)

  • 구조화된 JSON 로그 형식
  • Correlation ID를 통한 요청 추적
  • 로그 레벨별 필터링
  • 중앙 집중식 로그 관리

3. Traces (트레이스)

  • 분산 요청 추적
  • 서비스 간 호출 경로 시각화
  • 지연 시간 분석
  • 에러 원인 파악

공통컴포넌트 v5.0 (Beta)

업그레이드 및 보안 강화

공통컴포넌트는 총 254종으로 구성되며, 실행환경 5.0.0으로의 업그레이드가 반영되었습니다.

주요 개선 사항:

  1. 컨트리뷰션 반영: 71명의 개발자 컨트리뷰션 370건 반영
  2. 보안 강화: KISA, NSR(국가보안기술연구소) 보안 점검 결과 반영
  3. 시큐어 코딩: OWASP Top 10 대응 가이드라인 적용

공통컴포넌트 분류

구분 주요 컴포넌트
로그인/인증 로그인, 인증, 인가, 세션, 접근제어
사용자관리 사용자, 부서, 조직, 권한, 역할
게시판 게시판, 공지사항, Q&A, FAQ, 만족도조사
민원 민원신청, 민원처리, 민원조회, 민원통계
결재 기안, 결재, 협조, 시행, 문서관리
통계 로그분석, 방문자, 접속통계, 성능통계
시스템 시스템관리, 백업, 복구, 모니터링

보안 기능 강화

적용된 보안 기능:

  • 입력값 검증: XSS, SQL Injection 방지
  • 세션 보안: 세션 하이재킹 방지
  • 비밀번호 정책: 복잡성, 만료, 이력 관리
  • 접근 통제: IP 기반, 시간 기반 접근 제어
  • 감사 로그: 모든 중요 작업에 대한 로그 기록
  • 암호화: 개인정보 암호화 저장, 전송 구간 암호화

모바일 v5.0 (Beta)

Flutter 기반 모바일 API

기존 하이브리드 앱 방식에서 Flutter 기반으로 완전히 재작성되었습니다. 크로스 플랫폼 개발 환경을 제공하여 iOS와 Android를 단일 코드베이스로 개발할 수 있습니다.

기술 스택 변화:

구분 기존 5.0
프레임워크 하이브리드 (Web + Native) Flutter
UI HTML/CSS/JS Flutter Widget
네이티브 연동 Cordova Plugin Flutter Platform Channel
디자인 커스텀 KRDS 디자인

모바일 디바이스 API APP

Flutter 기반 디바이스 API 가이드 프로그램 9종을 제공합니다:

  1. 카메라 API: 사진 촬영, 동영상 녹화
  2. 갤러리 API: 사진/동영상 선택, 저장
  3. 파일 API: 파일 탐색, 업로드/다운로드
  4. GPS API: 위치 정보 획득, 지도 연동
  5. NFC API: NFC 태그 읽기/쓰기
  6. 바코드 API: QR코드, 바코드 스캔
  7. 푸시 API: 알림 수신, 처리
  8. 생체인증 API: 지문, Face ID 인증
  9. 보안 API: 암호화, 인증서 관리

모바일 디바이스 API Web

Flutter 기반 DeviceAPI와 연동되는 웹서버 9종을 제공합니다:

  • 실행환경 5.0.0 적용
  • Spring Boot 기반 REST API
  • JWT 인증 지원
  • 파일 업로드/다운로드 처리
  • 푸시 발송 서버 연동

KRDS 디자인 리소스

KRDS(Korea Responsive Design System) 디자인 리소스가 반영되어 공공서비스 UI/UX 가이드라인을 준수합니다.

  • 공통 컴포넌트 (버튼, 입력필드, 카드 등)
  • 접근성 가이드 준수
  • 다크 모드 지원
  • 반응형 디자인

버전별 구성 요약

구성 요소 버전 주요 특징
실행환경 v5.0(beta) Spring Boot 3.5.6, AI RAG
개발환경 v5.0(beta) Eclipse 2025-03, VS Code Extension
운영환경 v5.0(beta) Kubernetes, Istio, Observability
공통컴포넌트 v5.0(beta) 254종, 보안 강화
모바일 v5.0(beta) Flutter 기반

마이그레이션 가이드

Spring Framework 6.x 마이그레이션 체크리스트

기존 3.x 또는 4.x 버전에서 5.0으로 마이그레이션할 때 확인해야 할 사항을 정리합니다.

1. Java 버전 확인

# Java 17 이상 필요
java -version
# openjdk version "17.0.x" 또는 그 이상

2. 의존성 업데이트

<!-- pom.xml -->
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>3.5.6</version>
</parent>

<properties>
    <java.version>17</java.version>
    <egovframe.version>5.0.0</egovframe.version>
</properties>

3. javax → jakarta 변경

전역 검색 및 치환:

  • javax.servletjakarta.servlet
  • javax.persistencejakarta.persistence
  • javax.validationjakarta.validation
  • javax.annotationjakarta.annotation
  • javax.transactionjakarta.transaction

4. Spring Security 설정 변경

// SecurityConfig.java 재작성 필요
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .csrf(csrf -> csrf.disable())
            .sessionManagement(session ->
                session.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/api/public/**").permitAll()
                .anyRequest().authenticated()
            )
            .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()));
        return http.build();
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

5. Spring Batch 5.x 변경사항

// 기존 Batch 설정
@Bean
public Job job() {
    return jobBuilderFactory.get("job")
        .start(step1())
        .next(step2())
        .build();
}

// Spring Batch 5.x 설정
@Bean
public Job job(JobRepository jobRepository, Step step1, Step step2) {
    return new JobBuilder("job", jobRepository)
        .start(step1)
        .next(step2)
        .build();
}

AI RAG 도입 가이드

공공기관에서 AI 서비스 도입 시 고려사항:

1. Ollama 설치 및 구성

# 서버에 Ollama 설치
curl -fsSL https://ollama.ai/install.sh | sh

# 모델 다운로드
ollama pull llama3.2
ollama pull nomic-embed-text

# 서비스 시작
systemctl start ollama

2. Redis Stack 구성

# docker-compose.yml
version: '3.8'
services:
  redis:
    image: redis/redis-stack:latest
    ports:
      - "6379:6379"
      - "8001:8001"
    volumes:
      - redis-data:/data

volumes:
  redis-data:

3. Spring AI 의존성 추가

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-redis-store</artifactId>
</dependency>

클라우드 네이티브 전환 가이드

컨테이너 기반 배포를 위한 단계별 가이드:

1. Dockerfile 작성

FROM eclipse-temurin:17-jre-alpine

WORKDIR /app

COPY target/egov-service.jar app.jar

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "app.jar"]

2. Kubernetes 매니페스트 작성

# k8s/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: egov-service
spec:
  replicas: 3
  template:
    spec:
      containers:
      - name: egov-service
        image: egov-service:5.0.0
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: "prod"
        - name: JAVA_OPTS
          value: "-Xms512m -Xmx1g"

3. Istio 서비스 메시 적용

# Istio 설치
istioctl install --set profile=default

# 네임스페이스에 Istio 인젝션 활성화
kubectl label namespace egov-system istio-injection=enabled

# 애플리케이션 배포
kubectl apply -f k8s/

마치며

표준프레임워크 5.0은 단순한 버전 업데이트가 아니라, 클라우드 네이티브와 AI 시대에 맞춘 완전한 아키텍처 변화를 담고 있습니다. 2011년 첫 출시 이후 약 15년 만의 대대적인 변화입니다.

특히 주목할 점은:

  1. Spring Boot 3.5.6으로 최신 스프링 생태계 지원 - 현대적인 개발 방식 적용
  2. AI RAG 예제로 공공 AI 서비스 개발 가이드 제공 - 생성형 AI 도입 지원
  3. Kubernetes + Istio로 MSA 기반 클라우드 네이티브 지원 - 확장성과 안정성 확보
  4. Flutter 기반 모바일 개발 환경 현대화 - 크로스 플랫폼 개발 효율성 향상
  5. 옵저버빌리티 스택으로 운영 효율성 향상 - 장애 대응 및 성능 최적화
  6. 보안 강화로 공공기관 보안 요구사항 충족 - KISA/NSR 보안 점검 반영

이번 업데이트는 공공기관 개발자들에게 큰 기회입니다. 베타 버전부터 미리 경험해보고, 정식 버전 출시에 대비하여 기술 역량을 확보하는 것이 좋겠습니다. 특히 Spring Boot 3.x와 AI/ML 기술은 향후 공공 IT 시장의 핵심 역량이 될 것입니다.


참고 자료