2F(IT)/Spring Boot

Spring Boot 어노테이션(annotation) 기본

백화점장 2025. 1. 2. 22:27
반응형
※ 실제 프로젝트를 진행하며 얻은 지식을 정리한 내용입니다.
※ 이론적인 내용보단 실무에서 사용하는 방식 위주로 작성하였습니다.
※ 잘못된 내용이 있다면 댓글로 지적 부탁드리겠습니다.

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