김영한님의 스프링 입문 강의를 듣고있습니다. 필기 용 요약 본.
Maven?, Gradle? -> 프로젝트 관리 및 빌더,
언어적 : XML, Groovy
설정 : 상속, 주입
찾아보니 대략적으로 이정도 차이가 있는 듯 합니다. 프로젝트가 커질수록 Gradle이 좋답니다! Gradle로 갑니다.
먼저 MVC에서 C를 담당하는 클래스를 @Controller 어노테이션으로 만든 뒤
내부에 각각 요청을 어떻게 다뤄야할 지 컨트롤하는 메서드를 작성할 수 있다.
// java/hello/hellospring/controller/HelloController.java
// (겁나 길다)
@Controller
public class HelloController {
@GetMapping("hello")
public String hello(Model model) {
model.addAttribute("data", "hello!!");
return "hello";
}
}
가장 기초적인 예제, Controller 어노테이션으로 인해 프레임워크가 알아서 해당 클래스를 컨트롤러로 사용. 내부 메서드에서 GetMapping 어노테이션으로 인해 /hello url로 요청이 왔을 시, 리턴한 hello.html을 랜더링 해준다.
컨트롤러에서 리턴 값으로 문자를 반환하면 viewResolver가 알아서 화면을 찾아 처리한다.
templates/hello.html을 알아서 매핑해줌.
model에 key, value 형식으로 넣은 속성은 이후 hello.html에서 동적으로 보여주이는데 쓰인다.
장고에선 urls.py에서 요청된 url을 views.py의 함수에 매핑해줬다면 여기선 이렇게 한번에 처리 가능.
<!--resources/templates/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="'안녕하세요. ' + ${data}" >안녕하세요. 손님</p>
</body>
</html>
${data}가 앞선 hello 메서드에서 넣은 "hello!!" 값으로 나타난다.
p 태그의 th: 부분과 ${data} 부분이 타임리프를 사용한 변수 할당
(django에선 {{}} 태그를 이용한 변수 할당)
부분인데, 일단 백엔드에 집중한 수업이라 대충 복붙하는 모습이었다.
스프링 부트는 요청이 들어왔을 때 먼저 컨트롤러 클래스에 해당 요청이 매핑된 컨트롤러가 있는지 보고 없으면 정적 컨텐츠를 찾아서 보여준다.
resources/static 폴더에 넣은 html 파일에는 정적으로 바로 접근할 수 있다.
컨트롤러 메서드 인자로 @RequestParam 어노테이션을 사용하여 파라미터를 받을 수 있음.
(사실 찾아보니 안써도 되긴 된다는데, 설정 값을 줄 수도 있고, 일단 쓰자)
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name", required = false) String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
url뒤 ?key=name 식으로 인자 전달
이러한 동적 view 처리는 Thymleaf 템플릿 엔진이 해주고 있음.
@ResponseBody 어노테이션을 컨트롤러위에 추가하여 html을 veiwResolver를 사용하여 변환하여 보여주는 것이 아니라, 메서드의 리턴 값 자체를 http 바디에 직접 반환해줄 수도 있다.
이때 문자와 객체가 반환 가능하고 기본 처리방식은 HttpMessageConverter를 사용함.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name) {
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Hello 객체를 만든 뒤 ResponseBody 어노테이션과 함께 객체를 반환해주는 모습
어디서 자주 본 모양, API 사용해서 데이터 가져올 때 자주 본 json 형식이다.
여기까지가 아~~~주 기초적인 웹 개발이었고, 다음에는 쓸 게 많아서 한번 끊겠습니다.
파이썬에 장고만 좀 하다가 취업을 위해 스프링과 자바도 공부를 시작하게 되었습니다.
자바 문법 자체가 확실히 스트릭트해서 아직 미숙하여 코드작성이 느리지만, 장고를 할 때는 자유도가 커서 그런가 설계에 대한 고민 없이 그냥 하라는대로 따라했었습니다.
스프링 부트에선 오히려 이 스트릭트함 덕분에 구조가 어떻게 돌아가는지, 객체를 어떻게 써야할지 좀 더 고민하게 되고 코드에서 잘 보인다고 해야할까요.
알고리즘이나 계산 연구 등에서는 편의를 위해서 파이썬이 매우 편합니다만 안정적이어야하고 단단?해야하는 서버를 짤 때는 자바가 오히려 깐깐해서 좋겠다라는 생각도 듭니다.
굉장히 쉽게 알려주셔서 과연 명강의라고 생각듭니다.
화이팅입니다 취뽀 성공 기원입니다