유정잉

🎀 스프링 레거시 흐름과 코드 예시 본문

개발자 공부/🎀 스프링 공부

🎀 스프링 레거시 흐름과 코드 예시

유정♡ 2024. 6. 15. 11:06

전체적인 흐름

  1. 사용자 요청 (Client Request)
    • 사용자가 웹 브라우저를 통해 특정 URL을 요청합니다.
  2. Controller
    • 요청이 들어오면 스프링 프레임워크는 적절한 컨트롤러로 요청을 전달합니다.
    • 컨트롤러는 URL 요청을 매핑하고 요청을 처리합니다. 예를 들어, 사용자가 /user/list URL을 요청하면 UserController가 이를 처리합니다.
  3. Service
    • 컨트롤러는 비즈니스 로직을 처리하기 위해 서비스 계층을 호출합니다. 서비스 계층은 비즈니스 로직을 담당합니다.
    • 예를 들어, UserController는 UserService를 호출하여 사용자 목록을 가져옵니다.
  4. Mapper (Interface 및 XML)
    • 서비스 계층은 데이터베이스와 상호 작용하기 위해 매퍼를 호출합니다. 매퍼는 MyBatis와 같은 ORM(Object-Relational Mapping) 프레임워크를 사용하여 데이터베이스와 통신합니다.
    • 매퍼 인터페이스는 매퍼 XML 파일에 정의된 SQL 쿼리를 호출합니다.
    • 예를 들어, UserService는 UserMapper 인터페이스를 호출하여 사용자 목록을 가져오고, UserMapper는 UserMapper.xml에 정의된 SQL 쿼리를 실행합니다.
  5. Entity
    • 매퍼가 데이터베이스에서 데이터를 가져오면, 이 데이터를 엔티티 객체로 매핑합니다. 엔티티는 데이터베이스 테이블과 매핑되는 클래스입니다.
    • 예를 들어, UserMapper는 데이터베이스에서 가져온 사용자 데이터를 User 엔티티 객체로 변환합니다.
  6. JSP (View)
    • 서비스 계층에서 데이터를 받아온 컨트롤러는 이 데이터를 JSP 파일에 전달하여 화면에 출력합니다.
    • JSP 파일은 사용자에게 데이터를 보여주는 역할을 합니다.
    • 예를 들어, UserController는 사용자 목록 데이터를 JSP 파일에 전달하고, JSP 파일은 이를 HTML 형식으로 렌더링하여 사용자에게 보여줍니다.

 

[ Controller ]

// UserController 클래스: 클라이언트의 요청을 처리하는 컨트롤러 계층
@Controller
@RequestMapping("/user")
public class UserController {

    // UserService를 주입받습니다.
    @Autowired
    private UserService userService;

    // "/user/list" URL 요청을 처리하는 메서드
    @GetMapping("/list")
    public String getUserList(Model model) {
        // UserService를 호출하여 사용자 목록을 가져옵니다.
        List<User> users = userService.getUserList();
        
        // 사용자 목록을 모델에 추가하여 뷰에 전달합니다.
        model.addAttribute("users", users);
        
        // "userList"라는 이름의 JSP 파일을 반환하여 사용자에게 결과를 표시합니다.
        return "userList";
    }
}

 

[ Service ]

// UserService 클래스: 비즈니스 로직을 처리하는 서비스 계층
@Service
public class UserService {

    // UserMapper를 주입받습니다.
    @Autowired
    private UserMapper userMapper;

    // 모든 사용자 목록을 반환하는 메서드
    public List<User> getUserList() {
        // UserMapper를 사용하여 데이터베이스에서 사용자 목록을 가져옵니다.
        return userMapper.getAllUsers();
    }
}

 

[ Mapper Interface ]

// UserMapper 인터페이스: User 엔티티와 데이터베이스 간의 상호작용을 정의합니다.
public interface UserMapper {
    // 데이터베이스에서 모든 사용자를 조회하는 메서드
    List<User> getAllUsers();
}

 

[ Mapper XML ]

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    
<!-- UserMapper 인터페이스와 매핑되는 XML 파일 -->
<mapper namespace="com.example.mapper.UserMapper">
    <!-- 모든 사용자를 조회하는 SQL 쿼리 -->
    <select id="getAllUsers" resultType="com.example.domain.User">
        SELECT * FROM users
    </select>
</mapper>

 

[ Entity ]

// User 엔티티 클래스: 데이터베이스의 users 테이블과 매핑되는 클래스
public class User {
    private int id;      // 사용자 ID (primary key)
    private String name; // 사용자 이름
    private String email;// 사용자 이메일

    // Getters와 Setters는 각 필드에 접근하고 값을 설정하기 위해 필요합니다.
	...
}

 

[ JSP ]

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!-- userList.jsp: 사용자 목록을 표시하는 JSP 파일 -->
<html>
<head>
    <title>User List</title>
</head>
<body>
    <h2>User List</h2>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
        <!-- 사용자 목록을 반복하여 테이블에 표시합니다. -->
        <c:forEach var="user" items="${users}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.email}</td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

 

728x90