Spring

MVC 모델

읽히는 블로그 2024. 7. 26. 15:32

 

▤ 목차

     

     



     

    ✔  환경 설정

    빌드 관리 도구는 maven을 사용한다.

    ⌨ sevlet

     

    생성할때 논리적인 이름을 만들면 된다.

     

     

    프로젝트를 만들면 위와 같이 논리적 파일명도 지정된다.

     

    💻 web.xml

    web.xml을 통해 프로젝트와 이름을 mapping할 수 있다.

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
      <display-name>wmvc2</display-name>
      <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.jsp</welcome-file>
        <welcome-file>default.htm</welcome-file>
      </welcome-file-list>
      
      <servlet>
      	<servlet-name>mvc</servlet-name>
      	<servlet-class>pack.controller.HobbyController</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>mvc</servlet-name>
      	<url-pattern>/hobby.do</url-pattern>
      </servlet-mapping>
    </web-app>

     

     

    👏 web.xml이란?

    배포 서술자(Deployment Descriptor)라고 한다.

    브라우저가 실행될때 반드시 거쳐가는 파일이다.

    때문에 전반적인 설정을 담당하고 있으며 단 1개의 파일을 사용한다.

    javaServlet에 접근하기 위해 web.xml을 사용한다.

    dynamic Web Project 를 생성할때, next를 누른 후 마지막 단계에서 아래와 같이 체크를 해주면 생성이 된다.

     

    때문에 servlet이 호출될때 web.xml 설정이 우선순위 1순위이다. (다음이 어노테이션!)

    request가 온다면 xml에서 url pattern에 담긴 servlet mapping과 값이 연결된다.

     

     

     

     

     


     

     

     

    ✔ model 2 ( Model-View-Controller : MVC)

     

    model1 방식과 달리 model2방식은 controller와 view가 분리되어있다.

     

    위의 사진과 같이 클라이언트의 요청이 들어오면 controller가 받는다.

    이때, controller는 해당 요청에 따라 model(백에서 동작하는 로직 처리 ex 빈즈)에게 보낸다.

    model은 요청에 맞는 데이터베이스에 다녀온다. 가져온 데이터를 controller에게 다시 보내고 controller는 view에 전달한다.

    보통 model2 방식을 MVC 패턴이 있어, MVC 아키텍처, MVC  패턴이라고 말한다.

     

    Model  애플리케이션의 데이터와 비즈니스 로직을 담당한다.
    DB에서 정보를 가져오거나 데이터를 조작한 후 컨트롤러에 전달한다.
    독립적으로 테스트할 수 있어야한다.
    **뷰나 컨트롤러에 대한 정보를 알지 않아야한다.**
    View  사용자 인터페이스를 나타낸다.
    모델에서 받은 데이터를 사용자에게 보여주는 역할을 한다.
    보통 html, xml, json 등으로 구성된다. (프론트단이다.)
    Controller  컨트롤러는 모델과 뷰 사이의 상호작용을 관리하고 제어한다.
    사용자의 입력을 받는다 > 적절한 모델을 호출한다 > 반환받은 결과를 바탕으로 적절한 뷰를 선택하여 사용자에게 제공한다.
    어플리케이션의 흐름을 제어 및 관리한다.

     

     

    💻 코드로 보기

     

     

     

    🪄 규칙 5가지

    1. model은 controller와 view에 의존하지 않아야 한다.
    2. view는 model에만 의존해야 하고 controller에는 의존하면 안된다.
    3. view가 model로부터 데이터를 받을때는 사용자마다 다르게 보여줘야하는데, 이에 대해서만 model에서 받아야한다.
    4. controller는 model과 view에 의존해도 된다.
    5. view가 model로부터 데이터를 받을때, 반드시 controller에서 받아야한다.

     

    [참고]

    https://www.youtube.com/watch?v=ogaXW6KPc8I

     

     

    👏model1과 차이

    controller는 servlet으로 만든다.

     

    • 클라이언트의 요청 처리와 응답처리가 분리되어 있다.
      클라이언트의 요청처리와 응답처리가 모두 하나의 jsp에서 이루어진다.

    • model2는 클라이언트가 직접 view에 접근할 수 없다. controller를 통해 접근해야한다. 
      model1 방식은 view와 controller가 하나의 jsp에 존재하기 때문에 클라이언트가 직접적으로 view에 접근할 수 있다.

     

     


     

     

    ✔maven 빌드 도구

    빌드는 소스코드 파일을 컴퓨터에서 실행 할 수 있는 독립적인 형태로 변환하는 과정과 결과를 말한다.

    ⌨ maven 과 gradle

      maven gradle
    스크립트 언어 XML 기반의 빌드 스크립트를 사용한다.
    구조화된 설정을 통해 표준화된 방법으로 프로젝트를 빌드하고 관리한다.
    Groovy 또는 Kotlin DSL을 사용하여 빌드 스크립트를 작성한다.
    성능 안정적이다. 그러나 매번 모든 의존성을 다시 다운로드하는 문제가 있다. 빌드 캐시와 증분 빌드 기능을 지원하여 초기 빌드 시간을 줄일 수 있다. 빠른 빌드가 가능하다
    확장성과 유연성 플러그인 시스템을 통해 확장이 가능하지만 xml 기반이기 때문에 복잡한 빌드를 구현하기에 제약이 있을 수 있다. 플러그인을 사용하여 빌드 스크립트를 확장할 수 있으며 Grooby나 Kotlin 스크립트를 통해 더 유연한 작업이 가능하다.

     

    maven은 오랜 역사를 가지고 있어 많은 문제에 대한 해결 방법들이 쉽게 찾을 수 있다.

    gradle은 비교적 최근에 나왔지만 빠르게 성장ㅇ하고 있는 커뮤니티 를 가지고 있으며 특히 안드로이드 개발에서는 기본적으로 gradle을 사용한다.

     

    maven은 전통적인 프로젝트 구조를 선호하며 xml 기반의 설정을 통해 빌드 관리하는 경우 선택한다.

    gradle은 유연성과 성능을 중시하며 동적이고 복잡한 빌드 작업이 필요한 경우 적합하다.(대규모 프로젝트에서 유리)

     

     

    💻 프로젝트 maven 설정 방법

     

    해당 프로젝트 우클릭

     

    이때, artifact id에 project 이름, jar파일의 이름을 설정하면 된다.

    group id는 프로젝트를 식별하게 해주는 식별자이다.

     

    👏  참고 

    https://velog.io/@alicesykim95/Maven%EA%B3%BC-Gradle%EC%9D%98-%EC%B0%A8%EC%9D%B4%EC%A0%90

     

    Maven과 Gradle의 차이점

    📌 1. 빌드 관리 도구란? 📎 정의 개발을 하다보면 자주 보는 몇 가지 단어가 있다. 그 중에서 Maven과 Grable을 각각 스프링과 스프링부트에서 본적이 있을 것이다. 우선 이 둘은 빌드 관리 도구이

    velog.io

     

    https://velog.io/@leesomyoung/Maven%EA%B3%BC-Gradle%EC%9D%98-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B9%84%EA%B5%90

     

    Maven과 Gradle의 개념 및 비교

    스프링부트 프로젝트를 하며 여러 가지 기능 구현을 하면서 여러 의존성 라이브러리를 추가해야하는 경우가 많았다. 따라서 추가하는 방법을 위해 공식 문서나 스택오버 플로우, 블로그 등을

    velog.io

     

     

     


     

     

    ✔ pom.xml 환경잡기

    Maven 프로젝트의 설정 파일로, 프로젝트의 메타데이터, 의존성 관리, 빌드 설정 등을 정의한다.

    이를 통해 필요한 라이브러리의 추가와 관리가 가능하다.

    ⌨ dependencies

    https://central.sonatype.com/

     

    Maven Central

    Official search by the maintainers of Maven Central Repository.

    central.sonatype.com

    해당 프로그램에 원하는 라이브러리를 추가해주면 된다.

    나는 mariaDB , JSTL, servlet api를 받았다. 이외에도 필요한 라이브러리를 받으면된다.

    원래 직접 라이브러리를 다운받았다면 이젠 xml에 dependency를 추가해주면 자동으로 추가된다.

     

     

    이와 같이 해당 파일에 가보면 확인할 수 있다.

     

     

    🗂️pom.xml 기본 구조

    • modelVersion
    • groupId
    • artifactId
    • version
    • packaging

     

     

    👏  참고할만한 사이트

    https://wikidocs.net/18340#google_vignette

     

     

     


     

     

    😊정리

     

    java 웹 개발의 기초 부분이다. 환경을 세팅부터 시작인것같다.
    xml을 통한 연결고리와 이해 관계를 파악할 수 있는 정리였다.!