스프링 프레임워크 구조와 동작 원리를 이해합니다.
스프링 MVC의 요청 처리 흐름, 의존성 관리, 객체 생성과 관리 방식을 학습하고 최적화된 애플리케이션 구조를 설계하고자합니다. 또한, 레이어드 아키텍처에 따라 역할을 분명히 구분하여 책임 있는 코드를 작성하는 방법을 학습합니다. 이와 함께, 구성 파일과 ORM과 JPA에 대한 이해를 통해 기본적인 스프링 구조의 학습 난이도를 낮추는 것을 목표로 합니다.
<aside> 💡 목차
</aside>
JSON은 JavaScript Object Notation 의 약자 ⇒ ‘자바 스크립트 객체 표기법’
데이터를 쉽게 ‘교환’하고 ‘저장’하기 위한 텍스트 기반의 데이터 교환 표준이다.
http 통신 시, 데이터를 주고 받을 때 사용하는 데이터 포맷 중 하나
JSON 기본적인 형태
키(Key)와 값(Value)의 쌍으로 이루어진 구조 ⇒ Key와 Value사이에는 ‘콜론(:)’이 들어감
여러 데이터를 나열할 경우에는 ‘쉼표(, )’를 사용함
객체(Object)는 중괄호({ })로 묶어서 표현하고, 배열(Array)은 대괄호([ ])로 묶어서 표현함
데이터의 값으로 다양한 타입을 사용할 수 있음
자바스크립트에서 JSON 사용을 위한 메소드
JSON.stringify(arg) ⇒ 객체를 문자열로 변환
JSON.parse(arg) ⇒ 문자열을 객체로 변환 (문자열은 반드시 JSON형식이어야 한다.)
Model ⇒ Model은 스프링이 지원하는 기능으로, key와 value로 이루어져 있는 HashMap을 뜻함 ⇒ Model 객체는 Controller 에서 생성된 데이터를 담아 View 로 전달할 때 사용하는 객체임.(이를 통해 생성된 데이터가 사용자에게 표시되도록 만들 수 있음) ⇒ 데이터와 데이터를 처리하는 비지니스 로직을 나타냄 ⇒ Model은 화면(View)에서 필요한 자료들을 담아서 화면쪽에 넘겨주는 패턴을 많이 사용한다.
Model 객체 : 속성 값을 담아두는 객체
ModelAndView 객체 : 속성 값 뿐만 아니라 View 이름도 담아둘 수 있는 객체
Model 개요
Model 사용방법
addAttribute("key", "value")
메서드를 이용해 view에 전달할 데이터를 key, value형식으로 전달할 수 있음
⇒ addAttribute는 Map의 put과 같은 기능과 유사함. 이 메소드를 이용하면 해당 모델에 원하는 속성과 속성에 대한 값을 주어서 view에 데이터를 전달할 수 있음.Model 사용예시
캡쳐1
⇒ Controller어노테이션 생성 후에 @GetMapping하여 url을 "/test/"
로, 메서드에 매개변수를 Model 타입의 model변수를 선언한 상태.
⇒ String 타입의 변수 test를 선언하고, model.addAttribute를 통해 view에 데이터를 전달함.
캡쳐2
⇒ ‘캡쳐1’의 Controller에 Model타입의 model변수 선언을 하여 ${test}
부분의 test는 model.addAttribute("test", test)
로 인해 치환됨.
⇒ 치환된 결과가 model interface에 출력됨.
@ModelAttribute ⇒ 요청 파라미터를 받아서 필요한 객체를 만들고 그 객체에 값을 넣어주어야 한다. 이때 보통 @RequestParam을 사용해서 값을 받고, set을 사용해서 값을 넣어주곤 함. ⇒ 이것을 자동화시켜주는 것이 @ModelAttribute이다.
ex) @RequestParam으로 일일이 받고 set을 해서 값을 저장
⇒ 번거로움
ex) modelAttribute 사용
⇒ 간결함
model.addAttribute
도 생략 가능 (@ModelAttribute를 사용함으로써 model에도 자동적으로 객체가 추가 되기 때문)⇒ i, ii의 과정을 거친 결과(생략한 결과)
@ModelAttribute 실행 원리
View ⇒ 스프링 MVC패턴에서 사용되는 개념으로, 사용자에게 화면을 표시하는 역할을 함. ⇒ 뷰 컨트롤러(Controller)에서 전달된 모델(Model)의 데이터를 사용하여 사용자에게 어떻게 표시될 지를 정의함. ⇒ view에는 화면을 렌더링하는 코드들이 들어가 있음.
“hello”는 뷰의 이름임. ⇒ 즉, 스프링에게 “hello”라는 이름의 뷰를 찾아 렌더링 하도록 지시함.
ex) 스프링에서 사용되는 여러 뷰 구현 중 하나인 Thymeleaf ⇒"hello"라는 뷰 이름이 주어지면 Thymeleaf는 "hello.html"이라는 템플릿 파일을 찾아서 모델의 데이터를 이용하여 HTML을 생성함.
⇒ th:text="${data}” 부분의 뜻 : 모델에서 전달된 "data" 값을 해당 우치에 표시하는 Thymeleaf 문법 ⇒ 이러한 템플릿을 사용하여 최종적으로 사용자에게 보일 HTML을 생성함.
Controller ⇒ 사용자의 요청이 진입하는 지점(entry point) ⇒ 요청에 따라 어떤 처리를 할 지 결정해줌. 단, controller는 단지 결정만 해주고 실질적인 처리는 서비스(Layered Architecture)에서 담당함 ⇒ 사용자에게 View(또는 서버에서 처리된 데이터를 포함하는 View)를 응답으로 보내줌. ⇒ Controller는 요청에 따라 로직처리를 위한 분기를 담당하고 사용자에게 서버에서 처리된 데이터를 포함한 View를 리턴함. ⇒ 화면(View)과 비즈니스 로직(Model)를 연결시키는 다리 역할임.
controller의 필요성
Controller 사용예시
⇒ QuestionController는 /questions로 시작하는 path에 반응함.