ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링 MVC 프로젝트 구조
    Memo 2023. 2. 14. 19:18

    MVC 프로젝트 구조

    일반적으로 생성한 스프링 MVC 프로젝트는 크게 자바 파일을 관리하는 서블릿 관련 폴더와 웹 파일을 관리하는 웹 관련 폴더로 구분된다.

     

    서블릿 관련 폴더

    서블릿과 관련된 클래스 파일이 생성되면 src/main/java 폴더에 등록하여 관리한다. 보통 자바 클래스 파일들 src/main/java 폴더에 패키지로 생성하여 등록하는데, 개발자가 만든 예외 클래스나 기타 유틸 클래스 파일 등도 src 폴더에 저장한다.

     

    웹 관련 폴더

    웹과 관련된 JSP, 리소스, 스프링 MVC 환경 설정 파일, 웹 프로젝트 환경 설정 파일 등이 생성되면 src/main/webapp 폴더에 등록하여 관리한다.

     

    - resources폴더는 웹에 관련된 이미지, 자바스크리브, CSS 등 정적 리소스 파일을 관리합니다.

    - spring 폴더는 빈(Bean) 객체들을 등록하는 서블릿 설정 파일인 스프링 MVC 설정 파일(기본형: servlet.xml)을 관리한다.    그리고 스프링 시큐리티 설정 파일 같은 스프링 관련 설정 파일들이 이곳에 저장된다.

    - view 폴더는 웹 페이지인 JSP 파일을 관리한다.

    - web.xml 파일은 반드시 src/main/webapp/WEB-INF 폴더에 위치해야 한다.

    - pom.xml은 메이븐 관련 환경 설정 파일로, 필요한 라이브러리를 추가하여 사용할 수 있게 한다.

     

    여러 폴더 중 가장 중요한 폴더는 서블릿 관련 폴더인 src/main/java 폴더와 웹 관련 폴더인 src/main/webapp/WEB-INF이다. 특히 WEB-INF 폴더에서 애플리케이션의 웹과 관련된 모든 파일을 관리하고, 이 폴더 아래의 경로들은 스프링과 관련된 중요한 설정이 들어간다.

     

    스프링 MVC 프로젝트의 실행 과정

    1. web.xml 파일은 웹 브라우저(클라이언트)의 웹 요청 URL을 전달받는다. web.xml 파일에 설정된 디스패처 서블릿이 클     라이언트의 웹 요청 URL을 제어한다.

    2. servlet-context 파일에서 웹 요청 URL을 처리하는 컨트롤러에 해당하는 클래스를 검색한다.

    3. HomeController 컨트롤러는 클라이언트의 웹 요청 URL을 처리하고 결과를 출력할 뷰 이름을 디스패처 서블릿에 반환한

       다.

    4. 컨트롤러에서 보내온 뷰 이름을 토대로 처리할 뷰를 검색한다.

    5. 처리 결과가 포함된 뷰를 디스패처 서블릿에 반환하고 최종 결과를 출력한다.

     

    web.xml

    web.xml 파일은 웹 프로젝트의 배포 설명자/배치 기술서(deployment descriptor)이며, 웹 프로젝트가 배포되는 데 이용되는 XML 형식의 자바 웹 애플리케이션 환경 설정 부분을 담당한다. 스프링 웹 프로젝트가 실행되면 가장 먼저 web.xml 파일을 읽어 들이고 위부터 차례로 태그를 해석한다.

     

    네임 스페이스와 스키마

    XML 문서를 작성할 때 요소가 중복되는 것을 피하려면 web.xml 파일 맨 위에 네임스페이스와 스키마를 정의해야 한다.

     

    네임 스페이스 : 코드에서 이름은 같지만 내용이 전혀 다른 요소들을 충돌하지 않도록 구별하는 데 사용한다.

    스키마 : 코드의 구조와 요소, 속성의 관계를 정의하여 다양한 자료형을 사용할 수 있도록 정의하는 문서 구조, 즉 틀을 의미한다.

     

    기본 네임 스페이스 선언 : xmlns 속성은 기본 XML 스키마 네임 스페이스를 명시한다. 속성 값은 모든 스키마를 가지고 있다.

    인스턴스 네임 스페이스 URL 선언 : xmlns:xsi 속성은 인스턴스 네임 스페이스 URL를 지정한다. 속성 값은 대부분 XML 스키마로 사용되는 표준인 W3C(World Wide Web Consortium) XML 스키마를 나타낸다.

    참조하는 인스턴스 문서의 URL 선언 : xsi:schemaLocation 속성은 참조하고자 하는 인스턴스 문서의 URL을 지정한다. 두 개의 속성 값은 공백으로 구분한다. 첫 번째는 사용할 네임 스페이스고, 두 번째는 참조할 스키마 파일 이름이다.

     

    루트 컨텍스트 설정

    루트 컨텍스트는 모든 서블릿과 필터가 공유할 수 있는 루트 스프링 컨테이너 설정으로, 공통 빈(Service, Repository(DAO), DB, Log 등)을 설정한다. 주로 View 지원을 제외한 bean을 설정한다.

     

    1. 스프링 MVC 설정 파일 등록하기

    2. 스프링 MVC 파일 정보 읽기

     

    서블릿 컨텍스트 설정

    서블릿 컨텍스트(ServletContext)는 서블릿 하나가 서블릿 컨테이너와 통신할 때 사용하는 메서드들을 가지고 있는 클래스이다. 웹 애플리케이션 안에 있는 모든 서블릿을 관리하여 정보를 공유할 수 있게 도와준다.

     

    1. 서블릿 이름과 클래스 등록

    2. <load-on-startup> 요소 설정

    3. 서블릿 매핑 경로 패턴 설정

     

    스프링 MVC 환경 설정 파일

    스프링 MVC 환경 설정 파일은 빈 객체를 정의하는 root-context.xml과 servlet-context.xml 두 개가 있다. root-context.xml 파일에 등록된 빈들은 모든 컨텍스트에서 공유되어 사용되지만, servlet-context.xml 파일에 등록된 빈들은 서블릿 컨텍스트에서만 사용된다. root-context.xml 파일은 뷰(JSP 웹 페이지)와 관련 없는 빈 객체를 설정한다. 즉, 서비스, 저장소, 데이터베이스, 로그 등 웹 애플리케이션의 비즈니스 로직을 위한 컨텍스트를 설정한다. servlet-context.xml 파일은 뷰(JSP 웹 페이지)와 관련 있는 빈 객체를 설정한다. 즉, 컨트롤러 MultipartResolver, Interceptor, URI와 관련 설정을 담는 클래스를 설정한다.

     

    root-context.xml

    root-context.xml 파일은 다른 웹 컴포넌트들과 공유하는 자원들을 선언하는 용도로 사용되며, 뷰와 관련되지 않은 Service, Repository(DAO), DB 등 객체를 정의할 수 있다.

     

    servlet-context.xml

    servlet-context.xml 파일에는 웹 요청을 직접 처리할 컨트롤러의 매핑을 설정(HandlerMapping)하거나 뷰를 어떻게 처리할지 설정(ViewResolver)할 수 있다.

     

    context:component-scan 요소가 자동으로 인식하는 애너테이션

    애너테이션 설명
    @Component 특별히 역할 구분 없이 컴포넌트라고 알려주는 역할을 한다.
    @Repositoy, @Service, @Controller 각각 DB 작업 관련, 서비스 관련, MVC 컨트롤러 컴포넌트를 의미한다. 어떤 종류의 컴포넌트인지 알려 주는 역할을 한다.
    @Required 필수 프로퍼티임을 명시하는 데 사용한다.
    @Autowired 의존 관계를 자동 설정할 때 사용하며, 타입을 이용하여 의존하는 객체를 삽입해 준다.
    @Inject 특정 프레임워크에 종속되지 않는 애플리케이션을 구성하는 데 사용한다.

     

    컨트롤러

    컨트롤러는 클라이언트 요청을 처리할 자바 클래스를 의미한다.

     

    사용자가 보는 결과 화면으로 JSP 파일이다.

     

    메이븐 환경 설정 파일(pom.xml)

    pom.xml 파일은 POM(Project Object Model)을 설정하는 부분으로 프로젝트 내 빌드 옵션을 설정한다. XML 태그를 사용하여 프로젝트에 필요한 메이븐(Maven) 라이브러리를 설정한다. 메이븐은 프로젝트 내에 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는 데 필요한 다른 라이브러리까지 프로젝트의 전체적인 라이프 사이클을 관리하는 도구이며 네트워크를 통해 자동으로 내려받기도 한다.

     

    프로젝트 정보 : <project>

    속성정보 : <properties>

    의존성 라이브러리 정보 : <dependencies>

    빌드 정보 : <build>

    'Memo' 카테고리의 다른 글

    Git 기초  (0) 2023.03.02
    전자정부 SW개발, 운영자를 위한 JAVA 시큐어코딩 가이드  (0) 2023.02.28
Designed by Tistory.