본문 바로가기
Backend - Java Spring/Spring Boot 입문(완)

[SpringBoot3] Node&Express개발자의 SpringBoot 조온나쉽게 시작하기

by VictorMeredith 2023. 10. 20.

1. 스프링의 등장

- 엔터프라이즈 애플리케이션을 위한 개발환경을 제공해서 기능 개발에만 집중할 수 있는 프레임워크

- Spring 자체는 장점이 많지만 설정이 매우 복잡하다. 따라서 이러한 단점을 보완하고자 출시된 것이 Spring Boot이다.

- SpringBoot는 빠르게 프로젝트를 설정할 수 있고, 의존성 세트라고 불리는 스타터를 활용해 간편하게 관리할 수 있다.

- SpringBoot는 톰캣, 제티, 언더토우같은 WAS가 내장되어있어서 독립실행이 가능하다.

- SpringBoot는 빌드 구성을 단순화하는 스프링부트 스타터를 제공한다.

- SpringBoot는 XML설정이 필요없고, JAR을 이용해서 자바옵션만으로도 배포가 가능하다.

 

2. Spring Concept

- 스프링의 중요 컨셉인 IoC와 DI를 알아본다.

 

1) IoC (Inversion of Control) : 제어의 역전

  - 제어의 역전은 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것이다.

  - express의 미들웨어체인&IoC 와 비슷하다고 이해하면 된다. 물론 다르지만.

  - 예시 )

기존에 자바를 작성하던 방식
스프링 컨테이너가 객체를 관리하는 방식 (코드에서 인스턴스를 생성하지 않고 받아온 객체를 b에 할당한다.)

 

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를 확인할 수 있다.

build.gradle
tomcat도 있다.

 

8. 자동 구성

- 자동 구성은 SpringBoot의 중요한 개념이다.

- SpringBoot는 서버를 시작할 때 구성파일을 읽어와서 설정한다.

- 이는 자동설정이라고 하며, META-INF에 있는 spring.factories 파일에 있다.

spring-boot-autoconfigure/spring.factories
External Libs에서 찾은 autoconfigure 들

- 자동구성되는 클래스는 AutoConfiguration, 속성값을 정의해놓은 클래스는 Properties가 이름 끝에 붙여져있다.

- SpringBoot에서는 이렇게 자동으로 빈이 구성되고 등록된다.

 

 

댓글