※ 실제 프로젝트를 진행하며 얻은 지식을 정리한 내용입니다.
※ 이론적인 내용보단 실무에서 사용하는 방식 위주로 작성하였습니다.
※ 잘못된 내용이 있다면 댓글로 지적 부탁드리겠습니다.
1. 어노테이션이란?
1) 스프링 부트에서 설정, 의존성 주입, 트랜잭션 관리 등 다양한 기능을 간결하고 직관적으로 구현하는 데 사용됩니다.
1. 쉽게 얘기하면 어노테이션은 코드에 다는 일종의 "태그"입니다. "이 클래스는 컨트롤러 or 서비스 입니다다." 같은 정보를
스프링부트에게 알려줍니다.
2. 또한 다른 클래스와 간편히 인식하도록 할 수 있습니다.
2. 기본 어노테이션
1) 클래스 정의 : 각 자바 클래스가 맡는 역할을 정의하는 데 사용됩니다.
1. @Controller, @RestController : 해당 클래스가 컨트롤러임을 명시해줍니다.
1-1. 두 Controller는 비슷하지만 다른 역할은 합니다.
1-2. Controller는 뷰와 데이터를 반환, RestController는 데이터만 반환합니다. REST API와 관련있습니다.
(아래 예시의 구조는 controller-service-mapper 구조입니다.)
1-3. 해당 Controller를 호출한 곳(화면)으로 값을 return합니다.
@Controller
public class ViewController {
@GetMapping("/hello")
public String hello(Model model) {
return "hello"; // hello.html 템플릿을 반환, 경로는 바뀔 수 있습니다.
}
}
------------------------------------------------------------------------------
@RestController
public class ApiController {
@GetMapping("/api/hello")
public String apiHello() {
return "Hello, Spring Boot!";
}
}
2. @Service : 비즈니스 로직을 담당하는 클래스임을 명시합니다. 컨트롤러와 Mapper(쿼리) 사이의 로직 처리를 담당합니다.
2-1. 일반적으로 Service는 Controller에서 호출합니다.
2-2. 해당 서비스를 호출한 곳(보통 Controller)으로 값을 retrun해줍니다.
@Service
public class UserService {
public String getUserName() {
return "John Doe";
}
}
3. @Mapper, @Repository : 데이터베이스와의 상호작용을 담당합니다.
3-1. @Repository는 데이터 액세스 계층(DAO) 클래스를 나타내고, @Mapper는 SQL쿼리를 매핑하는 역할을 합니다. 3-2. 두 어노테이션은 사실상 의미는 같으나 프로젝트 구조에 따라 다르게 사용합니다.
3-3. @Repository는 자바 class, @Mapper는 interface로 생성합니다.
@Repository
public class UserRepository {
public String findUserById(Long id) {
return "User " + id;
}
}
------------------------------------------------------------------------
@Mapper
public interface UserMapper {
// 메소드명인 data는 Mapper.xml파일의 id와 같아야 연결됩니다.
// Map의 형태로 데이터를 리턴
public Map<String, Object> data( Map<String, Object> params );
}
2) 의존성 주입 : 클래스 간의 의존성을 주입하여 연결을 도와줍니다.
1. 생성자 주입 : @RequiredArgsConstructor (다른 생성자 어노테이션은 생략합니다.)
1-1. final필드에 대해서 자동으로 생성자를 만들어 줍니다. 스프링에서 권장하는 방식입니다.
2. 필드 주입 : @Autowired
2-1. 클래스의 필드에 직접 의존성을 주입합니다.
2-2. 간단하고 빠르게 의존성을 주입할 수 있고, 필드 주입을 위한 코드가 짧습니다.
@Controller
@RequiredArgsConstructor
public class TestController {
private final TestService testService;
@GetMapping("/hello")
public String hello(Model model) {
return "hello"; // 템플릿 이름 반환
}
@GetMapping("/hello/data")
public String hello(Model model) {
model.addAttribute("data", testService.selectQuery());
return "hello"; // 템플릿 이름 반환
}
}
---------------------------------------------------------------------------
@Controller
public class TestController {
@Autowired
private TestService testService;
@GetMapping("/hello")
public String hello(Model model) {
// 데이터를 Model에 추가
model.addAttribute("data", testService.selectQuery());
return "hello"; // 템플릿 이름 반환
}
}
'2F(IT) > Spring Boot' 카테고리의 다른 글
| ResponseEntity란? (0) | 2025.03.02 |
|---|---|
| Spring Boot 어노테이션 - 컨트롤러 데이터 및 화면 호출 (0) | 2025.02.17 |
| JPA구조, Mybatis 구조의 차이 (3) | 2025.01.01 |
| STS Navigator 설정(Project Explorer) (6) | 2024.12.27 |
| REST API란 (3) | 2024.12.06 |