스프링 입문 섹션 1~3

Tamszero·2025년 5월 3일

ECC

목록 보기
6/17

1장은 기본적인 내용이라 라이트업 생략


2장

프로젝트 생성

  • 환경설정
    JDK 17버전 이상
    intellij or Eclipse (해당 내용은 인텔리를 사용함)

  • https://start.spring.io/ 를 통해 프로젝트 생성하기
    사이트에 접속하여 설정을 아래 사진과 같이 세팅한 후 프로젝트를 다운받는다


ADD를 누르고 필요한 dependency 추가

마지막으로 맨 밑의 generate를 누르면 프로젝트가 다운받아지는데
원하는 폴더로 옮겨 압축을 해제시켜놓는다

그 후 intellij에서 열기를 통해 압축해제 시켜 놓은 프로젝트 폴더의
build.gradle을 선택한 후 프로젝트로 열기를 선택하면 된다

((gradle은 버전을 설정하고 라이브러리를 땡겨오는구나...!만 알면 된다고 설명하심))

프로젝트를 열고 리소스 - 메인을 실행하려고하다보니 무슨 자바 설정 오류인지 빌드 오류인지가 생겨서 확인해보니 스프링부트에서 지원하는 자바 버전이랑 다른 버전을 쓰고있었음
다시 21 버전을 깔고 실행 (24 먼저 깔았더니 또 intellij에서 지원을 안 하는 이슈 ㅋㅋ)

드디어 메인 메서드 실행 성공

트리에서 src -> main -> java -> HelloSpringApplication을 선택한후 메인 메서드 실행을 시키면 앱이 실행된다

아래에 정보들을 살펴보면 웹서버가 열린것을 확인이 가능하다
tomcat(웹서버)을 통해 포트 8080으로 웹브라우저 접속이 가능

루프백주소를 통해 들어갔을 때 에러페이지가 뜨면 접속 성공

라이브러리 살펴보기

  • gradle / maven에 필요한 라이브러리를 알아서 싹 다 가져와줌
    요즘엔 소스 라이브버리에서 웹서버를 들고있음 (임베디드형태임)
    톰캣서버를 따로 설치할 필요가 없어짐

뷰 환경설정

welcome page 만들기

이제 에러페이지가 아닌 정상적인 페이지가 나오도록 페이지를 구성해보자
src -> main -> resources -> static으로가 새 파일 만들기 후
index.html파일을 만든다

html 작성

저장 한 다음 앱을 다시 실행시키고 브라우저에 접속해보면 사진과 같은 페이지가 뜬다

스프링 부트가 제공하는 welcome page 기능

[spring.io] 사이트를 통해 필요한 기능을 서치해가며 메뉴얼을 공부해나가는 것이 중요

Welcome Page
Spring Boot supports both static and templated welcome pages. It first looks for an index.html file in the configured static content locations. If one is not found, it then looks for an index template. If either is found, it is automatically used as the welcome page of the application.

템플릿 엔진

  • 동적 페이지를 위해서는 템플릿 엔진을 사용해야함
  • thymeleaf 엔진 사용

src -> main -> java -> hello.hello_spring 폴더에 controller 패키지를 만든 후 helloController를 작성한다

  - 스프링은 컨트롤러를 작성할 때 @Controller를 써야함
  - @GetMapping("hello") -> 웹 어플리케이션에서 /hello를 접속할 경우 아래 해당 메서드를 호출해준다
  - model -> mvc
  - key : data, value : hello!
  - return "hello" -> 템플릿 밑에있는 hello 모델(html)을 찾아서 렌더링을 해라

src -> main -> resources -> templates에 hello.html을 작성한다

- <html xmlns:th="http://www.thymeleaf.org"> -> 템플릿 th(Thymeleaf) 선언으로 템플릿 구문 작성 가능
${data} -> data(model의 key)의 value인 hello로 치환됨

저장후 앱을 재실행하여 웹 브라우저를 접속해보면 hello페이지를 아래 사진과 같이 확인할 수 있다

  • 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버가 화면을 찾아 처리함
    • resources:templates/ + (ViewName) + .html
    • 여기서는 뷰 네임이 hello였으므로 template/의 hello.html을 찾아 렌더링함
  • spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View파일 변경이 가능하다
    인텔리j 방법 : 메뉴 build -> Recompile

빌드하고 실행하기

cmd를 통해 빌드를 해주고 실행하기

  1. 스프링 파일이 있는 폴더로 이동한다 cd ~~
  2. gradlew.bat을 입력해 실행
  3. gradlew build 를 입력해 실행
  4. 빌드를 성공하면 cd build 로 이동
  5. cd libs로 이동
  6. java로 jar 파일 실행

실행을 완료하고나면 아까처럼 웹 브라우저에 접속이 가능하게 된다.

3장


스프링 웹 개발 기초

  • 정적 컨텐츠 : 파일을 그대로 웹에 내려주는 것
  • MVC와 템플릿 엔진 : 템플릿 엔진은 서버에서 html을 프로그래밍 해서 동적으로 바꾸어 내려주는 것, MVC는 model view controller를 지칭한다
  • API : json이라는 데이터 구조 포맷으로 클라이언트에게 전달하는 방식

정적 컨텐츠

따로 프로그래밍은 할 수 없고 그냥 코드 그대로 페이지만 반환해줌
Static Content
By default, Spring Boot serves static content from a directory called /static (or /public or /resources or /META-INF/resources) in the classpath.
-> static폴더 하위에 html파일을 만들어 넣으면 끝

먼저 스프링 부트는 hello-static의 컨트롤러를 찾는다.
맵핑된 컨트롤러가 없으면 내부에 있는 static html을 찾아 렌더링tatic html을 찾아 렌더링해 보여줌

MVC와 템플릿 엔진

  • MVC : Model, View, Controller
    controller는 비지니스 로직이나 내부적인걸 처리하고 model에 필요한 걸 담아 화면에 넘겨주는 역할을 한다
    view는 화면을 그리는 데에만 집중

HelloController에 @GetMapping("hello-mvc") 추가로 작성

넘겨줄 hello-template 작성

파라미터 Exception 발생: .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]

-> RequestParam의 옵션중 required의 디폴트 값은 True이므로 값을 넘겨줘야한다


Get방식을 이용해 name파라미터에 값을 넘겨주면 위 사진과 같은 화면을 볼 수 있다

API

정적컨텐츠가 아니라면 -> html로 내리냐 API방식으로 데이터를 내리냐

Hello-Controller에 추가

@ResponseBody -> http의 body부에 응답내용을 직접 넣어주겠다는 의미
응답내용이 서버에 그대로 내려감

위 페이지를 소스보기 한 모습

문자가 아닌 데이터를 제공받아야할 때가 많기 때문에 api 방식을 많이쓴다

Hello-Controller에 hello-api추가


-> 데이터를 Json으로 반환하는 형태

@ResponseBody 사용원리

문자는 그대로 전달,
문자가 아니라 객체가 전달될 경우 -> Json방식으로 데이터를 넘겨 반환
ViewResolver 가 아닌 -> HttpMessageConverter가 동작
기본 문자처리: StringHttpMessageConverter
기본 객체처리: MappingJackson2HttpMessageConverter

0개의 댓글