-
Notifications
You must be signed in to change notification settings - Fork 3
API 구성 요소
Jeonghun-Ban edited this page Mar 29, 2022
·
1 revision
사용자 요청 -> Controller -> Service -> Repository -> DB
응답은 이것의 역순이다.
컨트롤러는 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
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public List<User> getAllUser() {
return userRepository.findAll();
}
}
DB에서 데이터를 가져오는 로직과 같은 데이터를 다루는 모든 로직은 여기에 담긴다.
도메인 객체는 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
어노테이션을 넣은 클래스를 만들기만 하면 유저 테이블을 쉽게 생성할 수 있다.
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
을 구글링해보면 될 것이다.