본문 바로가기
Programming/Spring Boot

개요

by yoon9i 2024. 7. 2.

Spring 어플리케이션 개발

1. Spring FrameWork 프로젝트
https://spring.io/projects/spring-framework#learn 가서 Reference Doc 와 API Doc 참조.
- 최신 버전인 6은 JDK 17 부터 지원됨.
- STS 3 사용해야됨.

2. Spring Boot 프로젝트
https://spring.io/projects/spring-boot#learn 가서 Reference Doc 와 API Doc 참조.
- 최신 버전인 3은 JDK 17 부터 지원됨.
- STS 3 및 STS 4 모두 사용가능.
- FrameWork 의 자동화 버전

3. 용어 정리
1> POJO
- Plain Old Java Object
- 플랫폼에 독립적인 형태의 클래스를 의미한다.
ex> CartListServlet 은 의존적인 클래스 (extends HttpServlet 때문에 Tomcat 이 설치된
    웹 개발에서만 사용가능)
    CartDTO 는 독립적인 클래스.
    ==> servlet_study -> ShopMiniMall Project 에서 사용한 servlet 임.

2> (Spring) Bean
- Spring 환경에서 사용되는 POJO(Plain Old Java Object: 플랫폼에 독립적인 형태의 클래스) 
  기반의 클래스 의미. 주로 클래스 대신에 Bean 이라고 한다.
- 개발자가 직접 Bean(클래스)을 생성(new 클래스())하지 않는다.
  Bean을 자동으로 관리하는 또 다른 Bean 이 제공된다.

  * Java Bean
  - Spring 이전에 사용되었던 이름.
  - EJB (Enterprise Java Bean) 에서 사용했던 명칭.

3> IoC Container (Inversion of Control Container: 제어의 역행)
https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans
- 개념: Ioc(Inversion of Control) 방법으로 Spring Bean을 관리(생성~소멸)하기 때문에 붙여진 이름.
- 비슷한 용어:
    Spring Container
    Spring Context
- 기능:
    Spring Bean 을 관리(생성~소멸) 및 의존성 설정.
    (이전 개발방식(Spring 개발 전 개발방식)은 클래스를 직접 생성하고 의존성도 직접 설정했지만
    Spring 개발 후에는 명시적으로 설정하지않고 자동으로 해준다.
    Spring 개발 이전의 이런 순방향의 개발이 아닌 완전히 역방향의 개발 이기 때문에 제어의 역행이라고도 한다.)

- IoC Container 의 실체는 Spring Bean 이다. 계층 구조로 되어있음.

                      BeanFactory(인터페이스)
          |                                         |
    xxxAplication                    xxxBeanFactory
          |
    AnnotationConfigApplicationContext
    GenericXmlApplicationContext
    xxxWebApplicationContext (web이 있는 것은 웹어플리케이션 개발용 IoC Container 이기 떄문)

  BeanFactory: 기본 Spring Container 임.
  ApplicationContext: 기본기능 + enterprise 환경에서 필요한 전용기능이 추가된 컨테이너임.
                                (웹 개발가능. I18N(국제화 Internationalization), AOP 기능, ...)


4> DI(Dependency Injection: 의존성 주입)
- 의존성? A 클래스가 B 를 사용하면 A 와 B 간에 의존성이 생김.
- 의존성 주입? A(CartService) 클래스가 B(CartDAO) 를 참조하기 위해서 외부(CartListServlet)에서 
              A 클래스의 생성자에 B 객체를 생성해서 설정하는 작업을 의미.

              Spring 에서는 외부역할을 IoC Container가 담당한다.

- 의존성 주입 방법
가. 생성자 이용한 주입
https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans-constructor-injection

나. set 메서드를 이용한 주입
https://docs.spring.io/spring-framework/docs/5.2.25.RELEASE/spring-framework-reference/core.html#beans-setter-injection



4. 빌드툴(build tool)
1> 개념
- 개발시 사용되는 자동화 툴.

2> 종류
- Maven(메이븐)
pom.xml (Maven 의 설정파일 - jdk/boot 버전, 필요한 jar 파일들 설정)

- Gradle(그레들)
build.gradle(Gradle 의 설정파일 - jdk/boot 버전, 필요한 jar 파일들 설정)


3> 빌드툴 기능
가. 이전 개발 프로세스
소스코드작성 -----> 컴파일 -----> 테스트파일작성(단위테스트) -----> 컴파일 --------> 패키징(jar/war) -------> 배포

    필요한 외부 jar 다운
        +
    필드패스
    <------------------------------------------------------------------------------------------------------->
                                        개발자가 직접 수동으로 해줌.

나. 빌드툴 적용한 개발 프로세스
소스코드작성 -----> 컴파일 -----> 테스트파일작성(단위테스트) -----> 컴파일 --------> 패키징(jar/war) -------> 배포

    필요한 외부 jar 다운
        +
    필드패스
    <------------------------------------------------------------------------------------------------------->
                                        빌드툴이 자동화 해줌.

4> Maven 의 기본 디렉터리 구조

    src/main/java : 이전 이클립스의 src 경로와 동일. *.java 저장
    src/main/resource: *.java 제외한 나머지 파일들 저장.
                       ex> jdbc.properties, EmpMapper.xml(이전에는 src 에 저장)

    src/test/java: 단위 테스트 용도의 *.java 저장
    src/test/resource: 단위 테스트 용도의 *.java 제외한 파일 저장.

    JRE System Library: jdk 11 용
    Maven Dependencies: SpringBoot 에서 사용해야 되는 jar 파일들 저장.
        - junit(mockito) 관련 jar: 단위 테스트 용도
        - logback(log4j, slf4j) 관련 jar: 로그출력(로깅:logging)
          * 로깅: System.out.println 대신에 사용
        
        - spring-beans, spring-core 관련 jar: Spring Framework
        - spring boot 관련 jar: Spring Boot

    ==> 저장경로는 C:\Users\사용자\.m2\repository 이다. (로컬 저장소)

        pom.xml(Project Object Model)
        - 버전, 필요한 jar 정보등 설정
        - 계층구조로 구성됨. (부모에 해당하는 pom.xml 있음)
        - 필요로 하는 jar 파일은 <dependency></dependency> 태그로 설정하면 자동으로 다운로드 되고
          build path 까지 해줌.
          https://mvnrepository.com


5> Maven 의 주요 기능
가. 의존성  설정
- pom.xml 에 필요로 하는 jar 파일은 <dependency></dependency> 태그로 설정하면 자동으로 다운로드 되고
  build path 까지 해줌.
https://mvnrepository.com/ 에서 <dependency></dependency> 정보를 얻을 수 있음.

나. 빌드시 사용되는 단계별 명령어
- compile
- test
- package
- install
- deploy
- clean



5. SpringBoot 프로젝트 생성 방법
=> 명시적으로 빌드툴(build tool) 선택해야됨.
=> JSK: 11버전
   SpringBoot: 2.7.18 버전
   STS 4버전 -> pom.xml 파일의 <project></project> 태그내의 값은 변경해야 된다. 
                변경전: https://maven.apache.org/xsd/maven-4.0.0.xsd"
                변경후: http://maven.apache.org/xsd/maven-4.0.0.xsd"

1> STS 에서 직접 생성
- STS 에서 New > Spring Starter Project 선택

2> Initializer 이용한 방법
- 웹에서 생성후 다운받아서 사용함.


6. IoC Container 에게 빈정보 같은 데이터를 알려주는 방법 (Configuration 작업)

// spring framework
1> XML 이용
2> 어노테이션 + 약간의 XML
3> 어노테이션 <== Java Configuration 이라고 부름.

// spring boot(xml 기반 가능, 어노테이션 + 약간의 XML 가능, 어노테이션 가능(기본))
4> boot
==> src/main/resource 의 application.properties 이용해서 전반적인 환경설정을 설정함.

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

1. Spring Boot 등장배경
- 2016 년에 등장.
- 기존의 framework에서는 개발자가 처리해야 되는 많은 설정이 있었기 떄문에 
  매우 설정(Configuration 작업)자체가 복잡했음.
  실제 비즈니스 로직에 집중하지 못함.
  이러한 문제를 해결하기 위해서 Spring Boot 라는 서브 프로젝트가 진행됨.
  Spring Boot 는 많은 설정들을 자동화해서 개발자가 실제 비즈니스 로직에 집중하도록 도와줌.

2. Spring Boot 장점(특징)
- 설정 자동화
  pom.xml 에 의존성 설정하면 자동으로 지정된 의존성에 맞는 환경을 설정해줌.
- 라이브러리 자동 관리
  maven + starter
- 웹어플리케이션 프로젝트인 경우에도 jar 실행가능

  * 웹어플리케이션 프로젝트인 경우에도 jar 실행가능.
  (1) 비웹 어플리케이션
      -> 일반적인 Java SE 환경: jar
      -> Spring Framework 환경: jar
      -> Spring  Boot 환경: jar 

  (2) 웹 어플리케이션
      -> 기본 Servlet/JSP 환경: war
      -> Spring Framework 환경: war
      -> Spring Boot 환경: jar / war

      jar 실행: java -jar 파일명.jar

- boot 프로젝트의 설정정보는 
  src/main/resource 의 application.properties(application.yml(야물파일)) 
  이용해서 전반적인 환경설정을 설정함.

  # application.properties - 예시
  spring.application.name=demo

  server.error.whitelabel.enabled=false

  server.port=8090

  # application.yml(야물파일) - 예시
  server:
    error:
      whitelabel:
        enabled: false
        
    port: 8090


3. Spring Boot Starter
https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#using.build-systems.starters

1> starter 개념
- 필요한 jar 파일들의 묶음.

2> 참조 사이트
http:/mvnrepository.com 에서 starter 사용가능.


4. xxxAplication.java
https://docs.spring.io/spring-boot/docs/2.7.18/reference/htmlsingle/#getting-started.first-application.code.mvc-annotations

  @SpringBootApplication
  public class Application {

    public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
      
      
    }
  }

  - 위 코드는 spring boot 에서는 필수코드임.
  - 시작점 역할 담당
  - @SpringBootApplication 어노테이션 필수로 지정.
    다음 3가지 어노테이션을 포함한다.

    @SpringBootConfiguration 
      - 개발자가 필요에 의해서 추가적인 Configuration 설정할 수 있도록 지원.
      - 추가적인 설정 방법: 클래스 작성하고 @Configuration 지정
      - 대표적으로 Spring Security 임.
      ex>
          @Configuration
          public class MyConfiguration {
              // 작업했던 코드 사용가능
          }

    @EnableAutoConfiguration
      - pom.xml 에 starter 같은 의존성을 설정하면 거의 자동으로 필요한 설정을 해줌.
        즉, 자동으로 구성 메커니즘 활성화.
      - ex> spring-boot-starter-web 지정하면 자동으로 tomcat 설치되고
            404 발생시 자동으로 whitelabel ~ 페이지를 제공하는 등...

    @ComponentScan
      - 자동으로 Bean 생성하는 방법으로 기본적으로 패키지 단위로 설정해서
        자동으로 생성하도록 가이드함.
      
  - 패키지를 알려주는 방법 2가지

    가. 패키지를 지정하지 않는 경우의 scan

      - @SpringBootApplication 가진 Application.java 의 패키지와 같거나
        서브 패키지로 작성하면 자동으로 scan 됨. (권장방법)

    나. 패키지를 지정한 경우의 scan

      - 명시적으로 생성할 빈의 패키지명을 알려줘야 된다.
        ex> @SpringBootApplication(scanBasePackages={"com.exam2"})

'Programming > Spring Boot' 카테고리의 다른 글

빈의 scope  (0) 2024.07.02
생성된 빈 접근방법  (0) 2024.07.02
의존성 설정  (0) 2024.07.02
빈(Bean) 생성  (0) 2024.07.02
로깅처리  (0) 2024.07.02