[์น๊ฐ๋ฐ์ ๋ด, Spring] 3์ฃผ์ฐจ ๊ฐ๋ฐ์ผ์ง(1) - Timeline Service ์๋ฒ
ํด๋ผ์ด์ธํธ ์ค๊ณ ๋ฐ ๊ตฌํ
๐ก ํด๋ผ์ด์ธํธ ์ค๊ณ
Timeline Service์ ํ์ํ ๊ธฐ๋ฅ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ๋ฉ๋ชจ ์กฐํํ๊ธฐ
- ์ฒ์ ์น์ฌ์ดํธ์ ์ ์ํ์ ๋, ์๋ก๊ณ ์นจ์ ํ์ ๋ ์๋
1) GET API ์ฌ์ฉํด์ ๋ฉ๋ชจ ๋ชฉ๋ก ๋ถ๋ฌ์ค๊ธฐ
2) ๋ฉ๋ชจ๋ง๋ค HTML ๋ง๋ค๊ณ ๋ถ์ด๊ธฐ - ๋ฉ๋ชจ ์์ฑํ๊ธฐ
- ์ฌ์ฉ์๊ฐ ๋ฉ๋ชจ ์์ฑ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์๋
1) ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฉ๋ชจ ๋ด์ฉ ํ์ธํ๊ธฐ
2) POST API ์ฌ์ฉํด์ ๋ฉ๋ชจ ์ ๊ท ์์ฑํ๊ธฐ
3) ํ๋ฉด ์๋ก๊ณ ์นจํ์ฌ ์ ๋ฐ์ดํธ๋ ๋ฉ๋ชจ ๋ชฉ๋ก ํ์ธํ๊ธฐ - ๋ฉ๋ชจ ๋ณ๊ฒฝํ๊ธฐ
- ์ฌ์ฉ์๊ฐ ํน์ ๋ฉ๋ชจ์ ์์ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์๋
1) ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ๋ฉ๋ชจ๊ฐ ์ด๋ค ๊ฒ์ธ์ง ํ์ธํ๊ธฐ
2) ๋ณ๊ฒฝํ ๋ฉ๋ชจ ๋ด์ฉ ํ์ธํ๊ธฐ
3) PUT API ์ฌ์ฉํด์ ๋ฉ๋ชจ ๋ด์ฉ ๋ณ๊ฒฝํ๊ธฐ
4) ํ๋ฉด ์๋ก๊ณ ์นจํ์ฌ ์ ๋ฐ์ดํธ๋ ๋ฉ๋ชจ ๋ชฉ๋ก ํ์ธํ๊ธฐ - ๋ฉ๋ชจ ์ญ์ ํ๊ธฐ
- ์ฌ์ฉ์๊ฐ ํน์ ๋ฉ๋ชจ์ ์ญ์ ๋ฒํผ์ ํด๋ฆญํ์ ๋ ์๋
1) ์ฌ์ฉ์๊ฐ ํด๋ฆญํ ๋ฉ๋ชจ๊ฐ ์ด๋ค ๊ฒ์ธ์ง ํ์ธํ๊ธฐ
2) DELETE API ์ฌ์ฉํด์ ๋ฉ๋ชจ ์ญ์ ํ๊ธฐ
3) ํ๋ฉด ์๋ก๊ณ ์นจํ์ฌ ์ ๋ฐ์ดํธ๋ ๋ฉ๋ชจ ๋ชฉ๋ก ํ์ธํ๊ธฐ
๐ก ๋ฉ๋ชจ ์์ฑํ๊ธฐ - writePost ํจ์
// ๋ฉ๋ชจ๋ฅผ ์์ฑํฉ๋๋ค.
function writePost() {
// 1. ์์ฑํ ๋ฉ๋ชจ๋ฅผ ๋ถ๋ฌ์ต๋๋ค.
let contents = $('#contents').val();
// 2. ์์ฑํ ๋ฉ๋ชจ๊ฐ ์ฌ๋ฐ๋ฅธ์ง isValidContents ํจ์๋ฅผ ํตํด ํ์ธํฉ๋๋ค.
if (isValidContents(contents) == false) {
return;
}
// 3. genRandomName ํจ์๋ฅผ ํตํด ์ต๋ช
์ username์ ๋ง๋ญ๋๋ค.
let username = genRandomName(10);
// 4. ์ ๋ฌํ data JSON์ผ๋ก ๋ง๋ญ๋๋ค.
let data = {'username': username, 'contents': contents};
// 5. POST /api/memos ์ data๋ฅผ ์ ๋ฌํฉ๋๋ค.
$.ajax({
type: "POST",
url: "/api/memos",
contentType: "application/json",
data: JSON.stringify(data),
success: function (response) {
alert('๋ฉ์์ง๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์ฑ๋์์ต๋๋ค.');
window.location.reload();
}
});
}
๐ก ๋ฉ๋ชจ ์กฐํํ๊ธฐ - getMessages, addHTML ํจ์
// ๋ฉ๋ชจ๋ฅผ ๋ถ๋ฌ์์ ๋ณด์ฌ์ค๋๋ค.
function getMessages() {
// 1. ๊ธฐ์กด ๋ฉ๋ชจ ๋ด์ฉ์ ์ง์๋๋ค.
$('#cards-box').empty();
// 2. ๋ฉ๋ชจ ๋ชฉ๋ก์ ๋ถ๋ฌ์์ HTML๋ก ๋ถ์
๋๋ค.
$.ajax({
type: 'GET',
url: '/api/memos',
success: function (response) {
for (let i = 0; i < response.length; i++) {
let message = response[i];
let id = message['id'];
let username = message['username'];
let contents = message['contents'];
let modifiedAt = message['modifiedAt'];
addHTML(id, username, contents, modifiedAt);
}
}
})
}
// ๋ฉ๋ชจ ํ๋๋ฅผ HTML๋ก ๋ง๋ค์ด์ body ํ๊ทธ ๋ด ์ํ๋ ๊ณณ์ ๋ถ์
๋๋ค.
function addHTML(id, username, contents, modifiedAt) {
// 1. HTML ํ๊ทธ๋ฅผ ๋ง๋ญ๋๋ค.
let tempHtml = `<div class="card">
<!-- date/username ์์ญ -->
<div class="metadata">
<div class="date">
${modifiedAt}
</div>
<div id="${id}-username" class="username">
${username}
</div>
</div>
<!-- contents ์กฐํ/์์ ์์ญ-->
<div class="contents">
<div id="${id}-contents" class="text">
${contents}
</div>
<div id="${id}-editarea" class="edit">
<textarea id="${id}-textarea" class="te-edit" name="" id="" cols="30" rows="5"></textarea>
</div>
</div>
<!-- ๋ฒํผ ์์ญ-->
<div class="footer">
<img id="${id}-edit" class="icon-start-edit" src="images/edit.png" alt="" onclick="editPost('${id}')">
<img id="${id}-delete" class="icon-delete" src="images/delete.png" alt="" onclick="deleteOne('${id}')">
<img id="${id}-submit" class="icon-end-edit" src="images/done.png" alt="" onclick="submitEdit('${id}')">
</div>
</div>`;
// 2. #cards-box ์ HTML์ ๋ถ์ธ๋ค.
$('#cards-box').append(tempHtml);
}
๐ก ๋ฉ๋ชจ ๋ณ๊ฒฝํ๊ธฐ - submitEdit ํจ์
// ๋ฉ๋ชจ๋ฅผ ์์ ํฉ๋๋ค.
function submitEdit(id) {
// 1. ์์ฑ ๋์ ๋ฉ๋ชจ์ username๊ณผ contents ๋ฅผ ํ์ธํฉ๋๋ค.
let username = $(`#${id}-username`).text().trim();
let contents = $(`#${id}-textarea`).val().trim();
// 2. ์์ฑํ ๋ฉ๋ชจ๊ฐ ์ฌ๋ฐ๋ฅธ์ง isValidContents ํจ์๋ฅผ ํตํด ํ์ธํฉ๋๋ค.
if (isValidContents(contents) == false) {
return;
}
// 3. ์ ๋ฌํ data JSON์ผ๋ก ๋ง๋ญ๋๋ค.
let data = {'username': username, 'contents': contents};
// 4. PUT /api/memos/{id} ์ data๋ฅผ ์ ๋ฌํฉ๋๋ค.
$.ajax({
type: "PUT",
url: `/api/memos/${id}`,
contentType: "application/json",
data: JSON.stringify(data),
success: function (response) {
alert('๋ฉ์์ง ๋ณ๊ฒฝ์ ์ฑ๊ณตํ์์ต๋๋ค.');
window.location.reload();
}
});
}
๐ก ๋ฉ๋ชจ ์ญ์ ํ๊ธฐ - deleteOne ํจ์
function deleteOne(id) {
$.ajax({
type: "DELETE",
url: `/api/memos/${id}`,
success: function (response) {
alert('๋ฉ์์ง ์ญ์ ์ ์ฑ๊ณตํ์์ต๋๋ค.');
window.location.reload();
}
})
}
๐ก์ ์ฒด ์์ค ์ฝ๋ ํ์ธ
https://github.com/mjmjmj9840/Sparta-Spring-Basic/tree/main/week03
์ฐธ๊ณ ์๋ฃ: ์คํ๋ฅดํ์ฝ๋ฉํด๋ฝ ์น๊ฐ๋ฐ์ ๋ด, Spring 3์ฃผ์ฐจ ๊ฐ์์๋ฃ
728x90