프레임워크 구조
- Controller (웹 계층)
- 사용자 요청을 받아 처리
- 주로 요청 데이터 검증 및 Service 호출
- Service (비즈니스 계층)
- 비즈니스 로직을 처리
- 여러 DAO 호출 및 데이터 처리 로직 구현
- 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 쉽지않다
'전자정부' 카테고리의 다른 글
[eGovFrame] 전자정부 표준프레임워크, 전자정부가 뭔데 (1) | 2024.11.06 |
---|