스프링 Bean과 @Service @Repository @Controller에 대하여..

주현·2023년 11월 8일
0

springboot

목록 보기
3/8

2학년 후반에 프로젝트를 진행했었지만, 그냥 뭣도 잘 모르고 코드를 끄적였던 기억이 있다. 그래서 이렇게 하면 나는 밑이 다져지지 않아서 결국에는 무너지겠구나 싶어서, 옛날에 샀었던 스프링 책을 읽으면서 다시금 기본을 다 잡아가려고, 이 글을 끄적여본다.


스프링 빈(spring bean)?

스프링에서 bean이란 '자바 객체'를 의미합니다. 엄밀히 말하자면, Bean은 스프링 Ioc 컨테이너가 관리하는 자바 객체다.
자바 객체는 스프링 Ioc 컨테이너가 관리하지 않는 객체도 포함된다.

Ioc는 뭔데?

한 줄로 설명하자면 제어 역전입니다.
우리가 사용하던 자바 프로그램에서는 사용자가 직접 객체를 생성하고, 원하는 클래스 내에서 다른 객체를 생성해 사용했다. 이 경우 사용자(나)가 객체의 생명 주기를 관리하고 있다.
그런데 ,제어의 역전이 일어나면, 사용자(나)가 아닌 다른 무언가가 관리를 위임하게 된다. 프로그래머의 제어 권한을 다른 주체에게 넘기는 것을 IoC(제어의 역전)라고 한다.
Spring이 직접 자바 객체를 생성하고 관리하기 때문에 이 관리 위임 주체는 Spring이 된다.

그럼 어떻게 spring은 자바 객체가 있다는 것을 알 수 있을까?

두 가지 방법이 있습니다.
1. 스프링은 약속되어 있는 어노테이션이 붙어있는 클래스를 자동으로 인지하게 됩니다. 해당하는 어노테이션이 붙어있다면, 스프링이 자동으로 인지할 수 있게 됩니다.
2. Bean Configuration File에 직접 Bean을 등록하면 스프링이 인지할 수 있게 된다.

📍약속되어 있는 어노테이션을 클래스에 붙인다면, 그 클래스가 ioc컨테이너에 bean으로 등록이 된다. -> 여기서 궁금한 점은 그런데 bean은 객체라고 했는데, 클래스를 bean으로 등록한다는게 무슨 소리인가? 라고 궁금증이 들었다.

클래스를 스프링 빈으로 등록하면, 이 클래스의 인스턴스를 스프링 컨테이너에서 관리하게 됩니다. 이 클래스의 객체를 스프링 빈으로 사용할 수 있으며, 의존성 주입 등의 스프링 기능을 활용할 수 있습니다.
따라서 클래스를 스프링 빈으로 등록하면 클래스의 인스턴스(객체)를 스프링 컨테이너에서 생성하고 관리할 수 있게 되며, 이는 스프링의 IoC 컨테이너의 핵심 기능 중 하나!


1. 어노테이션을 붙인 클래스

✔️Component

스프링에서 관리하는 요소라는 의미를 주는 일반적인 어노테이션

이 중 controller, service, repository가 중요하다.

✔️Controller

Spring MVC의 컨트롤러 역할을 하는 클래스를 표시하는 어노테이션.
Controller의 역할 중 하나로, View에 표시할 템플릿을 찾기 위한 String같은 것들을 반환하는 것이 있다.

✔️RestController

@RestController는 @Controller와 @ResponseBody를 함께 사용한 조합이다.
따라서 @RestController 에서는 @ResponseBody를 사용하지 않아도 코드는 정상적으로 동작한다. @RestController 는 @ResponseBody 를 가지고 있기 때문이다.
그렇기에 당연하게도 @RestController의 주용도는 Json 형태로 객체 데이터를 반환하는 것입니다.

Return Value 중 @ResponseBody와 ResponseEntity의 차이점에 대해 공부해보면, ResponseEntity는 반환되는 내용 이외에도 모든 상태 코드에 대한 정적 팩토리 메서드를 제공하고, 응답 본문과 함께 HTTP 상태 코드, 응답 헤더를 포함하기 때문에 @RestController에서도 추가적인 정보를 나타내고자 한다면 ResponseEntity의 형태로 반환해야 한다.

무엇보다도 @RestController에서 @ResponseBody를 붙이는 것처럼 중복된 어노테이션을 붙이지 않고, 일관성을 가지고 코드를 작성하는 것이 중요하다.

✔️Service

서비스 역할을 하는 클래스를 표시하는 어노테이션
Controller는 들어온 요청을 처리하기 위해 Service를 호출하고, Service는 컨트롤러로부터 받은 정보를 자바 로직을 처리하는 방식으로 가공해 Controller에 다시 넘겨주는 역할을 한다.

✔️Repository

DAO 혹은 레포지토리 역할을 하는 클래스를 표시하는 어노테이션
DB나 파일 같은 외부 I/O에 접근하는 메서드 들을 사용하기 위한 인터페이스임을 표시할 수 있고, 예외의 자동 변환 기능을 제공한다.

profile
Just fucking do it!! 개발자가 꿈인 25살 학부생입니다!!

0개의 댓글