일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 객체 배열
- 배열
- 자료구조
- Linear Probing
- 조상 노드
- ListIterator
- Double Hasing
- Gargbae Collector
- Open-Addressing
- 루트노드
- 선형 조사법
- 부모 노드
- 해시 테이블
- 트리 높이
- java
- 큐
- 자식 노드
- 향상된 for문
- 단말노드
- singly linked list
- Double형 배열
- 이차 조사법
- 노드 레벨
- Quadratic Probing
- binary queue
- Queue
- 직접 주소 개방
- 이진 큐
- array
- 자바
- Today
- Total
영운's 블로그
스프링 입문(1) - 프로젝트 환경설정, 스프링 웹 개발 기초 본문
스프링 입문(1) - 프로젝트 환경설정, 스프링 웹 개발 기초
오영운(you88) 2022. 5. 24. 16:02
[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의
스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...
www.inflearn.com
해당 글은 김영한님의 스프링 입문을 강의를 들으며 개인적으로 정리한 내용입니다.
모든 자료의 출처는 김영한님의 스프링 입문 강의임을 미리 밝힙니다.
실습 코드: https://github.com/you88311/spring-example1
프로젝트 환경설정
1. spring initializer
스프링 시작을 편하게 해주는 스프링 자체에서 제공하는 홈페이지
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로 넘겨줌
그리고 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형태로 객체를 나타남.
'스프링 강의 정리 > 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 카테고리의 다른 글
스프링 입문(2) - 회원 관리 예제, 스프링 빈과 의존관계 설정 (0) | 2022.05.24 |
---|