https://velog.io/@davinyakma/[TIL] 자바 Controller, Service, Repository 구조 (1)
레이어드 아키텍처는 애플리케이션을 역할별로 계층화하여 관리하는 소프트웨어 설계 방식입니다. 이는 역할 분리를 통해 유지보수성과 확장성을 높이는 데 도움을 줍니다.
Spring MVC에서는 각 계층의 역할에 맞는 애노테이션을 제공하여 개발자들이 코드의 의도를 명확히 하고, 프레임워크가 자동으로 동작을 연결할 수 있게 해줍니다.
@RestController: JSON 또는 XML 형식의 데이터를 반환하는 API를 개발할 때 사용.
@Controller: JSP 같은 뷰(View) 페이지를 반환할 때 사용.
@RestController
@RequestMapping("/api") // "/api"로 시작하는 모든 요청을 처리
public class UserController {
@GetMapping("/users") // GET 요청 처리
public List<User> getAllUsers() {
return userService.getAllUsers();
}
}
@RequestMapping(value = "/users", method = RequestMethod.GET)
public List<User> getUsers() {
return userService.getAllUsers();
}HTTP 메서드(GET, POST 등) 별로 요청을 매핑.
@RequestMapping보다 간결하게 사용 가능.
@GetMapping("/users")
public List<User> getUsers() {
return userService.getAllUsers();
}
@PostMapping("/users")
public User createUser(@RequestBody User user) {
return userService.createUser(user);
}
Spring MVC에서는 입력 데이터 검증을 쉽게 처리할 수 있는 여러 애노테이션과 방법을 제공합니다.
@GetMapping("/users")
public String getUserById(@RequestParam(value = "id", required = true) Long id) {
return "User ID: " + id;
}@GetMapping("/users/{id}")
public String getUserById(@PathVariable Long id) {
return "User ID: " + id;
}HTTP 요청의 본문(body) 데이터를 객체로 매핑.
주로 JSON 데이터를 처리할 때 사용.
@PostMapping("/users")
public String createUser(@RequestBody User user) {
return "Created User: " + user.getName();
}
단일 책임 원칙이란, 하나의 클래스나 메서드는 하나의 역할만 수행해야 한다는 원칙입니다.
의존성 주입은 객체 간의 의존성을 프레임워크가 자동으로 관리해주는 개념입니다.
Spring에서는 주로 생성자 주입을 사용합니다.
@RestController
public class UserController {
private final UserService userService;
// 의존성 주입: UserService 객체를 컨트롤러에 전달
public UserController(UserService userService) {
this.userService = userService;
}
}
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByLastName(String lastName);
}<select id="getUserById" parameterType="long" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>자바에서 데이터베이스에 접근할 수 있는 표준 API.
SQL을 직접 작성해야 하고, 코드가 길어질 수 있음.
Connection connection = DriverManager.getConnection(url, username, password);
PreparedStatement statement = connection.prepareStatement("SELECT * FROM users WHERE id = ?");
statement.setLong(1, id);
ResultSet rs = statement.executeQuery();
JPA나 JDBC, Domain, DTO 등등 기술은 백엔드를 더 공부하면서 배울 것입니다!