시작하기 전에 사족

  • 나의 스프링 역사는 작년 이맘때쯤 시작됐다. (2020년 2월)
  • 백엔드 개발자가 되기 위해 호기롭게 한권의 책으로 시작했으나 당시 나한텐 자바 언어를 떠나서 OOP에 대한 지식이 없었다. 세상에 프로그래밍을 위한 책이 모두 완벽하면 좋겠으나 다른 분야의 책들도 정오표를 내는 마당에 사전 지식없이 오류에 부딪히기엔 너무 버거웠다.
  • 책 앞부분 부터 예제의 오류로 대부분의 시간을 보내다가 결국 포기했었다.
  • 이후 진입장벽이 낮은 파이썬의 flask등으로 방황하다가 작년 12월 우테코 3기 이후로 다시 자바로 돌아오게 되었다. 이 블로그를 어떻게 하고있는 것도 그 영향이다.
  • 스프링 코어를 이제 마무리하고 다시 스프링 부트로 돌아와본다. 지금 와서 책을 다시 펴보니 코드와 문맥이 확실히 눈에 들어온다.
  • 이 책은 아직도 개정판을 내지 않았으며 오류가 있는 코드를 그대로 증쇄해다 팔고있다. 오류 수정이 반영이 되있는 부분은 깃에 있는 완성된 예제코드 뿐이다. 심지어 정오표에도 코드에 대한 언급이 없다.
  • 그러나 시중에 나와있는 스프링부트 책 중에서는 가장 문장이 괜찮고 진행 속도가 아주 빠른편이다. 그만큼 생략된 부분도 많아서 절대 스프링 사전 지식 없이는 볼 수 없는 책이다..
  • 그래서 또 많은 시간을 오류와 씨름해야할 것 같지만 우리의 InteliJ와 나의 작은 성장으로 어떻게든 비빌 수 있길 바란다.
    • -

스프링 부트

  • 레퍼런스
  • 스프링부트는 웹서버를 들고 있다. (톰캣)
  • 탬플릿은 thymleaf을 많이 쓴다.

스프링 부트 프로젝트 생성

  • 스프링 부트 프로젝트 생성기 Spring boot initialzr

    초기자 설정

  • Gradle
  • SNAPSHOT은 unstable이라 잘 찍지 않는다
  • Jar
  • Java 11
    라이브러리 의존 선택
  • Spring Web
  • Thymleaf

    두가지를 선택하면 자연스럽게 의존이 걸린 라이브러리들이 따라온다. (spring-core, slf4j, logback ...)

스프링 컨테이너 속 스프링 부트

@Controller

@GetMapping

  • Model
    • addAttribute()
    • 반환값으로 viewResolver가 resources의 thymleaf 탬플릿으로 만든 페이지를 찾아간다.

Build

gradlew build
gradlew clean build

정적 컨텐츠

  • 기본적으로 /static, /public, /resources 폴더에서 찾는다.
  • 관련 컨트롤러를 먼저 찾다가 스프링 컨테이너에 없으면 정적 컨텐츠로 요청을 보낸다.

MVC와 템플릿 엔진

  • Model, View, Controller
  • 예전엔 view와 controller를 합쳐서 개발했다 (모델원-jsp)
  • 하지만 관심사를 분리해야한다. 역할과 책임.
  • view는 화면을 그리는데 집중하고, controller는 비즈니스 로직에 집중해야 한다.

API

@ResponseBody

  • mapping에 @ResponseBody가 붙어있으면 스프링에서 HttpMessageConverter로 넘긴다.
  • 그리고 JsonConverter와 StringConverter로 분기한다.
  • 문자 처리 : StringHttpMessageCoverter
  • 객체 처리 : MappingJackson2HttpMessageConverter
  •  

Comments