React.js, 스프링 부트, AWS로 배우는 웹 개발 101

[TIL] 25/01/28, Service Layer : Business Logic

돌맹이떼굴떼굴 2025. 1. 29. 02:05

2.2.5 서비스 레이어 : 비즈니스 로직

서비스 레이어는 컨트롤러와 퍼시스턴스 사이에 비즈니스 로직을 수행하는 역할을 한다.

서비스 레이어는 HTTP와 연관된 컨트롤러에서 분리돼 있고, 또 데이터 베이스와 연관된 퍼시스턴스와도 분리돼 있다. 따라서 서비스 레이어에서는 개발하고자 하는 로직에 집중할 수 있다.

 

@Service
public class TodoService {
    public String testService() {
        return "Test Serivce";
    }
}

@Service 어노테이션은 스테레오타입 어노테이션이다. @Service 내부에 @Component 어노테이션을 갖고 있는데 @Component 어노테이션과 비교했을 때 특별한 기능 차이는 없다. 단지 이 클래스는 스프링 컴포넌트이며 기능적으로 비즈니스 로직을 수행하는 서비스 레이어임을 알려주는 어노테이션이다.

 

@RestController
@RequestMapping("todo")
public class TodoController {
	
	@Autowired
	private TodoService service;
	
	@GetMapping("/test")
	public ResponseEntity<?> testTodo(){
		String str = service.testService();
		List<String> list = new ArrayList<>();
		list.add(str);
		
		ResponseDTO<String> resposne = ResponseDTO.<String>builder()
															.data(list)
															.build();
		return ResponseEntity.ok().body(resposne);
	}
}

여기에 한 가지 비밀은 @RestController 내부에 @Component 어노테이션을 포함하고 있다는 점이다. 따라서 @Service와 @RestController 모두 자바 빈으로 간주되며, 스프링이 이들을 관리한다.

 

스프링은 TodoController 객체를 생성할 때, TodoController 내부에 선언된 TodoService에 @Autowired 어노테이션이 붙어 있는지 확인한다. @Autowired는 스프링이 해당 빈을 찾아서 이 멤버 변수에 자동으로 연결하라는 뜻이다. 따라서 TodoController를 초기화할 때, 스프링은 TodoService를 자동으로 초기화하거나 검색해 TodoController에 주입해준다.