- 스프링
- Java 기반의어플리케이션 개발을 위해 만들어진 프레임워크
- Spring은 자바 기반의 애플리케이션을 개발하기 위한 다양한 기능과 라이브러리를 제공
- 순수자바로의 개발과 비교하여 많은 부분을 사전에 구현 및 단순화 시켜 웹개발 편의 증대
- 대표적 편의성
- HTTP통신, reqeust data, response data 처리 편의증대
- database연결 및 쿼리 실행 편의 증대
- 보안(로그인관련security) 등의 편의 기능이 내장
- 스프링부트
- Springboot는 Spring기반의 어플리케이션을 쉽고 빠르게 구축할 수 있도록 도와주는 도구
- Spring의 모든 기능을 포함하며, 추가적으로 더 쉽고 빠른 개발을 가능하게 하는 여러 도구와 기능을 제공
- Spring 설정을 최소화하며 필요한 라이브러리 자동 구성(Auto-configuration, Starter 종속성 등)
- SpringBoot는 환경세팅, 톰캣지원 등 개발자가 번거로운 설정 작업을 최소화하고, 애플리케이션의 구조를 간소화
- spring에 비해 프로젝트 생성속도, 클라우드 환경에서의 유연성 등 많은 장점으로 인해 최신 프로젝트는 대부분 springboot기반의 프로젝트
- 스프링부트 프로젝트 생성
- https://start.spring.io에서 프로젝트 생성
- 스프링 프레임워크와 Spring Boot 프로젝트를 생성하기 위한 공식적인 웹 서비스
- 프로젝트 선택
- Gradle Groovy 선택
- Gradle
- Gradle은 프로젝트 빌드, 의존성(종속성) 관리, 배포 등을 위한 자동화 도구
- Java 빌드에 필요한 플러그인 설정 ex)build.gradle의 plugins코드
- 외부라이브러리 및 모듈 등의 관리 ex)build.gradle의 dependencies
- jar파일과 같은 배포를 위한 압축파일 생성
- Groovy
- XML이나 특수한 DSL(Domain Specific Language)을 사용하는 대신, 그루비(Groovy)라는 스크립트 언어를 사용하여 빌드 스크립트를 정의
- 예시) build.gradle 파일 작성의 문법 형식
- Language
- Spring Boot
- 3.5.x
- snapshot은 실험적인 버전을 의미
- Project 구조
- Group
- naver등 그룹이나 조직을 나타내는 name
- 일반적으로 도메인 이름을 역순으로 사용. 예를 들어, com.naver
- artifact
- 예를 들어, first-web app 등 프로젝트의 실질적인 name으로 사용
- 그룹 내에서 프로젝트를 고유하게 식별하는 데 사용
- 프로젝트가 생성하는 JAR 파일의 이름에 사용
- name
- 프로젝트의 전체 이름. ArtifactId보다 더 설명적이고 친숙한 형태로 표현
- main application 파일이름 결정
- Dependecies
- 사용할 외부 라이브러리 목록 정의
- spring web
- 웹 서비스를 위한 라이브러리로서 기본이 되는 라이브러리
- Thymeleaf
- spring에서 java코드가 더해진 html을 만들어주는 템플릿 엔진
- 그외에는 프로젝트 작업 과정에서 지속적으로 추가할 예정
- Dependencies 섹션
- implementation
- implementation 의존성은 컴파일 시점과 런타임 시점 모두에 필요한 라이브러리에 사용
- 프로젝트 코드 내에서 직접 사용되는 라이브러리에 주로 사용
- compileOnly
- 컴파일 시에만 필요하고, 런타임 시에는 필요하지 않은 의존성을 선언
- 예를 들어)컴파일 시 Lombok 어노테이션들(@Getter, @Setter 등)을 컴파일러에게 인식알리는것
- gradle5이후로는 annotationprocessor 추가
- annotationProcessor는 컴파일 시점에 어노테이션 프로세싱하는데 사용
- runtimeOnly
- 런타임 시에만 필요하고, 컴파일 시에는 필요하지 않은 의존성을 선언
- 대표적으로 DB관련 의존성과 로그의존성
- 컴파일 타임 의존성
- 컴파일 타임 의존성은 소스 코드를 컴파일하는 데 필요한 라이브러리를 의미. 이러한 의존성은 소스 코드 내에서 직접 참조.
- 런타임 의존성
- 런타임 의존성은 애플리케이션이 실행될 때 필요한 라이브러리를 의미
- 런타임 의존성은 소스 코드 내에서 직접적으로 참조되지 않을 수 있음.
- 예를 들어, JDBC 드라이버는 일반적으로 소스 코드에 직접적으로 참조되지 않지만, 런타임에 데이터베이스 연결을 위해 필요
- 컴파일의존성과 런타임의존성의 구분하는이유와 차이
- 컴파일의존성은 소스코드를 class로 빌드할때 참조용으로 사용
- 런타임 의존성은 일반적으로 빌드된 아티팩트에 포함
- 성능 최적화, 배포크기 최소화를 위해 구분
- Packaging
- jar는 주로 springboot에서 사용
- war는 서블릿/JSP 기반의 웹 애플리케이션에 사용되고, 기존의 legacy 스프링 프로젝트에서 많이 사용되는 구성요소를 지님
- 사전 정의된 구조를 사용함 (WEB-INF, META-INF)
- 별도의 웹서버(WEB) or 웹 컨테이너(WAS) 필요
- Generate시 다운로드 폴더에 zip파일 다운로드
- zip파일 압축 해제 후 intellij에서 build.gradle 파일 open
- 최초 open시 build.gradle에 설정된 dependencies 관련 라이브러리 관련파일을 자동으로 download
- 스프링부트 프로젝트 구조
- .idea : intelliJ 툴 관련 설정 파일
- main, test 폴더
- main 폴더
- test 폴더
- 설정에서 Tree appearance -> compact Middle packages 체크해제를 통해 폴더구조 변경
- build.gradle
- gitignore
- gradle관련
- 스프링부트 프로젝트 실행