<Java Spring> 자바스프링 동작 구조
📌 1. Spring Boot
Spring Boot는 Spring 프레임워크를 기반으로 한 애플리케이션 개발을 단순화하는 도구이다. Spring Boot는 자동 설정, 내장 서버, 독립 실행 가능한 JAR 파일 생성 등의 기능을 제공하여, 설정과 배포 과정을 단순화한다.
Spring Boot 설정은 resourses 폴더 하위의 application.properties(설정이름=값) 또는 application.yml(설정이름: 값) 파일을 사용한다. Spring Boot의 기본 설정 파일은 application.properties 이나 application.yml 파일을 주로 사용한다. application.yml 파일은 계층 구조로 표현할 수 있고 prefix의 중복 제거가 가능해 가독성이 좋다.
1. Spring Boot Starter
다양한 기능을 포함하는 애플리케이션 개발을 단순화하는 도구이다. 예를 들어, spring-boot-starter-web은 웹 애플리케이션 개발에 필요한 모든 종속성을 포함한다.
2. 자동 설정
Spring Boot는 애플리케이션 클래스 경로와 설정을 기반으로 자동 설정을 수행한다. 이는 개발자가 최소한의 설정으로 애플리케이션을 실행할 수 있게 한다.
3. 내장 서버
Spring Boot는 내장 톰캣, 제티, 언더토우 서버를 사용하여 애플리케이션을 실행한다. 이를 통해 웹 서버 설치 없이 애플리케이션을 독립적으로 실행할 수 있다.
내장 톰캣(Embedded Tomcat) : Spring Boot의 기본 내장 서버는 톰캣이다. 스프링 부트 애플리케이션이 독립적으로 실행될 수 있도록 톰캣 서블릿 컨테이너를 내장하는 방식.
내장 제티(Jetty) : 경량 서버 - 제티는 가벼운 서버로 빠른 시작과 적은 메모리 사용을 특징으로 한다.
내장 언더토우(Undertow) : 고성능 서버 - 언더토우는 매우 가볍고 고성능을 제공하는 서버이다.
4. 애플리케이션 실행
Run as > Spring Boot App을 클릭한다. 또는 Alt + Shift + X 버튼을 누른 후 B 버튼을 눌러도 동일하다. 실행하면 Spring이며 로그들이 찍히는 것을 확인할 수 있다.
📌 2. Spring Boot 동작 구조
Static content는 웹 어플리케이션에서 정적 파일들을 제공하는 디렉토리를 의미한다. 정적 파일이란 주로 HTML, CSS, JavaScript, 이미지 파일 등과 같이 서버에서 동적으로 생성되지 않고 그 내용이 고정된 파일을 의미한다.
정적 리소스 디렉토리 설정 : Spring Boot는 기본적으로 '/static', '/public', '/resources', '/meta-INF/resources' 디렉토리에 위치한 정적 리소스를 제공한다.
classpath의 위치 : 정적 리소스는 Spring Boot의 classpath에 위치할 수 있다. 따라서 패키지 내의 'src/main/resources/static' 디렉토리에 정적 파일을 위치시키면 Spring Boot가 자동으로 이를 찾아서 제공한다.
정적 콘텐츠는 주로 웹페이지의 디자인, 클라이언트 측 스크립트, 이미지 등을 제공하는 데 사용된다. Spring Boot는 이러한 정적 콘텐츠를 효율적으로 제공하여 웹 애플리케이션의 성능을 향상시키고, 개발자가 간단하게 웹 리소스를 관리할 수 있도록 도와준다.
Dynamic content는 사용자의 요청에 따라 서버가 동적으로 생성하여 응답하는 콘텐츠를 말한다. 동적 콘텐츠는 주로 데이터베이스에서 가져온 데이터나 사용자 입력에 기반한 결과를 포함하며, HTML 템플릿 엔진을 통해 생성되거나 JSON/XML 형식으로 반환될 수 있다.
사용자 맞춤형 응답 : 각 사용자의 요청에 따라 맞춤형 데이터를 제공할 수 있다.
실시간 데이터 제공 : 데이터베이스나 외부 API와 연동하여 실시간 데이터를 제공할 수 있다.
상호작용성 : 사용자의 입력을 받아서 처리하고, 그 결과를 동적으로 생성하여 반환할 수 있다.
📌 3. Spring Boot 웹 계층
1. Controller 레이어 : 사용자의 요청을 처리하고 응답을 생성하는 역할을 담당한다. 주로 Spring MVC의 @Controller 또는 @RestController 어노테이션을 사용하여 정의한다. 요청 수신, 요청 파라미터 처리, 비즈니스 로직 호출, 뷰 반환. @Controller, @RestController, @RequestMapping, @GetMapping, @PostMapping 등
2. Service 레이어 : 비즈니스 로직을 처리하는 역할을 담당한다. @Service 어노테이션을 사용하여 정의한다. 비즈니스 로직 처리, 트랜잭션 관리, 데이터 처리 로직 구현. @Service
3. Repository 레이어 : 데이터 접근을 처리하는 역할을 담당한다. Spring Data JPA를 사용하여 @Repository 어노테이션으로 정의할 수 있다. 데이터베이스와 상호작용, CRUD 작업 처리(Creat - Read - Update - Delete) @Repository
4. Model 레이어 : 애플리케이션의 데이터를 나타내는 객체를 정의한다. 주로 엔티티 클래스가 여기에 포함되며, 데이터베이스 테이블과 매핑된다. 데이터 구조 정의, 데이터베이스 매핑, @Entity, @Table, @Id, @Column
5. View 레이어 : 최종 사용자에게 보여질 화면을 구성한다. Spring Boot는 여러 뷰 템플릿 엔진(Thymeleaf, FreeMarker, JSP 등)을 지원한다. 뷰 계층은 HTML, JSON, XML 등의 형식으로 데이터를 사용자에게 반환한다. @Controller와 @GetMapping을 사용하여 뷰를 반환할 수 있다.