Skip to content

API 구성 요소

Jeonghun-Ban edited this page Mar 29, 2022 · 1 revision

사용자 요청 -> Controller -> Service -> Repository -> DB

응답은 이것의 역순이다.

Controller

컨트롤러는 REST API를 구현한 클래스로, 사용자의 요청을 받고 응답한다.

여기에는 절대로 비즈니스 로직을 담지 않아야 한다.

@RestController // REST API response를 위한 컨트롤러 임을 명시
public class UserController {

  private final UserService userService;

  @Autowired // 자동으로 필요한 객체를 주입해주는 어노테이션
  public UserController(UserService userService) {
    this.userService = userService;
  }

  @GetMapping("/user")
  public List<User> getAllUser() {
    return userService.getAllUser();
  }
}

예시로 유저 정보를 모두 가져오는 getAllUser 함수를 보자.

해당 클래스는 요청된 사용자의 요청에 대해 응답만 하며, 비즈니스 로직은 서비스 클래스에서 처리한다.

Service

비즈니스 로직을 처리하는 클래스이다. 컨트롤러가 전달한 요청을 처리한다.

@Service
public class UserService {

  private final UserRepository userRepository;

  @Autowired
  public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
  }

  public List<User> getAllUser() {
    return userRepository.findAll();
  }
}

DB에서 데이터를 가져오는 로직과 같은 데이터를 다루는 모든 로직은 여기에 담긴다.

Domain

도메인 객체는 DB상에 저장할 객체의 클래스이다. 다시 말해 DB 테이블 형식이라고 할 수 있다.

@Getter 
@Setter // 게터와 세터를 자동으로 만들어주는 lombok 어노테이션
@Entity // 해당 클래스가 DB에 저장됨을 나타낸다.
public class User {

  @Id // pk 필드임을 명시
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  @Column(length = 20, nullable = false)
  private String name;

  @Column(length = 20, nullable = false)
  private String userName;

  @Column(length = 20, nullable = false)
  private String email;
}

위와 같이 @Entity 어노테이션을 넣은 클래스를 만들기만 하면 유저 테이블을 쉽게 생성할 수 있다.

Repository

Domain 객체가 DB에 저장될 데이터 형식이라면 레파지토리는 해당 DB를 다루는 메서드를 제공하는 인터페이스이다.

이미 제공되는 메서드로는 findOne, findAll, count, save, delete 등이 있다.

JpaRepository를 상속하여 사용하며 제네릭의 첫 인자는 Domain 객체, 두 번째는 해당 객체의 pk의 자료형을 넣어주면 된다.

public interface UserRepository extends JpaRepository<User, Long> {}

유저 DB에 접근하는 위와 같은 레파지토리가 있다고 했을 때 서비스에서는 아래와 같이 사용한다.

@Service
public class UserService {

  private final UserRepository userRepository;

  @Autowired
  public UserService(UserRepository userRepository) {
    this.userRepository = userRepository;
  }

  public List<User> getAllUser() {
    return userRepository.findAll();
  }
}

추가적으로 DB 조작에 관련된 정보를 얻고 싶다면 JpaRepository을 구글링해보면 될 것이다.

Clone this wiki locally