읽는 책은..
스프링 인 액션 제 5판
처음부터 읽기
모르는 용어정리
마이크로서비스 - 하나의 애플리케이션을 독립적으로 기능하는 작은 서비스들의 모임으로 구성하는 아키텍쳐 스타일 ↔ 모놀리식 아키텍처. 각자의 독립적인 작은 서비스들이 정해놓은 규칙에 따라 인터페이스하며 하나의 서비스를 제공.
지금 내가 하고있는 스타일은 모놀리식 아키텍처.
GPT에게 물어본 결과 마이크로 서비스의 조건은
- 독립된 배포가 가능해야하며 (같은 스프링 프로젝트 안에서 서비스를 직접 호출하는 것은 예외),
- 독립된 DB를 사용하고
- API 등의 네트워크 기반 통신,
- 느슨한 결합도가 필요하다.
컴포넌트 - 하나의 독립적인 기능을 수행하는 단위
'기능'에 따라 나뉘어지며 (기능이 없는 DTO는 컴포넌트라 볼 수 없다) , 다른 컴포넌트들과는 메서드, API 등의 특정한 방식으로 협력한다.
애플리케이션 컴포넌트 - 애플리케이션을 구성하는 독립된 기능단위. 컴포넌트의 일종. Service, Controller, Repository, Component 등의 어노테이션이 붙은 기능단위. 해당 클래스는 스프링 빈에 등록된다.
내용정리
스프링은 '스프링 애플리케이션 컨텍스트'라는 컨테이너를 지원해, 애플리케이션컴포넌트 또는 빈을 컨테이너가 관리한다. 컨테이너는 빈을 생성, 관리하며 컴포넌트가 다른 빈이나 컴포넌트를 의존할 때는 의존성을 주입(연결)시킨다.
private LoginService loginservice = new LoginService();
private final LoginService loginService
public Sservice (LoginService loginService) {
this.loginService = LoginService;
}
new 방식과 빈에 등록하는 방식의 차이에 대해서 물어보니..
new 방식은 내가 직접 해당 객체를 선언하여 쓰는거고 빈 방식은 스프링이 의존성을 주입해주는거.
빈 방식을 주로 쓰는 이유는
- Spring이 지원하는 다른 여러 기능들 사용 가능
- 테스트 어려움
- 강한 결합도
- 코드 수정이 어려움
근데 '코드 수정이 어렵다는 부분에서' 빈방식도 불러오는 객체를 수정하려면 결국에는 코드를 다 수정해야하지 않나 싶어서 물어보니..

그런 것 같기도하고.. 우선은 낮은 의존성을 유지한다는 것 자체에서 빈방식이 더 나아보이긴하다.
'테스트 어려움'이라는 부분도 있는데
테스트에 사용되는 Mock 객체의 경우에는 해당 컴포넌트가 필요로하는 의존성을 대신한다. 컴포넌트가 필요로하는 의존성이 DB 같이 실제로 구동할 경우 느리거나 실패할 가능성이 있는 경우에는 Mock 객체를 넣어서 해당 정해진 값을 반환하도록 할 수 있다.
다만 new 방식의 경우에는 Mock 객체를 주입할 수 없으나 빈방식의 경우에는 객체의 인자로 Mock 객체를 줄 수 있다. 즉, new 방식의 경우에는 테스트용 Mock 객체를 주입할 수 없어 빈방식보다 테스트가 어렵다.
내가 맨날 선언하고(선언하는 것을 잊기도하는) Service, Controller, Component 등의 어노테이션은 스프링에서 해당 클래스를 빈으로 등록하게 한다. 빈으로 등록된 객체의 경우에는 저렇게 의존성 자동주입(DI), 즉 빈방식으로 호출할 수 있다.
스프링의 자동 주입 방식은 생성자 부분에서 일어나며, 원래 new 방식을 채택하거나 불러올 클래스가 빈에 등록되지 않을 경우에는 불러올 객체나 클래스를 찾을 수 없어 오류가 나지만, 스프링을 사용한다면 그 부분에서 불러올 클래스를 찾아와 오류가 생기지 않고 자동등록을 할 수 있다.
추가로 자동으로 관리도 해준다네요
main 메서드에 있는 SpringBootApplication 어노테이션에 대해서도 설명이 있는데
SpringBootApplication 어노테이션은
SpringBootConfiguration main 메서드가 들어있는 클래스를 구성 클래스로 지정
EnableAutoConfiguration 자동-구성 활성화. 실행 시 빈으로 등록할 객체를 찾아서 빈으로 등록한다.
ComponentScan 컴포넌트 검색 활성화. 컴포넌트 관련 어노테이션을 활용가능하게함
소감
1장은 스프링에 대해 소개하고, 스프링 프로젝트를 시작하는 방법에 대한 내용 위주이기에 그렇게 많은 내용은 없지만.. 스프링빈, 스프링 컨테이너 등의 개념을 알았다. 인프런에서 강의를 들을 때 급하게 듣느라 빈, 컨테이너 등의 설명을 제대로 이해하지 못하고 넘어가서 빈이니 컨테이너니 컴포넌트니 하는 개념이 어려웠는데 여기서 한 번에 잡고 갈 수 있었다.
밥 먹어야해서 급하게 마무리
밥 먹고 이따가 코어타임 전까지 2장 정도는 읽을 수 있지 않으려나
'CS > 백엔드' 카테고리의 다른 글
| [2025백엔드] 스프링인액션 독서 #5 - 3장. 데이터로 작업하기 #3 (2) | 2025.08.04 |
|---|---|
| [2025백엔드] 스프링인액션 독서 #4 - 3장.데이터로 작업하기 2 (2) | 2025.08.01 |
| [2025백엔드] 스프링인액션 독서 #3 - 3장.데이터로 작업하기 1 (3) | 2025.07.29 |
| [2025 백엔드] 스프링 인 액션 독서 #2 - 2장. 웹 애플리케이션 개발하기 (7) | 2025.07.24 |
| [2025 백엔드] 도메인과 Model, 도메인 주도 개발 (DDD) (1) | 2025.07.22 |