** ๐ 8.1๋จ๊ณ: ๋๋ฉ์ธ ์์ ์ ์ โ ํ์๊ด๋ฆฌ, ๊ฒ์ํ, ๋ก๊ทธ์ธ ์์คํ
์ค 1๊ฐ ์ ํ **
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
์ค์ ์น ์์คํ
์ ์ํ ์ฃผ์ ๋๋ฉ์ธ์ ์ ํ |
์ ํ์ง |
ํ์๊ด๋ฆฌ ์์คํ
/ ๊ฒ์ํ ์์คํ
/ ๋ก๊ทธ์ธ ์์คํ
|
๊ธฐ๋ ํจ๊ณผ |
์ค๋ฌด์ ๊ฐ๊น์ด MVC2 + MyBatis ๊ตฌ์กฐ๋ก ํ์ฅ ์ค์ต ๊ฐ๋ฅ |
โ
์ ํ ๊ฐ๋ฅํ ๋๋ฉ์ธ ๋ชฉ๋ก
๋๋ฉ์ธ |
์ค๋ช
|
์ค์ต ํ์ฅ์ฑ |
1. ํ์๊ด๋ฆฌ ์์คํ
|
ํ์ ๋ฑ๋ก, ์์ , ์ญ์ , ๊ฒ์ ๋ฑ ์ ํ์ ์ธ CRUD ๊ธฐ๋ฅ ์ค์ฌ |
DTO, DAO, ๋์ ์ฟผ๋ฆฌ, ํธ๋์ญ์
, ์ ํจ์ฑ๊ฒ์ฌ๊น์ง ์ค์ต ๊ฐ๋ฅ |
2. ๊ฒ์ํ ์์คํ
|
๊ธ์ฐ๊ธฐ, ๋ชฉ๋ก, ์์ธ๋ณด๊ธฐ, ๋๊ธ ๋ฑ ์ฌ์ฉ์ ์ฝํ
์ธ ์ค์ฌ |
ํ์ด์ง, ์กฐํ์ ์ฆ๊ฐ, ๋น๋๊ธฐ ์ฒ๋ฆฌ ๋ฑ ๊ณ ๊ธ๊ธฐ๋ฅ ํ์ฅ ๊ฐ๋ฅ |
3. ๋ก๊ทธ์ธ ์์คํ
|
ํ์๊ฐ์
, ๋ก๊ทธ์ธ, ์ธ์
์ฒ๋ฆฌ, ์ํธํ ๋ฑ ๋ณด์ ์ค์ฌ |
์ธ์
, ์ฟ ํค, ํํฐ, ๋ก๊ทธ์ธ ์ ์ง, ๊ถํ ์ ์ด ๋ฑ ์ค๋ฌด ๋ณด์ ํต์ฌ |
โ
์ถ์ฒ ๋๋ฉ์ธ ๋ณ ํน์ง ๋น๊ต
ํญ๋ชฉ |
ํ์๊ด๋ฆฌ |
๊ฒ์ํ |
๋ก๊ทธ์ธ ์์คํ
|
์ฃผ ๋ชฉ์ |
DB ๊ธฐ๋ณธ ์ฐ์ฐ (CRUD) ๋ง์คํฐ |
์ฝํ
์ธ ์ฒ๋ฆฌ + ์ฌ์ฉ์ ํ๋ ๋ถ์ |
์ธ์ฆ, ๋ณด์, ๊ถํ ์ฒ๋ฆฌ ์ค์ต |
DTO ์ |
๋ฎ์ (1~2๊ฐ) |
๋ณดํต (๊ฒ์๊ธ + ๋๊ธ) |
ํ์ + ์ธ์
๊ด๋ จ ๊ฐ์ฒด |
๊ธฐ๋ฅ ์ |
๊ธฐ๋ณธ ์ค์ฌ |
์ค๋ฌดํ ๊ธฐ๋ฅ ํฌํจ (ํ์ด์ง, ๊ฒ์) |
๋ณด์ ์ค์ต ๊ฐ๋ฅ (์ํธํ, ์ธ์
) |
๋์ด๋ |
โญ (์ด์ค๊ธ) |
โญโญ (์ค๊ธ) |
โญโญโญ (์ค์๊ธ) |
ํ์ฅ ๊ฐ๋ฅ์ฑ |
์ฌ์ (ํ์ ์ฑ์ , ์ถ๊ฒฐ ๋ฑ์ผ๋ก ํ์ฅ) |
๋์ ํธ (๊ฒ์ํ + ๋๊ธ, ์ข์์ ๋ฑ) |
๋งค์ฐ ๋์ (SNS ๋ก๊ทธ์ธ, ๊ด๋ฆฌ์ ๊ตฌ๋ถ ๋ฑ) |
โ
์์ ๋๋ฉ์ธ ์ ํ ์
๋๊ฐ ์ด์ ์ ์ฌ์ฉํ Student.java, StudentDao, StudentMapper1.xml ๊ตฌ์กฐ๋
์ด๋ฏธ ํ์๊ด๋ฆฌ ์์คํ
๊ตฌ์กฐ์ ๊ธฐ๋ฐ์ ๊ฐ์ถ๊ณ ์์ด.
๐ก ๋ฐ๋ผ์ ์์ฐ์ค๋ฝ๊ฒ ์ด์ด๊ฐ๋ ค๋ฉด ๐ โํ์๊ด๋ฆฌ ์์คํ
โ ์ ์ ํํ๋ ๊ฒ ๊ฐ์ฅ ์ ๋ฆฌํด.
โ
8.2๋จ๊ณ: ์๊ตฌ์ฌํญ ๋์ถ
(๐ main.Student
, StudentDao
, StudentMapper1.xml
๊ธฐ๋ฐ)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
ํ์๊ด๋ฆฌ ์์คํ
์์ ํ์ํ ๊ธฐ๋ฅ, ๋ฐ์ดํฐ ํ๋ฆ, DB ๊ตฌ์กฐ ์ ์ |
๊ตฌ์ฑ |
๊ธฐ๋ฅ ๋ชฉ๋ก โ ์
๋ ฅ/์ถ๋ ฅ ๋ช
์ธ โ ํ
์ด๋ธ ์ค๊ณ |
๊ธฐ๋ ํจ๊ณผ |
๊ตฌํ ์ ๋ช
ํํ ์ค๊ณ์ ๊ธฐ๋ฐ ํ๋ณด (์๊ตฌ์ฌํญ ๋ช
์ธ์ ์ญํ ) |
โ
1. ํต์ฌ ๊ธฐ๋ฅ ์ ์
๊ธฐ๋ฅ ์ฝ๋ |
๊ธฐ๋ฅ ๋ช
์นญ |
์ค๋ช
|
S001 |
ํ์ ์ ์ฒด ์กฐํ |
๋ชจ๋ ํ์ ๋ชฉ๋ก ์ถ๋ ฅ |
S002 |
ํน์ ํ๋ฒ์ผ๋ก ์กฐํ |
hakbun ๊ธฐ์ค ํ์ 1๋ช
์ถ๋ ฅ |
S003 |
์ ๊ท ํ์ ๋ฑ๋ก |
insertStudent |
S004 |
ํ๋
/์ด๋ฆ ์กฐ๊ฑด ๊ฒ์ |
grade , irum LIKE ๋ฑ ์กฐ๊ฑด ํํฐ |
S005 |
ํ๋
/์ ํ๋ฒํธ ์์ |
hakbun ๊ธฐ์ค์ผ๋ก grade , phone ๋ณ๊ฒฝ |
S006 |
ํ๋ฒ์ผ๋ก ์ญ์ |
ํด๋น ํ๋ฒ ํ์ ์ ๋ณด ์ญ์ |
โ
์ ๊ธฐ๋ฅ๋ค์ ์ ๋ถ ํ์ผ ๋ด XML๊ณผ DAO ์ฝ๋ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฏธ ๊ตฌ์กฐ๊ฐ ์ ๋ฆฌ๋์ด ์์.
โ
2. ์
๋ ฅ / ์ถ๋ ฅ ์ ์
๊ธฐ๋ฅ |
์
๋ ฅ ๋ฐ์ดํฐ (From JSP / Controller) |
์ถ๋ ฅ (JSP, ์ฝ์, ๋ฐํ๊ฐ ๋ฑ) |
ํ์ ์ ์ฒด ์กฐํ |
์์ |
List |
ํน์ ํ๋ฒ ์กฐํ |
int hakbun |
Student |
ํ์ ๋ฑ๋ก |
Student ๊ฐ์ฒด (๋ชจ๋ ํ๋) |
๋ฑ๋ก ์ฑ๊ณต ์ฌ๋ถ (int) |
์กฐ๊ฑด ๊ฒ์ |
Student ๊ฐ์ฒด (๋ถ๋ถ ํ๋: irum, grade ๋ฑ) |
List |
์ ๋ณด ์์ |
Student ๊ฐ์ฒด (hakbun + ์์ ๋์ ํ๋) |
์์ ์ฑ๊ณต ์ฌ๋ถ (int) |
์ญ์ |
int hakbun |
์ญ์ ์ฑ๊ณต ์ฌ๋ถ (int) |
โ
3. DB ํ
์ด๋ธ ๊ตฌ์กฐ ์ค๊ณ
๐ ํ
์ด๋ธ๋ช
: student
์ปฌ๋ผ๋ช
|
์๋ฃํ |
์ค๋ช
|
์ ์ฝ์กฐ๊ฑด |
hakbun |
INT |
ํ๋ฒ (PK) |
PRIMARY KEY |
irum |
VARCHAR(50) |
์ด๋ฆ |
NOT NULL |
hakgwa |
VARCHAR(50) |
ํ๊ณผ๋ช
|
ย |
addr |
VARCHAR(100) |
์ฃผ์ |
ย |
phone |
VARCHAR(20) |
์ ํ๋ฒํธ |
ย |
jumin |
VARCHAR(20) |
์ฃผ๋ฏผ๋ฒํธ (์ฑ๋ณ ํ๋จ์ฉ) |
ย |
grade |
INT |
ํ๋
(1~4) |
ย |
๐ก ์ค์ ์ฝ๋์ ์๋ main.Student.java
์ ์์ ํ ์ผ์น
(โ MyBatis์์ resultType=โmain.Studentโ ์ฌ์ฉ ์ ์๋ ๋งคํ๋จ)
โ
4. ํ๋ฉด ํ๋ฆ ์์ (Controller โ JSP)
๊ธฐ๋ฅ |
์์ฒญ URL |
์ฒ๋ฆฌ ํ๋ฆ |
๊ฒฐ๊ณผ JSP |
์ ์ฒด ์กฐํ |
/student/list.do |
DAO โ selectAll() โ setAttribute |
list.jsp |
์์ธ ์กฐํ |
/student/detail.do?hakbun=1001 |
DAO โ selectByHakbun() โ setAttribute |
detail.jsp |
๋ฑ๋ก ์ฒ๋ฆฌ |
/student/insert.do (POST) |
request โ DTO โ DAO โ insert() |
redirect:list.do |
์์ ์ฒ๋ฆฌ |
/student/update.do (POST) |
request โ DTO โ DAO โ update() |
redirect:detail.do?hakbun=... |
์ญ์ ์ฒ๋ฆฌ |
/student/delete.do?hakbun=... |
DAO โ delete() |
redirect:list.do |
โ
5. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
์๋ฃ ์ฌ๋ถ |
๊ธฐ๋ฅ ๋ชฉ๋ก์ ๋ชจ๋ ๋์ดํ๋๊ฐ |
โ
|
ย |
๊ฐ ๊ธฐ๋ฅ์ ์
๋ ฅ/์ถ๋ ฅ์ ์ ๋ฆฌํ๋๊ฐ |
โ
|
ย |
DB ์ปฌ๋ผ๋ช
๊ณผ DTO ํ๋๋ช
์ด ์ผ์นํ๋๊ฐ |
โ
|
ย |
์ ์ฝ์กฐ๊ฑด(PK, NOT NULL ๋ฑ)์ด ๋ช
ํํ ์ค์ ๋์๋๊ฐ |
โ
|
ย |
์ค์ Mapper/DAO ์ฝ๋์ ์ค๊ณ๊ฐ ์ผ์นํ๋๊ฐ |
โ
|
ย |
โ
8.3๋จ๊ณ: Controller โ Service โ DAO โ MyBatis ํ๋ฆ ์ค๊ณ
(๐ MVC ๊ตฌ์กฐ ์์ ์ฐ๋ + ์ค๋ฌด Mapper ์ฐ๊ณ ๋ฐฉ์ ์ค์ต)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
MVC2 ๊ธฐ๋ฐ์์ Controller โ Service โ DAO โ MyBatis ํ๋ฆ์ ์ดํดํ๊ณ ๊ตฌํ |
ํต์ฌ ๊ตฌ์ฑ |
๊ฐ ๊ณ์ธต ์ฑ
์ ๋ถ๋ฆฌ, ํธ์ถ ํ๋ฆ ๊ตฌ์กฐํ, ์ค๋ณต ๋ฐฉ์ง |
๊ธฐ๋ ํจ๊ณผ |
์ ์ง๋ณด์ ๊ฐ๋ฅํ ๊ตฌ์กฐ๋ก ํ์ฅ, ํธ๋์ญ์
/๋ก์ง/DB ์ ๊ทผ ๋ถ๋ฆฌ |
โ
1. ์ ์ฒด ํ๋ฆ ๊ตฌ์กฐ (์์ฒญ ์ฒ๋ฆฌ ํ๋ฆ๋)
[Client (๋ธ๋ผ์ฐ์ )]
โ ์์ฒญ (e.g., /student/list.do)
[๐ Controller]
โ StudentService ํธ์ถ
[๐ Service]
โ StudentDao ํธ์ถ
[๐ DAO]
โ StudentMapper.xml ์คํ (MyBatis)
[๐ DB]
โ ๊ฒฐ๊ณผ ๋ฐํ
โ
2. ๊ณ์ธต๋ณ ์ฑ
์ ์ ๋ฆฌ
๊ณ์ธต |
ํด๋์ค ์ |
์ญํ |
Controller |
StudentController.java , Test1_A.java |
ํด๋ผ์ด์ธํธ ์์ฒญ ์์ , ์๋น์ค ํธ์ถ, JSP ์ฐ๊ฒฐ |
Service |
StudentService.java |
๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ, ํธ๋์ญ์
์ ์ด, DAO ํธ์ถ |
DAO |
StudentDao.java |
DB ์ ๊ทผ ์ฝ๋, Mapper ์คํ |
Mapper |
StudentMapper.xml |
์ค์ SQL ์ ์ (<select> , <insert> ๋ฑ) |
DTO |
Student.java |
DB โ Java ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ ๊ฐ์ฒด |
โ
3. ์ค์ ์์ โ ์ ์ฒด ์กฐํ ๊ธฐ๋ฅ ํ๋ฆ
๐ก ์์ฒญ: /student/list.do
โ ์ ์ฒด ๋ชฉ๋ก ์กฐํ
๐น โ Controller
StudentService service = new StudentService();
List<Student> list = service.getStudentList();
request.setAttribute("list", list);
request.getRequestDispatcher("/view/student/list.jsp").forward(request, response);
๐น โก Service
public class StudentService {
private StudentDao dao = new StudentDao();
public List<Student> getStudentList() {
return dao.selectAll(); // DAO ํธ์ถ
}
}
๐น โข DAO
public List<Student> selectAll() {
SqlSession session = factory.openSession();
List<Student> list = session.selectList("student.getAllStudents");
session.close();
return list;
}
๐น โฃ Mapper XML
<select id="getAllStudents" resultType="main.Student">
SELECT * FROM student
</select>
โ
4. ์ค๋ฌด ์ค๊ณ ํต์ฌ ํฌ์ธํธ
ํญ๋ชฉ |
์ค๋ช
|
Controller โ Service ๋ถ๋ฆฌ ์ด์ |
๋น์ฆ๋์ค ๋ก์ง ๋ณ๊ฒฝ ์ Controller ์ํฅ ์ต์ํ |
Service โ DAO ํธ์ถ ์ด์ |
ํธ๋์ญ์
์ ์ด๋ ์๋น์ค ์ ์ฑ
(์: ์ค๋ณต์ฒดํฌ) ์ถ๊ฐ ๊ฐ๋ฅ |
DAO๋ ์ฟผ๋ฆฌ ์คํ๋ง |
์ค๋ก์ง Mapper ํธ์ถ๋ง ๋ด๋น (DB ์ ์ฉ) |
Mapper๋ SQL๋ง ๋ด๋น |
XML ๊ตฌ์กฐ๋ก ์ ์ง๋ณด์, ๊ฐ๋
์ฑ ํ๋ณด |
โ
5. ์ค์ต ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ (๊ถ์ฅ)
๐ mybatisstudy/
โฃ ๐ main/Student.java โ DTO
โฃ ๐ dao/StudentDao.java โ DB ํธ์ถ
โฃ ๐ dao/StudentMapper.java โ ์ธํฐํ์ด์ค (์ ํ)
โฃ ๐ service/StudentService.javaโ ์๋น์ค ๊ณ์ธต
โฃ ๐ controller/StudentController.java โ ์์ฒญ ์ฒ๋ฆฌ
โฃ ๐ mapper/StudentMapper.xml โ SQL ์ ์
โฃ ๐ view/student/list.jsp โ ๊ฒฐ๊ณผ ์ถ๋ ฅ JSP
โ
์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
์ฒดํฌ |
Controller โ Service โ DAO ๊ณ์ธต์ด ๋ช
ํํ ๋ถ๋ฆฌ๋์ด ์๋๊ฐ |
โ
|
ย |
๊ฐ ๊ณ์ธต์ ์์ ์ ์ฑ
์๋ง ์ฒ๋ฆฌํ๋๊ฐ (์: Controller๋ DB ์ง์ ์ ๊ทผ โ) |
โ
|
ย |
Mapper ID, DAO ํธ์ถ๋ช
, ์๋น์ค ๋ฉ์๋๋ช
์ด ์ผ์นํ๋๊ฐ |
โ
|
ย |
ํ๋ฆ์ ๋ฐ๊พธ๋๋ผ๋ ๊ตฌ์กฐ๊ฐ ์ํฅ์ ์ต์๋ก ๋ฐ๋๊ฐ (์ ์ง๋ณด์์ฑ ํ๋ณด) |
โ
|
ย |
โ
8.4๋จ๊ณ: JSP + JSTL ์ฐ๋ โ View ์ถ๋ ฅ ๋ฐ ์
๋ ฅํผ ์ฒ๋ฆฌ
(๐ view/student/*.jsp
+ JSTL + EL + controller
์ฐ๊ณ ๊ธฐ์ค)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
Controller์์ ์ ๋ฌํ ๋ฐ์ดํฐ๋ฅผ JSP์์ JSTL/EL๋ก ์ถ๋ ฅํ๊ณ , ์
๋ ฅํผ๋ ๊ตฌ์ฑ |
์ฃผ์ ๊ตฌ์ฑ |
list.jsp , detail.jsp , insert.jsp , update.jsp |
๊ธฐ๋ ํจ๊ณผ |
MVC2 ๊ตฌ์กฐ์ ์์ ํ ํ๋ฆ ๊ตฌํ (์
๋ ฅ โ ์ฒ๋ฆฌ โ ์ถ๋ ฅ) |
โ
1. ์ ์ฒด ํ๋ฆ ๋ณต์ต (๋ฐ์ดํฐ ์ถ๋ ฅ)
[Controller]
โ setAttribute("list", list)
โ
[view/student/list.jsp]
<c:forEach items="${list}" var="stu"> ... </c:forEach>
โ
2. ํ์ ๋ชฉ๋ก ์ถ๋ ฅ JSP (list.jsp
)
๐ view/student/list.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head><title>ํ์ ๋ชฉ๋ก</title></head>
<body>
<h2>๐ ํ์ ๋ชฉ๋ก</h2>
<table border="1">
<tr>
<th>ํ๋ฒ</th><th>์ด๋ฆ</th><th>ํ๊ณผ</th><th>์ ํ</th><th>ํ๋
</th><th>์ญ์ </th>
</tr>
<c:forEach var="stu" items="${list}">
<tr>
<td><a href="detail.do?hakbun=${stu.hakbun}">${stu.hakbun}</a></td>
<td>${stu.irum}</td>
<td>${stu.hakgwa}</td>
<td>${stu.phone}</td>
<td>${stu.grade}</td>
<td><a href="delete.do?hakbun=${stu.hakbun}">๐ ์ญ์ </a></td>
</tr>
</c:forEach>
</table>
<p><a href="insertForm.jsp">โ ์ ๊ท ๋ฑ๋ก</a></p>
</body>
</html>
๐ view/student/insertForm.jsp
<%@ page contentType="text/html;charset=UTF-8" %>
<html>
<head><title>ํ์ ๋ฑ๋ก</title></head>
<body>
<h2>๐ ํ์ ๋ฑ๋ก</h2>
<form action="insert.do" method="post">
ํ๋ฒ: <input type="number" name="hakbun"><br>
์ด๋ฆ: <input type="text" name="irum"><br>
ํ๊ณผ: <input type="text" name="hakgwa"><br>
์ฃผ์: <input type="text" name="addr"><br>
์ ํ: <input type="text" name="phone"><br>
์ฃผ๋ฏผ๋ฒํธ: <input type="text" name="jumin"><br>
ํ๋
: <select name="grade">
<option>1</option><option>2</option><option>3</option><option>4</option>
</select><br><br>
<input type="submit" value="๋ฑ๋กํ๊ธฐ">
</form>
</body>
</html>
โ
4. Controller ์์ โ insert.do (POST)
protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
Student s = new Student();
s.setHakbun(Integer.parseInt(req.getParameter("hakbun")));
s.setIrum(req.getParameter("irum"));
s.setHakgwa(req.getParameter("hakgwa"));
s.setAddr(req.getParameter("addr"));
s.setPhone(req.getParameter("phone"));
s.setJumin(req.getParameter("jumin"));
s.setGrade(Integer.parseInt(req.getParameter("grade")));
StudentService service = new StudentService();
int result = service.insertStudent(s);
res.sendRedirect("list.do");
}
โ
5. ์์ธ๋ณด๊ธฐ JSP (detail.jsp
)
<h2>๐ค ํ์ ์์ธ ์ ๋ณด</h2>
<p>ํ๋ฒ: ${student.hakbun}</p>
<p>์ด๋ฆ: ${student.irum}</p>
<p>ํ๊ณผ: ${student.hakgwa}</p>
<p>์ฃผ์: ${student.addr}</p>
<p>์ ํ: ${student.phone}</p>
<p>ํ๋
: ${student.grade}</p>
โ
6. ์ค์ต ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
ํ์ธ |
JSTL ํ๊ทธ ์ ์ธ์ด ๋์ด ์๋๊ฐ |
<%@ taglib ... %> |
โ
|
<c:forEach> ๋ก ๋ฆฌ์คํธ ๋ฐ๋ณต ์ถ๋ ฅ์ด ๊ตฌํ๋์๋๊ฐ |
โ
|
ย |
ํผ โ POST โ Controller โ DB ์ ์ฅ ํ๋ฆ์ด ์ฐ๊ฒฐ๋๋๊ฐ |
โ
|
ย |
setAttributeํ ๋ฐ์ดํฐ๋ฅผ ${} ๋ก ์ถ๋ ฅํ๋๊ฐ |
โ
|
ย |
null ์ฒดํฌ ์ <c:if test="${empty student}"> ๋ฑ์ ์ฌ์ฉํ๋๊ฐ |
โ
|
ย |
โ
์ค๋ฌด ํ์ฅ ํ
๊ธฐ๋ฅ |
ํ์ฅ ๋ฐฉ๋ฒ |
ํผ ์ ํจ์ฑ ๊ฒ์ฌ |
JavaScript ๋๋ ์๋ฒ ์ ํจ์ฑ ์ฒดํฌ ์ถ๊ฐ |
์์ ๊ธฐ๋ฅ ๊ตฌํ |
updateForm.jsp + update.do ์ถ๊ฐ |
ํํฐ ๊ฒ์ |
๊ฒ์ ํผ + ์กฐ๊ฑด ์ฒ๋ฆฌ โ <if> + <where> |
์ ์ฒด CRUD ์์ฑ |
Controller + Service + DAO + JSP ์ ๋ถ ๊ตฌ์ฑ |
โ
8.5๋จ๊ณ: ํ๋ก์ ํธ ๋ฐฐํฌ โ WAR ํ์ผ ์์ฑ โ Tomcat ๋ฐฐํฌ ํ
์คํธ
(๐ Eclipse or IntelliJ ํ๋ก์ ํธ ๊ธฐ์ค, JSP + Servlet + MyBatis ํฌํจ)
๐ฏ ํ์ต ๋ชฉํ
ํญ๋ชฉ |
์ค๋ช
|
๋ชฉ์ |
JSP + MyBatis ์น ํ๋ก์ ํธ๋ฅผ .war ํ์ผ๋ก ํจํค์งํ์ฌ ์ค์ ํฐ์บฃ์ ๋ฐฐํฌ |
์ฃผ์ ๊ฐ๋
|
WAR ๊ตฌ์กฐ ์ดํด, ๋น๋ ์ค์ , Tomcat ์ฐ๋ |
๊ธฐ๋ ํจ๊ณผ |
ํ๋ก์ ํธ ๊ฒฐ๊ณผ๋ฌผ ์ค์๋ฒ ๋๋ ๋ก์ปฌ ํฐ์บฃ์์ ์ง์ ์คํ ๊ฐ๋ฅ |
โ
1. WAR ํ์ผ์ด๋?
์ฉ์ด |
์ค๋ช
|
WAR (Web Archive) |
JSP, Servlet, WEB-INF, lib ๋ฑ์ ํฌํจํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด ํจํค์ง |
๊ตฌ์กฐ ์์ |
ย |
myapp.war/
โฃ index.jsp
โฃ login.jsp
โฃ WEB-INF/
โฃ web.xml
โฃ classes/
โฃ dao/
โฃ service/
โฃ controller/
โฃ main/Student.class
โฃ lib/
โฃ mybatis-*.jar
โฃ log4j.jar ๋ฑ
โ
2. Eclipse์์ WAR ํ์ผ ์์ฑ (Dynamic Web Project ๊ธฐ์ค)
๐น โ Java EE ํ๋ก์ ํธ ์ฐํด๋ฆญ โ Export
Export โ WAR file
์ ํ
- Destination:
C:\apache-tomcat\webapps\myapp.war
๐น โก ์ต์
์ค์
ํญ๋ชฉ |
์ค๋ช
|
Web project |
๋ด ํ๋ก์ ํธ ์ด๋ฆ ์ ํ |
Destination |
Tomcat์ /webapps ๊ฒฝ๋ก ๋๋ ๋ก์ปฌ ์ง์ |
Target Runtime |
Tomcat์ด ๋ฑ๋ก๋์ด ์์ด์ผ ํจ |
Export source files |
โ
์ฒดํฌ ํ์ ์์ (์ปดํ์ผ๋ class๋ง ๋ด๋ณด๋) |
โ
3. Tomcat์ ๋ฐฐํฌ ๋ฐ ์คํ
๐งฉ ๋ฐฉ์ 1: ์๋ ๋ฐฐํฌ
myapp.war
๋ณต์ฌ โ C:\tomcat\webapps\
์ ๋ถ์ฌ๋ฃ๊ธฐ
- Tomcat ์คํ
- ์๋์ผ๋ก
myapp/
๋๋ ํ ๋ฆฌ๋ก ์์ถ ํด์ ๋จ
-
์ ์ ์ฃผ์ ํ์ธ:
http://localhost:8080/myapp/student/list.do
๐งฉ ๋ฐฉ์ 2: Eclipse ์๋ฒ ํญ์ ์ง์ ์ถ๊ฐ
- Servers ํญ ์ฐํด๋ฆญ โ
Add and Remove...
- ํ๋ก์ ํธ ์ถ๊ฐ โ
Finish
- ์๋ฒ ์คํ (
Ctrl + F11
)
- ์ฝ์์์ ๋ก๊ทธ ํ์ธ + ์ฃผ์๋ก ์ ๊ทผ
โ
4. ์ค์ ์ฒดํฌ๋ฆฌ์คํธ
ํญ๋ชฉ |
์ค๋ช
|
ํ์ธ |
/WebContent/WEB-INF/web.xml ํ์ผ์ด ์ ํํ ์ค์ ๋์ด ์๋๊ฐ |
์๋ธ๋ฆฟ ๋งคํ ํฌํจ ์ฌ๋ถ |
โ
|
JSP, CSS, JS, ์ด๋ฏธ์ง ํ์ผ์ด WAR ๋ด์ ํฌํจ๋์ด ์๋๊ฐ |
WAR ์ ๊ตฌ์กฐ ํ์ธ |
โ
|
lib/ ํด๋์ ํ์ํ .jar ํ์ผ์ด ๋๋ฝ๋์ง ์์๋๊ฐ |
MyBatis, JSTL ๋ฑ ํฌํจ |
โ
|
์ปจํธ๋กค๋ฌ URL โ JSP ์ฐ๊ฒฐ ํ๋ฆ์ด ์๋ํ๋๊ฐ |
list.do , insert.do ๋ฑ ํ
์คํธ |
โ
|
โ
WAR ๋ฐฐํฌ ํ ์ค๋ฅ ์ฒดํฌ ๋ฐฉ๋ฒ
ํ์ |
์์ธ |
ํด๊ฒฐ |
404 ์ค๋ฅ |
์๋ธ๋ฆฟ URL, web.xml ๋งคํ ๋ฌธ์ |
URL ์คํ / @WebServlet ํ์ธ |
500 ์ค๋ฅ |
์๋ฐ ์ฝ๋ ์์ธ / DB ์ฐ๊ฒฐ ์คํจ |
์ฝ์ ๋ก๊ทธ ๋ถ์ |
WAR ์์ถ ํด์ ์ ๋จ |
WAR ๋ด๋ถ ๊ตฌ์กฐ ์ค๋ฅ |
/WEB-INF/web.xml ๋๋ฝ ๊ฐ๋ฅ |
โ
์ค๋ฌด ํ
ํ |
์ค๋ช
|
์ ์ ๋ฆฌ์์ค ์์น |
/WebContent/css , /js , /images ๊ถ์ฅ |
๋น๋ ์๋ํ |
Maven/Gradle ํ๋ก์ ํธ๋ฉด mvn package ๋ก WAR ์์ฑ |
๋ฐฐํฌ ์๋ํ |
Jenkins, GitHub Actions ๋ฑ์ผ๋ก .war ๋น๋ + ์๊ฒฉ ์ ์ก ๊ฐ๋ฅ |
Tomcat reload ์์ด ๋ณ๊ฒฝ |
/webapps ๋ด ๋ณ๊ฒฝ์ ์ฌ์์ ํ์ โ hot reload ์ด๋ ค์ (IDE ์ฐ๋ ์ถ์ฒ) |
โ
๋ค์ ํ์ต ํ์ฅ ์ ์
์ฃผ์ |
์ค๋ช
|
DB ์ด๊ธฐ ๋ฐ์ดํฐ ์๋ ์ฝ์
|
init.sql โ Tomcat ์์ ์ ์๋ ์คํ |
Maven/Gradle ์ ์ฉ |
pom.xml ๋ก ์์กด์ฑ ์๋ ๊ด๋ฆฌ, ๋น๋ ํจ์จ ํฅ์ |
Web.xml โ ์ด๋
ธํ
์ด์
์ ํ |
Spring MVC๋ก ๋์ด๊ฐ๊ธฐ ์ ๋จ๊ณ |
HTTPS ์ค์ |
localhost:8443 ์ผ๋ก SSL ํ
์คํธ |