2022. 3. 20. 19:58ใProgramming Project ์์ ์ค/๋ด์ฉ ์ ๋ฆฌ
๐ง๐ป๐ป Git Hub ์ฃผ์
๐ ๋ชฉ์ฐจ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - Home / Main
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ชฉ๋ก ์กฐํ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ์์ธ ์กฐํ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ฑ๋ก / ์์
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ์ญ์
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ต๋ณ ๋ฑ๋ก / ์์
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ต๋ณ ์ญ์
๐จ๐ฉ๐ง๐ฆ ํ์ ๊ด๋ จ
โ [FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ํ์ ๊ด๋ จ : ํ์ ๊ฐ์
- ๋ถ ๋ก -
[FrontEnd][Vue-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - Paging ์ฒ๋ฆฌ
[Vue.js] ๊ธฐ์ด ๊ฐ๋ ์ ๋ฆฌ - Vue Router
๐ ๊ฒ์ํ ๋ง๋ค๊ธฐ - ์ญ์
๐ฝ ํ๋ฉด
๐ฝ Source Code
๐ฝ Code ๋ถ์ - ์ญ์
๊ฒ์๊ธ ์ญ์ ๋ ํ๋ฉด์ด ๋ฐ๋ก ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ Component๊ฐ ํ์ ์๋ ๊ฒ์ด์์. ์ฆ, Component๋ ํ๋ฉด์ ๊ธฐ์ค์ผ๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ ๊ฒ์ด์์. ์๋ฅผ ๋ค์ด ๋ชฉ๋ก ์กฐํ๋ผ๋ ํ๋ฉด์ด ํ์ํ๊ณ , ์์ธ ์กฐํ๋ผ๋ ํ๋ฉด์ด ํ์ํ๋ค๋ฉด ํด๋น Component๋ฅผ ๋ง๋ค์ด ์ฃผ์ด์ผ ํ๊ฒ ์ง๋ง, ์ญ์ ๋ผ๋ ๊ฒ์ ์ด๋ค ํ๋ฉด์ด ์๋๋ผ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ Component๊ฐ ๋ฐ๋ก ์๊ณ , ์์ธ ์กฐํ์์ Button์ ๋๋ฅด๊ฒ ๋๋ฉด ํด๋น ๊ธฐ๋ฅ์ด ๋์ํ๋ฉด ๋๊ธฐ ๋๋ฌธ์ ์ด ์ ์ ๊ธฐ์ตํ๊ณ , ๋ถ์์ ํด ๋ณผ ๊ฒ์ด์์.
๋งจ ์ 'ํ๋ฉด'์์ ๋ณด์๋ฏ์ด `์์ธ ๋ณด๊ธฐ`์์ `์ญ์ ` Button์ ๋๋ฅด๊ฒ ๋๋ฉด ์ด๋ค Event๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ , ์ ๋ง ์ญ์ ํ ๊ฒ์ธ์ง์ ๋ํ Popup์ฐฝ์ด ๋จ๋ ๊ฒ์ด์์.
์ ์ฝ๋ `DevInquryDetailView.vue - 112 ~ 119`๋ฅผ ๋ณด๊ฒ ๋๋ฉด 119๋ฒ์งธ๊ฐ`์ญ์ ` Logic์ ์์์ ์ธ ๊ฒ์ด์์.
์ด์ฉ์๊ฐ `์ญ์ `๋ผ๋ Button์ ํด๋ฆญํ๊ฒ ๋๋ฉด 119๋ฒ์งธ ์ค์ <a> Tag๋ฅผ ํด๋ฆญํ๊ฒ ๋ ๊ฒ์ด๊ณ , ์ด๋ฅผ ํตํด Click Event๊ฐ ๋ฐ์ํ๊ฒ ๋๋๋ฐ, ์ด ๋, deletePopup์ด๋ผ๋ ๋ณ์๊ฐ true๋ก ๋ณํ๊ฒ ๋๋ ๊ฒ์ด์์.
127๋ฒ์งธ ์ค์ ๋ณด๊ฒ ๋๋ฉด v-show๋ฅผ ํตํด deletePopup ๋ณ์๊ฐ `true`๋ผ๋ฉด Pop up ํ๋ฉด์ ๋ณด์ฌ์ฃผ๊ฒ ์ฒ๋ฆฌ๊ฐ ๋ ๊ฒ์ด์์.
์ด์ฉ์๊ฐ `์ญ์ ` Button์ ํด๋ฆญํ๊ฒ ๋๋ฉด P Tag๋ฅผ ํตํด 'ํด๋น ๊ฒ์๊ธ์ ์ญ์ ํ์๊ฒ ์ต๋๊น?' ๋ผ๊ณ ๋ฌป๋ Popup์ด ๋จ๊ฒ ๋๊ณ , ํด๋น Popup ๋ฐ์๋ ํ์ธ, ์ทจ์ Button์ด ์กด์ฌํ๋ ๊ฒ์ด์์.
139๋ฒ์งธ `ํ์ธ` Button์ ํด๋ฆญํ๊ฒ ๋๋ฉด Click Event๊ฐ ๋ฐ์ํ์ฌ `doDelete()`๋ผ๋ Method๊ฐ ํธ์ถ๋๋ ๊ฒ์ด์์.
์ต์ด ์ด ์น๊ตฌ๊ฐ ํธ์ถ๋๋ฉด Axois๋ฅผ ์ด์ฉํด์ ํด๋น ๊ฒ์๋ฌผ์ DB์์ ์ง์ฐ๊ธฐ ์ํด Back End์ ํต์ ์ด ํ์ํ ๊ฒ์ด์์.
๊ทธ๋์ 211๋ฒ์งธ ์ค๊ณผ ๊ฐ์ด devInquryDelete๋ฅผ ํธ์ถํ๊ฒ ๋๋๋ฐ, ์ด ๋ ํ๋์ ํน์ ๊ฒ์๊ธ๋ง ์ญ์ ๋ฅผ ํด์ผ ๋๊ธฐ ๋๋ฌธ์ ํด๋น ๊ฒ์๊ธ์ ์ผ๋ จ๋ฒํธ(inqrySn)์ ์ ๋ฌ ํด ์ฃผ๋ฉด์ ํธ์ถํ๋ ๊ฒ์ด์์.
devInquryDelete๊ฐ ํธ์ถ์ด ๋๋ฉด ์ด ๊ณณ์ ์ค๊ฒ ๋๋๋ฐ, Back End Controller์ ์ง์ ๋ URI์ HTTP Method `delete`๋ฅผ ํตํด ๋งค๊ฐ ๋ณ์๋ก ๋ค์ด์จ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ(inqurySn)์ ๊ฐ์ด ์ ๋ฌ ํด ์ฃผ๋ ๊ฒ์ด์์.
@ResponseBody @DeleteMapping("/devInqury")
public Object devInquryDelete(@RequestBody DevInquryVO devInquryVO) throws Exception {
log.info("DevInquryController์ devInquryDelete(@RequestBody DevInquryVO devInquryVO)๊ฐ ํธ์ถ ๋์์ต๋๋ค!");
log.info("Client์์ ๋์ด์จ Data Value๋ฅผ ๋จผ์ ํ์ธ ํ๊ธฐ ์ํด ๋ฐฐ์ด ๋ณ์์ ๊ฐ์ ๋ฃ๊ฒ ์ต๋๋ค!");
Field[] fields = devInquryVO.getClass().getDeclaredFields();
for (Field field : fields) {
/** ์ฐธ๊ณ ์๋ฃ
* @see "https://tyboss.tistory.com/entry/Java-%EC%9E%90%EB%B0%94-%EB%A6%AC%ED%94%8C%EB%A0%89%EC%85%98-reflection-setAccessible"
*/
log.info("Java ๋ฆฌํ๋ ์
๊ธฐ๋ฒ ์ค setAccessible(true) ํตํด Field ๊ฐ์ฒด ์๋ฃํ Type field์ ์ ๊ทผ์ ์ด ์ง์์์ ์ํ ์ ์ด๋ฅผ ๋ณ๊ฒฝ ํ๊ฒ ์ต๋๋ค!");
field.setAccessible(true);
System.err.println(field.getName() + " : " + field.get(devInquryVO));
} // for (Field field : fields) ๋
Map<String, Object> result = new HashMap<>();
try {
log.info("Q&A ๊ฒ์๊ธ ์ญ์ ๊ฐ ์์ ๋ฉ๋๋ค!");
log.info("devInquryService.devInquryDelete(devInquryVO)๋ฅผ ํธ์ถ ํ๊ฒ ์ต๋๋ค!");
devInquryService.devInquryDelete(devInquryVO);
log.info("๋น์ฆ๋์ค ๋ก์ง์ด ์ ์ ์ฒ๋ฆฌ ๋์์ผ๋ฏ๋ก, Map result์ 200 Code๋ฅผ ๋ด๊ฒ ์ต๋๋ค!");
result.put("code", 200);
} catch (Exception e) {
log.info("๊ฒ์๊ธ ์ญ์ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ catch๋ฌธ์ด ์คํ ๋์์ต๋๋ค!");
e.printStackTrace();
log.warn(e.getMessage());
log.info("Logic์ด Error๋ก 401 Code๋ฅผ Map result์ ๋ฃ๊ฒ ์ต๋๋ค!");
result.put("code", 401);
return result;
} // try - catch ๋
return result;
} // devInquryDelete(@RequestBody DevInquryVO devInquryVO) ๋
๊ทธ๋ผ BackEnd์ ์์ Controller์ Method๊ฐ ๋์ํ๊ฒ ๋๋ ๊ฒ์ด๊ณ , Back End์์ Logic์ ์ฒ๋ฆฌํ๊ฒ ๋๋ ๊ฒ์ด์์.
๊ทธ๋ผ ๋ค์ ์์ Code๋ก ๋์์์ Back End๊ฐ ์์ฒญ์ ๋ฐ๊ณ , ํด๋น ๊ฒ์๋ฌผ์ ์ญ์ ํ๊ณ ๋์ ์ด๋ค ์๋ต๊ฐ์ Client์๊ฒ ์ ๋ฌ์ ํด์ฃผ์์ ๊ฒ์ธ๋ฐ, ๊ทธ ๊ฐ์ด response์ ๋ด๊ธฐ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด๋ค ๊ฐ์ Back End๋ ์ ๋ฌ์ ํด ์ฃผ๋ ๊ฒ์ผ๊น์?
๋ฐ๋ก ์ด๋ ๊ฒ `HTTP Status Code 200`๋ง ์ ๋ฌ์ ํด ์ฃผ๋ ๊ฒ์ด์์. ์ญ์ ๊ฐ ์๋ฃ๊ฐ ๋์๋ค๋ฉด ์์ธ ์กฐํ์ ๋ณด์ฌ์ค ๊ฐ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋๋ก ๊ฐ ์ด๋์ ์์ผ์ค์ผ ํ๋๋ฐ, ํด๋น ๊ฒ์ํ์ ์ด์ฉ์๊ฐ ๋์ด๋ณด๊ณ ์์์ผ๋ ๊ฒ์ํ ๋ชฉ๋ก ์กฐํ๋ก ๋ค์ ๋ณด๋ด์ฃผ๋๊ฒ ์ข์ ๊ฑฐ ๊ฐ์ ๊ฒ์ด์์.
๊ทธ๋์ 216๋ฒ์งธ์์ goList()๋ฅผ ํธ์ถํด ์ฃผ๋ ๊ฒ์ด์์.
ํด๋น Method๊ฐ ํธ์ถ๋๋ฉด router๋ฅผ ํตํด /support/devInquryList์ ์์นํ DevInquryList Component๋ฅผ Re Renderingํ๊ฒ ๋๊ณ , ๊ฒฐ๊ตญ ์ด์ฉ์๋ ๋ชฉ๋ก ์กฐํ Page๋ก ์ด๋ํ ๊ฒ๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ณด๊ฒ ๋ ๊ฒ์ด์์.
๋ง์ฝ ์ญ์ ๊ฐ ์คํจ ํ๋ค๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ๊ฒ ๋ ๊น์? ๐ค
์คํจ๊ฐ ๋๋ค๋ฉด catch๋ฌธ์ ๋ค์ด์ค๊ฒ ๋ ๊ฒ์ด๊ณ , console์ ํด๋น error ๋ด์ฉ์ ์ถ๋ ฅํ๊ฒ ๋ ๊ฒ์ด์์.
๊ทธ๋ฆฌ๊ณ , ๊ฒฝ๊ณ ์ฐฝ์ด ๋ฐ์ํ๊ฒ ๋๊ณ , ์ด๋ค ๋์๋ ํ์ง ์์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋๋ก ํด๋น ๊ฒ์๊ธ ์์ธ ์กฐํ Page์ ๋จ๊ฒ ๋ ๊ฒ์ด์์.
ํด๋น Project์์ ๊ฒ์๊ธ์ ๋ํ CRUD์ ๋ํ ์ฝ๋ ๋ถ์ ๋ฑ์ ๋ชจ๋ ๋ง์ณค์ต๋๋ค!
์ด์ ํ์ ๊ด๋ฆฌ์ ๋ํ ๋ด์ฉ์ ์ ๋ฆฌํ๊ฒ ๋ ๊ฒ์ด๊ณ , ๋ค๋ฅธ ๊ฒ์ํ์ ์ ๊ฒ์ํ๊ณผ ๋์ผํ๊ฒ ๊ตฌ์ฑ์ด ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก ์ ๋ฆฌํ์ง๋ ์์ ๊ฒ์ด์์.