상세 컨텐츠

본문 제목

1주차 01: 스프링부트란?

스프링부트 핵심가이드/1주차

by Gopythor 2023. 4. 25. 04:31

본문

728x90
반응형

1.1 스프링 프레임워크

 

스프링은 자바의 프레임워크. 엔터프라이즈급 개발을 위해 사용됨.

 

프레임워크란?

어떠한 목적을 달성하기 위해 복잡하게 얽혀있는 문제를 해결하기 위한 구조.

뼈대에 살을 붙히는 것으로 이해 하면 편함 => 레고

 

1.1.1 제어 역전(IOC)

객체의 생성의 관리 주체가 바뀜.

개발자의 제어에서 컨테이너의 제어로 바뀜(IOC or Spring Container). 주체의 변경

이를 통해 의존성 주입(DI), 관점 지향 프로그래밍(AOP) 가능해짐.

 

1.1.2 의존성 주입(DI)

외부 컨테이너가 생성한 객체를 주입 받아 사용하는 방식.

 

의존성 주입 받는 3가지 방법

1) 생성자를 통한 의존성 주입

2) 필드 객체 선언을 통한 의존성 주입

3) setter 메서드를 통한 의존성 주입

 

@Autowired 어노테이션을 통해 의존성 주입 가능. 

가독성 위해 사용 권장.

 

1) 생성자를 통한 의존성 주입 예시

Class 명과 동일.

public class DIController {
	MyService myService;
    
    @Autowired
    public DIController(MyService myService){
    this.myService = MyService
    }
    
}

2) 필드 객체 선언을 통한 의존성 주입 예시

public class FieldInjectionController{

	@Autowired
    private MyService myService;
    
}

 

3) setter 메서드를 통한 의존성 주입

 

public class SetterInjectionController{
	
    MyService myService;
    
    @Autowired
    public void setMyService(Myservice myservice){
    this.myService = myService;
    }
}

 

래퍼런스 객체 없이 객체 초기화를 할 수 없이 설계할수 있도록 생성자를 통한 의존성 주입방식이 권장됨.

 

1.1.3 관점 지향 프로그래밍(AOP)

관점 지향 프로그래밍이란?

Aspect-Oriented Programming(AOP) ≠ Object-Oriented Programming(OOP)

관점은 핵심과 부가 기능을 각각 구분해 하나의 관점으로 보는 것.

OOP에서는 객체마다 핵심 기능을 수행하면서 부가적인 로깅과 트랜잭선을 각자 구현한다. 객체지향적

그러나 AOP 관점에서는 핵심의 기능과 무관하게 부가적인 기능이 수행되며, 반복되는 공통 로직을 모듈화 구현하여 삽입 수행 처리한다.

 

구현 세가지 방법

1) 컴파일 과정에 삽입

2) 바이트 코드를 메모리에 로드하는 과정에 삽입

3) 프락시 패턴을 이용한 방식

 

1.1.4 스프링 프레임워크의 다양한 모듈

20여개의 모듈로 구성. 애플리케이션 개발에 필요한 모듈만 선택하여 설계하며 이를 경량 컨테이너 설계라고 부름.

 

1.2 스프링 프레임워크 vs. 스프링 부트

스프링 프레임워크는 기능이 많은 만큼 설정이 복잡.

이를 해결하기 위해 스프링 부트가 나옴.

Spring Boot makes it easy to create stand-alone, production-grade Spring-based applications that you can
"just run". 

 

1.2.1 의존성 관리

스프링 프레임워크 

  • 의존성 직접 설정
  • 호환 버전 명시
  • 연관된 다른 라이브러리 버전 고려

스프링 부트

  •  spring-boot-starter 여러 종류의 의존성 제공
  • 호환 버전의 모듈 조합 제공
  • 라이브러리 호환 문제 해결

spring-boot-start 라이브러리

  • spring-boot-starter-web : MVC 사용하는 RESTful 에플리케이션을 위한 의존성. 내장 Tomcat 포함
  • spring-boot-starter-test : JUnit Jupiter, Mockito 등의 테스트용 라이브러리
  • spring-boot-starter-jdbc : HikariCP 커넥션 풀 활용한 JDBC
  • spring-boot-starter-security : 인증, 권한, 인가 등의 기능을 제공
  • spring-boot-starter-jpa : 하이버네이트를 활용한 JPA 기능 제공
  • spring-boot-starter-cache :캐시 기능 지원
spring-boot-starter의 여러 라이브러리사용시 의존성이 겹칠 수 있으므로, spring-boot-starter-parent를 사용하여 검증된 조합을 제공 받을 수 있음.

 

@SpringBootApplication 어노테이션은 아래의 3개의 어노테이션을 합쳐놓았음

  1. @SpringBootConfiguration
  2. @EnableAutoConfigulation
  3. @ComponentScan

스프링 부트 어플리케이션일 실행되면, @ComponentScan 어노테이션이 @Component 어노테이션 클래스들을 발견해 빈(bean)등록.

이후 @EnableAutoConfiguration 어노테이션을 통해 'spring-boot' autoconfigure'패키지 안에 spring.factories 파일을 추가해 다양한 자동 설정이 적용됨. 각 파일에 설정된 @Conditional의 조건을 충족할 경우 빈에 등록되고 애플리케이션에 자동 반영.

 

@Component 시리즈 어노테이션의 대표적인 예
  • @Controller
  • @RestController
  • @Service
  • @Repository
  • @Configuration

1.2.3 내장 WAS

WAS는 Web Application Service이며, 'spring-boot-starter-web'에 톰캣이 내장되어있다. 특별한 설정 없이도 톰캣을 실행할 수도 있지만, 다른 웹 서버(Jetty, Undertow 등)로도 대체할 수 있다.

 

1.2.4 모니터링

개발이 끝아고 서비스를 운영할 때에는 해당 시스템이 사용하는 스레드, 메모리, 세션 등의 주요 요소들을 모니터링 해야 함.

728x90
반응형

관련글 더보기

댓글 영역