2022. 3. 9. 16:08ใProgramming Project ์์ ์ค/๋ด์ฉ ์ ๋ฆฌ
๐ง๐ป๐ป Git Hub ์ฃผ์
๐ ๋ชฉ์ฐจ
โ [BackEnd][Maven-PJ] ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ๋ชฉ๋ก ์กฐํ
โ [BackEnd][Maven-PJ]๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ์์ธ ์กฐํ
โ [BackEnd][Maven-PJ]๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : ์ญ์
โ [BackEnd][Maven-PJ] ์ฌ๋ด ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ : ๋ต๋ณ ๋ฑ๋ก / ์์
โ [BackEnd][Maven-PJ] ์ฌ๋ด ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ : ๋ต๋ณ ์ญ์
๐จ๐ฉ๐ง๐ฆ ํ์ ๊ด๋ จ
โ [BackEnd][Maven-PJ] ์ฌ๋ด ๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ํ์ ๊ด๋ จ : ํ์ ๊ฐ์
๐๋ถ ๋ก
โ [BackEnd][Maven-PJ]๊ฐ๋ฐ์ ์ปค๋ฎค๋ํฐ ์๋น์ค - ๊ฒ์ํ ๋ง๋ค๊ธฐ : Paging์ฒ๋ฆฌ
๐ค ๋ด๊ฐ ๋ง๋ Exception
โ [Exception ์ ๋ฆฌ] org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
โ [Vue.js][Spring] Post Data ์ ์ก ๊ฐ null๊ฐ ์ ์ก ๋ฌธ์
โ
๐ ๊ฐ๋ฐ ๊ด๋ จ Q&A ๊ฒ์ํ ์๋น์ค
๐ฝ ์ด๋ป๊ฒ ๊ตฌ์ฑํ ๊ฒ์ธ๊ฐ?
๐ฝ VO ๊ตฌ์ฑ
ํด๋น VO๊ฐ extendsํ ๊ฐ์ฒด์ ๋ํ ๋ด์ฉ์ '์ด ๊ณณ'์ ์ ๋ฆฌ ํด ๋์์ด์!
์์ VO๋ ์์ ๊ฐ์ด Table Column๊ณผ Mapping ๋ ๊ฐ์ฒด์ธ ๊ฒ์ด์์.
๊ทธ๋ฐ๋ฐ, VO์ ๋ณด๋ฉด srchWord์ srchType์ด ์๋๋ฐ, ์ด ๋ Member ๋ณ์ ๋ด์ฉ์ Column์ ์๋ ๊ฒ์ด์์.
์ด ๋ณ์๋ค์ Client์์ ๊ฒ์ ๊ธฐ๋ฅ์ ํตํ ์์ฒญ์ ํ ๋ ๊ฒ์ ์ข ๋ฅ (srchType)๊ณผ ๊ฒ์๋ช (srchWord)๋ฅผ ๋ฐ๊ธฐ ์ํ ๋ณ์์ ๋๋ค!
๐ ๊ฐ๋ฐ ๊ด๋ จ Q&A ๊ฒ์ํ ์๋น์ค - ๋ฑ๋ก
๐ฝ DevInquryController.java
61๋ฒ์งธ ์ค์ `@ResponseBody`์ ๋ํ ์ ๋ฆฌ ๋ด์ฉ์ '์ด ๊ณณ'์ ์ค๋น ํด ๋๊ฒ์!
์ด์ ์์ Controller Code๋ฅผ ํ๋ํ๋ ๋ถ์ ํด ๋ณด๋ฉด์ ๋ณต์ต์ ํด ๋ณผ ๊ฒ์ด์์.
Field[] fields = devInquryVO.getClass().getDeclaredFields();
VO์ ์์์ ๊ฐ์ ๋ฃ์ด์ ์ฌ์ฉํด์ผ ๋ ๋ getDeclaredFields ์ด ์น๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด์์.
์ด ๋ด์ฉ์ ์ฌ์ค ์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ฃผ๋ํ๋๋ ์ฒ์ ์จ ๋ณธ ๊ฒ์ด๋ผ ์ข ๋ ์์ธํ ์ ๋ฆฌํ๊ธฐ ์ํด '์ด ๊ณณ'์ ์ ๋ฆฌํ ๋ด์ฉ์ ์ค๋น ํด ๋๊ฒ์!
Map<String, Object> result = new HashMap<>();
๊ทธ๋ฐ ๋ค ์๋ต(Response) ์์ ์ ๋ฌํ ๋ด์ฉ๋ค์ ๋ด์ ๊ทธ๋ฆ์ธ result๋ฅผ ๋ง๋ค์ด ์ค ๊ฒ์ด์์.
try {
log.info("๋ฑ๋กํ ๊ธ์ด ๋น๋ฐ๊ธ์ธ์ง ํ์ธ ํ๊ฒ ์ต๋๋ค!");
if (devInquryVO.getSecretAt().equals("false")) {
log.info("๋ฑ๋กํ ๊ธ์ด ๋น๋ฐ๊ธ์ด ์๋๋๋ค! ๊ณต๊ฐ๊ธ๋ก ๋ฑ๋ก ํฉ๋๋ค!");
devInquryVO.setSecretAt("N");
} else {
log.info("๋ฑ๋กํ ๊ธ์ด ๋น๋ฐ๊ธ ์
๋๋ค! ๋น๋ฐ๊ธ๋ก ๋ฑ๋ก ํฉ๋๋ค!");
devInquryVO.setSecretAt("Y");
} // if (devInquryVO.getSecretAt().equals("false")) - else ๋
์ฃผ๋ํ๋์ด ๋ง๋ค๊ณ ์๋ ๊ฒ์ํ์๋ ๋น๋ฐ๊ธ ๊ธฐ๋ฅ์ด ์๋ ๊ฒ์ด์์. ๊ฒ์๊ธ ๋ฑ๋ก ์์ฒญ ์ด์ฉ์๊ฐ ๋น๋ฐ๊ธ์ ์ฒดํฌ ํ๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ํด๋น VO์ setter๋ฅผ ์ด์ฉํ์ฌ ๋น๋ฐ๊ธ ์ฌ๋ถ๋ฅผ ํ์ํ๊ธฐ ์ํด ์กฐ๊ฑด๋ฌธ์ผ๋ก ํ์ธ์ ํ๊ณ , ์ ์ ํ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ ์๋ ๊ฒ์ด์์.
if (CustomStringUtil.getString(devInquryVO.getInqrySn()) == "" || devInquryVO.getInqrySn() == 0) {
log.info("๋ฑ๋ก ์์ฒญ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ๋น์ด์์ต๋๋ค! ๊ฒ์๊ธ ๋ฑ๋ก์ ์ํ ํฉ๋๋ค!");
// TODO - ํ์๊ฐ์
๋ฐ ๋ก๊ทธ์ธ ๋ก์ง ๊ตฌํ ๋ค ์๋ ํ๋์ฝ๋ฉ ์์ ํ์
log.info("devInquryService.devInquryInsertUpdate(devInquryVO)์ ํธ์ถ ํ๊ฒ ์ต๋๋ค!");
devInquryService.devInquryInsert(devInquryVO);
log.info("Map result์ ๊ฒ์๊ธ ์ผ๋ จ ๋ฒํธ๋ฅผ ๋ฃ๊ฒ ์ต๋๋ค!");
result.put("resultSn", devInquryVO.getInqrySn());
๋์ค์ ์ฃผ๋ํ๋์ ํด๋น Logic์์ ๋ฑ๋ก / ์์ Logic์ ๋ถ๋ฆฌํ ์์ ์ด์ง๋ง, ์ผ๋จ์ ๋น ๋ฅด๊ฒ ์์ฑ์ ์ํด ๋ฌ๋ฆฌ๊ณ ์๋ ๊ฒ์ด์์. ์ด์ฐจํผ ๋ฆฌํํฐ๋ง์ ๊ณ์ ๋์ด์ผ ํ๋๊น! ํ๋ํ๋ ์ฒ์ฒํ ๊ฐ ๋ณผ ๊ฒ์ด์์.
์์ Logic์ VO์์ ๋ค์ด ์๋ getInqrySn (๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ)๊ฐ ๋ค์ด ์๋์ง ์๋์ง๋ฅผ ํ์ธํ๋ Logic์ธ ๊ฒ์ด์์. ๋ง์ฝ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ์๋ค๋ฉด ์ด ๊ธ์ ์ ๊ท ๋ฑ๋ก์ด ๋ ๊ฒ์ด๊ณ , ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ์๋ค๋ฉด ์์ Logic์ ์ฒ๋ฆฌํ๋ฉด ๋ ๊ฒ์ด์์.
์์ if๋ฌธ์ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ๋น์ด์๋๊ณ ๋ฌผ์ด๋ณด๊ณ ์์ผ๋ ๊ฒ์๊ธ ๋ฑ๋ก ์ฒ๋ฆฌ๋ฅผ ์ํ ๋น์ฆ๋์ค ๋ก์ง์ ํธ์ถํ๋ ๊ฒ์ด์์.๊ทธ๋ฐ ๋ค ํด๋น ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๋ฅผ ์๋ต์ผ๋ก ์ ๋ฌ ํด ์ฃผ๊ธฐ ์ํด result Map์ ๋ด์ ์ฃผ๋ ๊ฒ์ด์์.
} else {
log.info("๋ฑ๋ก ์์ฒญ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ์กด์ฌ ํฉ๋๋ค! ๊ฒ์๊ธ ์์ ์ ์ํ ํฉ๋๋ค!");
log.info("devInquryService.devInquryInsertUpdate(devInquryVO)์ ํธ์ถ ํ๊ฒ ์ต๋๋ค!");
devInquryService.devInquryUpdate(devInquryVO);
log.info("Map result์ ๊ฒ์๊ธ ์ผ๋ จ ๋ฒํธ๋ฅผ ๋ฃ๊ฒ ์ต๋๋ค!");
result.put("resultSn", devInquryVO.getInqrySn());
} // if (CustomStringUtil.getString(devInquryVO.getInqrySn() == "" || devInquryVO.getInqrySn() == 0)) - else ๋
๋ค์์ else๋ฌธ์ด๋ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ์๋ค๋ฉด ๋ค์ด์ค๋ ๋ก์ง์ด๊ณ , ๊ทธ๋ ๋ค๋ฉด ์์ ๋น์ฆ๋์ค ๋ก์ง ์ฒ๋ฆฌ๋ฅผ ํ ๊ฒ์ด์์.
์ญ์ ๋ง์ง๋ง์ ์ฒ๋ฆฌ๋ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๋ฅผ result Map์ ๋ด์ ์ค ๊ฒ์ด์์.
log.info("Logic์ด ์๋ฃ ๋์์ผ๋ฏ๋ก, 200 Code๋ฅผ Map result์ ๋ฃ๊ฒ ์ต๋๋ค!");
result.put("code", 200);
๊ทธ๋ฐ ๋ค HTTP Status Code๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด result Code์ ํด๋น Code๋ฅผ ๋ฃ์ด์ฃผ๊ณ ์๋ ๊ฒ์ด์์.
} 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;
ํด๋น try - catch๋ฌธ์ ๊ถํ์ด ์๋ ์๋์ ๋ฐ๋ผ ์ฒ๋ฆฌ๊ฐ ๋ ๊ฒ์ด์์. ํด๋น Logic์ ๊ถํ์ด ์๋ ์ด์ฉ์๊ฐ ์ ๊ทผ์ ํ์ฌ Logic์ ์์ฒญํ๋ฉด catch๋ฌธ์ ๋น ์ ธ์ 401 Http State Code๋ฅผ ๋ฐ๊ฒ ๋ ๊ฒ์ด์์.
๊ทธ๋ฌ๊ธฐ ์ํด result Map์ ํด๋น Code๋ฅผ ์ง์ด ๋ฃ์ด์คฌ๊ณ , ๋ฐํ์ ํ์ฌ ์๋ต ํด ์ฃผ๋ ๊ฒ์ด๊ณ ,
catch๋ฌธ์ ๋น ์ง์ง ์์๋ค๋ฉด try๋ฌธ์์ ์ฒ๋ฆฌ๋ ์๋ต๊ฐ๋ค์ ๋ชจ์ result Map์ ๋ฐํ ํด ์ฃผ๋ ๊ฒ์ด์์.
๐ฝ DevInquryService.java
์์ Service๋ interface๋ก ๊ตฌ์ฑํ๊ณ , ๊ฒ์ํ ๋ฑ๋ก Method๋ฅผ ์ถ์ Method๋ก ๊ตฌํํ ๊ฒ์ด์์.
๐ฝ DevInquryServiceImpl.java
๊ทธ๋ฆฌ๊ณ , Interface๋ฅผ ๊ตฌํํ ๊ตฌํ์ฒด๋ฅผ ๋ง๋ค์ด์ Method๋ฅผ ์ฌ์ ์(Override)๋ฅผ ํตํด Service Logic์ ๊ตฌํํ ๊ฒ์ด์์.
์ด๋ ๊ฒ ํ ์ด์ ๋ ์์กด๊ด๊ณ ์ฃผ์
DI(Dependency Injection)๋ฅผ ๋ฐ๋ฅด๊ธฐ ์ํด ์ด๋ ๊ฒ ํ ๊ฒ์ด์์. ์ด ๋ด์ฉ์ ๋ํด์๋ '์ด ๊ณณ'์ ์์ธํ ์ค๋น ํด ๋๊ฒ์!
28๋ฒ์งธ ์ค @Transactinal์ ๋ํ ์ ๋ฆฌ ์๋ฃ๋ '์ด ๊ณณ'์ ์ ์ฑ์ค๋ฝ๊ฒ ์ค๋น ํด ๋์์ต๋๋ค!
@Slf4j๋ ์ฝ์์ Log๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํ Annotaion์ธ ๊ฒ์ด์์. ์ฃผ๋ํ๋์ ์ด๋์ ๋ถํฐ ์ด๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ๊ฐ๋ฐ๋จ๊ณ์์๋ ์๊ณ ์ถ์ด์ ๋๋๋ก ๊ตฌํ๋ ๋ด์ฉ์ ๊ธฐ๋ํ๋ ๊ฒฐ๊ณผ์ ๋ํด ์ถ๋ ฅ ๋๋๋ก ํ๊ณ ์๋ต๋๋ค.
์! ์ด์ ๋ณธ๊ฒฉ์ ์ผ๋ก DB Handling์ ์ํด Mapper Class์ Method๋ฅผ ํธ์ถ ํด์ ๋ถ๋ฌ ๋ณด๋๋ก ํ ๊ป์!
๐ฝ DevInquryMapper.java
์ญ์ Mapper Class๋ฅผ Interface๋ก ๋ง๋ค์๊ณ , ํ์ํ Method๋ ์ถ์ Method๋ก ๋ง๋ค์ด ์ค ๊ฒ์ด์์.
๊ทธ๋ฆฌ๊ณ , @Mapper๋ฅผ ํตํด์ ์ด Class๊ณผ ์ฐ๊ฒฐ๋ ๊ตฌํ xml File๊ณผ ์ฐ๊ฒฐ์ ํด ์ค ๊ฒ์ด์์.
Mapper ์ด๋ ธํ ์ด์ ์ ์ฝ๋๋ ๋จ์ํ meta annotation์ด ๋ถ์ด ์๊ณ , ์์ ํน๋ณํ ๋ด์ฉ์ ์์ด ๋ณด์ด๋ ๊ฒ์ด์์. ์ด ์ด๋ ธํ ์ด์ ์ MyBatis์ mappers๋ฅผ ์ํ marker interface๋ก ์ด์ฉ๋๊ณ , SQL์ ํธ์ถํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ธ ๊ฒ์ด์์. ์ด ์น๊ตฌ๋ Mybatis3.0 ๋ถํฐ ์๊ฒผ๋ค๊ณ ํฉ๋๋ค.
์ฆ, ์ด ์ด๋ ธํ ์ด์ ์ ํตํด ๋ฐ์ Mapper.xml์ Name Space์ ํจํค์ง๋ช ์ ํฌํจํ ์ธํฐํ์ด์ค ์ด๋ฆ์ ์ ์ด์ฃผ๋ฉด ์ฐ๊ฒฐ์ด ๋๋ ๊ฒ์ด์์.
๐ฝ DevInquryMapper.xml
์ด ์น๊ตฌ๊ฐ ๋ณธ๊ฒฉ์ ์ผ๋ก ๊ฒ์๊ธ ๋ฑ๋ก์์ SQL ๋ฌธ์ DB์ ๋์ ธ์ค Mapper ์ธํฐํ์ด์ค ๊ตฌํ์ฒด์ธ ๊ฒ์ด์์.
<mapper namespace> ์ด ๊ณณ์ ์์ ์ด์ผ๊ธฐ ํ๋ Mapper ์ธํฐํ์ด์ค ๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ๋ฉด ํด๋น Mapper ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐ์ด ๋๊ณ ,
<insert> id ์์ฑ์ Mapper ์ธํฐํ์ด์ค์ ์ถ์ Method๋ช
์ ์จ์ฃผ๋ฉด ๋๋ ๊ฒ์ด์์. ๊ทธ๋ฆฌ๊ณ , parameterType ์์ฑ์ ์ด xml์ ์ด๋ค ๋งค๊ฐ ๋ณ์๋ฅผ ๋ฃ์ด ์ค ๊ฒ์ด๋๊ณ ์ดํด ํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์. ์ฃผ๋ํ๋์ VO ์์ฒด๋ฅผ ๋ฃ์ด์ฃผ์๋ต๋๋ค!
๊ฒ์๊ธ ๋ฑ๋ก์ด๊ธฐ ๋๋ฌธ์ INSERT ๋ฌธ์ ์ฌ์ฉํ๊ณ , tb_com_inqry ๋ผ๋ Table์ 9 ~ 18 Line Column์ Matching๋ ๊ฐ๋ค์ #{๋งค๊ฐ ๋ณ์ ๊ฐ์ฒด์ Member ๋ณ์๋ช }์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ ๊ฒ์ด์์.
์ฌ๊ธฐ์ ๊ถ๊ธํ๊ฒ ์๋ ๊ฒ์ด์์. 7๋ฒ์งธ ์ค์ `<![CDATA[...]]>` ์ด ์น๊ตฌ๋ ๋์ฒด ๋ฌด์์ผ๊น์?
์ผ๋จ, ์ด ์น๊ตฌ๋ฅผ ํ์ด ์ฐ๋ฉด `Character Data` ์ฆ, '๋ฌธ์ ๋ฐ์ดํฐ'๋ผ๋ ๋ป์ธ ๊ฒ์์์.
์ด ์ฉ์ด๋ฅผ ์ข ๋ ์ ํํ๊ฒ ์ด์ผ๊ธฐ ํ์๋ฉด '(Unparsed) Character Data' ์ฆ, Parsingํ์ง ์์ ๋ฌธ์ ๋ฐ์ดํฐ๋ผ๋ ์๋ฏธ์ธ ๊ฒ์ด์์. ์ด์ ๋ฐ๋๋๋ ์น๊ตฌ๋ 'PCDATA'๋ผ๊ณ ๋ถ๋ฅธ ๋ต๋๋ค!
์์๋ฅผ ํ๋ฒ ๋ค์ด ๋ณผ๊ฒ์. ์์ ๋ด์ฉ์ Text๋ฅผ ์ถ๋ ฅ ํด ๋ณด๋ฉด ์๋์ ๊ฐ์ด ์ถ๋ ฅ ๋๋ ๊ฒ์ด์์.
์ด๊ฒ์ ![CDATA[]] ๋ฅผ ์ฐ์ง ์์์ ๋ ๋ชจ์ต์ด๊ณ , ์ด๊ฒ์ ์ฌ์ฉํ๋ฉด ์๋์ ๊ฐ์ ๊ฒ์ด์์.
์ฐจ์ด๊ฐ ๋๊ปด์ง์๋์? ์ด๋ ๋ฏ <![CDATA[...]]๋ ์์ ๋ค์ด๊ฐ๋ Text๊ฐ Parsing ๋์ง ์๊ฒ ํ๋ ค๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด์์.
์์ mapper.xml์์๋ ๋ฐ๋ก SQL๋ฌธ์ด Parsing ๋์ด ๊ธฐ๋ฅ์ ์์ด๋ฒ๋ฆฌ์ง ์๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ ๊ฒ์ด ๋๋๋ค!
๐ฃ ๊ฒฐ๊ณผ
Postman์ ํตํด ๋ฑ๋ก์ ํด ๋ณด์๋๋ฐ, ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฒ์ด์์. ํด๋น ๋ด์ฉ์ '์ด ๊ณณ'์ ์ ๋ฆฌ ํด์ ์ค๋น ํด ๋๊ฒ์!
Request Body์ ๋ค์ด๊ฐ ๋ถ๋ถ์ ๊ผญ ๋ค์ด๊ฐ์ผ ํ๋ ๋ด์ฉ์ ์ ์ธํ๊ณ , ์์ Exception์ ์ฒ๋ฆฌํ ๋ค Request๋ฅผ ๋ณด๋ด๋ ์ ์ ์ฒ๋ฆฌ ๋ ๊ฒ์ด์์.
DB์๋ ์ ์์ ์ผ๋ก ๋ค์ด๊ฐ ๊ฒ์ ํ์ธํ ์ ์๋ ๊ฒ์ด์์.
๐ ๊ฐ๋ฐ ๊ด๋ จ Q&A ๊ฒ์ํ ์๋น์ค - ์์
๐ฝ DevInquryService.java
Controller๋ ๋ฑ๋ก๊ณผ ์์ ์ด ๊ฐ์ด ์ฌ์ฉํ๊ณ ์๋ ๊ฒ์ด์์. ๊ทธ๋ฆฌ๊ณ , ์์ฒญ Body์ ๊ฒ์๊ธ ์ผ๋ จ๋ฒํธ๊ฐ ์๋์ง ์๋์ง๋ฅผ ํ๋จํ์ฌ ์์ผ๋ฉด ๊ธ ๋ฑ๋ก์ผ๋ก ํ๋จํ๊ณ , ์์ผ๋ฉด ์์ ์ผ๋ก ํ๋จํ๋ ๊ฒ์ด์์.
๐ฝ DevInquryServiceImpl.java
๋ญ๊ฐ ๋ฐ๋ ๊ฒ์ Controller์์ ๋น์ฆ๋์ค ๋ก์ง์ด ์ฒ๋ฆฌ๋๊ณ , Service ๋จ์์๋ ๋จ์ง DB์ฒ๋ฆฌ๋ฅผ ์ํ Method๋ง ํธ์ถํ๋ ๊ฒ์ด์์. ์ฐจ ํ ์ด ๋ถ๋ถ์ ๋ณ๊ฒฝํ ์์ ์ ๋๋ค.
๐ฝ DevInquryMapper.java
๐ฝ DevInquryMapper.xml
update Query๋ฅผ ์จ์ VO์ ๋ค์ด์จ ๊ฐ์ ์ฒ๋ฆฌํ๊ณ ์๋ ๊ฒ์ด์์. ๊ฒ์๊ธ ์ ๋ชฉ(inqrySj), ๊ฒ์๊ธ ๋ด์ฉ(InqryCn), ํ์ผ ๊ด๋ จ ์ผ๋ จ๋ฒํธ(fileSn), ์์ ์ผ, ์์ ์(upduserSn)์ผ๋ จ ๋ฒํธ, ๋น๋ฐ๊ธ ์ฌ๋ถ(secretAt)์ ๋ํด ์์ ์ ํ๊ณ , ์์ ์ ํด๋น ๊ฒ์๊ธ ๋ฒํธ์ ๋ง๋ ์์ฒญ์ ๋ํด ์ฒ๋ฆฌ๋ฅผ ํ๋ ๊ฒ์ด์์.
๋์ค์ ์ฃผ๋ํ๋์ and ์กฐ๊ฑด์ ์ถ๊ฐํด์ ํ์ ์ผ๋ จ๋ฒํธ๋ ํ์ธ์ ํ๋๋ก ํด์ ์๊ธฐ ์์ ์ ๊ฒ์๊ธ๋ง ์์ ์ด ๊ฐ๋ฅํ๊ฒ Refactoring์ ์งํํด๋ณด๋ ค ํด์.
์์ ๊ธ ๋ฑ๋ก ๋จ๊ณ์์ ๋ฑ๋กํ ๊ธ์ด ์ ์์ ์ผ๋ก ์์ ์ด ๋๋ ํ์ธ ํด ๋ณผ๊ฒ์ด์์.
๐ฃ ๊ฒฐ๊ณผ
์ฌ์ค ๋์น ์ฑ์
จ๊ฒ ์ง๋ง, ์ด Logic์ RestFulํ์ง ์์ ๊ฒ์ด์์.
๋ฐ๋ก ์์ ์ Patch๋, Put Method๋ฅผ ์ฌ์ฉํด์ผ ํ๋๋ฐ, ๋ฑ๋ก๊ณผ ํจ๊ป Post๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌธ์ ์์.
์ด ๋ถ๋ถ๋ ์ฐจ ํ ๋ชจ๋ ์๋น์ค ๊ตฌํ์ด ์๋ฃ๋๋ฉด ์ ์ฐจ Refactoring์ ์งํ ํ๋ ค๊ณ ํ๋ ๊ฒ์ด์์.
์์ผ๋ก ํด๋น Project์์ ๋ค๋ฅธ ๊ฒ์ํ์ ๋ฑ๋ก ๋ถ๋ถ์ ๋ํด ํน๋ณํ ๋ด์ฉ์ด ์์ง ์๋ ํ ์ถ๊ฐ ํ์ง๋ ์์ ๊ฒ์ด๊ณ , ์ฃผ๋ํ๋์ Project๊ฐ ๊ถ๊ธํ๋ค๋ฉด ์๋ Git Hub์์ ๊ธฐ๋ค๋ฆฌ๊ณ ์์๊ฒ์!