오전에 프로젝트를 하나 만든 것
//
maven 역할 vs Sping 역할 vs Spring Boot의 역할
1) maven
- POM 파일 안에
- 프로젝트에 소속된 오브젝트들을 관리하는 것
- maven이 일하도록 하는 지시사항
프로젝트 골격은 이렇게 하고 ~
- <parent> 안에 프로젝트 골격 </parent>
src > main, tet ...
- <properties> 플러그인들이, depecdency가 사용하는 전역변수같은.
안에 마음대로 이름 정의 가능
ex) <a>33</a>
<x>44</x> -> 이거를 클라이언트나 디펜던시가 가져다가 사용...
- <build> 생명주기. 각 단계별로 사용되는 플러그인
지금 우리 프로젝트에서는 플러그인 한 개가 들어가 있는 것
- <dependecies> 굉장히 중요.
예전에 gson이라는걸 떠올리면...
이제는 jsp를 view단으로 기본적으로 처리하지 X + 톰캣의 향기가 나지 않음...
- gson 다운 받으려면 : 공식 사이트 가서 다운받아야
이제는 그럴 필요 x
maven repository 검색하면 maven에서 프로젝트에서 사용할 라이브러리 다 가지는 곳
아키텍처 타입, 라이브러리 다 가지고 있는 곳
-> gson 검색하면 ... 예전에는 직접 jar 다운받아서 > lib에 직접 카피해서 두고 그랬는데 ...
이것때문에 maven 쓴다고 봐도 무방... 너무 편해짐!!!
// gson은 예제로 가지고 온 것 (지금 예제에서는 필요 x)
Spring은?
- maven 도움을 받아서 자기가 필요한 dependency를 통해 다운받게 하고 배포하게 하는
- 스프링은 just 기본 틀을/라이브러리를 가져오는.
- 스프링은 그냥 라이브러리!!!
@ 어노테이션 자체가 라이브러리임.
이렇게 @어노테이션 쓰려면 설정들을 해줘야하는데, Boot의 등장으로 그게 없어진 것!
cf) 과거에는 xml 형태 or dispatcher(?).
Boot 쓰면 이걸 볼 경우 없을 것.
- 이걸 더 알고 싶으면 과거를 알아야 하는건데 그건 유튜브를 볼 것
Spring Boot는
-
이 안에 톰캣이 있다는 것.
그리고 디렉팅해서 찾아나설 수 있는 기능을 한다는게 핵심 @들
boot가 spring을 깨움 > 1) di 기능 2) transation 처리 3) mvc url 매핑 4) 타임리프 설정
깨어나자마자 "url 매핑은 @ 해놨어. url 들어오면, 패키지 안을 다 뒤져봐. 있을거야.
- 근데 패키지가 너무 많다면?
그거 찾는데 성능에 문제가 있을 것 같으면 설정하는법 있음
-
Q. 예전에는 8~11번째줄처럼 각 기능들마다 패키지, Controller를 만들어줬었는데, 왜 지금은 HomeController 하나만 만들까?
-> 이제는 컨트롤러 만드는 방법도 달라진 것
Controller
- 기존의 컨트롤러가 가진 문제점 : 서비스 하나만 매핑하는로 해왔음...
-> 이제는 class가 대상이 아니라 함수가 대상이 되기 때문에, '진정으로 바람직한' 매핑이 이뤄진 것
그 전에는 함수에 매핑이 안되서 class마다 만들고... 한 함수만 매핑하고...
모든 url을 HomeController에 다 매핑시킬 수 있는.
원하는대로 다 넣을 수 있는!
Q.
-> 이름 겹치는게 싫으면 Controller 폴더를 분리할 필요는 있겠지.
규모가 작으면 굳이 나눌 필요는 없지만
//
함수명 앞에 나온게 class / 그 앞에 패키지
우선 @RestController로
-> 컨플릭트 남
class 이름 같으면 문제가 남 (DI 할 때 설명하도록 하겠다.)
-> 이름 같으면 안 됨
- '큰 컨테이너'에 담겨지는데 @Controller 붙은 얘들은
-> 이름이 같으면 (보따리에 소문자로 바뀌어서 'noticeController' 되는데) 컨플릭트남
bean 이름 = 객체 이름
(일반적으로는 objcet 이름이라고 해야하는데 bean 이름을 좋아한다고 ㅎㅎ)
- (커피)콩이 2개가 있는데 이름이 다 noticeController이니.
6번째줄처럼 이렇게 이름을 바꿔줘야
- 위에랑(디폴트) 헷갈리지 않도록
-> 그럼 정상적으로 실행됨 (url에 직접 쳐서 보면)
// 컨트롤러를 만드는걸 했다.
우리가 jsp 이용해야함
출력이 간단한건 상관이 없는데...
-> /index 들어왔을 때의걸 만들어보자
help > 이클립스 market plae >
web > other > html 문서 추가 가능
설정들 바꿔주기
이전에 했던 view 폴더를 그냥 통째로 가지고오기
list.jsp 이제 사용할 수 있게끔 하자.
index 가지고 있는 HomeController에서 이제
-> @rest 지우고
1) return "index"가 사용자에게 그냥 갈 경우 @rest
- 바로 출력을 의미
2) @rest 지우는거면, view 페이지명을 담게되는 것
- 포워딩을 의미
Q. rest란?
- 객체를 데이터로 표현하는...
CSV
- 콤마로 구분된 value
- 이거의 단점은 '순서' 기반이라는 것
순서를 바꾸면 값이 바뀔 수 있음
-> transfer는 객체 상태가 가는 것
뭔가 전달법이 필요함
이런걸 data API 라고 함
요즘 핫한 표현방식은 바로 'JSON'
// "객체 데이터를 전달하는 녀석으로서의 API = REST API"라고 함
- 문서 반환이 아니라 REST(객체 상태)를 반환하는거라면, @RestController는 상태를 반환하는거로 본다는
세상이 요구하는 get 요청이 나누어져 있다보니
-> html 출력을 Controller에서 하는 것은 올바르지 않다.
return "<html> ... 이런건 옳지 않음
-> 뒤의 엔진들에게 일하라고 포워딩 해야함.
@restController -> 그냥! 출력함
@Controller -> 실행하게 하도록 함
-> 이러고 url에 index를 호출하면
저~~절로 JSON 형태로 그대로 transfer 해줌.
스프링의 어마어마한 걸 느껴보기
만약에 배열에 담았다면
-> 이번엔 배열로 반환을 해줌!
요지는 요청 타입 2개인데 데이터는 중간에 api를 껴서
view, entity 폴더 복사해서 붙여넣는거 하기
- entity는 패키지도 만들어서!
src/main/recources > static 폴더에 html 파일 하나를 만들어보자.
이전에 만든 list.html을 복붙해서 가지고 옴
서버 연결된 상태에서 url 주소 수정해서 /list.html 하면 나옴
view 단 처리하는거 만들면 templates 아래 만듦 (타임리프 사용할 수 있는 공간!)
-> aa.html
서버에서 url 수정해서 누르면 에러남
-> web-app 폴더 만들고 > WEB-INF 폴더 만들고 > 그 안에 aa.html 넣어야
서버 재시작
1. 기존의 html, css, js들 두는 곳
2. 타임리프
3 > view 폴더 만든 다음에
서버코드 (jsp)
//
지금 templates 아래 빼고는 다 나오는게 맞음 (뭘 설정 안해줘서)
- bb.html 은 view 밖에 webapp에 넣어주는 것 (클라이언트가 WEB-INF에는 접속을 못하니!!)
제일 먼저 다뤄볼 것은... 타임리프!
위에서 Controller에서 데이터 마련
-> 마련된 데이터를 view에서 포워딩해서 처리하게 함
72일 - cookie (서블릿에서 vs Spring에서), 생명주기 영역, 가시 영역 (2) | 2021.06.02 |
---|---|
Spring을 통해서 도대체 뭐가 편리해진걸까 (업데이트 ing) (0) | 2021.06.02 |
72일 - ★스프링이란 (=프론트 컨트롤러=Spring MVC 라이브러리= Dispatcher Servlet), devtool 라이브러리 추가하기, @GetMapping, @PostMapping (0) | 2021.06.02 |
71일 - Boot 프로젝트 만들기, @Controller 통해 출력해보기 (feat. sts에 maven 프로젝트 실행) (2) | 2021.06.01 |
70일 - Spring 첫 시작. maven 프로젝트 빌드업 (0) | 2021.05.31 |