개발자 공부/♡ Spring XML

Spring MVC + MyBatis로 데이터 화면에 출력! Entity, Controller, Service, Mapper, JSP

유정♡ 2025. 2. 4. 15:58

📌 Entity, Controller, Service, Mapper, JSP를 사용하여 데이터를 화면에 보여주는 과정 🎯

백엔드에서 데이터를 가져오고, JSP에서 데이터를 출력하는 전체 과정!


🔥 1️⃣ 전체 흐름 (Spring MVC + MyBatis 구조)

[1] 사용자가 브라우저에서 웹사이트를 방문함 (JSP)
   ↓
[2] 사용자가 특정 데이터를 요청함 (Controller)
   ↓
[3] Controller가 Service에 데이터 요청
   ↓
[4] Service가 Mapper(DAO)에게 데이터 요청
   ↓
[5] Mapper(DAO)가 데이터베이스(MySQL)에서 데이터 조회
   ↓
[6] 조회된 데이터를 Service → Controller → JSP로 전달
   ↓
[7] JSP에서 데이터를 화면에 출력

즉, Controller → Service → Mapper → DB → JSP 흐름으로 데이터가 오고 감!


🔥 2️⃣ 프로젝트 구조

/src/main/java/com/example/controller/UserController.java  (Controller)
/src/main/java/com/example/service/UserService.java  (Service)
/src/main/java/com/example/mapper/UserMapper.java  (Mapper/DAO)
/src/main/java/com/example/entity/User.java  (Entity)
/src/main/resources/mapper/UserMapper.xml  (SQL 쿼리)
/src/main/webapp/WEB-INF/views/userList.jsp  (JSP 화면)
/src/main/resources/application.properties  (DB 설정)

각 파일이 어떤 역할을 하는지 하나씩 설명할게!


🔥 3️⃣ 데이터베이스 테이블 생성 (MySQL)

💡 MySQL에서 users 테이블을 만들어서 데이터를 저장해보자!

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

기본적인 users 테이블을 생성 (id, name, email 포함)


🔥 4️⃣ Entity (데이터를 저장하는 객체)

💡 Entity는 DB의 테이블과 1:1로 매칭되는 객체!

package com.example.entity;

public class User {
    private int id;
    private String name;
    private String email;

    public User() {}

    public User(int id, String name, String email) {
        this.id = id;
        this.name = name;
        this.email = email;
    }

    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }
}
.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } }

이 객체를 통해 DB에서 가져온 데이터를 저장할 수 있음!


🔥 5️⃣ Mapper (데이터베이스와 연결, DAO 역할)

💡 MyBatis를 사용해서 DB와 연결하는 인터페이스!

package com.example.mapper;

import com.example.entity.User;
import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface UserMapper {
    @Select("SELECT * FROM users")  
    List<User> getAllUsers();  
}

@Select("SQL문")을 사용해서 DB에서 데이터를 가져옴!


🔥 6️⃣ Mapper XML 파일 (UserMapper.xml)

💡 SQL 쿼리를 XML 파일로 관리할 수도 있음!

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.entity.User">
        SELECT * FROM users;
    </select>
</mapper>

SQL을 XML 파일에서 관리하면 코드가 더 깔끔해짐!


🔥 7️⃣ Service (비즈니스 로직을 처리)

💡 Service는 Mapper를 호출해서 데이터를 가져오는 역할!

package com.example.service;

import com.example.entity.User;
import com.example.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public List<User> getUsers() {
        return userMapper.getAllUsers();  
    }
}

Service는 데이터를 가공하거나 추가 로직을 수행할 수 있음!


🔥 8️⃣ Controller (클라이언트 요청을 받는 역할)

💡 Controller는 사용자의 요청을 받아서 Service를 호출하고 JSP로 데이터를 넘김!

package com.example.controller;

import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.List;

@Controller
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/users")
    public String getUsers(Model model) {
        List<User> users = userService.getUsers();
        model.addAttribute("users", users);
        return "userList";  // userList.jsp로 이동
    }
}

사용자가 /users를 요청하면 Service에서 데이터를 가져와서 JSP로 넘김!


🔥 9️⃣ JSP (데이터를 화면에 출력)

💡 JSP에서 Controller에서 받은 데이터를 출력할 수 있음!
📌 파일 경로: /src/main/webapp/WEB-INF/views/userList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>
<head>
    <title>사용자 목록</title>
</head>
<body>
    <h1>사용자 목록</h1>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>이름</th>
            <th>이메일</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>

Controller에서 model.addAttribute("users", users);로 넘긴 데이터를 ${users}로 출력 가능!
JSTL의 <c:forEach>를 사용해서 List<User>를 반복문으로 출력!


🔥 1️⃣0️⃣ 실행 과정 정리

1️⃣ 사용자가 브라우저에서 /users 요청
2️⃣ Controller (UserController)가 요청을 받음
3️⃣ Service (UserService)가 데이터 요청
4️⃣ Mapper (UserMapper)가 DB에서 데이터 조회
5️⃣ 조회된 데이터를 Controller → JSP로 전달
6️⃣ JSP에서 데이터를 화면에 출력!

이제 MySQL에 저장된 사용자 데이터를 JSP에서 볼 수 있음! 


📌 최종 정리

Entity DB 테이블을 Java 객체로 표현
Mapper (DAO) DB에서 데이터를 가져오는 역할
Service 비즈니스 로직 처리
Controller 사용자의 요청을 처리하고 데이터를 JSP로 전달
JSP (View) 데이터를 화면에 출력

 

728x90