영운's 블로그

스프링 입문(1) - 프로젝트 환경설정, 스프링 웹 개발 기초 본문

스프링 강의 정리/스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 입문(1) - 프로젝트 환경설정, 스프링 웹 개발 기초

오영운(you88) 2022. 5. 24. 16:02

 

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

해당 글은 김영한님의 스프링 입문을 강의를 들으며 개인적으로 정리한 내용입니다.

모든 자료의 출처는 김영한님의 스프링 입문 강의임을 미리 밝힙니다.

 

실습 코드: https://github.com/you88311/spring-example1

 

 

프로젝트 환경설정

 

1. spring initializer

 

스프링 시작을 편하게 해주는 스프링 자체에서 제공하는 홈페이지

https://start.spring.io/

 

 1) project

maven ? gradle ?

 

필요한 라이브러리 가져오고 빌드 라이프사이클까지 모두 관리해주는 툴.

요즘은 gradle을 많이 사용함

버전설정 및 라이브러리 가져오는 툴이다라고 일단 생각하자

 

2) language

당연히 자바

 

3) spring boot

스프링부트 버전 선택하는 

뒤에 영어로 snapshot , m1등이 붙은 건 아직 개발중인 베타버전 같은거

아무이름 없는 버전 중 최신버전 선택하자

 

4) project metadata

group: 보통 기업명

artifact: 프로젝트 명

 

5) dependencies

어떤 라이브러리 사용할 건지

웹 만들거니 spring web

html을 만들어주는 템플릿 엔진?? thymeleaf(타임리프라고 부름)

 

여기에 하나의 라이브러리를 implementation을 넣으면 이 라이브러리에 필요한.. 의존관계를 갖는 다른 라이브러리들을 다 가져옴

 

2. 프로젝트 구조

 1).idea

인텔리제이 설정파일

 

2) gradle

 

3) src/main

 

  3)-1 src/main/java

실제 자바 코드 controller, service, domain 등등

 

  3)-2 src/main/resources

실제 자바코드를 제외한..나머지 html같은 viewer

 

4) src/test

테스트코드

 

5) build.gradle

gradle 빌드해주는 파일

gradle은 버전설정 및 라이브러리 가져오는 툴

 

plugins: 우리가 설정한 스프링 부트 버전 나옴

dependencies:필요한 라이브러리들

implementation으로 해당 라이브러리를 어떤 홈페이지에서 가져옴

필요할 경우 우리가 적접 url적어도 되고 아니면 

보통은 정형화 되어있어 기본적으로 mavenCentral 홈페이지에서 다운받아옴

 

6) 스프링 부트 라이브러리

 

맨 오른쪽에 gradle 선택시 확인할 수 있음

 

spring-boot-starter-web

spring-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: 스프링 통합 테스트 지원

 

 

3. view 환경설정

1) welcome page

index.html

별도로 설정하지 않을 경우 이걸 가장 첫 화면에 띄워준다.

 

2) template engines

단순히 html을 읽는게 아니라 루프나 여러 로직들을 실행 가능.

thymleaf가 하나의 template engine

 

 

 

<controller>

model.Attribute("key이름","value값")

return hello;

 

viewResolver가 return viewName보고 resorces아래에 있는

templates/{viewName}.html로 넘어감

우리는 hello를 return했으니 hello.html로 들어감

 

여기서 model로 key , value값 줬으니 hello.html은 해당 key, value를 attribute로 받음.

그래서 hello.html에서 ${data}로 key에 대응되는 value를 사용

 

우리가 직접 hello.html에 "Hello!"를 쓰지 않았음에도 해당 페이지에서 Hello!를 볼 수 있음

 

4. 빌드하고 실행하기

 

콘솔로 이동

1. ./gradlew build

2. cd build/libs

3. java -jar hello-spring-0.0.1-SNAPSHOT.jar

4. 실행 확인

 

- 윈도우 사용자를 위한 팁 -

 

콘솔로 이동 명령 프롬프트(cmd)로 이동

=> ./gradlew gradlew.bat 를 입력

 

or

 

명령 프롬프트에서 gradlew.bat 를 실행하려면 gradlew 하고 엔터를 치면 됨.

=> gradlew build

 

윈도우에서 Git bash 터미널 사용하기

링크: https://www.inflearn.com/questions/53961

 

 

 

스프링 웹 개발 기초

 

1. 정적 컨텐츠, MVC&켐플릿 엔진, API방식

 

정적 컨텐츠는 html파일을 그냥 그대로 보여주는

 

동적 컨텐츠는 mvc(model, view, controller)와 템플릿 엔진(jsp, php) 사용하여 서버에서 프로그래밍을 해서

html을 동적으로 처리

 

api방식은 json형식으로 데이터 주고받고 화면단은 따로 client단에서 보여준다.

 

1)정적 컨텐츠

 

이렇게 url로 접속하면

1순위) hello-static 관련 컨트롤러 있는지 check

2순위) 없으니 2순위인 resorce/static/hello-static.html 확인

 

 

2) MVC(Model View Controller)와 템플릿 엔진(동적 컴텐츠)

 

원래는 view에 controller까지 모두 넣음

그러나 최근에는

view와 controller를 분리하는 것이 추세

why??

**view는 화면을 그리는 controller, model은 비즈니스 로직, 내부적 처리에 집중**

서로 역할 분리를 해서 유지보수의 편의 위해서..view에 모든걸 집어넣으면 뭐가 뭔지 정확히 파악하기가 어렵겠지. 

controller는 src/main/java 밑에 있는 거

view는 resources/templates밑에 있는 html파일들

 

 

controller에 

 

@RequestParam으로 동적으로 데이터 받게할 수 있음.

보면 key이름은 "name", value는 String name

이걸 hello-template.html로 넘겨줌

hello-template.html

 

그리고 url에 localhost:8080/hello-template?name=spring!! 

형식으로 ?는 get메소드로 값 넘겨주는 방식

다음과 같이 값이 나타남.

만약  localhost:8080/hello-template 이렇게만 주면

hello null 이 나타남.

 

 

 

 

3) api방식(동적 컨텐츠)

 

mvc 및 템플릿엔진 vs api 방식.. 둘다 동적 컨첸츠인데 차이점은?

 

api방식의 경우 별도로 viewer가 필요 없음

 

그냥 controller만 만들어줌

view 없어도 그냥 이렇게 하고

@ResponseBody로 직접 http body주겠다 하고 뷰 리졸버 사용하지 않음

 

위에 코드는 그냥 toy code고 실제로는 아래와 같이 객체를 넘겨주는 형태가 일반적.

 

 

 

 

  • ByteArrayHttpMessageConverter
  • StringHttpMessageConverter
  • MappingJackson2HttpMessageConverter

애네들 다 HttpMessageConverter의 하위 종류임

 

 

springboot의 경우 기본적으로 객체를 return하는 경우 'json' 방식으로 return 함

기본 객체처리에서 Jackson은 객체를 json으로 변한해주는 툴

객체의 경우 json이나 xml방식으로 표현할 수 있는데 요즘은 json이 대세

 

  • 총정리 
  • 정적 콘텐츠: 저장된 html을 그대로 보여줌
  • 동적 콘첸츠: 사용자의 값을 받아서 동적으로 컨첸츠를 보여줌
  • 동적 콘첸츠는 1) mvc 및 템플릿 엔진 2) api 방식이 있음
  • mvc 및 템플릿 엔진은 model, view, controller을 모두 사용하여 동적 콘텐츠 보여줌
  • api방식은 view사용 안하고 controller만 사용. 객체를 반환하며 내부적으로 httpmessageconverter가 객체를 json으로 변환하여 웹에서는 json형태로 객체를 나타남.

 

 

 

Comments