1. 스프링의 등장
- 엔터프라이즈 애플리케이션을 위한 개발환경을 제공해서 기능 개발에만 집중할 수 있는 프레임워크
- Spring 자체는 장점이 많지만 설정이 매우 복잡하다. 따라서 이러한 단점을 보완하고자 출시된 것이 Spring Boot이다.
- SpringBoot는 빠르게 프로젝트를 설정할 수 있고, 의존성 세트라고 불리는 스타터를 활용해 간편하게 관리할 수 있다.
- SpringBoot는 톰캣, 제티, 언더토우같은 WAS가 내장되어있어서 독립실행이 가능하다.
- SpringBoot는 빌드 구성을 단순화하는 스프링부트 스타터를 제공한다.
- SpringBoot는 XML설정이 필요없고, JAR을 이용해서 자바옵션만으로도 배포가 가능하다.
2. Spring Concept
- 스프링의 중요 컨셉인 IoC와 DI를 알아본다.
1) IoC (Inversion of Control) : 제어의 역전
- 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것이다.
- express의 미들웨어체인&IoC 와 비슷하다고 이해하면 된다. 물론 다르지만.
- 예시 )
2) DI (Dependency Injection) : 의존성 주입
- 제어의 역전을 구현하기 위해 사용하는 방식이 DI이다.
- DI는 어떤 class가 다른 class에 의존한다는 뜻이다.
- Express의 모듈&DI 와 비슷하다고 이해하면 된다. 물론 다르지만.
- 예시 )
- @Autowired 어노테이션은 스프링 컨에티어네 있는 빈이라는 것을 주입하는 역할을 한다.
- 빈은 스프링컨테이너에서 관리하는 객체이다.
- 직접 객체를 생성하지 않고 B b; 를 통해 선언했을 뿐이다. 이는 객체를 주입받고 있다고 표현한다.
- 스프링컨테이너라는 곳에서 객체를 주입하므로 잘 동작한다. (당연히 예시에서는 B라는 건 없으니까 빨간에러 뜬다.)
- 즉, 기존의 자바코드는 A에서 B를 사용하고싶은 경우 B를 직접 생성했지만, 스프링의 경우 스프링컨테이너에서 주입받아 사용한다.
3. 빈과 스프링컨테이너
- 스프링컨테이너 : 빈이 생성되고 소멸되기까지의 생명주기를 스프링컨테이너가 관리한다.
- 빈 : 스프링컨테이너가 생성하고 관리하는 객체이다. 빈을 등록하는 방법은 여러가지가 있다.
- 예를들어, MyBean이라는 클래스에 @Component라는 애너테이션을 붙이면 MyBean 클래스가 빈으로 등록된다. 이후 스프링컨테이너에서 이를 관리한다. 이때 빈의 이름은 이름의 첫글자를 소문자로 바꿔 관리한다. (myBean)
4. 관점 지향 프로그래밍(AOP)
- AOP(Aspect Oriented Programming) : 관점 지향 프로그래밍으로, 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으로 모듈화 하는 것을 말한다.
- 예를들어, 계좌이체 프로그램에서 계좌이체, 고객관리 로직이 핵심 관점이고, 부가 관점은 로깅, DB연결로직 등이다.
5. 이식 가능한 서비스 추상화 (PSA)
- PSA(Portable Service Abstraction) : 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다.
- 쉽게 말해, 추상화를 통해 인터페이스만 노출시켜 개발자가 쉽게 쓸 수 있도록 하는 방식이다.
6. 스프링부트 시작하기
- springbootdeveloper/TestController.java
- 이 코드는 /test GET 요청을 하면 "Hello, world!" 를 반환하게 한다.
- Express의 app.get('/test', (req,res)=>{res.send("Hello, world!")}) 와 같은 기능이다.
- 재실행 후 로컬8080 포트에 /test로 들어가본다.
7. 스프링부트 스타터 살펴보기
- 스타터는 의존성이 모여 있는 그룹이다.
- 스타터는 spring-boot-starter-{작업유형} 이라는 명명규칙이 있다.
- npm/yarn 이나 미들웨어그룹과 유사하다고 이해하면 될 것 같다. 물론 다르지만.
- 주로 사용하는 스타터
스타터 | 설명 |
spring-boot-starter-web | Spring MVC를 사용해서 RESTful 웹서비스를 개발할 때 필요한 의존성 모음 |
spring-boot-starter-test | 테스트하기 위해 필요한 의존성 모음 |
spring-boot-starter-validation | 유효성 검사를 위해 필요한 의존성 모음 |
spring-boot-starter-actuator | 모니터링을 위해 앱에서 제공하는 다양한 정보를 제공하기 쉽게 하는 의존성 모음 |
spring-boot-starter-data-jpa | ORM을 사용하기 위한 인터페이스의 모음인 JPA를 더 쉽게 사용하기 위한 의존성 모음 |
- 실습 해보자.
- build.gradle에서 dependencies 블록에서 관리한다.
- Gradle 탭에서 starter를 확인할 수 있다.
8. 자동 구성
- 자동 구성은 SpringBoot의 중요한 개념이다.
- SpringBoot는 서버를 시작할 때 구성파일을 읽어와서 설정한다.
- 이는 자동설정이라고 하며, META-INF에 있는 spring.factories 파일에 있다.
- 자동구성되는 클래스는 AutoConfiguration, 속성값을 정의해놓은 클래스는 Properties가 이름 끝에 붙여져있다.
- SpringBoot에서는 이렇게 자동으로 빈이 구성되고 등록된다.
'Backend - Java Spring > SB 입문(완)' 카테고리의 다른 글
[SpringBoot3] 테스트코드 (0) | 2023.10.20 |
---|---|
[SpringBoot3] SpringBoot3 구조 살펴보기 (0) | 2023.10.20 |
[SpringBoot3] SpringBoot3와 자바버전 (0) | 2023.10.20 |
[SpringBoot3] Java Spring 서버개발자가 알아두면 좋은 상식 (0) | 2023.10.20 |
[SpringBoot3] 입문 (0) | 2023.10.20 |
댓글