일반적인 웹 애플리케이션 계층 구조
출처 : https://www.inflearn.com/course/스프링-입문-스프링부트/dashboard - 강의자료
@Controller
또는 @RestController
를 사용@Controller
→ HTML 반환(Thymelef, JSP 등과 함께 사용)@RestController
→ JSON 반환(REST API 개발 시 사용)@RequestMapping
, @GetMapping
, @PostMapping
등 사용@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/{id}")
public ResponseEntity<User> getUser(@PathVariable Long id) {
return ResponseEntity.ok(userService.getUserById(id));
}
}
<aside> 💡
컨트롤러는 서비스를 호출하고, 결과를 응답한다.
</aside>
@Service
→ 비즈니스 로직을 담당하는 서비스 클래스@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public User getUserById(Long id) {
return userRepository.findById(id)
.orElseThrow(() -> new RuntimeException("User not found"));
}
}
<aside> 💡
서비스는 리포지토리를 호출하여 데이터를 가져오고, 필요한 비즈니스 로직을 처리한다.
</aside>
@Repository
→ 데이터 액세스를 담당하는 클래스@Transactional
→ 데이터 변경(INSERT, UPDATE, DELETE) 시 트랜잭션 처리