wongakim-99 / Spring-study

스프링 공부방 (백엔드 공부)
0 stars 0 forks source link

MVC 패턴 실습 #3

Closed wongakim-99 closed 3 months ago

wongakim-99 commented 3 months ago

웹 페이지를 하나의 틀로 보고 변수에 따라 서로 다르게 출력하는 뷰 템플릿 생성.

wongakim-99 commented 3 months ago

뷰 템플릿이란?

뷰 템플릿: 화면을 담당하는 기술로, 웹 페이지를 하나의 틀(Template)로 만들고 여기에 변수를 삽입해 서로 다른 페이지로 보여줌 MVC 패턴에서 V 담당

아까 Spring initializr에서 스프링 부트 프로젝트를 만들 때 머스테치(Mustache)라는 도구를 추가했음. 이 도구가 뷰 템플릿을 만드는 도구

MVC패턴

MVC 패턴은 디자인 패턴중 하나임 디자인 패턴이란 프로그램이나 어떤 특정한 것을 개발하는 중에 발생했던 문제점들을 정리해서 상황에 따라 간편하게 적용해서 쓸 수 있는 것을 정리하여 특정한 "규약"을 통해 쉽게 쓸 수 있는 형태로 만든 것을 말함.

MVC 패턴에서 화면을 담당하는 뷰 템플릿은 간단히 '뷰' 라고도 함.

뷰는 컨트롤러, 모델이라는 두 동료가 있음.

컨트롤러(Controller) : 클라이언트의 요청에 따라 서버에서 이를 처리하는 역할 모델(Model) : 데이터를 관리하는 역할.

위와같이 클라이언트의 요청을 받아 처리하고(Controller), 데이터를 관리하는(Model) 역할을 나누는 기법을 MVC 패턴(Model-View-Controller)이라고 함. Image

wongakim-99 commented 3 months ago

이슈로그 3번 실습내용 요약

  1. 뷰 페이지 만들기 (greetings.mustache)
  2. 컨트롤러 만들기 (FirstController.java)
  3. 컨트롤러에서 뷰 페이지 반환하기 (return "greetings";)
  4. 뷰 페이지에 변수 삽입하기 {{username}}
  5. 컨트롤러에 모델 추가하기 (niceToMeetYou(Model model))
  6. 모델에서 변수 등록하기 model.addAttribute("username", "가원")
wongakim-99 commented 3 months ago

확인 퀴즈

  1. (뷰 템플릿) 이란 웹 페이지를 일종의 틀로 만든 것이다.
  2. (컨트롤러) 는 클라이언트의 요청을 받아 서버에서 이를 처리하는 역할을 한다.
  3. (모델) 는 뷰 템플릿에서 사용되는 데이터를 관리하는 역할을 한다.
  4. (@Controller)는 이 클래스가 컨트롤러임을 선언한다.
  5. (@GetMapping) 는 클라이언트의 URL 요청을 받아 특정 컨트롤러의 메서드가 처리하게 한다.
wongakim-99 commented 3 months ago

MVC의 역할과 실행 흐름 이해

웹 서비스는 클라이언트의 요청에 대한 서버의 응답으로 동작. 이때 스프링 부트는 서버의 역할을 함

서버는 모델, 뷰, 컨트롤러가 유기적으로 역할을 분담해 클라이언트의 요청을 처리. 식당에서 웨이터가 주문을 받고, 주방장이 요리를 하고, 식재료 담당자가 재료를 준비하는 것처럼 컨트롤러가 클라이언트의 요청을 받고, 뷰가 최종 페이지를 만들고, 모델이 최종 페이지에 쓰일 데이터를 뷰에 전달

앞선 커밋 "https://github.com/wongakim-99/Spring-study/issues/3 - 모델 추가하기" 에서 /hi 페이지의 실행 흐름을 한번 살펴보자

  1. FirstController.java 코드가 컨트롤러임을 선언
  2. 클라이언트로부터 "/hi" 라는 요청을 받아 접수
  3. "/hi" 라는 요청을 받음과 동시에 niceToMeetYou() 메서드를 수행
  4. 뷰 템플릿 페이지에서 사용할 변수를 등록하기 위해 모델 객체를 매개변수로 가져옴
  5. 모델에서 사용할 변수 등록. (변수값에 따라 서로 다른 뷰 템플릿 페이지 출력)
  6. 메서드 수행결과 -> greetings.mustache 파일 반환. 이때 return 문에는 파일 이름만 작성 -> 그러면 서버가 알아서 template 디렉터리에 있는 해당 뷰 템플릿 페이지를 찾아 웹 브라우저로 전송
wongakim-99 commented 3 months ago

"/bye" 페이지 생성후 실행결과 확인 ("/hi") 하고 똑같은 논리

wongakim-99 commented 3 months ago

확인 퀴즈2

다음 설명 중 옳지 않은 것

답 : 컨트롤러의 메서드 반환값은 뷰 템플릿 페이지의 확장자를 포함해 작성한다. (X)

wongakim-99 commented 3 months ago

MVC 패턴 정리

  1. 뷰 템플릿 - 웹 페이지를 하나의 틀로 만들고 여기에 변수를 삽입해 서로 다른 페이지로 보여줌
  2. MVC 패턴 - 웹 페이지를 화면에 보여 주고(view), 클라이언트의 요청을 받아 처리하고(Controller), 데이터를 관리하는(Model) 역할
  3. 뷰 템플릿 생성 위치 - src>main>resource>templates 디렉터리에 생성. 머스테치 뷰 템플릿의 확장자는 .mustache
  4. 컨트롤러 생성 위치 - src>main>java>기본 패키지 안에 컨트롤러 패키지 만든 후 자바 클래스 파일을 생성하는 방식. 확장자는 .java
  5. 모델을 통해 변수 등록 - model.addAttribute("변수명", 변수값);
  6. 헤더 - 푸터 레이아웃 - 가장 기본이 되는 레이아웃, 헤더 영역에는 사이트 안내를 위한 내비게이션을 넣고, 푸터 영역에는 사이트 정보 등을 넣음. 그리고 두 영역 사이에 콘텐트 영역에는 사용자가 볼 핵심 내용을 배치
wongakim-99 commented 3 months ago

그 다음 챕터는 게시판 CRUD 만들기 :)

wongakim-99 commented 3 months ago

자바 어노테이션(Java Annotation) : 자바 언어에서 사용되는 메타데이터로, 클래스, 메서드, 변수 등에 붙여서 추가 정보를 제공하고, 런타임 시에 이 정보를 활용할 수 있습니다. 예를 들어, @Override 어노테이션은 메서드가 상위 클래스의 메서드를 오버라이드하고 있음을 명시합니다.

Object(객체) : 클래스의 인스턴스로, 실제로 메모리에 할당되어 동작하는 실체. 객체는 클래스에서 정의한 속성과 메서드를 가지고 있음.

Class(클래스) : 객체를 생성하기 위한 틀. 클래스는 객체가 가질 속성(데이터)과 메서드(함수)를 정의.

Instance(인스턴스) : 클래스를 기반으로 생성된 객체를 말함. 클래스에서 생성된 각각의 인스턴스는 고유한 상태(State)와 행동(Behavior)을 가지며, 객체의 특징을 표현.

Constructor(생성자) : 객체지향 프로그래밍에서 클래스의 인스턴스를 생성할 때 호출되는 특수한 메서드. 생성자의 주요 목적은 객체가 생성될 때 초기화 작업을 수행하는 것. 생성자는 클래스 내부에 정의되며, 객체가 생성될 때 자동으로 호출.

Image

Override(오버라이드) : 오버라이드(Override)는 객체지향 프로그래밍에서 상속 관계에 있는 자식 클래스가 부모 클래스의 메서드를 재정의(덮어쓰기)하는 기능을 말함.

Overroad(오버로드) : 오버로드는 같은 이름의 메서드를 여러 개 정의하되, 각 메서드는 다른 매개변수 리스트(매개변수의 타입, 개수, 순서)를 가지는 것

Image

영상출처 : https://youtu.be/mHVfGmTwQ_k?si=Sb3IAHLT3jpxhxa0