본 게시글은 하단 강의를 듣고 학습한 내용을 제 생각으로 요약, 정리한 글입니다.
- 목차
1. 프로젝트 생성
- Java 11 설치
- 설치 위치: C:\Program Files\Java\jdk-11.0.16.1
- 설치위치는 노트북(11.0.16.1), 데스크톱(11.0.16) 동일

- IDE: IntelliJ 설치
- 스프링 부트 스타터 사이트로 이동해서 스프링 프로젝트 생성 https://start.spring.io
- Maven/Gradle Project : 필요한 라이브러리 가져오고 빌드 관리하는 툴 → Gradle 선택
- Language → Java 선택
- Spring Boot → ex) 2.7.4선택(내 노트북 기준) → snapshot, m1 안붙은 최신 버전 선택
- Project Metadata → Group: hello 입력(회사명), Artifact: hello-spring 입력(프로젝트명), Name, Description, package name 냅두기
- Name → main method 들어가는 파일 이름 결정
- ex) Name: Choo → hello.hellospring.ChooApplication
- Java 11, Packaging Jar 선택 (jar이 spring boot에서 가이드하는 표준임)
- Dependencies: 스프링부트 기반으로 프로젝트 시작할 때 어떤 라이브러리 가져올 것인가. → Spring Web 검색하여 선택, Thymeleaf 검색하여 선택(html 만들어주는 템플릿 엔진)
- GENERATE 누르기 → 다운로드 됨. 원하는 폴더에 넣고 압축 풀기.
세팅 방법
참고
- intellij에서 open 눌러서 hello-spring(스프링 입문)의 build.gradle선택해서 open하기
- Open as Project 선택
프로젝트 구조
- src/main/java/패키지, 소스파일
- src/main/resources/java코드 파일 제외한 xml, 설정파일, html 등등
- src/test/java/테스트코드
- src/build.gradle → 버전 설정, 라이브러리 가져옴
- src/.gitignore
- 패키지 구조가 폴더 구조로 나옴. 설정 눌러서 Compact middle packages / Flatten packages로 선택 가능.
- src/main/java/hello/hellospring/HelloSpringApplication.java의 main method 실행하기(run)
src/main/java/hello/hellospring/HelloSpringApplication.java


- localhost:8080 브라우저에서 들어가기. error 페이지 뜸 (성공임)

- 왼쪽에 끄는 버튼(빨간 네모)으로 끄고 다시 들어가면 사이트에 연결할 수 없다고 뜸
- Settings(오른쪽 상단에 톱니바퀴 모양)(혹은 Preferences)에서 gradle 검색하면 build에 Gradle있음.
- Build and run using이랑 Run tests using을 둘다 intelliJ로 바꿔주기! (gradle통해 run하면 느림)

- intellij 깃허브 연동
- intellij git 실행 설정 (상단 아티클 참고)
- intellij github 계정 연동 (상단 아티클 참고)
- 원하는 위치에 GDSC-1st-Backend-Study/ChooSeoyeon 폴더 만들기
- 만들어둔 프로젝트를 ChooSeoyeon 폴더 내부로 옮기기
- 터미널(gitbash)(gitbash를 intellij에서 여는 것도 가능. 본인 편한 대로)에서 GDSC-1st-Backend-Study 폴더 들어가서 아래 코드 입력
- 원격 저장소 init
- 원격 저장소 연결
- pull 받기
- 브랜치 변경 (브랜치명과 폴더명이 중복되어 checkout으론 에러 났음. 따라서 switch 사용함 - 맞는 방법인진 확실x..)
- commit하고 push하기
참고 아티클 + 에러 해결
→ Git 실행 설정, GitHub 계정 연동 까지만 참고함
→ 터미널 Git Bash로 변경하는 데에 참고함
→ git 브랜치 체크아웃 시 발생한 에러 해결하는 데에 참고함
→ git add . 할 때 발생한 경고 해결하는 데에 참고함
git config --global core.autocrlf true
→ 실수 방지
git add .
// commit을 진행하기 전의 임시 저장된 상태로 변경사항들 올리기
git commit -m ‘커밋메시지’
git status
git push origin ChooSeoyeon
git pull origin master
→ 콘솔 한글 깨짐 해결
→ 실수로 루트 두 개 등록해서 발생한 에러 해결
급한 사람은 3부터 따라하기
→ git init
→ git remote add
→ git pull origin master
→ git switch origin ChooSeoyeon
→ git add .
→ git commit -m ‘커밋메시지’
→ git push origin ChooSeoyeon
2. 라이브러리
- Gradle은 의존관계가 있는 라이브러리를 다 함께 다운로드함
→ spring관련 라이브러리 쓰면 알아서 core까지 다 가져와 줌.(편리)
3. View 환경설정
1) index.html → 정적 컨텐츠 방식
- Welcome Page 만들기
- html 파일 만들기
src/main/resources/static/index.html
- 서버 껐다 키기(좌측 하단에 빨간네모→초록세모 차례로 클릭)
- localhost:8080 들어가서 확인(정적페이지)
2) 템플릿 엔진 쓰면 동적페이지 사용 가능 → thymeleaf 템플릿엔진
참고 사이트
- thymeleaf 공식 사이트: https://www.thymeleaf.org/
- 스프링 공식 튜토리얼: https://spring.io/guides/gs/serving-web-content/
- 스프링부트 메뉴얼: https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-template-engines
- template engines랑 welcome page검색해보기
- 메뉴얼 : spring.io → Projects → Spring Boot → 2.7.4 reference doc
3) /hello & hello.html → 동적 컨텐츠 방식 (MVC, 템플릿 방식)
- Controller(웹어플리케이션의 첫번째 진입점) 사용해서 Page 만들기
- src/main/java에서 package 만들기 → hello.hellospring.controller
- 만든 package에서 Java Class 만들기 → HelloController
- Controller 코드 입력
src/main/java/hello/hellospring/controller/HelloController.java
- html 파일 만들기
src/main/resources/templates/hello.html
타임리프 쓸 때 값이 안들어온다면?
예를 들어 Controller에서 data 값을 안주면 null로 화면에 뜸. 에러는 안남.
- 서버 껐다 키기
에러
해결
→ 아래 코드 추가하기
import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;→ GetMapping이랑 Model에 대해 import를 안해서 발생한 에러였음
- localhost:8080/hello 들어가서 확인
페이지 소스

4) 동작 원리

- 웹 브라우저에서 /hello 던지면, 스프링부트가 내장한 톰캣이란 웹서버가 이를 받아서 스프링한테 이에 대해 물어봄.
- 스프링이 helloController에 보면 GetMapping(”hello”)가 있는데, 여기서 Get은 Get, Post… method 할 때 Get임. Get 방식이기에 컨트롤러의 hello url에 매칭이 됨.
- 컨트롤러에 있는 아래 method가 실행됨.
- model은 스프링이 만들어서 넘겨준거임. model에다가 addAttribute해서 key는 data고 값은 hello!!라고 씀으로써 model에 data는 hello!!라고 넣어놈.
- “hello”를 return 함. 이때 hello는 src/main/resources/template에 있는 html 파일 이름과 같은 거임. 즉, hello.html에 렌더링시키라는 뜻임. 모델이란걸 화면에 넘기면서 hello.html의 화면을 실행시키라는 거임.
- return 값 == html 파일명
- 컨트롤러에서 리턴 값으로 문자를 반환하면 뷰 리졸버( viewResolver )가 화면을 찾아서 처리한다.
- 스프링 부트 템플릿엔진 기본 viewName 매핑
- resources:templates/ +{ViewName}+ .html
- spring-boot-devtools 라이브러리를 추가하면, html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다.
- 인텔리J 컴파일 방법: 메뉴 build Recompile
에러
해결
return값은 "hoho"인데 templates의 html파일 이름은 hi.html이라 둘이 달라 발생한 에러. 두 개를 같게 만들어주면 됨

정리
참고
4. 빌드하고 실행하기
- intellij에서 구동 중인 서버 끄기

- 터미널(git bash)에서 hello-spring(스프링 입문) 폴더 들어가기
cd c/리포지토리/GDSC-1st-Backend-Study/ChooSeoyeon/스프링 입문
./gradlew build

cd build/libs
ls -arlth→ 18메가 짜리 jar 파일 있는 거 확인 가능

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

- 배포 시,
hello-spring-0.0.1-SNAPSHOT.jar파일만 복사해서 서버에 넣고서
java -jar로 복사한 파일을 실행하면 됨. 그러면 서버에서 스프링이 동작하게 됨.- 잘 안되면
./gradlew clean build하면 됨. 그러면 완전히 지우고 다시 build함.

![[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의](https://www.notion.so/image/https%3A%2F%2Fcdn.inflearn.com%2Fpublic%2Fcourses%2F325630%2Fcover%2F56f635a3-3a44-4096-a16b-453ea1696b1a%2F325630-eng.png?table=block&id=a0a87c2a-8260-4081-b510-ca36ef962229&cache=v2)


![[IDE] IntelliJ 터미널 Git Bash로 변경하기](https://www.notion.so/image/https%3A%2F%2Fvelog.velcdn.com%2Fimages%2Fjonghne%2Fpost%2F5db88ab1-196b-42ff-a3d4-deee8ddbe0bf%2Fimage.png?table=block&id=612a0526-c877-47fc-8a3c-91ea9ebc29aa&cache=v2)
