인프런 김영한님 강의를 듣고 정리하려고 한다. (정리를 그렇게 잘하는 편은 아니지만.. 일단 정리하면서 내 머릿속도 같이 장리한다는 느낌으로)
스프링을 하면 이제 https://start.spring.io/ 여기서 스프링 파일을 생성할텐데
project를 보면 Gradle 과 Maven이 존재한다. 둘다 쉽게 말해서 라이브러리를 땡겨오고 빌드까지 관리해주는 툴을 말한다
과거에는 Maven을 썼지만 요즘은 Gradle로 넘어왔기때문에 일단 이렇게 알아두면 됨
또 버전에 관해서 괄호하고 SNAPSHOT이라고 적혀있는거는 아직 만들고 있는 버전이라고 생각하면 된다 실험중인 버전이라고 생각하면 될듯-> 선택하면 안됨
Group에는 보통 도메인을 거꾸로 적는다
Artifact에는 프로젝트 명
중요한건 Dependencies에 각종 라이브러리를 추가할 수 있는데 나중가면 많은것을 추가하겠지만 일단 spring web, thymeleaf 를 추가했다. thymeleaf 같은 경우는 -> html 템플릿 엔진이라고 보면되는데 MVC 방식에서 이용되는 라이브러리 이다.
선택을 한 후 폴더를 보면 여러개가 있는데
main과 test가 나눠져 있다. main에 자바에는 실제파일들이 있다. (test가 요즘에 되게 중요하다고 한다.)
resources에는 java파일을 제외한 나머지 파일이 있다 ( 장고에서 템플릿관리하는것처럼 )
스프링을 이렇게 해서 생성하면 git.ignore도 딸려온다.. ( 장고 예전에 올릴때 큰 프로젝트는 아니었지만 이거떄문에 좀 시간이 소요됐었는데 스프링 생각보다 착한애 일수도..?)
또 최근 Intellij 버전은 Gradle을 통해서 실행하는게 기본 세팅이기 때문에, 실행 환경을 좀 변경하면 실행속도를 더 빠르게 할 수 있다. 아래 참고

또 내장 톰켓도 같이 존재함
그리고 내가 선택한 것은 spring web, thymeleaf를 가져왔는데 많은 라이브러리 들이 존재하는데, Gradle이나 Maven이 의존관계로 이뤄져있는 라이브러리들을 다 땡겨왔다고 할 수 있다.( 이친구들이 다 관리를 해준다)
라이브러리를 좀 나열해보자면
스프링 부트 라이브러리
spring-boot-starter-web s
pring-boot-starter-tomcat: 톰캣 (웹서버)
spring-webmvc: 스프링 웹 MVC
spring-boot-starter-thymeleaf: 타임리프 템플릿 엔진(View)
spring-boot-starter(공통): 스프링 부트 + 스프링 코어 + 로깅
spring-boot
spring-core
spring-boot-starter-logging
logback, slf4j
테스트 라이브러리
spring-boot-starter-test
junit: 테스트 프레임워크
mockito: 목 라이브러리
assertj: 테스트 코드를 좀 더 편하게 작성하게 도와주는 라이브러리
spring-test: 스프링 통합 테스트 지원
또 spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다.
또한 스프링 부트에서는 스프링 생태계를 제공하고, static에 index.html을 만들면 이게 기본화경이 된다
이제 웹 개발에 대해서 얘기를 좀 하자면
웹 개발은 보통
정척컨텐츠
MVC & 템플릿 엔진
API 방식
이렇게 3가지 방식이 있다 하나씩 살펴보자면
1. 정적 컨텐츠

정적컨텐츠는 웹 프라우저에서 url을 보내면 맨 처음 스프링 컨테이너에서 해당 url관련 컨트롤러를 먼저확인하는데 없을경우 static에 url에 적힌 html파일이 있는지 확인 후 있으면 그 페이지를 그대로 보여주게 된다.
2. MVC
MVC 방식은 Model, View, Controller (Django에서 MTV와 이름만 다른 것)3글자 약자로 저 Model,View,Controller를 이용해서 페이지를 가공해서 유저에게 보여주는 방식으로 컨트롤러가 모델에 값을 넣어서 viewResolver에게 전달하고 이 Resolversms HTML로 변환해서 값을 보낸다 (thymeleaf가 여기서 쓰임)
thymeleaf가 말이 나와서 추가로 설명 하나만 하자면 thymeleaf는 절대경로를 크롬창에 복붙하면 서버 없이 바로 화면 여는게 가능하다.
3. API
마지막으로 API방식은 뷰 리졸버를 이용하는 것이 아닌 웹 프라우저에게 Json 값을 전달하는 방식이다. 현재 제일 많이쓰이고 있다.(Django에서 DRF방식)
url이 넘어오면 컨트롤러에 @ResponseBody 어노테이션이 적혀있으면 HTTP에 BODY에 문자 내용을 직접 반환한다.
이때 viewResolver 대신 HttpMessageConverter가 동작한다.
문자 처리는 StringHttpMessageConverter가 처리하고 객체처리는 MappingJackson2HttpMessageConverter가 처리한다.
그 밖에 byte 처리 등 HttpMessageConverter에 여러 기능이 있다.
추가로 객체를 Json으로 바꿔주는 라이브러리가 유명한것이 2개 있는데 하나는 jackson과 Gson이 있다.
스프링은 기본적으로 jackson을 탑재되어있다.(그래서 위에 jackson2 라고 적혀있음)
Gson같은경우는 구글에서 만든 라이브러리다.
package hello.hellospring.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("hello") // url 매핑인거같음
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello"; // hello라는 파일을 찾아서 렌더링해라 라는 의미(templates 아래에 있는 hello를 찾음)
}
@GetMapping("hello-mvc")
public String helloMVc(@RequestParam(name= "name", required = false) String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name; //"hello spring"
}
// 진짜 real
// JSON 값을 보냄
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello { //static class를 이욯하면 class 내 클래스 사용 가능
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
}
컨트롤러 코드만 가져왔다. Django를 할줄 알아서 Django와 비교될 수 밖에 없는데 일단 django와 다르게 컨트롤러에 @GetMapping 어노테이션을 이용해서 url 매핑을 같은 파일에서 진행항다
또 객체를 반한할때 게터세터 방식을 이용한다 (다들 이렇게 부른다고 함)
'JAVA & SPRING > Spring 입문' 카테고리의 다른 글
스프링 입문 강의 - 5일차(AOP) (0) | 2023.07.20 |
---|---|
스프링 입문 강의 - 5일차(JDBCTemplate, JPA, 스프링데이터 JPA) (0) | 2023.07.20 |
스프링 입문 강의 - 4일차 (MVC, 순수 JDBC) (0) | 2023.07.19 |
스프링 입문 강의 - 3일차 (스프링 빈, Controller) (0) | 2023.07.18 |
스프링 입문 강의 - 2일차 (스프링 계층 구조) (0) | 2023.07.14 |