** ๐์ ํจ์ฑ ๊ฒ์ฌ (JavaScript + ์๋ฒ ์ธก ๊ฒ์ฌ ๋ณํ) **
์ฌ์ฉ์ ์ ๋ ฅ๊ฐ์ ์ ํํ๊ฒ ๊ฒ์ฆํ์ฌ ์์ ์ ์ด๊ณ ์์ ํ ์น ์๋น์ค ๋ง๋ค๊ธฐ
JavaScript์ Java(Servlet)์ ์ ํจ์ฑ ๊ฒ์ฌ ๋ณํ ์ฒ๋ฆฌ ํ๋ฆ ์์ ์ ๋ฆฌ
๐งฉ ๋ชฉ์ฐจ
- ์ ํจ์ฑ ๊ฒ์ฌ๋?
- ํด๋ผ์ด์ธํธ vs ์๋ฒ ์ ํจ์ฑ ๋น๊ต
- JavaScript ์ ํจ์ฑ ๊ฒ์ฌ ์์
- ์๋ฒ ์ธก ์ ํจ์ฑ ๊ฒ์ฌ ์์
- ๋ณํ ์ฒ๋ฆฌ ํ๋ฆ๋
- ์ค์ ์์ ํ๋ฆ
- ๊ธฐ์ ๋ฉด์ ๋๋น ํต์ฌ ์์ฝ
- ๋ง๋ฌด๋ฆฌ ์์ฝ + Notion ์์ฑ ํ
โ 1. ์ ํจ์ฑ ๊ฒ์ฌ๋?
ํญ๋ชฉ | ์ค๋ช |
---|---|
์ ์ | ์ฌ์ฉ์์ ์ ๋ ฅ๊ฐ์ด ๋น๊ฐ, ํ์ ์ค๋ฅ, ๋ฒ์ ์ค๋ฅ ์์ด ์ ์์ธ์ง ํ์ธํ๋ ์ ์ฐจ |
๋ชฉ์ | ์๋น์ค์ ์์ ์ฑ ํ๋ณด, ๋ณด์ ๋ฌธ์ ๋ฐฉ์ง (SQL Injection, ์๋ชป๋ ์ ๋ ฅ ์ฐจ๋จ ๋ฑ) |
์ ์ฉ ์์น | ํด๋ผ์ด์ธํธ(JavaScript) + ์๋ฒ(Servlet) ์์ชฝ ๋ชจ๋์์ ์งํ ํ์ |
โ 2. ํด๋ผ์ด์ธํธ vs ์๋ฒ ์ ํจ์ฑ ๊ฒ์ฌ ๋น๊ต
๊ตฌ๋ถ | ํด๋ผ์ด์ธํธ ์ธก (JS) | ์๋ฒ ์ธก (Servlet) |
---|---|---|
๊ฒ์ฌ ์์น | ๋ธ๋ผ์ฐ์ | ์๋ฒ ๋ด๋ถ |
์๋ | ๋น ๋ฆ (์ ๋ ฅ ์ฆ์ ๋ฐ์) | ์๋์ ์ผ๋ก ๋๋ฆผ |
๋ณด์์ฑ | ๋ฎ์ (JS ๊บผ์ง ๊ฐ๋ฅ) | ๋์ |
ํ์ ์ฌ๋ถ | ํธ์์ฑ ์ค์ฌ | ๋ณด์์ ๋ฐ๋์ ํ์ |
๐ ๋ ๋ค ํจ๊ป ์ฌ์ฉํด์ผ ํจ!
โ JS๋ ๋น ๋ฅด๊ณ ํธ๋ฆฌํ ํ์ธ์ฉ, ์๋ฒ๋ ์ง์ง ํ์ ๋ณด์ ๋ฐฉ์ด์ฉ!
โ 3. JavaScript ์ ํจ์ฑ ๊ฒ์ฌ ์์ โ๏ธ
๐ form.jsp
<script>
function validateForm() {
const title = document.getElementById("title").value;
const content = document.getElementById("content").value;
if (title.trim() === "") {
alert("์ ๋ชฉ์ ์
๋ ฅํ์ธ์!");
return false;
}
if (content.trim() === "") {
alert("๋ด์ฉ์ ์
๋ ฅํ์ธ์!");
return false;
}
return true;
}
</script>
<form action="save" method="post" onsubmit="return validateForm()">
์ ๋ชฉ: <input type="text" name="title" id="title"><br>
๋ด์ฉ: <textarea name="content" id="content"></textarea><br>
<input type="submit" value="์ ์ฅ">
</form>
โ 4. ์๋ฒ ์ธก ์ ํจ์ฑ ๊ฒ์ฌ ์์ (Servlet)
๐ SaveServlet.java
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String title = req.getParameter("title");
String content = req.getParameter("content");
// ์ ํจ์ฑ ๊ฒ์ฌ
if (title == null || title.trim().equals("") ||
content == null || content.trim().equals("")) {
resp.setContentType("text/html;charset=UTF-8");
PrintWriter out = resp.getWriter();
out.println("<script>");
out.println("alert('์ ๋ชฉ๊ณผ ๋ด์ฉ์ ๋ชจ๋ ์
๋ ฅํ์ธ์.'); history.back();");
out.println("</script>");
return;
}
// ํต๊ณผ ์ DB ์ ์ฅ ๋ก์ง ์ํ
BoardDTO dto = new BoardDTO();
dto.setTitle(title);
dto.setContent(content);
BoardDAO dao = new BoardDAO();
dao.insert(dto);
resp.sendRedirect("list");
}
โ 5. ๋ณํ ์ฒ๋ฆฌ ํ๋ฆ๋ ๐งญ
[์ฌ์ฉ์ ์
๋ ฅ]
โฌ (onsubmit ์ JS ๊ฒ์ฌ)
[JavaScript ์ ํจ์ฑ ๊ฒ์ฌ]
โฌ (ํต๊ณผ ์ ์๋ฒ ์์ฒญ)
[Servlet doPost()]
โฌ
[์๋ฒ ์ ํจ์ฑ ๊ฒ์ฌ ์ฌํ์ธ]
โฌ
[DB ์ ์ฅ or ์ค๋ฅ ๋ฉ์์ง ์ถ๋ ฅ]
โ 6. ์ค์ ์์ ํ๋ฆ ์์ฝ
๋จ๊ณ | ํ์ผ | ์ญํ |
---|---|---|
1 | form.jsp |
JavaScript๋ก ํ์๊ฐ ๊ฒ์ฌ (๋น์นธ ํ์ธ ๋ฑ) |
2 | onsubmit="return validateForm()" |
false ๋ฐํ ์ ์ ์ก ์ค๋จ |
3 | SaveServlet.java |
์ ๋ ฅ๊ฐ null/๋น์นธ ์ฌํ์ธ (๋ณด์์ ํ์) |
4 | ํต๊ณผ ์ โ DTO ์ ์ฅ โ DAO ํธ์ถ โ DB ์ ์ฅ | ย |
5 | ์คํจ ์ โ alert() ํ history.back(); ์ผ๋ก ํผ์ผ๋ก ๋๋๋ฆผ |
ย |
โ 7. ๊ธฐ์ ๋ฉด์ ๋๋น ํต์ฌ ์์ฝ ๐ฌ
์ง๋ฌธ | ์์ ์ ๋ฆฌ |
---|---|
์ ํจ์ฑ ๊ฒ์ฌ๋ ์ ํด์ผ ํ๋์? | ์ ๋ ฅ๊ฐ ์ค๋ฅ ๋ฐฉ์ง, ๋ณด์ ์ ์ง, ์ฌ์ฉ์ ํธ์ ํฅ์ |
JS๋ง ๊ฒ์ฌํ๋ฉด ์ ๋๋์? | JS๋ ๊บผ์ง ์ ์์ โ ๋ฐ๋์ ์๋ฒ์์๋ ๊ฒ์ฌ ํ์ |
Java์์ null/๋น ๋ฌธ์์ด ์ฒดํฌ๋? | `== null |
์ ํจ์ฑ ๊ฒ์ฌ ์คํจ ์ ์ฒ๋ฆฌ ๋ฐฉ์์? | alert() + history.back() ๋๋ ์ค๋ฅ ํ์ด์ง ๋ฆฌ๋๋ ์ |
โ 8. ๋ง๋ฌด๋ฆฌ ์์ฝ ๐ง
- ๐งน JS๋ ๋น ๋ฅธ ํํฐ, Servlet์ ๊ฐ๋ ฅํ ๋ฐฉ์ด
- โ ๊ฒ์ฌ ๋๋ฝ ์ ์๋ชป๋ ๊ฐ ์ ์ฅ ๋๋ ๋ณด์ ์ด์ ๋ฐ์
- โ ํ์ ์ ๋ ฅ๊ฐ์ ํด๋ผ์ด์ธํธ+์๋ฒ ๋ชจ๋์์ ์ ๊ฒํด์ผ ์์ ํจ
- ๐ก ์ ํจ์ฑ ๊ฒ์ฌ ํต๊ณผ ํ์๋ง DTO โ DAO โ DB๋ก ์ฐ๊ฒฐ