본문 바로가기

좋아하는 것_매직IT/1.spring

21.Spring, Spring Boot App 시작하기 (spring-boot-starter-parent 구성, 1/4)

반응형

스프링 부트 어플리케이션을 시작하는 과정에 대해서 알아보자.

  • 주요 과정은 아래와 같음.
    • 하나, pom.xml 파일에 spring-boot-starter-parent를 설정함. (1/4)
    • 둘, 필요한 starter project 로 pom.xml 파일을 구성함. (2/4)
    • 셋, 어플리케이션을 실행하기위해, spring-boot-maven-plugin을 설정함. (3/4)
    • 넷, 스프링 부트 실행 클래스를 만듬. (4/4)

그럼, spring-boot-starter-parent 구성에 대해서 알아보자

  • 우선, 아래 예시, pom.xml 을 유심히 보자

잠깐! 여기서 의문 한가지 ? ^^;

  • 위에서 가장 먼저 눈에 들어오는 spring-boot-starter-parent 가 필요한 이유가 있을텐데 왜 필요할까?
    • 정답) spring-boot-starter-parent는 아래 내용을 포함한다.
      • 사용할 JAVA 기본버전
      • 스프링 부트가 사용하는 의존성의 기본버전 및 메이븐 플러그인의 기본 설정을 포함함.
    • 다시말하면, spring-boot-starter-parent 의존성은 스프링부트 기반 어플리케이션에 대한 의존성 및 플러그인 관리를 제공하는 부모 POM이다.

그럼, spring-boot-starter-parent 에 대해서 좀 더 상세하게 알아보자.

  • 해당 spring-boot-starter-parent을 알기위해서 내부 코드를 확인해보자.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd;
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${revision}</version>
        <relativePath>../../spring-boot-dependencies</relativePath>
    </parent>
    <artifactId>spring-boot-starter-parent</artifactId>
    <packaging>pom</packaging>
    <name>Spring Boot Starter Parent</name>
    <description>Parent pom providing dependency and plugin management for applications
        built with Maven</description>
    <properties>
        <java.version>1.8</java.version>
        <resource.delimiter>@</resource.delimiter> <!-- delimiter that doesn't clash with Spring ${} placeholders -->
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>
     
    ...
 
    <resource>
        <directory>${basedir}/src/main/resources</directory>
        <filtering>true</filtering>
        <includes>
            <include>**/application*.yml</include>
            <include>**/application*.yaml</include>
            <include>**/application*.properties</include>
        </includes>
    </resource>
 
</project>

설명

  • 출처 URL : https://howtodoinjava.com/spring-boot2/spring-boot-starter-parent-dependency/
    • 위 소스의 아홉번째 라인을 보시면,
      • spring-boot-starter-parent 종속성은 spring-boot-dependencies로부터 상속됨을 확인할 수 있음.
        • 참고로 spring-boot-dependencies는 스프링 부트가 사용하는 모든 의존성에 대한 기본 의존성 관리를 제공함.
    • 그리고, 다음코드는 spring-boot-dependencies에 구성된 다양한 버전의 다양한 종속성을 보여주고 있음

  • 그럼, 기본 종속성 버전을 오버라이드(override) 하는 방법은?
    • 스프링 부트에는 대부분의 종속성에 사용할 기본 버전이 존재함. 
    • 그리고, 기본버전을 오버라이드 하는 방법은 아래와 같음.
      • 프로젝트의 pom.xml 파일의 "properties" 태그(tag)를 통해서 프로젝트에서 필요하거나 or 내가 선택할 버전으로 오버라이드 할 수 있음.
    • 예를 들면 아래와 같음
      • 만약 아래와 같이 스프링 부트에서 디폴트 버전으로 google GSON library의 2.8.2 버전을 사용한다면 ?
        • 그런데, 만일 나는 디폴트 버전이 아니라, google GSON library의 2.7 버전을 사용하고 싶다면,  properties 태그를 통해서 아래와 같이 오버라이드 하면 됨.
    • 그리고, 여러버전의 프레임워크 간 호환성 문제 발생에 대해서 개발자는 어떻게 해야 할까?
      • 보통 스프링의 특정 버전과 호환되는 최신 스프링 세션 버전을 찾으려면, 문서를 찾아서 읽는 것이 해결책이다.
      • but, 스프링 부트를 사용하면, spring-boot-starter-parent로 쉽게 만들 수 있음.
        • 즉, 새로운 스프링 버전으로 업그레이드하고 싶으면, 스프링 버전에 대한 spring-boot-starter-parent 의존성을 찾아야함.
        • 그리고, spring-boot-stater-parent 의 해당 특정 버전을 사용하기 위해 어플리케이션을 업그레이드 하면, 다른 모든 의존성이 새 스프링 버전과 호환되는 버전으로 업그레이드 됨.
          • 결론적으로, 개발자가 처리해야 하는 문제가 하나 더 없어지는 것. 참 소소한 행복이고, 감사하다. ^^;

결론

  • 스프링 부트 어플리케이션을 시작하는 과정은 아래와 같음.
    • 하나, pom.xml 파일에 spring-boot-starter-parent를 설정함. (1/4)
    • 둘, 필요한 starter project 로 pom.xml 파일을 구성함. (2/4)
    • 셋, 어플리케이션을 실행하기위해, spring-boot-maven-plugin을 설정함. (3/4)
    • 넷, 스프링 부트 실행 클래스를 만듬. (4/4)
  • spring-boot-starter-parent 의존성은 스프링부트 기반 어플리케이션에 대한 의존성 및 플러그인 관리를 제공하는 부모 POM이고, 아래 내용을 포함한다.
    • 사용할 JAVA 기본버전
    • 스프링 부트가 사용하는 의존성의 기본버전 및 메이븐 플러그인의 기본 설정을 포함함.
  • 오늘도 spring-boot-starter-parent 에 대한 지식 마술(?) 한가지 획득완료! 감사합니다. ^^

  • 오늘의 명언 한마디
    • 이상하게도 우리 뇌는 무언가를 하면 안 된다고 자꾸 생각할수록, 그 일에 더 집착하고 더 큰 흥미를 느낀다.
    • 그리고, 이런 감정은 우리 마음에 격렬하게 스며든다.
    • 따라서 어느 순간 고삐가 느슨해지면, 지금까지 부정적으로 집착하고 있던 먹는 것에 대한 폭발적인 충동을 억누르기 힘들어진다.
    • 결국 부정적인 자극을 추구하는 뇌는 하면 안 된다고 생각할수록 더 하게끔 만드는 것이다.
    • 코이케류노스케지음, "생각 버리기 연습" 중에서.

  • 오늘의 영어 한마디
    • I am happy to meet you.
      • 나는 기뻐요 / 만나서 / 당신을
    • 해설
      • "happy" 는 기쁨, 행복을 나타냄
      • "to meet you" 는 당신을 만나서라는 뜻

  • 오늘의 민법 한마디(for real estate)
    • 제1편 총칙 / 제5장 법률행위 / 제3절 대리
      • 제132조(추인, 거절의 상대방)
        • 추인 또는 거절의 의사표시는 상대방에 대하여 하지 아니하면 그 상대방에 대항하지 못한다.
        • 그러나 상대방이 그 사실을 안 때에는 그러하지 아니하다.

  • 나의 목표 및 다짐을 항상 내곁에 두기.(계속 37)
    • 목표
      • 나의 강점을 바탕으로 나의 일을 잘해냄으로써 타인과 사회를 아릅답게 만든다.
        • 현재 내가 가진 능력으로 누군가에 도움이 될 수 있을까? 에 대해서 항상 생각하기
    • 목표를 이루기 위한 실천방안
      • 꾸준한 블로깅/기록법/독서법으로 넘버원이 아닌 온리원이 되보자.
      • 천사불여일행(千思不如一行)을 항상생각하며 체화 및 각인시키자.
        • "천번 생각하는것보다 한번 행동하는 것이 더 중요하다."
      • 기기일약 불능십보(騏驥一躍 不能十步) / 노마십가 공재불사(駑馬十駕 功在不舍)
        • 천리마도 한번에 열걸음을 뛸 수 없고, 느리고 둔한말이라도 열흘이면 하룻길을 간다.
300x250