본문 바로가기

Development/Spring Boot

[Spring Boot] 프로젝트 생성하기

1- 프로젝트 생성

https://start.spring.io

- 위 링크를 통해 스프링 부트 프로젝트를 간편하게 생성할 수 있음

- SNAPSHOT이나 Mn 버전은 정식 릴리즈된 버전이 아님

  (강의에서는 2.3.3 버전을 사용했으나, 강의를 듣는 현 시점에서는 2.7.2가 정식 릴리즈된 최신 버전이기에 해당 버전 사용)

- Project Metadata

   : Artifact - 프로젝트 빌드명

- Dependenies 설정시 라이브러리들을 불러오나, 위 캡처본과 같이 둘 경우 코어 라이브러리만 가져옴

- 원하는 설정 후 하단에 Generate 클릭하면 설정된 zip 파일을 받아올 수 있음

- 압축 해제 후 IntelliJ로 오픈. 이때 build.gradle을 클릭해 오픈해야 함.

 

1-2. build.gradle

- build.gradle 파일에서 라이브러리 설정을 변경할 수 있음

- 설정한 metadata 정보가 들어감

 

1-3. IntelliJ setting

- Build and run using과 Run tests using을 IntelliJ IDEA로 설정하면 실행시 IDE에서 실행해 속도가 빠름

 

2- Maven과 Gradle

(1) Maven

- 사용에 필요한 라이브러리와 그 라이브러리를 사용하기 위해 필요한 라이브러리를 네트워크를 통해 자동으로 받아줌

- 자바의 대표적 관리 도구였던 ant를 대체하기 위해 개발된 것 (ant는 빌드 기능만 가지고 있었음)

- Maven은 9가지 라이프사이클이 존재함

  • Clean: 이전 빌드에서 생성된 파일 삭제
  • Validate: 프로젝트가 올바른지 확인 후 필요한 모든 정보 사용 가능한지 확인
  • Compile: 프로젝트 소스 코드 컴파일
  • Test: 유닛(단위) 테스트 수행 (테스트 실패시 빌드 실패로 처리 및 스킵 가능)
  • Package: 실제 컴파일된 소스 코드와 리소스들을 jar 등의 배포를 위한 패키지로 만드는 단계
  • Verify: 통합테스트 결과에 대한 검사를 실행해 품질 기준 충족여부 확인
  • Install: 패키지를 로컬 저장소에 설치
  • Stie: 프로젝트 문서 생성
  • Deploy: 만들어진 Package를 원격 저장소에 release

- POM 사용

  • POM은 Project Object Model의 약자
  • 말 그대로 프로젝트 정보를 갖고 있는 파일
  • Maven은 이러한 정보가 담긴 pom.xml을 이용해 프로젝트를 관리함

(2) Gradle

- 기본적으로 빌드 배포 도구임 (Build Tool)

- 안드로이드 프로젝트의 표준 빌드 시스템으로 채택

- 스크립트를 활용한 빌드관리 도구

- maven에 비해 gradle이 대규모 프로젝트에서 성능이 높으며 설치 없이 사용 가능함

  • repositories : 라이브러리가 저장된 위치 등 설정
  • mavenCentral : 기본 Maven Repository
  • denpendencies: 라이브러리 사용을 위한 의존성 설정

 

(3) Maven과 Gradle의 차이

- Maven은 XML로 라이브러리를 정의하고 활용하나, Gradle은 별도 스크립트로 어플리케이션 버전, 라이브러리 등 항목을 설정할 수 있음

- Gradle은 스크립트로 작성하기에 if, else, for 등 로직 구현 가능

- 이 둘의 차이를 요약하자면.

  • 빌드(Build)라는 동적 요소를 정적인 XML로 정의하기에 어려운 부분이 많음
    • Maven : XML로 build 설정
      설정 내용이 길어지고 가독성이 떨어지며 의존관계가 복잡한 프로젝트 설정에는 부적절함
      또한 상속구조를 이용한 멀티 모듈 구현할 경우 특정 설정을 소수 모듈에서 공유하기 위해서는 부모 프로젝트를 생성해 상속하게 해야함 (상속의 단점 발생)

      --> 실제로 COMMON 프로젝트를 다른 프로젝트로 상속 받게 하고 있는데, 이로 로딩 속도라든가 수정 발생시 프로젝트가 무거워 컴파일이 오래걸리는 문제가 발생함. (clean해도 안될 경우 많았음)

    • Gradle : 스크립트로 build 설정
      Configuration Injection 방식을 사용해 공통 모듈을 상속해 사용하는 단점 커버
      또한 설정 주입시 프로젝트 조건 체크가 가능해 프로젝트별 주입되는 설정을 달리할 수 있음

 

3- jar, war, ear

  • jar
    • Java Archive
    • .jar 확장 파일에는 Class와 같은 자바 리소스 속성 파일, 라이브러리 및 액세서리 파일이 포함됨
    • 자바 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일
    • jar 파일은 플랫폼에 귀속되는 점만 제외하면 window zip파일과 동일한 구조
    • 원하는 구조로 구성이 가능하며
      JDK(Java Development Kit)에 포함된 JRE(Java Runtime Environment)만 가지고도 실행 가능함
  • war
    • Web Application Archive
    • servlet / jsp 컨테이너에 배치 가능한 웹 어플리케이션( Web Application ) 압축 파일 포맷
    • Servlet Context ( JSP, SERVLET, JAR, XML, CLASS 등 )관련 파일로 패키징되어 있음
    • 웹 응용 프로그램을 위한 포멧이기에 웹관련 자원만 포함하고 있으며, 이를 사용해 웹 어플리케이션을 쉽게 배포하고 테스트할 수 있음
    • 원하는 구성이 가능한 jar 포맷과 달리 WEB-INF, META-INF 디렉토리로 사전 정의된 구조를 사용함
    • war 파일을 실행하려면 tomcat, weblogic, websphere 등 웹 서버 (WEB) 또는 웹 컨테이너(WAS)가 필요함
  • ear
    • enterprise archive
    • JAVA EE(Enterprise Edition)에 쓰이느 파일 형식
    • 한 개 이상의 모듈을 단일 아카이브로 패키징해 어플리케이션 서버에 동시에 일관적으로 올리기 위해 사용되는 포맷

4- mavenCentral( ) VS jcenter( )

  • gradle에서 repositories는 각종 의존성(라이브러리)들을 어떤 원격 저장소에서 받을지 정해줌
  • mavenCentral과 jCenter는 gradle 플러그인용 저장소
  • (추가) 2022년 jcenter는 서비스가 종료되었기에 mavenCentral( )를 사용해야함