-
스프링입문 - 환경설정 및 개발기초스프링/스프링부트+JPA - 블로그 2021. 8. 20. 19:55
인프런 '김영한'님의 강의 참조!
- 스프링은 엄청거대하기때문에 하나하나 모든것을 알 수 없다
- 이 강의의 목적은 필수 개념 및 최신 트렌드에 중점을 둔다
- 기술 그자체에 계속해서 파고드는것이아니라 어떻게 사용하고 오래되고 마이너한 기술은 과감히 버리고 실무 위주로 이루어진다
- 프로젝트 환경설정
1) 프로젝트 생성
- 스프링부트 사이트를 통해서 프로젝트를 생성 (자바 툴을 통해서 만들어도 된다)
- 예전에는 밑바닥부터 프로젝트 세팅을 했으나 요즘은 부트를통해 쉽게 생성이 가능
이렇게 해서 임포트 후 작동이 안되면 직접 STS에서 만드는게 낫다 - Maven/Gradle Project
필요한 버전 설정/라이브러리를 땡겨오고 직접 빌드까지해주는 툴. 과거는 메이븐 현재는 그래들로 함 - Dependency
쓰고싶은 라이브러리들을 지정하는것(의존성)
Spring Web - 웹프로젝트를 만드는데 도움을 주는 툴
Tymeleaf - 뷰/웹 템플릿 엔진으로 마크업언어(HTML/CSS/JS)안쪽에 속성으로 쓰여지는 등의 이점으로 마크업 구조를 흐트리지않고 개발할 수 있다는 장점이 있다 - STS에서는 임포트 -> 그래들 -> 프로젝트선택 해서 싱크를 해줘야 한다
- 가장중요한 'build.gradle'
만들기전에 세팅했던 값들이 그대로 그대를로 빌드가 되어있음! - 서버 테스트!
톰캣 8080을 가르키고 있다! 연결 성공! - 톰켓서버가 내장이 되어있는 스트링 부트! JSP, 스프링, 스프링 레거시 등에서 하는 불편함들이 이미 세팅이 되어있다
2) 라이브러리 살펴보기
- 라이브러리를 보게되면 내가 세팅을 하지않았는데도 엄청나게 많은것들이 들어와 있는데 그 이유는 의존성관계기반이기 때문이다
- 예로 예전 개발자들은 톰켓을 직접깔고 포트부터 밑바닥까지 다 세팅을 했어야했는데 최근의 개발은 부트를 통해 미리 기존 세팅을 하게되면 알아서 내장톰켓이 세팅이되고 필요한 라이브러리들을 미리 땡겨와서 개발이 가능
가장 기본적으로 부트로 개발시에 들어가는 라이브러리들 3) View 환경 설정
- Welcome Page 만들기
<!DOCTYPE HTML> <html> <head> <title>Hello</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> Hello! <a href="/hello">Go to Hello</a> </body> </html>
- 이 프로세스는 정말 정적인 것. 웹서버가 적어논 파일을 가져가고 표출하는, 즉 프로그래밍이 아닌(?)것
- 스프링부트 세팅상 static아래에 index.html이 웰컴페이지로 세팅이 된다
- 동적으로 만들어보자! thymeleaf + controller의 이해
@Controller public class HelloController { @GetMapping("hello") public String hello(Model model) { model.addAttribute("data", "hello!!"); return "hello"; } }
- 어노테이션을 통해 컨트롤러의 역할 배분과 URL의 ContextPath를 캐치하도록 설정
- 스프링부트에서 제공하는 Model 객체를 통해 view에 뿌려지는 데이터를 넘겨 줄 수 있다.
- 'model.addAttribute'를 통해 데이터를 캐리하는 데이터 이름과 데이터 내용을 정하고 최종적으로 "hello" 탬플릿으로 그 데이터를 전송함
*hello.html <!DOCTYPE HTML> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>Hello</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <p th:text="'Hi' + ${data}">Welcome!</p> </body> </html>
템플릿에는 쓰기위한 데이터가 넘어오면 타임리프형식의 코드를 써서 데이터를 뿌릴 수 있음
<p th:text="'Hi' + ${data}">Welcome!</p> = request.getAttribute와 같은 로직
- 어떻게 동작되는지 자세히 보자
- 컨트롤러에서 GetMapping(URL주소와 같다고 보자)에 따라 페이지가 결정
- GetMapping에서 캐치한 URL주소에 정의된 함수로 이동
- Model 객체가 키와 밸류로 필요 데이터를 저장하고 리턴으로 문자를 반환하면 'viewResolver'가 문자에 지정된 탬플릿을 찾아 처리한다 (viewResolver의 기본 viewName매핑 기능 => resources:templates/'+{ViewName}+'.html'. 즉 resources:templates/'hello'.html' 을 찾음)
- 스프링 웹 개발 기초
- 스프링 웹 개발시에 가장 기초 개념은 정적컨텐츠기능/MVC+텀플릿엔진/API로 구분 된다.
1) 정적컨텐츠기능
- 만들어놓은 파일을 그대로 클라이언트에 던지는 것. 프로그래밍이 불가능한 컨텐츠.
- 위에서 언급한대로 static에서 처리 가능
설명대로 만들어놓은것을 그냥 주고받기만 할 수 있음 MVC 개념이 아니기때문에 부트에서 컨트롤러를 거치지않고 바로 static이하로 가서 맞는 파일을 찾아서 클라이언트에 뿌려줌 2)MVC와 템플릿 엔진
- M(Model)V(View)C(Controller)라고 불리는 개발의 가장 기초적인 개념이다.
- Model은 데이터를 담거나 넘겨주는 역할, Controller는 비지니스로직(코드), 뒷단처리등을 처리, View 화면을 그리는데에만 집중
*Controller @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } *hello-template.html <body> <p th:text="'hello'+${name}">hello! empty</p> </body>
param을 채워야 작동이 된다! - 앞에서 간단하게봤던 동적개념과 같다고 보면 된다. 작은 차이점은 MVC모델에서는 파라미터를 받아와서 모델에 저장 후 뿌릴 수 있다는 것.
- 컨트롤러 -> 모델 -> 뷰 의 프로세스를 기억하자!
3) API
- API(Application Programming Interface)의 약자로 응용프로그램에서 사용할 수 있도록 운영체제나 프로그래밍언어가 제공하는 기능을 제어가능하도록 만든 인터페이스를 뜻한다.
- API는 크게 3가지의 역할을 한다
- 서버와 데이터베이스에 대한 출입구 역할 (허용된 사람들만 접근성 부여)
- 애플리케이션과 기기가 원할하게 통신하는 역할(프로그램과 서버)
- 모든 접속을 표준화하는 역할(모든 접속을 표준화 하기 때문에 기계/운영체제 상관없이 누구나 엑세스 가능)
- 김영한님의 조언: 정적컨텐츠를 제외하면 두가지만 기억하자
1) HTML로 뿌리냐
2) API로 데이터를 뿌리냐
*Controller @GetMapping("hello-string") @ResponseBody //-> HTTP 응답 바디 부분에 내가 데이터를 직접 넣겠다 라는 뜻 public String helloString(@RequestParam("name") String name) { return "hello " + name; }
- 뷰를 담당하는 템플릿을 탈 필요도없이 원하는 데이터 값을 뿌릴 수 있다.
- 또한 페이지 검사를 해봐도 HTML이 전혀 없는 것을 볼 수 있다.
- 또 하나의 예제를 보자
static class Hello { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } } *Controller @GetMapping("hello-api") @ResponseBody public Hello helloApi(@RequestParam("name") String name) { Hello hello = new Hello(); hello.setName(name); return hello; }
- JSON형태로 나오는 것을 볼 수 있다
- @ResponseBody가 있으면 HttpMessageConvert가 작동을 하면서 HTTP BODY의 문자내용이 기본 문자이면 String, 객체형태이면 Json 컨버터로 처리가 되어지고 화면에 뿌려지는 것
- 웹 개발에서의 API는 객체를 반환할때 도와주는 역할 (뷰없이 데이터를 JSON형태로 바꿔 바디에 넣어 주는 것)
다시 상기하자. 웹 개발은 3가지로 이루어진다 1)정적컨텐츠의 기능 2)MVC/템플릿엔진 3)API
'스프링 > 스프링부트+JPA - 블로그' 카테고리의 다른 글
스프링부트+JPA 블로그 프로젝트 04 부트와 JPA의 필수 개념 (JSON/영속성/어노테이션 그리고 CRUD 테스트) (0) 2021.08.28 스프링부트+JPA 블로그 프로젝트 03 DB세팅, 모델링, 연관관계 (0) 2021.08.27 스프링부트+JPA 블로그 프로젝트 02 환경 설정 (0) 2021.08.27 스프링부트+JPA 블로그 프로젝트 01 스프링 기본 개념 (0) 2021.08.27 스프링입문 - 백엔드 개발, 빈과 의존관계, MVC패턴 (0) 2021.08.26