기본 콘텐츠로 건너뛰기

JPA Egov

JPA Egov

AI 생성 이미지: JPA Egov
AI 생성 이미지: JPA Egov

Spring 기반 애플리케이션에서 데이터 접근 계층을 XML로 구성하는 실무 가이드를 제공합니다. 이 문서는 데이터소스 연결, 엔티티 매니저팩토리 설정, 트랜잭션 관리까지 JPA Egov 환경에서 안정적이고 확장 가능한 설계를 목표로 핵심 설정과 의도를 설명합니다.


1. 📄 JPA 설정 XML 코드

아래 코드는 Spring에서 JPA를 XML로 설정할 때 필수적으로 포함해야 하는 빈 구성 예시입니다. JPA Egov 프로젝트에서 바로 적용 가능한 기본 골격을 보여줍니다.


<!-- 데이터 소스 설정 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="org.mariadb.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://127.0.0.1:3306/board?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf8" />
    <property name="username" value="root"/>
    <property name="password" value="1234"/>
</bean>

<!-- JPA 벤더 어댑터 (Hibernate 설정) -->
<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="true"/>
    <property name="generateDdl" value="true"/>
    <property name="databasePlatform" value="org.hibernate.dialect.MariaDB10Dialect"/>
</bean>

<!-- Spring Data JPA 리포지토리 활성화 -->
<jpa:repositories base-package="egovframework.**.repository" entity-manager-factory-ref="emf" />

<!-- LocalContainerEntityManagerFactoryBean (가장 중요한 빈) -->
<bean class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" id="emf">
    <property name="packagesToScan" value="egovframework" />
    <property name="dataSource" ref="dataSource" />
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    <property name="persistenceUnitName" value="PersistUnit"/>
    <property name="jpaProperties">
        <props>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

<!-- 트랜잭션 매니저 설정 -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="emf" />
</bean>
            

2. 🚀 핵심 빈(Bean)별 상세 분석

2.1. `dataSource` (데이터 소스)

데이터베이스 연결과 커넥션 풀을 책임지는 빈입니다. 위 예제는 Apache Commons DBCP의 BasicDataSource를 사용해 MariaDB에 연결하도록 구성되어 있으며, 운영 환경에서는 풀 튜닝 값과 보안 설정을 추가해야 합니다.

  • `class="org.apache.commons.dbcp.BasicDataSource"`: 연결 풀로 안정적 커넥션 재사용을 제공합니다.
  • `driverClassName`, `url`, `username`, `password`: 외부 설정 파일로 분리해 관리해야 합니다.
  • URL 파라미터(`serverTimezone`, `useUnicode`, `characterEncoding`)는 타임존 및 문자 인코딩 문제를 예방합니다.

2.2. `jpaVendorAdapter` (JPA 구현체 설정)

Hibernate와 같은 JPA 구현체에 특화된 동작을 지정합니다. SQL 로그 출력과 DDL 자동 생성 여부를 통해 개발 단계에서의 편의성과 운영 단계의 안전성을 균형 있게 관리할 수 있습니다. JPA Egov 환경에서는 이 빈을 통해 Hibernate 방언을 명시적으로 설정하는 것이 중요합니다.

  • `showSql="true"`: 문제 분석 시 SQL을 확인할 수 있습니다.
  • `generateDdl="true"`: 초기 개발에서는 유용하지만 운영에서는 주의가 필요합니다.
  • `databasePlatform="org.hibernate.dialect.MariaDB10Dialect"`: MariaDB 특성에 맞춘 방언 설정.

2.3. `emf` (EntityManagerFactory)

애플리케이션의 엔티티 클래스를 로드하고 EntityManager를 생성하는 핵심 팩토리입니다. packagesToScan으로 엔티티 패키지를 지정하고, 추가적인 JPA 프로퍼티로 세부 동작을 제어합니다. JPA Egov과 같은 대규모 프로젝트에서는 패키지 스캔 범위를 명확히 하여 시작 시간을 최적화해야 합니다.

  • `LocalContainerEntityManagerFactoryBean`: Spring이 JPA 생명주기를 관리하도록 합니다.
  • `packagesToScan`: 정확한 패키지 지정으로 불필요한 스캔을 줄입니다.
  • `jpaProperties`: hibernate.hbm2ddl.auto=update 설정은 스키마 변경 반영에 유용하지만, 마이그레이션 전략과 병행해 사용하세요.

2.4. `jpa:repositories` (Spring Data JPA)

리포지토리 인터페이스를 자동으로 감지하여 Spring Data JPA 기능을 활성화합니다. 이 설정을 통해 CRUD 및 페이징, 정렬 기능을 별도 구현 없이 활용할 수 있으며 JPA Egov 프로젝트 구조에 맞춰 base-package를 조정하면 됩니다.

2.5. `transactionManager` (트랜잭션 관리자)

JpaTransactionManager는 선언적 트랜잭션을 지원하며, EntityManagerFactory를 통해 트랜잭션 경계를 제어합니다. 트랜잭션 전파, 격리 수준 등 정책은 애플리케이션 요구사항에 맞춰 설정하세요. JPA Egov 환경에서는 트랜잭션 설정이 데이터 무결성에 직접적인 영향을 미칩니다.


3. 🌟 요약: 설정의 목적

이 XML 구성은 Spring 애플리케이션에서 다음을 달성합니다.

  1. DBCP 기반 커넥션 풀로 안정적인 MariaDB 연결을 제공.
  2. Hibernate를 통한 JPA 구현으로 SQL 로그와 자동 스키마 반영을 지원.
  3. LocalContainerEntityManagerFactoryBean으로 JPA 생명주기를 Spring이 관리.
  4. JpaTransactionManager로 선언적 트랜잭션을 일관되게 처리.

결과적으로 개발자는 JDBC 저수준 코드에 매달리지 않고 엔티티와 Spring Data JPA를 통해 비즈니스 로직에 집중할 수 있습니다. JPA Egov 프로젝트에서는 이 패턴을 기반으로 보안, 운영 모니터링, 마이그레이션 전략을 추가하면 안정적인 데이터 계층을 완성할 수 있습니다.

© 2025 Spring 개발자 노트.

🚀 이 주제, 우리 서비스에 어떻게 적용할까요?

JPA Egov를 실제 서비스와 조직에 녹여보고 싶다면, 현재 아키텍처와 운영 방식을 한 번 점검해 보는 것부터 시작해 보세요. 팀 위키나 기술 블로그, 사내 스터디 주제로도 아주 좋습니다.

이 글이 도움이 됐다면, 비슷한 엔터프라이즈 사례 글들도 함께 살펴보면서 우리 조직에 맞는 운영 상용구를 정의해 보세요.

AI 생성 이미지: JPA Egov
AI 생성 이미지: JPA Egov

댓글

이 블로그의 인기 게시물

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 (Request Parameter 전체보기)

Java Servlet Request Parameter 완전 정복 — GET/POST 모든 파라미터 확인 & 디버깅 예제 Java Servlet Request Parameter 완전 정복 웹 애플리케이션에서 클라이언트로부터 전달되는 Request Parameter 를 확인하는 것은 필수입니다. 이 글에서는 Java Servlet 과 JSP 에서 GET/POST 요청 파라미터를 전체 출력하고 디버깅하는 방법을 다양한 예제와 함께 소개합니다. 1. 기본 예제: getParameterNames() 사용 Enumeration<String> params = request.getParameterNames(); System.out.println("----------------------------"); while (params.hasMoreElements()){ String name = params.nextElement(); System.out.println(name + " : " + request.getParameter(name)); } System.out.println("----------------------------"); 위 코드는 요청에 포함된 모든 파라미터 이름과 값을 출력하는 기본 방법입니다. 2. HTML Form과 연동 예제 <form action="CheckParamsServlet" method="post"> 이름: <input type="text" name="username"><br> 이메일: <input type="email" name="email"><b...

PostgreSQL 달력(일별,월별)

SQL 팁: GENERATE_SERIES로 일별, 월별 날짜 목록 만들기 SQL 팁: GENERATE_SERIES 로 일별, 월별 날짜 목록 만들기 데이터베이스에서 통계 리포트를 작성하거나 비어있는 날짜 데이터를 채워야 할 때, 특정 기간의 날짜 목록이 필요할 수 있습니다. PostgreSQL과 같은 데이터베이스에서는 GENERATE_SERIES 함수를 사용하여 이 작업을 매우 간단하게 처리할 수 있습니다. 1. 🗓️ 일별 날짜 목록 생성하기 2020년 1월 1일부터 12월 31일까지의 모든 날짜를 '1 day' 간격으로 생성하는 쿼리입니다. WITH date_series AS ( SELECT DATE(GENERATE_SERIES( TO_DATE('2020-01-01', 'YYYY-MM-DD'), TO_DATE('2020-12-31', 'YYYY-MM-DD'), '1 day' )) AS DATE ) SELECT DATE FROM date_series 이 쿼리는 WITH 절(CTE)을 사용하여 date_series 라는 임시 테이블을 만들고, GENERATE_SERIES 함수로 날짜를 채웁니다. 결과 (일별 출력) 2. 📅 월별 날짜 목록 생성하기 동일한 원리로, 간격을 '1 MONTH' 로 변경하면 월별 목록을 생성할 수 있습니다. TO...

CSS로 레이어 팝업 화면 가운데 정렬하는 방법 (top·left·transform 완전 정리)

레이어 팝업 센터 정렬, 이 코드만 알면 끝 (CSS 예제 포함) 이벤트 배너나 공지사항을 띄울 때 레이어 팝업(center 정렬) 을 깔끔하게 잡는 게 생각보다 어렵습니다. 화면 크기가 변해도 가운데에 고정되고, 모바일에서도 자연스럽게 보이게 하려면 position , top , left , transform 을 정확하게 이해해야 합니다. 이 글에서는 아래 내용을 예제로 정리합니다. 레이어 팝업(center 정렬)의 기본 개념 자주 사용하는 position: absolute / fixed 정렬 방식 질문에서 주신 스타일 top: 3.25%; left: 50%; transform: translateX(-50%) 의 의미 실무에서 바로 쓰는 반응형 레이어 팝업 HTML/CSS 예제 1. 레이어 팝업(center 정렬)이란? 레이어 팝업(레이어 팝업창) 은 새 창을 띄우는 것이 아니라, 현재 페이지 위에 div 레이어를 띄워서 공지사항, 광고, 이벤트 등을 보여주는 방식을 말합니다. 검색엔진(SEO) 입장에서도 같은 페이지 안에 HTML이 존재 하기 때문에 팝업 안의 텍스트도 정상적으로 인덱싱될 수 있습니다. 즉, “레이어 팝업 센터 정렬”, “레이어 팝업 만드는 방법”과 같이 관련 키워드를 적절히 넣어주면 검색 노출에 도움이 됩니다. 2. 질문에서 주신 레이어 팝업 스타일 분석 질문에서 주신 스타일은 다음과 같습니다. <div class="layer-popup" style="width:1210px; z-index:9001; position:absolute; top:3.25%; left:50%; transform:translateX(-50%);"> 레이어 팝업 내용 <...