#0 : 개요
학원을 다니며 부족하다고 느꼈던 자바스크립트 과정도 모두 마쳤고,
슬슬 스프링 부트를 활용한 개인 프로젝트를 시작하려 한다.
학원에서 배웠던 내용을 복습할 겸 이론적인 부분도 함께 공부하고 싶다는 생각이 들었다.
인터넷에서 스프링 강의를 서치하던 중에 학원에서 받았던 스프링 교재가 문득 떠올랐다.

훑어보니 학원에서는 배우지 못했던 이론적이고 깊은 내용들도 많았다.
하지만 문제는...

책이 내용이 꽤 많다..... 내 검지손가락 두마디 조금 안되는 두께.🥺
이 책과 병행하면서 프로젝트를 만들기에는 시간이 배로 걸릴 게 분명했다.
좀 더 단기간에 복습하며 볼만한 책이 없을까? 다시 검색을 해보다가
위키독스에서 점프 투 스프링부트라는 e북을 찾을 수 있었다.
내용도 학원에서 받았던 책에 비해 적당한 양이고 aws 서버에 대한 내용도 담겨있어서 좋았다.
오늘부터 차근히 해당 책의 내용을 정리하며 복습해보도록 하겠다.
이번 TIL이 완료되면 토비의 스프링 정독에도 도전해봐야지!
#1 : 개발준비
01. 스프링 부트란?
- 웹프로그램을 쉽고 빠르게 만들어주는 웹 프레임워크
- 웹 프레임워크란?
* 웹 프로그램을 만들기 위해서는 쿠키나 세션 처리, 로그인/로그아웃, 권한 처리, 데이터베이스 처리 등 만들어야 할 기능들이 많다. 웹 프레임워크에는 이런 기능들이 이미 만들어져 있다.
* 웹 프레임워크는 웹 프로그램을 만들기 위한 스타터키트라고 생각하면 된다.
- 스프링부트의 보안기능
* SQL인젝션, XSS(cross-site scripting), CSRF(cross-site request forgeny), 클릭재킹 등과 같은 보안공격을 기본으로 막아준다.
* SQL 인젝션 : SQL을 주입하여 공격하는 방법
* XSS : 자바스크립트를 삽입해 공격하는 방법
* CSRF : 위조된 요청을 보내는 공격 방법
* 클릭재킹 : 사용자의 의도하지 않은 클릭을 유도하는 방법
- 스프링부트의 WAS(Web Aplication Server)
* 웹 어플리케이션을 개발 시엔 어플리케이션을 실행할 수 있는 톰캣같은 WAS가 필요하다.
* 스프링부트에는 톰캣 서버가 내장되어 있고 설정도 자동 적용되어 있기 때문에 신경 쓸 필요가 없다.
02. 자바 설치하기
- 해당 강의에서는 자바 17.0.2 버전 사용
03. 스프링부트 개발 환경 준비
- STS 스프링부트 프로젝트 생성
* Create new Spring Starter Project 클릭
* name : 프로젝트 이름
* type : 프로젝트를 관리하는 도구, 해당 강의에서는 Gradle 사용( Maven보다 성능이 좋고 설정이 편리 )
* java version : 17 선택
* Next
* Spring Boot Version : 3.0.0
* Aviliable : Sprign Web 체크해야 웹 기능 사용 가능
* Finish
- 인텔리제이 스프링부트 프로젝트 생성
* 스프링 이니셜라이저로 프로젝트 생성
gradle, java, 스냅챗, M2나 M3가 붙지 않은 최신 버전 선택, spring web 의존성 추가
* 인텔리제이에서 생성한 프로젝트 오픈
* 롬복 플러그인 설치
* Auto Reload 설정
[Preferences -> Build, Execution, Deployment -> Compiler] 에서 Bulid Project Automatically 체크
[Preferences -> Advanced Settings] 에서 Allow auto-make to start even if developed application is currently running 체크
* 타임리프 설정, application.properties 파일 ( 템플릿 파일 변경 후 자동 적용 )
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=file:src/main/resources/templates/
* Unused 경고 메세지 끄기
[Preferences -> Editor -> Inspections]에서 Java -> Declaration redundancy->Unused declaration 체크 해제
* Gradle 로컬 서버 실행
[sbb -> Tasks -> application -> bootRun] 우클릭 후 Run sbb [bootRun] 선택
* 배포파일 생성
[sbb -> Tasks -> build -> bootJar]에서 우클릭 후 [sbb -> Tasks -> build -> bootJar] 선택,
build/libs/ 경로에 배포 파일 jar 생성됨
03. 스프링부트 맛보기
- http://localhost:8080/hello
요청 시 "Hello World" 출력하기* HelloController Class 파일 생성
package com.mysite.sbb;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String hello() {
return "Hello World";
}
}
@Controller : 해당 클래스가 컨트롤러의 기능을 수행한다고 명시@GetMapping : hello라는 이름의 Get 요청이 발생하면 해당 메서드를 실행한다는 의미@ResponseBody : hello 메서드의 응답결과가 문자열 그 자체임을 의미* http://localhost:8080/hello로 실행결과 확인

04. 스프링부트 도구 설치
- 위의 코드에서 반환하는 문자열을 수정한 후 url을 호출해도 서버가 변경된 클래스를 리로딩하지 않기 때문에 수정한 문자열이 출력되지 않는다. 이를 위해 서버 재시작 없이 클래스 변경 시 서버가 재기동 되는 Spring Boot Devtools를 설치해야 한다.
- build.gradle 파일을 수정 후 refresh gradle project
developmentOnly 'org.springframework.boot:spring-boot-devtools'
- 위의 설정을 완료하면 서버를 재시작하지 않아도 출력 내용이 변경된 걸 확인 가능, 하지만 브라우저를 새로고침을 해야 확인 가능하다. 이 때 live reload를 사용하면 브라우저 재호출없이 사용이 가능하다. 크롬 브라우저의 확장 프로그램을 통해 가능하다.
https://chrome.google.com/webstore/detail/livereload%20%20/ciehpookapcdlakedibajeccomagbfab
- 롬복 : Getter, Setter, 생성자 등을 자동으로 만들어주는 도구, 인텔리제이는 플러그인으로 설치 가능* bulid.gradle에 아래 내용 추가
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'
* HelloLombok 파일을 작성하여 제대로 작동하는지 확인
package com.mysite.sbb;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
public class HelloLombok {
private String hello;
private int lombok;
public static void main(String[] args) {
HelloLombok helloLombok = new HelloLombok();
helloLombok.setHello("헬로");
helloLombok.setLombok(5);
System.out.println(helloLombok.getHello());
System.out.println(helloLombok.getLombok());
}
}
* Lombok 생성자
package com.mysite.sbb;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Getter
@Setter
public class HelloLombok {
private final String hello;
private final int lombok;
public static void main(String[] args) {
HelloLombok helloLombok = new HelloLombok("헬로", 5);
System.out.println(helloLombok.getHello());
System.out.println(helloLombok.getLombok());
}
}
각 변수에 final을 적용하고 @RequiredArgsConstructor를 적용하면 해당 속성을 필요로 하는 생성자가 자동으로 생성된다.
'T-I-L > [책] 요약&정리' 카테고리의 다른 글
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(답변등록,부트스트랩) - 2023. 08. 18 (0) | 2023.08.18 |
|---|---|
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(질문상세) - 2023. 08. 17 (0) | 2023.08.17 |
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(질문목록, 템플릿, 서비스) - 2023. 08. 16 (0) | 2023.08.16 |
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(엔티티,리포지토리) - 2023. 08. 14 (0) | 2023.08.14 |
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(프로젝트구성, 컨트롤러, JPA) - 2023. 08. 11 (0) | 2023.08.12 |
