"이 클래스는 이런 역할이다" 라고 Spring에게 알려주는 라벨이다.
Spring은 이 라벨을 보고
결정한다.
예)
public class UserService {
}
spring 입장에서는
"이건 그냥 평범한 자바 클래스이구나."
--> 결과 : 객체 안 만듦, 주입 안 됨, 실행 중 에러 발생.
@RestController
public class UserController {
}
의미 :
어노테이션이 없다면?
@Service
public class UserService {
}
의미 :
굳이 Service 사용하는 이유?
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
의미 :
※ JPA Repository는 사실상 생략이 가능하지만
의미상 붙여두는 게 좋다.
@Entity
public class User {
}
의미 :
어노테이션이 없다면?
@SpringBootApplication
public class DemoApplication {
}
이 코드가 하는 일 :
※ 그래서 구조가 중요하다.
spring의 사고 흐름 :
-> 즉 :
@Service -> Bean 등록@Repository -> Bean 등록| 계층 | 어노테이션 | 역할 |
|---|---|---|
| Controller | @RestController | 요청/응답 |
| Service | @Service | 비즈니스 로직 |
| Repository | @Repository | DB 접근 |
| Entity | @Entity | DB 테이블 |
| 설정 | @Configuration | 설정 클래스 |