[스프링/Spring] Spring 동작 구조와 프로젝트 설정

dongbrown·2024년 7월 22일

Spring

목록 보기
6/23

Spring 프로젝트 구조

1. Spring 프로젝트 폴더 구조

Spring 프로젝트의 전체적인 구조를 보여줍니다. 주요 폴더로는 src, target, pom.xml 등이 있습니다.
Spring 프로젝트 폴더 구조

2. main 폴더

실제 애플리케이션 코드와 리소스가 위치하는 폴더입니다. java 폴더에는 Java 소스 코드가, resources 폴더에는 설정 파일 등이 위치합니다.
main 폴더

3. webapp 폴더

웹 애플리케이션과 관련된 파일들이 위치하는 폴더입니다. JSP 파일, 정적 리소스(CSS, JavaScript, 이미지 등)가 이 폴더에 위치합니다.
webapp 폴더

Spring의 동작 구조 & 순서

1. Spring 웹

Spring MVC의 기본적인 요청 처리 흐름을 보여줍니다. 클라이언트의 요청부터 응답까지의 과정을 도식화하고 있습니다.
Spring 웹

2. XML 파일

Spring 컨테이너 구동 시 사용되는 XML 설정 파일의 구조를 보여줍니다. 이 파일에서 Bean, AOP, Transaction 등 다양한 Spring 설정을 정의합니다.
XML 파일

3. Spring MVC 요청 처리 흐름

Spring MVC의 요청 처리 흐름은 다음과 같은 단계로 이루어집니다:

  • 클라이언트 요청: 사용자가 URL을 통해 요청을 보냅니다.
  • DispatcherServlet: 모든 요청을 중앙에서 처리하는 프론트 컨트롤러입니다.
  • HandlerMapping: URL과 요청 정보를 기반으로 적절한 컨트롤러를 찾습니다.
  • HandlerAdapter: 컨트롤러의 실행을 담당합니다.
  • Controller: 실제 비즈니스 로직을 처리합니다.
  • ViewResolver: 컨트롤러가 반환한 뷰 이름을 실제 뷰 객체로 변환합니다.
  • View: 최종적으로 사용자에게 보여질 화면을 생성합니다.
@Controller
public class HelloController {
    @GetMapping("/hello")
    public String hello(Model model) {
        model.addAttribute("message", "Hello, Spring MVC!");
        return "hello";
    }
}

4. Spring Bean 생명주기

Spring Bean의 생명주기는 크게 생성, 초기화, 사용, 소멸의 4단계로 나눌 수 있습니다. 각 단계에서 Spring은 Bean의 상태를 관리하고 필요한 작업을 수행합니다.

Bean 초기화와 소멸 메서드를 정의하는 예시:

public class ExampleBean implements InitializingBean, DisposableBean {
    @Override
    public void afterPropertiesSet() throws Exception {
        // 초기화 로직: Bean 프로퍼티 설정 후 호출됩니다.
    }

    @Override
    public void destroy() throws Exception {
        // 소멸 로직: Bean이 컨테이너에서 제거되기 전에 호출됩니다.
    }
}

Spring 프로젝트 설정

1. pom.xml

Maven 프로젝트의 설정 파일로, 프로젝트의 의존성과 빌드 설정을 관리합니다.

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.9</version>
    </dependency>
</dependencies>

2. web.xml

웹 애플리케이션의 배치 설명자(deployment descriptor)로, 서블릿 설정 등 웹 애플리케이션의 구성을 정의합니다.

<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

3. applicationContext.xml

Spring의 핵심 설정 파일로, Bean 정의와 애플리케이션의 전반적인 구성을 담당합니다.

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${database.driver}"/>
        <property name="url" value="${database.url}"/>
        <property name="username" value="${database.username}"/>
        <property name="password" value="${database.password}"/>
    </bean>

</beans>

4. dispatcher-servlet.xml

Spring MVC 관련 설정을 담당하는 파일로, 컨트롤러 스캔, 뷰 리졸버 등을 설정합니다.

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <context:component-scan base-package="com.example.controller"/>
    <mvc:annotation-driven/>

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

이러한 설정 파일들을 통해 Spring 프로젝트의 구조와 동작 방식을 정의하고 커스터마이즈할 수 있습니다. 최근에는 Java 기반의 설정이 XML 기반 설정을 대체하는 추세이지만, 여전히 많은 프로젝트에서 XML 설정을 사용하고 있습니다.

0개의 댓글