24.11.14 TIL Spring Annotation

신성훈·2024년 11월 14일

TIL

목록 보기
78/162

1. Spring에서 애노테이션의 역할

Spring의 애노테이션은 특정 클래스, 메서드, 필드에 기능을 부여하거나 설정을 할 수 있도록 도와줍니다. 예를 들어, @Controller를 사용하면 해당 클래스가 컨트롤러로 인식되고, @Autowired를 사용하면 의존성 주입이 가능해집니다. 이러한 애노테이션 덕분에 XML 설정 파일을 최소화하고, 코드 위주로 설정과 관리를 할 수 있습니다.


2. 주요 Spring 애노테이션

1) @Component, @Controller, @Service, @Repository

이 애노테이션들은 Spring이 빈(bean)을 관리하기 위해 사용합니다.

  • @Component: 모든 Spring 빈으로 등록될 클래스에 사용합니다. 특별한 역할이 없고 일반적인 빈으로 사용됩니다.
  • @Controller: 웹 요청을 처리하는 컨트롤러 클래스에 사용됩니다.
  • @Service: 비즈니스 로직을 담당하는 클래스에 사용됩니다.
  • @Repository: 데이터베이스와 관련된 작업을 수행하는 클래스에 사용합니다.

Spring은 위 애노테이션들이 붙어 있는 클래스들을 스캔하고, 자동으로 빈으로 등록해줍니다.

2) @Autowired

@Autowired의존성 주입에 사용되는 애노테이션으로, 객체 간의 의존성을 자동으로 연결해줍니다. Spring은 @Autowired가 붙어 있는 필드, 생성자, 메서드에 빈을 자동으로 주입해줍니다.

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    // UserRepository가 자동으로 주입됩니다.
}

3) @RequestMapping, @GetMapping, @PostMapping

Spring MVC에서 웹 요청을 특정 메서드와 매핑하기 위해 사용되는 애노테이션입니다.

  • @RequestMapping: 요청 URL을 메서드나 클래스에 매핑합니다. 주로 모든 HTTP 메서드를 처리할 때 사용됩니다.
  • @GetMapping: GET 요청에 대해 특정 메서드와 매핑합니다.
  • @PostMapping: POST 요청에 대해 특정 메서드와 매핑합니다.
@Controller
@RequestMapping("/users")
public class UserController {
    
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id, Model model) {
        // GET 요청 처리 로직
        return "user";
    }
}

4) @PathVariable, @RequestParam

  • @PathVariable: URL 경로의 변수 값을 매개변수로 받을 때 사용됩니다.
  • @RequestParam: 요청 파라미터 값을 매개변수로 받을 때 사용됩니다.
@GetMapping("/users/{id}")
public String getUser(@PathVariable Long id) {
    // 경로 변수 id를 받아서 처리
    return "user";
}

5) @RestController, @ResponseBody

  • @RestController: JSON이나 XML 형태의 데이터를 반환하는 컨트롤러에 사용합니다. @Controller@ResponseBody를 합친 역할을 합니다.
  • @ResponseBody: 메서드의 반환 값을 View 대신 HTTP 응답 본문으로 반환합니다.
@RestController
public class ApiController {
    
    @GetMapping("/api/user")
    public User getUser() {
        return new User(); // JSON으로 반환됩니다.
    }
}

6) @Entity, @Table, @Id, @GeneratedValue

JPA에서 데이터베이스와 매핑할 엔티티 클래스를 정의할 때 사용하는 애노테이션입니다.

  • @Entity: 클래스가 JPA 엔티티임을 나타냅니다.
  • @Table: 엔티티와 매핑될 테이블 이름을 지정합니다.
  • @Id: 테이블의 기본 키(primary key) 필드를 지정합니다.
  • @GeneratedValue: 기본 키 생성 전략을 설정합니다.
@Entity
@Table(name = "users")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;
}

7) @Transactional

@Transactional트랜잭션 관리를 위해 사용됩니다. 메서드 또는 클래스에 적용되며, 해당 메서드가 실행되는 동안 트랜잭션을 시작하고, 성공적으로 완료되면 커밋(commit)하고, 오류가 발생하면 롤백(rollback)합니다.


마무리

Spring 애노테이션을 사용하면 코드의 가독성을 높이고, 설정을 간단하게 관리할 수 있습니다. 부트캠프에서 배운 내용 정리하면서 한번 더 이전에 했던 프로젝트 뜯어보면서 다시 확인하는 시간이였습니다.

profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글