[SpringBoot] Spring Boot 시작하기

aseol·2023년 9월 26일
0

WAS TOMCAT

아파치 소프트웨어 재단에서 개발한 서블릿 컨테이너
(또는 웹 컨테이너)만 있는 웹 애플리케이션 서버

Tomcat Directory

HttpServletRequest

클라이언트가 서버로 전달하는 요청 정보를 처리하는 객체

HttpServletRequest 정보

  • 클라이언트의 IP 주소, 포트 번호
  • 클라이언트가 전송한 요청 헤더 정보(클라이언트에서 처리 가능한 문서 타입의 종류, 클라이언트 프로그램 정보, 처리 가능한 문자셋 정보, 쿠키 정보)
  • 요청 방식, 요청 프로토콜의 종류와 버전, 요청하는 파일의 URI, 요청받은 서버의 정보
  • 서버의 호스트 이름, 포트 번호
  • 사용자가 서블릿 요청 시 추가로 전달한 정보
  • 질의(Query) 문자열(웹서버에 서비스를 요청하면서 추가로 전달한 name=value 형태의 데이터)

HttpServletResponse

서버가 클라이언트로 보내는 응답 정보를 처리하는 객체

HttpServletResponse 정보

  • 클라이언트의 요청에 응답하기 위한 출력스트림을 추출하거나 버퍼의 크기를 설정
  • 응답할 내용의 타입과 문자셋을 설정
  • 일반적인 네트워크 통신에서 응답과 관련된 메소드들을 포함
  • HTTP 프로토콜 통신 기반의 응답 관련 메소드들도 확장하여 포함

JavaEE vs Spring legacy vs Spring boot

JavaEE (Java Platform, Enterprise Edition) (ANT)
웹 애플리케이션을 개발할 때 주로 Dynamic Web Project를 사용하여 프로그래밍한다.

Apache Ant(Another Neat Tool)와 Apache Maven 

설정: Ant는 개발자가 빌드 스크립트를 직접 작성해야 하므로 설정이 매우 자유롭다. 
반면 Maven은 프로젝트를 일반적인 구조와 빌드 라이프사이클로 제한하므로 설정을 일부 자동화한다.

종속성 관리: Maven은 중앙 저장소(Central Repository)와 연동하여 종속성 관리를 효과적으로 처리한다. 
Ant는 종속성 관리를 수동으로 처리해야 한다.

플러그인: Maven은 다양한 플러그인을 사용하여 빌드 작업을 확장할 수 있다. 
Ant는 플러그인 개념이 없으며, 사용자가 직접 스크립트 작성이나 외부 라이브러리를 통해 기능을 확장해야 한다.

Spring legacy (스프링의 옛날 프로젝트) (MAVEN)
Spring Boot (MAVEN)

Spring Framework는 강력하고 유연한 설정을 제공하지만, 설정의 복잡성이 상당했다 ➡ Spring Boot는 자동 구성(Auto-Configuration)을 통해 설정의 복잡성을 크게 감소시켰고, 이에 따라 개발자는 대부분의 설정을 자동으로 처리하고 필요한 경우 추가적인 설정을 최소화할 수 있다(개발자 친화적으로 바뀌었다고 할 수 있다).

💡 Gradle / Maven
스프링 부트는 Gradle / Maven과 같은 빌드 도구를 사용하여 프로젝트의 의존성 및 버전 관리를 간편하게 제공한다.
이러한 빌드 도구를 통해 프로젝트에 필요한 라이브러리를 추가하고 버전을 설정할 수 있다.
예를 들어, 스프링 부트 프로젝트를 생성하면 Gradle 또는 Maven 프로젝트 파일에 스프링 부트 (주요 스프링 프레임워크 구성 요소와 자주 사용되는 라이브러리에 대한) 스타터 의존성이 포함되어 있다. 개발자는 이러한 의존성을 통해 스프링 부트 애플리케이션을 빠르게 설정하고 필요한 라이브러리를 추가할 수 있다.

Spring Boot

스프링 프레임워크를 기반으로 한 개발 플랫폼
단독실행 가능한 스프링 애플리케이션 생성
프로젝트 환경을 구축할 때 필요한 WAS(톰캣, 제티, 언더토우) 내장
XML 기반 설정이나 코드 없이 환경 설정을 자동화 가능
스프링 프레임워크 개발 접근성 용이

구성요소

  • 빌드 도구 (Maven)
  • 스프링 프레임워크 (5.X)
  • 스프링 부트 (v3.0)
  • 스프링 부트 스타터 (spring-boot-starter)

springMVC 동작


설치 후 설정

sts 설치/ 압축 해제 후 🔽

워크스페이스 실행 용량(최소)을 의미하는 부분을 ram 용량에 따라 변경해 준다 
※ sts 사용하려면 eclipse가 먼저 설치되어 있어야 한다 

sts 오픈 후 기본 설정 🔽

market place에서 web 검색 ➡ web developer tool 설치 

preference에서 enc 검색 ➡ Content Types ➡ text 선택 후 인코딩 타입을 UTF-8로 변경
Java Properties File과 Spring Properties File도 마찬가지로 바꿔 준다. 

CSS Files와 HTML Files도 마찬가지로 바꾼 뒤 적용해 준다. 

New Spring Starter Project 🔽

Artifact : 프로젝트 이름 작성

라이브러리 선택하기.
* spring-boot-devtools 라이브러리 추가
: html 파일을 컴파일만 해주면 서버 재시작 없이 View 파일 변경이 가능하다.

➕ DB 관련 라이브러리 추가


src/main/resources/static

src/main/resources/static 하위에 index.html 만들고 실행해 보기 🔽

스프링 부트(Spring Boot)는 기본적으로 정적 웹 리소스에 대한 처리를 위해 클래스패스(classpath) 내의 "static" 디렉토리를 사용한다.
따라서 스프링 부트 애플리케이션에서 "src/main/resources/static" 디렉토리 아래에 위치한 "index.html" 파일은 웹 애플리케이션의 루트 경로에 대한 기본 페이지로 제공된다. 즉, "http://localhost:8080/" 와 같은 경로로 웹 애플리케이션을 시작하면 "src/main/resources/static/index.html" 파일이 자동으로 서빙되며 초기 페이지로 표시된다.


정적/동적 웹페이지

"src/main/resources/static" 디렉토리에 있는 정적 리소스 파일은 URL 경로와 일치하는 방식으로 브라우저에서 요청될 수 있으며, 스프링 부트는 해당 파일을 찾아서 제공한다.
🆚
"templates" 디렉토리의 HTML 파일은 컨트롤러와 함께 사용하여 동적 웹 페이지를 생성하고 제공하는 데 사용된다.

"static" 디렉토리의 HTML 파일 ➡️ 브라우저에 직접 요청할 수 ⭕

이 디렉토리의 HTML 파일은 정적 리소스로 간주되며, 클라이언트는 해당 파일을 서버로 직접 요청하고 받을 수 있다. 
따라서 "static" 디렉토리의 HTML 파일은 서버 측에서 추가적인 처리 없이 클라이언트로 직접 제공된다.

"templates" 디렉토리의 HTML 파일 ➡️ 브라우저에 직접 요청할 수 ❌

 이 디렉토리의 HTML 파일은 서버측에서 렌더링되는 동적 웹 페이지 생성을 위한 템플릿 파일로 사용된다. 
 클라이언트(브라우저)는 직접 "templates" 디렉토리의 HTML 파일을 요청할 수 없고, 
 해당 템플릿 파일은 컨트롤러를 통해 서버에서 처리된 후 생성된 결과가 클라이언트에 제공된다.

서버 포트 설정

서버 포트 등 설정 후 실행해 보기 🔽

포트넘버 80으로 입력하면 후에 브라우저에 localhost 작성시 포트넘버를 입력하지 않아도 된다 
thymeleaf cache 설정 여부를 false로 설정해야 새로고침시에 변경된 내용이 적용된다

server가 아닌 spring boot app으로 실행한다

패키지 내에 컨트롤러 패키지와 클래스를 만들고, templates 폴더 하위에 main.html 파일을 만든 후 실행해 보기 🔽

@ + ctrl + space 자동완성 기능 이용하여 어노테이션 작성 

어노테이션
Java 프로그래밍 언어에서 메타데이터를 제공하는 특별한 형식의 표기법. 소스 코드에 정보를 추가하거나 컴파일러와 실행 환경에게 특정 작업을 수행하도록 지시할 때 사용된다. @ 기호를 사용하여 정의하며, 주석과 유사한 형태를 가지고 있다 (컴퓨터가 읽는 주석이라고 볼 수 있다)

브라우저에 localhost:8080 입력하면 html문서에 작성했던 문자열이 뜬다. 

main.html과 코드를 비교해 보면 타임리프 문법은 사라져 있고 순수한 html 코드만 남아 있다 

➕ Customize 이용하여 html 파일 등 간편하게 생성 🔽

(원래 New - Other - Wizard 에서 검색하여 만들어야 한다)

Window - Perspective - Customize Perspective - Shorcuts 

간편하게 만들 수 있도록 커스터마이징할 수 있다

Thymeleaf 웹 및 독립 실행형 모두를 위한 서버측 Java 템플릿 엔진으로, HTML 코드에서 고정적으로 사용되는 부분은 템플릿으로 만들어 두고 동적으로 생성되는 부분만 템플릿 특정 장소에 끼워 넣는 방식으로 동작할 수 있도록 해 준다 ➡ HTML 템플릿을 생성하고 동적 데이터를 템플릿에 쉽게 포함할 수 있다.
주로 Spring Boot와 함께 사용되며(Spring Boot에서는 JSP가 아닌 Thymeleaf 사용을 권장하고 있다) HTML과 비슷한 문법을 가지고 있어 개발자들이 쉽게 배울 수 있다고 한다.

💡 템플릿 엔진이란 ?

  • 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어로, 웹사이트 화면을 어떤 형태로 만들지 도와준다. 웹 템플릿 엔진은 view code(HTML)와 data logic code(DB connection)를 분리해 주는 기능을 한다.
  • 서버 사이드 템플릿 엔진과 클라이언트 사이드 템플릿 엔진으로 나눌 수 있다.
  • 자바에서 웹 개발시 JSP(Java Server Page)를 사용하면 <% %>형태의 스크립트릿을 사용하여 개발하는데, 이 방식은 스크립트릿과 HTML이 혼재된 상태가 되고 HTML 태그의 반복적인 사용으로 인해 수정하기 어려운 상황이 된다. 이러한 상태를 해결할 수 있는 것이 템플릿 엔진이다. 즉 HTML(Markup)과 데이터를 결합한 결과물을 만들어 주는 도구이다!

컨트롤러만 모아 놓을 패키지를 만들고 어노테이션 작성한 모습.  

Model객체를 통해 화면에 데이터를 전달한다. 
(Spring 프레임워크에서 제공하는 클래스 중 하나인 org.springframework.ui.Model 클래스)

* Model 객체는 컨트롤러 메서드의 매개변수로 선언하여 사용하며, 데이터를 저장하고 뷰로 전달하는 역할을 한다. 
* 추가된 데이터는 뷰 템플릿에서 사용할 수 있다.

0개의 댓글

관련 채용 정보