
- 웹 프로그램(웹 애플리케이션)을 쉽고 빠르게 만들 수 있도록 도와주는 자바의 웹 프레임워크
- 웹 프로젝트를 완성하기 위해서 많은 기능을 생성해야 한다.
(쿠키처리, 로그아웃, 로그인, 데이터베이스 처리 등등)
-> 웹 프레임워크에는 기능들이 이미 만들어져 있다.
-> 웹 프레임워크에 있는 기능을 익혀서 사용하기만 하면되고 흐름을 정확하게 파악하면 된다.스프링 부트는 웹 보안적인 부분에서 굉장히 튼튼한 웹 프레임워크이다.
-> SQL 인젝션 : 악의적인 SQL을 주입하여 공격하는 방법,
XSS(crose site scripting) : 자바스크립트를 삽입해 공격하는 방법,
CSRF(Cross Site Request Forgery) : 위조된 요청을 보내는 공격방법,
클릭재킹(clickjacking): 사용자가 의도하지 않은 클릭을 유도하는 공격방법
보안공격을 막아준다.
- 프레임워크
-> 구조 제공: 프레임워크는 소프트웨어의 기본 구조를 제공하며 개발자가 그 구조에 맞춰 코드를 작성
개발의 뼈대를 제공하며, 개발자가 프레임워크의 규칙과 흐름에 따라 개발을 진행- 라이브러리
-> 도구 모음: 라이브러리는 특정 기능을 수행하는 도구나 함수들의 모음
개발자가 필요에 따라 호출해서 사용
- 스프링만 사용하여 웹 애플리케이션을 개발한다면 실행할 수 있는 톰캣과 같은 WAS(Web Application Server)가 필요하다. 스프링부트에서는 톰캣 서버가 내장되어 있고 설정도 자동 적용이 되기때문에 WAS에 대해서 전혀 신경쓸 필요가 없다.
- 웹브라우저(요청) -> 웹서버가 가지고 있는 html문서 (응답) -> html문서를 클라이언트
예를 들어 크롬 브라우저에서 서버에 요청을 보낼때는 서버의 주소(IP주소) 또는 서버의 주소를 대체할 수 있는 도메인명을 알아야 한다.
예를 들어 주소창에 naver.com을 입력하면 네이버에서 운용하는 웹 서버가 호출되고 서버는 요청에 대한 응답을 브라우저에 돌려준다.
즉, 웹 서버는 요청에 대한 응답으로 html문서나 다른 resourcese들을 브라우저에 표시한다.- 프로토콜 : http의 서비스 내용은 웹서비스 포트번호 80
- https의 서비스 내용 SSL을 적용한 웹 서비스 포트번호 443
- FTP의 서비스 내용 파일 전송 포트 21
ex) https://www.naver.com/:443
-> 필요에 따라 포트 번호를 변경할 수 있다. 예를 들어 HTTP의 포트번호는 80대신 8080을 사용할 수도 있다.
- localhost라는 도메인명이 127.0.0.1이라는 ip주소를 의미
127.0.0.1 ip주소는 내컴퓨터를 의미한다.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") //localhost:8080/hello @ResponseBody public String hello() { return "Hello World" ; } }
- developmentOnly : 해당 라이브러리는 개발 환경에만 적용된다는 의미
운영 환경에 배포되는 jar, war 파일에는 이 라이브러리가 포함되지 않는다.
-> intellij에서는 필수
-> 이렇게 나와야 적용완료
- Lombok 이란?
Lombok은 자바 개발을 위한 라이브러리로, 반복적인 코드를 자동으로 생성해 주어 개발 생산성을 높여주는 도구이다. 자바 개발에서는 보일러플레이트 코드(반복적이고 지루한 코드)가 많이 발생하는데, Lombok을 사용하면 이러한 코드를 줄일 수 있다.
https://projectlombok.org/download
-> 입력시 설치 창이 뜬다
-> Install successful 확인- build.grade에
compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'추가 후
->

package com.mysite.sbb;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Getter
public class HelloLombok {
private final String hello;
private final int lombok;
// // 모든 final 필드를 초기화하는 생성자
// public HelloLombok(String hello, int lombok) {
// this.hello = hello;
// this.lombok = lombok;
// }
//
public static void main(String[] args) {
HelloLombok helloLombok = new HelloLombok("헬로",5);
System.out.println(helloLombok.getHello());
System.out.println(helloLombok.getLombok());
}
}
-> lombok의 @RequiredArgsConstructor 덕분에 초기화하는 생성자를 따로 입력하지 않아도 된다.
- templates: html 형식 파일
- static: css, javascript, jpg 등의 이미지 파일
- application.properties 파일: 프로젝트의 환경을 설정 (데이터베이스 설정 등)
- gradle의 Groovy를 기반으로 빌드: Ant, maven과 같은 이전 세대의 단점을 보안하고 장점을 취합해서 만든 환경 파일
- MainController.java 생성
package com.mysite.sbb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class MainController { @GetMapping("/sbb") public void index() { System.out.println("index"); } }
- 결과
There was an unexpected error (type=Internal Server Error, status=500).
-> localhost:8080/sbb를 요청하면 결과값을 리턴을 해야 하는데 아무값도 리턴하지 않아 500오류가 발생한 것이다. 즉, 오류를 해결하려면 응답을 리턴해야 한다.- MainController.java 수정
package com.mysite.sbb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class MainController { @GetMapping("/sbb") @ResponseBody public String index() { return "index"; } }
- 결과