전자정부

[eGovFrame] 전자정부 프레임워크 코딩하기에앞서

미니미니22 2024. 11. 21. 19:24

프레임워크 구조

  1. Controller (웹 계층)
    • 사용자 요청을 받아 처리
    • 주로 요청 데이터 검증 및 Service 호출
  2. Service (비즈니스 계층)
    • 비즈니스 로직을 처리
    • 여러 DAO 호출 및 데이터 처리 로직 구현
  3. DAO (데이터 접근 계층)
    • 데이터베이스와 직접적으로 연결되는 계층
    • SQL or MyBatis를 사용하여 데이터베이스와 통신

※ 전체적인 흐름

사용자 요청 → Controller → Service → DAO → DB작업 → Service → Controller → 응답 전송

 

XML 설정 파일

Spring Boot와 달리 XML 기반 설정이 많아서 처음에 많이 당황스럽다

내가 까먹지 않으려고 정리

 

주요 설정파일

 

1. context-datasource.xml

  • 데이터 베이스 연결 설정, 트랜잭션 관리 설정
  • 트랜잭션 관리(Commit, Rollback)를 설정
<!-- 데이터베이스 연결 설정 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="org.postgresql.Driver" /> <!-- 드라이버 -->
    <property name="url" value="jdbc:postgresql://localhost:5432/yourdb" /> <!-- DB URL -->
    <property name="username" value="yourusername" /> <!-- DB 사용자 이름 -->
    <property name="password" value="yourpassword" /> <!-- DB 비밀번호 -->
</bean>

<!-- 트랜잭션 관리 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" /> <!-- 데이터 소스 연결 -->
</bean>

<!-- 트랜잭션 어노테이션 활성화 -->
<tx:annotation-driven transaction-manager="transactionManager" />
  • dataSource: DB 연결 정보를 설정합니다.
  • transactionManager: 트랜잭션을 관리하는 설정
    • 메서드 실행 중 예외가 발생하면 Rollback을 자동으로 처리
    • @Transactional 어노테이션을 사용하려면 이 설정이 필수

2. context-mapper.xml

  • MyBatis와 같은 Mapper 설정을 통해 SQL 매핑을 지원
  • SQL 파일 경로 지정, Mapper 파일과 데이터 소스를 연결
<!-- MyBatis와 데이터 소스 연결 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" /> <!-- 데이터 소스 참조 -->
    <property name="mapperLocations" value="classpath:/mapper/**/*.xml" /> <!-- Mapper 파일 경로 -->
</bean>

<!-- SQL 세션 생성 -->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
    <constructor-arg index="0" ref="sqlSessionFactory" /> <!-- SQL 세션 팩토리 참조 -->
</bean>
  • sqlSessionFactory: MyBatis가 SQL과 매핑을 처리할 수 있도록 설정
    • mapperLocations는 SQL 파일의 위치를 지정
    • classpath:/mapper/**/*.xml는 모든 하위 폴더를 탐색하는 설정
  • sqlSession: DAO 계층에서 사용하는 SQL 세션 객체를 생성
    • sqlSession을 통해 데이터베이스 쿼리를 실행

 

3. dispatcher-servlet.xml

  • Spring MVC 핵심 설정 파일
  • ViewResolver와 컨트롤러의 경로 매핑을 담당
<!-- ViewResolver 설정 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/views/" /> <!-- JSP 파일 경로 -->
    <property name="suffix" value=".jsp" /> <!-- 파일 확장자 -->
</bean>

<!-- 컨트롤러 자동 스캔 -->
<context:component-scan base-package="com.example.controller" />

 

  • ViewResolver: 뷰(JSP) 파일의 경로와 확장자를 설정
    • /WEB-INF/views/ 안에 위치한 .jsp 파일이 뷰로 사용
    • 예: return "home" → /WEB-INF/views/home.jsp
  • component-scan: 지정된 패키지에서 @Controller를 자동으로 탐색
    • base-package에 컨트롤러가 위치한 패키지를 명시

 

4. log4j.xml

  • 로그 출력과 디버깅 설정
  • 애플리케이션 실행 중 발생하는 로그를 파일 또는 콘솔에 출력
<!-- 로그 레벨 설정 -->
<log4j:configuration>
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
        </layout>
    </appender>

    <root>
        <priority value="debug" />
        <appender-ref ref="console" />
    </root>
</log4j:configuration>

 

  • 로그 레벨: debug, info, warn, error 등
    • 디버깅 시 debug 레벨을 사용하고, 배포 시에는 info 이상 사용
  • 출력 포맷: ConversionPattern으로 로그 형식을 지정
    • %d: 날짜/시간
    • %p: 로그 레벨
    • %m: 메시지

 

5. context-aspect.xml

  • AOP(Aspect-Oriented Programming) 설정
  • 로깅, 보안, 트랜잭션 등 공통 관심사 처리
<!-- AOP 활성화 -->
<aop:aspectj-autoproxy />

<!-- 로깅 Aspect -->
<bean id="loggingAspect" class="com.example.aspect.LoggingAspect" />

 

 

 

  • aspectj-autoproxy: AOP 기능을 활성화
    • @Aspect로 정의된 클래스에서 공통 로직 처리 가능
  • Aspect 사용: 예를 들어 메서드 실행 전후에 로깅 추가

 

6. pom.xml

 전자정부 프레임워크는 Maven을 사용하여 라이브러리 의존성 관리, 빌드 및 배포작업을 수행한다. pom.xml은 Maven을 사용하는 프로젝트에서 필수적인 설정 파일이다. 이 파일은 프로젝트의 구성과 의존성 관리를 담당하는 중요한 역할을 한다.

 pom.xml 파일은 Maven 프로젝트의 프로젝트 객체 모델(POM) 파일로, 프로젝트의 정보를 정의하고 필요한 라이브러리 의존성을 관리한다

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <!-- 프로젝트 정보 -->
    <groupId>com.example</groupId> <!-- 그룹 ID -->
    <artifactId>project-name</artifactId> <!-- 아티팩트 ID -->
    <version>1.0-SNAPSHOT</version> <!-- 버전 -->
    <packaging>war</packaging> <!-- 패키징 타입 (예: jar, war) -->

    <!-- Maven repositories -->
    <repositories>
        <repository>
            <id>central</id>
            <url>https://repo.maven.apache.org/maven2</url>
        </repository>
    </repositories>

    <!-- 의존성 관리 -->
    <dependencies>
        <!-- Spring Framework 의존성 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.10</version>
        </dependency>

        <!-- MyBatis 의존성 -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.5</version>
        </dependency>

        <!-- PostgreSQL JDBC 드라이버 의존성 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>42.2.23</version>
        </dependency>

        <!-- 기타 의존성 추가 -->
    </dependencies>

    <!-- 빌드 설정 -->
    <build>
        <plugins>
            <!-- Maven War Plugin (WAR 파일 생성) -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.3.1</version>
            </plugin>
        </plugins>
    </build>

</project>

<groupId>

  • 프로젝트가 속한 그룹을 정의, 일반적으로 회사 또는 팀 이름을 기준으로 설정
  • ex) com.example, org.springframework

<artifactId>

  • 프로젝트의 고유한 이름을 지정, 프로젝트에 대해 Maven이 사용할 식별자
  • ex) myproject, spring-webmvc.

<version>

  • 프로젝트의 버전, 1.0, 1.0-SNAPSHOT 등으로 관리
  • ex) 1.0-SNAPSHOT (개발 중 버전), 1.0.0 (정식 버전)

<packaging>

  • 생성할 결과물의 형식
    • jar: JAR 파일로 패키징
    • war: WAR 파일로 패키징 (웹 애플리케이션)

<dependencies>

  • 프로젝트에서 사용하는 외부 라이브러리들을 정의
    • 각 라이브러리는 <dependency>로 묶여 있으며, groupId, artifactId, version을 통해 Maven Central에서 라이브러리를 다운로드
    • 전자정부 프레임워크에서는 보통 Spring, MyBatis, JDBC 드라이버 등의 라이브러리를 추가

 

 

 

 

 

 

 

 

...Govframework 쉽지않다