SpringBoot - 초기 설정

HI_DO·2024년 6월 17일
post-thumbnail

스프링 부트?

  • 웹 프로그램(웹 애플리케이션)을 쉽고 빠르게 만들 수 있도록 도와주는 자바의 웹 프레임워크
  • 웹 프로젝트를 완성하기 위해서 많은 기능을 생성해야 한다.
    (쿠키처리, 로그아웃, 로그인, 데이터베이스 처리 등등)
    -> 웹 프레임워크에는 기능들이 이미 만들어져 있다.
    -> 웹 프레임워크에 있는 기능을 익혀서 사용하기만 하면되고 흐름을 정확하게 파악하면 된다.

스프링 부트는 웹 보안적인 부분에서 굉장히 튼튼한 웹 프레임워크이다.

-> SQL 인젝션 : 악의적인 SQL을 주입하여 공격하는 방법,
XSS(crose site scripting) : 자바스크립트를 삽입해 공격하는 방법,
CSRF(Cross Site Request Forgery) : 위조된 요청을 보내는 공격방법,
클릭재킹(clickjacking): 사용자가 의도하지 않은 클릭을 유도하는 공격방법
보안공격을 막아준다.

프레임워크와 라이브러리의 차이점?

  • 프레임워크
    -> 구조 제공: 프레임워크는 소프트웨어의 기본 구조를 제공하며 개발자가 그 구조에 맞춰 코드를 작성
    개발의 뼈대를 제공하며, 개발자가 프레임워크의 규칙과 흐름에 따라 개발을 진행
  • 라이브러리
    -> 도구 모음: 라이브러리는 특정 기능을 수행하는 도구나 함수들의 모음
    개발자가 필요에 따라 호출해서 사용

스프링 부트는 WAS가 필요없다.

  • 스프링만 사용하여 웹 애플리케이션을 개발한다면 실행할 수 있는 톰캣과 같은 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: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은 자바 개발을 위한 라이브러리로, 반복적인 코드를 자동으로 생성해 주어 개발 생산성을 높여주는 도구이다. 자바 개발에서는 보일러플레이트 코드(반복적이고 지루한 코드)가 많이 발생하는데, Lombok을 사용하면 이러한 코드를 줄일 수 있다.
    https://projectlombok.org/download



    -> 입력시 설치 창이 뜬다



    -> Install successful 확인
  • build.grade에
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

추가 후
->

  • HelloLombok.java 생성
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 덕분에 초기화하는 생성자를 따로 입력하지 않아도 된다.

src/main/resources 디렉터리

  • 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";
	}
}
  • 결과
profile
하이도의 BackEnd 입문

0개의 댓글