스프링 입문 (김영한) 강의 요약 (1)

Jeuk Oh·2021년 9월 24일
1

스프링

목록 보기
1/3

김영한님의 스프링 입문 강의를 듣고있습니다. 필기 용 요약 본.

1. 프로젝트 환경설정

  • IntelliJ 설치
  • JDK 11 설치
  • Spring Initialize 에서 Gradle Project, Java 11
    Dependencies 에서 웹개발을 위한 Spring Web과 동적인 HTML을 제공하기 위한 view template인 Thymeleaf 를 추가하여 스프링 기본 프로젝트를 생성

Maven?, Gradle? -> 프로젝트 관리 및 빌더,
언어적 : XML, Groovy
설정 : 상속, 주입

찾아보니 대략적으로 이정도 차이가 있는 듯 합니다. 프로젝트가 커질수록 Gradle이 좋답니다! Gradle로 갑니다.

2. 스프링 웹 개발 기초

먼저 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에선 {{}} 태그를 이용한 변수 할당)

부분인데, 일단 백엔드에 집중한 수업이라 대충 복붙하는 모습이었다.

2-1 정적 컨텐츠

스프링 부트는 요청이 들어왔을 때 먼저 컨트롤러 클래스에 해당 요청이 매핑된 컨트롤러가 있는지 보고 없으면 정적 컨텐츠를 찾아서 보여준다.
resources/static 폴더에 넣은 html 파일에는 정적으로 바로 접근할 수 있다.

2-2 MVC와 템플릿 엔진

컨트롤러 메서드 인자로 @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 템플릿 엔진이 해주고 있음.

2-3 API

@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 형식이다.

3. 백엔드 개발 - 회원 관리 예제

여기까지가 아~~~주 기초적인 웹 개발이었고, 다음에는 쓸 게 많아서 한번 끊겠습니다.


느낀 점

파이썬에 장고만 좀 하다가 취업을 위해 스프링과 자바도 공부를 시작하게 되었습니다.

자바 문법 자체가 확실히 스트릭트해서 아직 미숙하여 코드작성이 느리지만, 장고를 할 때는 자유도가 커서 그런가 설계에 대한 고민 없이 그냥 하라는대로 따라했었습니다.

스프링 부트에선 오히려 이 스트릭트함 덕분에 구조가 어떻게 돌아가는지, 객체를 어떻게 써야할지 좀 더 고민하게 되고 코드에서 잘 보인다고 해야할까요.

알고리즘이나 계산 연구 등에서는 편의를 위해서 파이썬이 매우 편합니다만 안정적이어야하고 단단?해야하는 서버를 짤 때는 자바가 오히려 깐깐해서 좋겠다라는 생각도 듭니다.

굉장히 쉽게 알려주셔서 과연 명강의라고 생각듭니다.

profile
개발을 재밌게 하고싶습니다.

2개의 댓글

comment-user-thumbnail
2021년 9월 25일

화이팅입니다 취뽀 성공 기원입니다

1개의 답글