본문으로 바로가기

[Spring] 스프링 부트 개념과 활용 - 1

category Spring 2021. 7. 10. 19:40

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

 

스프링 부트 개념과 활용 - 인프런 | 강의

스프링 부트의 원리 및 여러 기능을 코딩을 통해 쉽게 이해하고 보다 적극적으로 사용할 수 있는 방법을 학습합니다., 스프링 부트 개념과 활용 스프링부트 (https://spring.io/projects/spring-boot) 프로

www.inflearn.com

 

CH2. 스프링 부트 시작하기

ㅁ 설치

- pom.xml에 아래와 같이 추가
https://docs.spring.io/spring-boot/docs/2.0.3.RELEASE/reference/htmlsingle/#getting-started-maven-installation

   <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

- Application.java 생성 후, @SpringBootApplication Annotation  붙이기

- main 클래스 생성 후, SpringApplication.run(Application.class,args)

- mvn package 를 통해 jar로 build 할수 있으며, 이것을 실행하면 내부 톰캣으로 바로 웹이 띄워짐

* start.spring.io 에서 다운로드도 가능

 

ㅁ 스프링 부트 프로젝트 구조

- java : java 파일들이 들어감

- resource : java 외 파일들이 들어감, :classpath 등으로 참조 가능, / 경로라 생각하면 됨

- @SpringBootApplication 어노테이션이 붙어있는 파일의 component scan 시, 해당 파일의 패키지 아래에 있는것만 bean으로 등록됨 ( 권장 위치 확인하여 main 파일 생성해야함 )

 

CH3. 스프링 부트 원리

ㅁ 의존성 관리 이해

- maven 의 <parent> 태그(spring-boot-starter-parent) 를 설정하여 실행하는게 좀 더 많은 설정을 보정받아 진행할 수 있음

 

ㅁ 의존성 관리 응용

- dependency 태그로 추가

- 버전 관리

<properties>
<spring.version>5.0.6.RELEASE</spring.version>
</properties>

 

ㅁ 자동 설정 이해

- @SpringBootApplication == @Configuration + @ ComponentScan + @EnableAutoConfiguration

- @EnableAutoConfiguration  보면 conditional 이라는 조건이 많은데, 조건에 따라 자동으로 설정하게함

- META-INF의 spring.factories 참고

 

ㅁ 자동 설정 만들기 1부

   - 1.componentscan으로 빈 등록

     2. AutoConfiguration으로 빈 등록함 

   > 나는 componentscan의 빈만 갖고싶다.

     -> @ConditionalOnMissingBean

 

- properties를 통해  AutoConfiguration 설정하기

 > @ConfigurationProperties("holoman") 를 통해 프로퍼티를 만들어주고,

    @EnableConfigurationProperties(HolomanProperties.class) 를 설정해서 프로퍼티를 삽입한다.

   => ConfigurationProperties를 설정한 곳에서 application.properties에  holoman.xxx 라고 입력한 것들을 값을 받아 저장하고, 

      이를 객체로 만들어준다. 

 

ㅁ 내장 웹 서버 이해

- 톰캣 호출하여, 서블릿 넣기

        Tomcat tomcat = new Tomcat();
        tomcat.setPort(8080);
        Context context = tomcat.addContext("/", "/");


        HttpServlet servlet = new HttpServlet() {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
                PrintWriter writer = resp.getWriter();
                writer.println("<html><head><title>");
                writer.println("Hey, Tomcat");
                writer.println("</title></head>");
                writer.println("<body><h1>Hello Tomcat</h1></body>");
                writer.println("</html>");
            }
        };
        String servletName = "helloServlet";
        tomcat.addServlet("/", servletName, servlet);
        context.addServletMappingDecoded("/hello", servletName);
        tomcat.start();
        tomcat.getServer().await();

- 기본적으로 AutoConfiguration 에서 tomcat 및 Servlet, 포트 등을 다 자동으로 설정해줌

    ○  ServletWebServerFactoryAutoConfiguration (서블릿 웹 서버 생성) 

        ■ TomcatServletWebServerFactoryCustomizer (서버 커스터마이징)

    ○ DispatcherServletAutoConfiguration

         ■ 서블릿 만들고 등록