2022. 3. 31. 07:59ใ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
๐ ํ์ ๊ด๋ จ - ํ์ ๊ฐ์
๐ฝ ํ๋ฉด
๐ฝ Code ๋ถ์
์ค์ํ๋ค๊ณ ์๊ฐ๋๋ ๋ถ๋ถ์ ๋ํด์ Code ๋ถ์์ ํด ๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
ํ์ ๊ฐ์
์ Validation๊ณผ ์ค๋ณต ํ์ธ ๋ฑ ์๊ฐ๋ณด๋ค ๋ง์ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒ์ด์์.
์ต์ด 38๋ฒ์งธ ์ค์ v-model๋ก ํด๋น ๊ฐ์ฒด ์์ ์๋ ๋ณ์์ ID๊ฐ ์ ์ฅ ๋๋๋ก ํ ๊ฒ์ด์์.
์์ ๊ฐ์ด ์๋ฌด ์ ๋ ฅ๊ฐ ์๋ ๋ณ์๋ก ์ด๊ธฐํ๋ฅผ ํด ์ฃผ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ `@blur`์ ํตํด `idHelthChek()`๋ฅผ ํธ์ถํ๊ฒ ํด ์ค ๊ฒ์ด์์.
๐ก ์ฌ๊ธฐ์ ์ ๊น!
@focus, @blur๋ ๋ฌด์์ผ๊น?
@focus
โ ์ด์ฉ์๊ฐ ํด๋น Tag์ Click(ํฌ์ปค์ฑ) ํ์ ๋, ์คํ.
โ `@focus = **`์ผ๋ก ์คํ.
@blur
โ ์ด์ฉ์๊ฐ ํด๋น Tag์ Click(ํฌ์ปค์ฑ)์ ์์์ ๋, ์คํ.
โ `@blure = **`์ผ๋ก ์คํ.
์ฆ, ์ฃผ๋ํ๋์ ID์ ์ด๋ค ๊ฐ์ด ์ ๋ ฅ๋์์ ๋, ์ ๋๋ก ์ ๋ ฅ ๋์๋์ง๋ฅผ ํ์ํ๊ธฐ ์ํด `@blur`๋ฅผ ์ด์ฉํ ๊ฒ์ด์์.
๊ทธ๋ผ idHelthCheck()๋ฅผ ๋ง๋๋ฌ ๊ฐ๋ด์ผ ๊ฒ ์ด์! ๐
idHelthCheck() {
if (this.inputParam.username === undefined || this.inputParam.username === '' || this.inputParam.username === null) {
console.log("ID๊ฐ ์
๋ ฅ๋์ง ์์์ต๋๋ค!")
this.isIDNullCheck = true;
this.isIDSpaceCheck = false;
this.isIDKOREANCheck = false;
this.isIDSpecialCheck = false;
this.isIDGoodCheck = false;
this.isIDDupplicateCheck = false;
this.$refs.username.focus();
return false;
} else if (this.inputParam.username.replace(this.spaceCharacters, '') === "") {
console.log("ID์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์์ต๋๋ค!")
this.isIDSpaceCheck = true;
this.isIDNullCheck = false;
this.isIDKOREANCheck = false;
this.isIDSpecialCheck = false;
this.isIDGoodCheck = false;
this.isIDDupplicateCheck = false;
this.$refs.username.focus();
return false;
} else if (this.charKOREAN.exec(this.inputParam.username) !== null) {
this.isIDKOREANCheck = true;
this.isIDNullCheck = false;
this.isIDSpaceCheck = false;
this.isIDSpecialCheck = false;
this.isIDGoodCheck = false;
this.isIDDupplicateCheck = false;
this.$refs.username.focus();
return false;
} else if (this.specialCharacters.exec(this.inputParam.username) !== null) {
this.isIDSpecialCheck = true;
this.isIDKOREANCheck = false;
this.isIDNullCheck = false;
this.isIDSpaceCheck = false;
this.isIDGoodCheck = false;
this.isIDDupplicateCheck = false;
} else {
this.isIDKOREANCheck = false;
this.isIDNullCheck = false;
this.isIDSpaceCheck = false;
this.isIDSpecialCheck = false;
this.isIDDupplicateCheck = false;
this.isIDGoodCheck = true;
return true;
}// if (this.inputParam.userId.replace(pattern, '') === "") ๋
}, // idSpaceCheck() ๋
์ด Method๊ฐ ์คํ๋๋ฉด if๋ฌธ์ ํตํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ค์ํ๋ ๊ฒ์ด์์.
์ด if๋ฌธ์์๋ `InputParam` ๊ฐ์ฒด ์์ `username` ๋ณ์์ ๊ฐ์ด ๋น์ด์๋์ง๋ฅผ ๊ฒ์ฌํ๋ ๊ฒ์ด์์.
๋น์ด ์๋ค๋ฉด if๋ฌธ ์๋๋ก ๋ค์ด์ค๊ฒ ๋ ๊ฒ์ด๊ณ , ์ต์ด Console์ ID๊ฐ ์ ๋ ฅ๋์ง ์์๋ค๊ณ ์ถ๋ ฅํด ์ค ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค isIDNullCheck(ID๊ฐ Null์ธ์ง ํ์ธํ๋ ๋ณ์)๋ผ๋ ๋ณ์๋ฅผ `true`๋ก ๋ง๋ค๊ณ ,
isIDSpaceCheck(ID์ ๊ณต๋ฐฑ์ด ์
๋ ฅ๋์๋์ง ํ์ธํ๋ ๋ณ์),
isIDKOREANCheck(ID์ ํ๊ธ์ด ์
๋ ฅ ๋์๋์ง ํ์ธํ๋ ๋ณ์),
isIDSpecialCheck(ID์ ํน์๋ฌธ์๊ฐ ์
๋ ฅ๋์๋์ง ํ์ธํ๋ ๋ณ์),
isIDGoodCheck(ID ๊ณต๋ฐฑ, ๋ฏธ ์
๋ ฅ, ํ๊ธ ๋ฏธ ์
๋ ฅ, ํน์ ๋ฌธ์ ๋ฏธ ์
๋ ฅ ๊ฒ์ฌ๊ฐ ์๋ฃ ๋์์ ๋ ์ด์ฉ๋ ๋ณ์),
isIDDupplicateCheck(ID ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์๋ฃ ๋์๋์ง ํ์ธํ๋ ๋ณ์)๋ฅผ ๋ชจ๋ false๋ก ๋ง๋ค์ด ์ฃผ๋ ๊ฒ์ด์์.
์์ ๋ณ์ isIDNullCheck๊ฐ `true`๊ฐ ๋๋ฉด ์ด๋ค ์ผ์ด ๋ฐ์ํ ๊น์?
๋ฐ๋ก ์ฌ๊ธฐ 44๋ฒ์งธ ์ค์ `v-show`๊ฐ ๋์ํ๋ฉด์ ID ์ ๋ ฅ๋ ์์ ID๋ฅผ ์ ๋ ฅ ํด ์ฃผ์ธ์! ๋ผ๋ ๊ธ๊ท๊ฐ ๋ณด์ด๊ฒ ๋ ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ ๋ง์ด์์!
๋ง์ฝ ID ์ ๋ ฅ๋์ ๊ณต๋ฐฑ์ด ์ ๋ ฅ ๋์๋ค๊ณ ํ๋ฉด ์ด If๋ฌธ์ด ์๋ํ๊ฒ ๋ ๊ฒ์ด์์.
if๋ฌธ ์์ ๋ณด๋ฉด `InputParam` ๊ฐ์ฒด ์์ `username` ๋ณ์์์ ๊ฐ์ `replace()`๋ฅผ ํตํด์ ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ ๊ฐ์ ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ๊ทธ๊ฒ์ด ์ ๋ ฅ์ด ๋์ง ์์ ๊ฒ๊ณผ ๊ฐ๋ค๋ฉด?์ ๊ฒ์ฌํ๋ ๊ฒ์ด์์.
์ฆ, `sapceCharacters` ๊ฐ์ฒด์๋ ๊ณต๋ฐฑ(Space)๋ฅผ ํํํ๋ ์ ๊ท ํํ์์ด ๋ค์ด ์๋๋ฐ, ์ด ๊ฐ์ด `InputParam` ๊ฐ์ฒด ์์ `username` ๋ณ์์์ ์๋ค๋ฉด ๊ทธ๊ฒ์ `''` ์ฆ, ์๋ฌด๊ฒ๋ ์ ๋ ฅ๋์ง ์์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ๋ฒ๋ฆฌ๊ณ , ๊ทธ๊ฑธ ์๋ฌด๊ฒ๋ ์ ๋ ฅ๋์ง ์์๋์ง์ ๊ฐ๋๊ณ ๋ฌผ์ด๋ด์ ๋ง์ผ๋ฉด ์ด if๋ฌธ์ด ์คํ๋๊ฒ ํ ๊ฒ์ด์์.
if๋ฌธ ์์ ๋ค์ด์ค๋ฉด ์ต์ด ID์ ๊ณต๋ฐฑ ๋ฌธ์๊ฐ ์๋ค๊ณ Console์ ์ถ๋ ฅ์ ํ๊ณ ,
isIdSpaceCheck(ID์ ๊ณต๋ฐฑ์ด ์ ๋ ฅ๋์๋์ง ํ์ธํ๋ ๋ณ์)๋ฅผ `true`๋ก ๋ฐ๊ฟ์ค ๋ค ๋๋จธ์ง ๋ณ์๋ ๋ชจ๋ `false`๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ๋ค์ ์ด ๊ณณ์์ 42๋ฒ์งธ ์ค์ `v-show`๊ฐ ๋์ํ๋ฉด์ ๊ณต๋ฐฑ์ ์ ๋ ฅํ ์ ์์ต๋๋ค!๋ฅผ ์ถ๋ ฅํ๊ฒ ๋ ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ์!
๊ทธ ๋ค์์๋ ID์ ํ๊ธ์ด ์ ๋ ฅ๋์๋์ง๋ฅผ ํ์ธํ๋ if๋ฌธ์ด ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ๊ฒ์ด์์.
์ด๋ฒ์๋ `charKOREAN`์ ์ฃผ๋ชฉํด์ผ ํ๋ ๊ฒ์ด์์. ์ด ๊ณณ์๋ ํ๊ธ์ ํด๋นํ๋ ์ ๊ท ํํ์์ด ๋ค์ด ์๋๋ฐ,
idHelthCheck 538๋ฒ์งธ ์ค์์ ์ด ๋ณ์์์ ๊ฐ์์ `ํจํด ๊ฐ์ฒด๊ฐ ์กด์ฌํ๋ ๊ฐ์ ๋ฆฌํด (์ถ์ถ)`ํ์ฌ `InputParam` ๊ฐ์ฒด ์์ `username` ๋ณ์์์ ๊ฐ์ด Null์ด ์๋๋ผ๋ฉด? ์ฆ, ๋น์ด์์ง ์๋ค๋ฉด?์ ํ์ธํ๋ ๊ฒ์ด์์.
if๋ฌธ์ ๋ค์ด์ค๊ฒ ๋๋ฉด isIDKOREANCheck(ID์ ํ๊ธ์ด ์ ๋ ฅ ๋์๋์ง ํ์ธํ๋ ๋ณ์) ๋ณ์๋ฅผ `true`๋ก ๋ฐ๊พธ๊ณ , 547๋ฒ์งธ ์ค์ ์๊ฑฐํด์ ID ์ ๋ ฅ๋์ด ํ์๊ฐ ๋๋ฉด์ ๋ค๋ฅธ ๊ณณ์ ์ ๋ ฅ์ด ๋์ง ์๊ฒ ํด ์ฃผ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด ๊ณณ 46๋ฒ์งธ ์ค์ `v-show`๋ก ์ธํด์ ํ๊ธ์ ์ ๋ ฅํ ์ ์์ต๋๋ค!๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ์!
์ด์ฉ์๊ฐ ์ ๋ ฅํ ID๊ฐ ๊ฐ๋ฐ์์ ์๋๋๋ก ์ ์ ๋ ฅ์ด ๋์๋ค๋ฉด If๋ฌธ์ ๊ฑธ๋ฆฌ์ง ์๊ณ , ์ฌ๊ธฐ else ๋ฌธ ์์ผ๋ก ๋ค์ด์ค๊ฒ ๋ ๊ฒ์ด์์. ๊ทธ๋ผ IsIDGoodCheck(ID ๊ณต๋ฐฑ, ๋ฏธ ์ ๋ ฅ, ํ๊ธ ๋ฏธ ์ ๋ ฅ, ํน์ ๋ฌธ์ ๋ฏธ ์ ๋ ฅ ๊ฒ์ฌ๊ฐ ์๋ฃ ๋์์ ๋ ์ด์ฉ๋ ๋ณ์)๋ณ์๋ง `true`๋ก ๋ฐ๊ฟ์ฃผ๊ณ , ๋๋จธ์ง ๋ณ์๋ ๋ชจ๋ `false`๋ก ๋ฐ๊ฟ์ฃผ๋ ๊ฒ์ด์์.
๐ก์ฌ๊ธฐ์ ์ ๊น!
์ isIDDupplicateCheck(ID ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ์๋ฃ ๋์๋์ง ํ์ธํ๋ ๋ณ์)๋ ์? `false`๋ก ๊ณ์ ๋ง๋ค์ด ์ค๊น?
์์ ๋ณ์๋ ID ์ค๋ณต ํ์ธ Button์ ๋๋ฌ Back End์์ ์ค๋ณต ID๊ฐ ์๋์ง ๊ฒ์ฌ๋ฅผ ํ๊ณ , ์ค๋ณต๋ ๊ฐ์ด ์์ ๊ฒฝ์ฐ `true`๋ฅผ ๋ง๋ค์ด ์ค๋ค.
์์ ์ ํจ์ฑ ๊ฒ์ฌ์์ `true`๊ฐ ๋์ด ๋ฒ๋ฆฌ๋ฉด ์ค๋ณต ๊ฒ์ฌ ์์ฒด๊ฐ ๋ฌด์๋ฏธ ํด์ง๊ธฐ ๋๋ฌธ์ ๊ณ์ `false`๋ก ํด ์ฃผ๋ ๊ฒ์ด๋ค.
๊ทธ๋ผ ์ด ๊ณณ 50๋ฒ์งธ ์ค์ `v-show`๋ก ์ธํด์ ์ ์ ์ ๋๋ค! ์ค๋ณต ํ์ธ์ ํด ์ฃผ์ธ์!๊ฐ ์ถ๋ ฅ๋ ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ์!
๊ทธ๋ผ ๋ง์ฝ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์คํจ ํ์ ๋, ์ค๋ณต ํ์ธ Button์ ๋๋ฅด๋ฉด ์ด๋ป๊ฒ ๋ ๊น์?
๋ฐ๋ก ์ด๋ ๊ฒ `Modal` ์ฐฝ์ด ๋จ๋ฉด์ ์ค๋ณต ํ์ธ ์์ฒด๊ฐ ๋์ง ์๋๋ก ์ฒ๋ฆฌํ ๊ฒ์ด์์.
๊ทธ๋ผ ์ค๋ณต ํ์ธ Button์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์์ ๋ณผ ๊ฒ์ด์์.
40๋ฒ์งธ ์ค์ ์ค๋ณต ํ์ธ Button์ Click Event๊ฐ ๋ฐ์ํ๊ฒ ๋๋ฉด `idCheck()`๊ฐ ํธ์ถ ๋๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ผ๋ฅธ `idCheck()`๋ฅผ ๋ง๋๋ฌ ๊ฐ๋ด์ผ ๊ฒ ์ด์! ๐
idCheck() {
console.log("์
๋ ฅ๋ ์ด์ฉ์๊ฐ ์ด์ฉํ๊ณ ์ ํ๋ ID ๊ฐ : " + this.inputParam.username);
if (this.isIDKOREANCheck) {
this.showKOREAN = true;
this.$refs.username.focus();
return false;
} else if (this.isIDNullCheck) {
this.nullShow = true;
this.$refs.username.focus();
return false;
} else if (this.isIDSpaceCheck){
this.spaceShow = true;
this.$refs.username.focus();
return false;
} else if (this.isIDSpecialCheck) {
this.spacialShow = true;
this.$refs.username.focus();
return false;
} // validation if ๋
duplicateUserIdCheck(this.inputParam).then(response => {
console.log("ID ์ค๋ณต ์์ฒญ ๋ณด๋ธ ๋ค Back End์์ ๋์์จ ์๋ต์ ํ์ธ ํฉ๋๋ค! HTTP STATUS CODE ๊ฐ : " + response.data.statusCode);
console.log("HTTP STATUS CODE ๊ฐ : " + response.data.statusCode);
console.log("DATA ๊ฐ : " + response.data.data);
console.log("ํ๊ธ ์๋ต ๊ฐ : " + response.data.messageKo);
console.log("์์ด ์๋ต ๊ฐ : " + response.data.messageEn);
if (response.data.statusCode === 409 || response.data.messageEn === "conflict") {
console.log("์ด๋ฏธ ๋ฑ๋ก๋ ID ์
๋๋ค!");
this.$refs.username.focus();
this.equalShow = true;
this.checkShow = false;
// ์ต์ข
'ํ์ ๊ฐ์
' ๋ฒํผ์ ๋๋ ์ ๋, ์ค๋ณต ์ฒดํฌ๋ฅผ ์ํ๋ฉด ๊ฐ์
์ ๋ชปํ๊ฒ ๋ง๊ธฐ ์ํ ๋ณ์๋ฅผ false๋ก ๋ฐ๊ฟ ํ์ ๊ฐ์
์ด ์ ๋๊ฒ ํ๋ค.
this.isIDDupplicateCheck = false;
return false;
} else {
console.log("์ด์ฉ ๊ฐ๋ฅํ ID ์
๋๋ค!")
this.checkShow = true;
this.equalShow = false;
// ์ต์ข
'ํ์ ๊ฐ์
' ๋ฒํผ์ ๋๋ ์ ๋, ์ค๋ณต ์ฒดํฌ๋ฅผ ์ํ๋ฉด ๊ฐ์
์ ๋ชปํ๊ฒ ๋ง๊ธฐ ์ํ ๋ณ์๋ฅผ true๋ก ๋ฐ๊ฟ ํ์ ๊ฐ์
์ด ๋๊ฒ ํ๋ค.
this.isIDDupplicateCheck = true;
// ์ค๋ณต ํ์ธ์ด ์๋ฃ๋ ๋ค '์ค๋ณต ํ์ธ' ํด๋ฌ๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ์ง์ฐ๊ธฐ ์ํด false๋ก ๋ณ๊ฒฝ
this.isIDGoodCheck = false;
return true;
} // if (response.data.statusCode === 409 || response.data.messageEn === "conflict") - else ๋
})
}, // idCheck() ๋
`idCheck()`๋ ์ฐธ ๊ธธ๊ฒ ๊ตฌํ์ด ๋์ด ์๋ ๊ฒ์ด์์.
๊ทธ๋ผ ๋ ํ๋ํ๋ ๋ถ์ ํด ๋ณผ๊ฒ์!
์ต์ด `idCheck()`๊ฐ ํธ์ถ๋๋ฉด ์ด์ฉ์๊ฐ ID ์ ๋ ฅ๋์ ์ด๋ค ๊ฐ์ ๋ฃ์๋์ง console์ ์ถ๋ ฅํ๊ณ , 443๋ฒ์งธ ์ค์ if๋ฌธ์ ๋ง๋๋๋ฐ, ์ ๋ ฅ๊ฐ์ `ํ๊ธ`์ด ์ ๋ ฅ ๋์๋์ง ํ์ธ ํ๋ ๊ฒ์ด์์.
ํ๊ธ์ด ์ ๋ ฅ ๋์๋ค๋ฉด `showKOREAN` ๋ณ์๊ฐ `true`๋ก ๋ฐ๋๊ฒ ๋๋๋ฐ, ๊ทธ๋ผ ์ด๋ค์ผ์ด ์ผ์ด๋ ๊น์?
๋ฐ๋ก ์ด ๊ณณ `Modal` ์ฐฝ์ด ๋ฐ ์ ์๋๋ก ํ๊ธฐ ์ํด์ ํด๋น ๋ณ์๋ฅผ ์ฌ์ฉํ ๊ฒ์ด์์.
228๋ฒ์งธ ์ค์ `v-show`์ ๋ณ์์ธ `showKOREAN`์ด `true` ๊ฐ์ด ๋๋ฉด ์ด `Modal` ์ฐฝ์ `v-show`๋ก ์ธํด ๋ณด์ด๊ฒ ๋๋ ๊ฒ์ด์์.
`Modal`์ฐฝ์๋ 'ํ๊ธ์ ์ ๋ ฅํ ์ ์์ต๋๋ค!'๋ผ๋ ๋ด์ฉ์ ๊ธ์ด ๋ณด์ด๋ฉด์ ๋จ๊ฒ ๋๋ ๊ฒ์ด์์. ํ๋ฒ ๋ณผ๊น์?
๋ฐ๋ก ์ด๋ ๊ฒ์!
๋ค์ ์ด๊ณณ์ผ๋ก ๋์์์ 446๋ฒ์งธ ์ค์ `$refs.user.name.focus()`๋ก ์ธํด ID ์ ๋ ฅ์นธ์ด ํ์๊ฐ ๋๊ฒ ๋๊ณ , ๋ค๋ฅธ ๊ณณ์ ์ ํํด๋ ์ด๋ค ๊ฐ์ ๋ฃ์์๋ ์๋ ์ํ๋ก ๋ฐ๋๊ฒ ๋๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด ์ํ์์ 'ํ์ธ' ๋ฒํผ์ ๋๋ฅธ๋ค๋ฉด ์ด๋ค์ผ์ด ์ผ์ด๋๊ฒ ๋ ๊น์?
237๋ฒ์งธ ์ค์ 'ํ์ธ' Button์ด ์๋ ๊ฒ์ด์์. ์ฌ๊ธฐ `@click`์ผ๋ก ์ธํด Click Event๊ฐ ๋ฐ์ํ๊ฒ๋๋ฉด `showKOREAN` ๋ณ์๊ฐ `false`๋ก ๋ฐ๋๊ฒ ๋๊ณ , 228๋ฒ์งธ ์ค์ `v-show`๋ `true`์ผ ๋๋ง ๋์ํ๊ธฐ ๋๋ฌธ์ ๋ง์น `Modal` ์ฐฝ์ด ์ฌ๋ผ์ง๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋๋ ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ์!
์ฃผ๋ํ๋์ null ํ์ธ(449 ~ 454), ๊ณต๋ฐฑ ํ์ธ(455 ~ 460), ํน์ ๋ฌธ์ ์ ๋ ฅ ํ์ธ(461 ~ 466)์ ๋์ผํ๊ฒ ๋ง๋ค์ด ํด๋น If๋ฌธ์ ์ง์ ํ๊ฒ ๋๋ฉด ํด๋น ๋ด์ฉ์ ๋์๋๋ `Modal` ์ฐฝ์ด ๋จ๋๋ก ๋ง๋ค์ด ์ค ๊ฒ์ด์์.
์ฌ๊ธฐ์ ์ฐ๋ฆฌ๊ฐ ์ฃผ๋ชฉํด์ผ ๋ ๊ฒ์ ๊ทธ ์ด๋์๋ `Axios`๋ฅผ ์ด์ฉํด์ Back End์ `Request`๋ฅผ ๋์ง๋ ๊ณณ์ด ์๋ค๋ ์ ์ด์์.
์์ ๊ฐ์ ์ ํจ์ฑ ๊ฒ์ฌ์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ฉด ์ ๋๋ก Back End์ `Request`๋ฅผ ๋์ง์ง ๋ชปํ๊ฒ ๊ตฌํ์ ํด ๋์ ๊ฒ์ด์์.
์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๋ชจ๋ ํต๊ณผํ ID ์ ๋ ฅ๊ฐ์ ๋ณธ๊ฒฉ์ ์ผ๋ก `Axois`๋ฅผ ํตํด ํด๋น ID๊ฐ `Data Base`์ ์กด์ฌํ๋์ง ๊ฒ์ฌํ ์ ์๋ Logic์ ํ ์ ์๋ ๊ฒ์ด์์.
๋จผ์ ์ฃผ๋ํ๋์ ์ด ๊ณณ์ `Axios`๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ๋ฐ๋ก ์ ์ํด ๋ `Java Script` File์ Method๋ค์ ์ ์ ํด ๋๊ณ , ์ด๋ ๊ฒ `import`ํด์ ์ด์ฉํ ์ ์๊ฒ ํด ๋ ๊ฒ์ด์์.
469๋ฒ์งธ ์ค `duplicateUserIdCheck()`๊ฐ ํธ์ถ์ด ๋๋ฉด ์๋ Method๊ฐ ํธ์ถ ๋๋ ๊ฒ์ด์์.
3๋ฒ์งธ ์ค์ `duplicateUserIDCheck()`์๋ ์ด์ฉ์๊ฐ ํ์ ๊ฐ์ ์ ์ํด ์ ๋ ฅํ๋ ๋ชจ๋ ๋ด์ฉ์ด ๋ค์ด ์๋ `inputParam` ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ๋ฐ๋ ๊ฒ์ด์์.
user.js์ 8๋ฒ์งธ์ค์ ์ ์๋ URI๋ฅผ ํตํด Back End์ ํด๋น `Controller` Method๊ฐ ๋์ํ๊ฒ ๋ ๊ฒ์ด๊ณ , `HTTP Method`๋ `POST`๋ก ํ์ฌ ์ด์ฉ์๊ฐ ์ ๋ ฅํ ๊ฐ์ `์์ฒญ(Request)`๋ก ๋์ง๊ฒ ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ๋ค์ ์ด ๊ณณ์ผ๋ก ๋์์์ Back End์์ ๋์์จ `์๋ต(Response)`๊ฐ์ `response`์ ๋ด๊ธฐ๊ฒ ๋๊ณ , ํด๋น Method์ Body ๋ถ๊ฐ ๋์๋๊ฒ ๋๋ ๊ฒ์ด์์.
์ต์ด ์ฃผ๋ํ๋์ `์๋ต(Response)`๋ก ๋ค์ด์จ ๊ฐ๋ค์ ๋ชจ๋ ์ถ๋ ฅํด ์ฃผ์๊ณ ,
๐ก ์ฌ๊ธฐ์ ์ ๊น!
์ฃผ๋ํ๋์ด `SignUp.vue - idCheck() 471 ~ 475`์ฒ๋ผ ๊ฐ์ฒด๋ค์ ์์ฑํ๋ฉด์ ์ถ๋ ฅํ๋ ์ด์ ์ ๋ํด์๋ `์ด ๊ณณ`์ ํ์ธํ์๋ฉด ์์ค ์ ์๋๋ก ์ค๋น ํด ๋์์ต๋๋ค!
477๋ฒ์งธ ์ค์ Back End์์ `์๋ต(Response)` ๋ฐ์ ๊ฐ ์ค `statusCode(HTTP Status Code) `์ ๋ณ์์ ๊ฐ์ด `409` ๋ผ๋ฉด ํน์ `messageEn(Status Message English)` ๋ณ์์ ๊ฐ์ด `conflict`๋ผ๋ฉด if๋ฌธ์ด ๋์ํ๋๋ก ํ ๊ฒ์ด์์.
์ต์ด 480๋ฒ์งธ ์ค์ ์๊ฑฐํ์ฌ `$refs.user.name.focus()`๋ก ์ธํด ID ์ ๋ ฅ์นธ์ด ํ์๊ฐ ๋๊ฒ ๋๊ณ , ๋ค๋ฅธ ๊ณณ์ ์ ํํด๋ ์ด๋ค ๊ฐ์ ๋ฃ์์๋ ์๋ ์ํ๋ก ๋ฐ๋๊ฒ ๋๋ ๊ฒ์ด์์.
๊ทธ๋ฐ ๋ค์ `equalShow` ๋ณ์์ ๊ฐ์ `true`๋ก ๋ฐ๊พธ๊ณ , `checkShow` ๋ณ์ ๊ฐ์ `false`๋ก ๋ฐ๊ฟ์ฃผ๋๋ฐ, ์ด๋ฒ์๋ ๋ ์ด๋ค ํ์๋ฅผ ํ๊ธฐ ์ํด ์ด๋ ๊ฒ ํ์๊น์?
๋ฐ๋ก ์ฌ๊ธฐ `Modal`์ฐฝ ๋๊ฐ๋ฅผ Hanling ํ๊ธฐ ์ํด ์์ ๊ฐ์ด ํด ์ค ๊ฒ์ด์์.
์ต์ด `checkShow`๋ `false`๋ก ์ ๋ ฅ ํด ์ฃผ์๊ธฐ ๋๋ฌธ์ ์ 161 ~ 173๋ฒ์งธ ์ค์ ์์ฑํ `Modal`์ฐฝ์ ๋์ํ์ง ์์ง๋ง, `equalShow`๋ `true`๋ก ํด์ฃผ์๊ธฐ ๋๋ฌธ์ 177 ~ 189๋ฒ์งธ ์ค์ ์์ฑํ `Modal`์ฐฝ์ ๋์ํ๊ฒ ๋๋ ๊ฒ์ด์์.
๋ฐ๋ก 177๋ฒ์งธ ์ค์ `v-show`์ ๋ณ์๊ฐ `eqaulShow`๊ฐ `true`์ด๋๊น ๋์ํ๊ฒ ๋๋ ๊ฒ์ด์์.
ํ์ฌ `Data Base`์๋ ์ด๋ ๊ฒ 3๊ฐ์ ์ด์ฉ์ ์ ๋ณด๊ฐ ์ ์ฅ ๋์ด ์๋๋ฐ, Test๋ฅผ ์ํด `junyharang`์ผ๋ก `ID ์ค๋ณต ํ์ธ` ์ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ `Data Base`์ ์กด์ฌํ๋ ๊ฐ์ด ์์ผ๋ฉด ์ด๋ ๊ฒ ๋์๋๋๋ก ์์ฑํ ๊ฒ์ด์์.
๊ทธ๋ผ `Data Base`์ ์๋ ๊ฐ์ ์ ๋ ฅํ๊ณ , `ID ์ค๋ณต ํ์ธ`์ ํ๋ฉด ์ด๋ป๊ฒ ๋์ํ ๊น์?
๋ค์ ์ด ๊ณณ์ผ๋ก ๋์์์ 490๋ฒ์งธ else ๋ฌธ ์์ Logic์ด ๋์ํ๊ฒ ๋ ๊ฒ์ด์์.
์ต์ด Console์ '์ด์ฉ ๊ฐ๋ฅํ ID ์ ๋๋ค!'๊ฐ ์ถ๋ ฅ์ด ๋ ๊ฒ์ด๊ณ , 493, 494๋ฒ์งธ ์ค์ ์๊ฑฐํด์ `checkShow` ๋ณ์๋ `ture`๊ฐ ๋ ๊ฒ์ด๊ณ , `equalShow`๋ `false`๊ฐ ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์๊น์๋ ๋ฐ๋๋ก `Modal` ์ฐฝ์ด ๋์ํ๊ฒ ๋ ๊ฒ์ด์์.
๋ฐ๋ก 161 ~ 173๋ฒ์งธ ์ค์ `Modal` ์ฐฝ์ด ๋์ํ๊ฒ ๋ ๊ฒ์ด๊ณ , '์ฌ์ฉํ ๊ฐ๋ฅํ ๊ฐ ์ ๋๋ค!'๋ผ๋ ๋ฌธ๊ตฌ๋ฅผ ๋์ด์ค ๊ฒ์ด์์.
๋ฐ๋ก ์ด๋ ๊ฒ์!
๊ณ์ํด์ `idCheck()`์ 497๋ฒ์งธ ์ค์ ๋ถ์ํด ๋ณผ ๊ฒ์ด์์.
`isDupplicateCheck`๋ฅผ `true`๋ก ๋ณ๊ฒฝ ํด ์ฃผ๊ณ ์๋ ๊ฒ์ด์์.
์ด๋ ๊ฒ ํด ์ฃผ๋ ์ด์ ๋ ์ด์ฉ์๊ฐ ๋ชจ๋ ์ ๋ ฅ๊ฐ์ ์ ๋ ฅํ๊ณ , ์ค๋ณต ์ฒดํฌ๋ฅผ ๊ฐ๊ฐ ํด์ผ ํ๋ ํญ๋ชฉ๋ค์ด ์๋๋ฐ, ์ค๋ณต ์ฒดํฌ๋ฅผ ์ํ๊ณ , ํ์ ๊ฐ์ Button์ ๋๋ฅด๊ฒ ๋๋ฉด ์ค๋ณต ์ฒดํฌ๋ฅผ ํ๋ผ๊ณ ์ ๋ํ๊ธฐ ์ํด ์์ฑ ํด ์ค ๊ฒ์ด์์.
์ด ๋ถ๋ถ์ ๋ํ ์์ธ ๋ด์ฉ์ ์๋ ํ์ ๊ฐ์ Logic์ ๋ถ์ํ๋ฉด์ ์์ฑํ๋๋ก ํ ๊ฒ์ด์์.
๊ทธ ๋ค์ 500๋ฒ์งธ ์ค์ `isIDGoodCheck`๋ฅผ `true`๋ก ๋ณ๊ฒฝํ๋๋ฐ, ์ด๊ฑธ `true`๋ก ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด
์์ ๊ทธ๋ฆผ ์ค 50๋ฒ์งธ ์ค์ `V-show`๋ก ์ธํด์ '์ ์์ ๋๋ค! ์ค๋ณต ํ์ธ์ ํด ์ฃผ์ธ์!'๊ฐ ๊ณ์ ์์ ๋นจ๊ฐ ๊ธ์จ๋ก ์ถ๋ ฅ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด์์.
์ด ์ธ์ ์ฃผ๋ํ๋์ ์๋ ํ์ ๊ฐ์ ์ฐฝ๊ณผ ๊ฐ์ด ๋น๋ฐ๋ฒํธ, ๋ณ๋ช (Nick Name), E-mail ์ฃผ์, ํธ๋ํฐ ๋ฒํธ์ ๋ํด ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ํ๊ณ , ์ค๋ณต ๊ฐ์ด ์๋์ง ํ์ธํ๋๋ก ๊ตฌํํ ๊ฒ์ด์์. ์์ธํ ๋ด์ฉ์ ID์ ๋ํ ์์ ๋ด์ฉ๊ณผ ํฌ๊ฒ ๋ค๋ฅผ ๊ฒ์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ์์ ํ์ง ์๊ณ , ๊ถ๊ธํ์ ๋ถ๋ค์ ์ฃผ๋ํ๋์ Git Hub์์ ํด๋น Code๋ฅผ ํ์ธํ์ค ์ ์์ต๋๋ค!
๐ฝ ํ์ ๊ฐ์ ํ๊ธฐ
์ด์ฉ์๊ฐ ๋ชจ๋ ์ ๋ ฅ๊ฐ์ ๋ค ์ ๋ ฅํ๊ณ , ์ฒ ๋์ฒ ๋ฏธํ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ๋ชจ๋ ํต๊ณผํ ๋ค์ ๋ณธ๊ฒฉ์ ์ผ๋ก ํ์ ๊ฐ์ Button์ ๋๋ฅด๊ฒ ๋๋ฉด ์ด๋ค์ผ์ด ๋ฐ์ํ๊ฒ ๋ ๊น์?
ํ์ ๊ฐ์ Button์ ๋๋ฅด๊ฒ ๋๋ฉด ์์ ๊ทธ๋ฆผ์์ 157๋ฒ์งธ <a> Tag๊ฐ ๋์ํ๊ฒ ๋๋๋ฐ, `@click`์ผ๋ก ์ธํด Click Event๊ฐ ๋ฐ์๋๋ฉด `goSignup()`์ด ํธ์ถ๋๊ฒ ๋๋ ๊ฒ์ด์์.
๊ทธ๋ผ `goSignup()`์ ๋ง๋๋ฌ ๊ฐ๋ด์ผ ๊ฒ ์ด์! ๐
์ต์ด ์ด Method๊ฐ ํธ์ถ๋๋ฉด 823๋ฒ์งธ if๋ฌธ์ด ๋์ํ๊ฒ ๋๋๋ฐ, ID ์ ๋ ฅ์ ๋ํด ์ค๋ช ํ ๊ณณ์์ `isDupplicateCheck`๋ฅผ `true`๋ก ๋ณ๊ฒฝํ ๋ด์ฉ์ ์ด ๊ณณ์์ ๋ถ์ ํด ๋ณด๊ฒ ๋ค๊ณ ํ ์ด์ ๊ฐ ๋ฐ๋ก ์ฌ๊ธฐ์ ์๋ ๊ฒ์ด์์.
ID, ๋ณ๋ช , E-mail ์ฃผ์, ๋น๋ฐ๋ฒํธ, ํธ๋ํฐ ๋ฒํธ์ ๋ํ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ๋๋ผ๋ ๋๋์ง ์์๋ค๋ฉด ํด๋น ๋ณ์ ์ค ์ด๋ค ๊ฒ์ `false`๋ฅผ ๊ฐ๊ณ ์๊ฒ ๋๋ ๊ฒ์ด์์.
๊ทธ๋ ๋ค๋ฉด `else` ๋ฌธ์ด ์๋ ๋๊ฒ ๋๊ณ , ๊ฐ ํญ๋ชฉ์ด `false`์ธ ๊ฒ์ ๋ฐ๋ผ if๋ฌธ์ด ๋ค์ ๋์ํ๊ฒ ๋์ ๊ฒฝ๊ณ ์ฐฝ์ด ๋จ๋ฉด์ ์ค๋ณต ์ฒดํฌ๋ฅผ ํด๋ฌ๋ผ๊ณ ํ๊ณ , ๋๋๋ฒ๋ฆฌ๋ ๊ฒ์ด์์.
์ด์ฉ์๊ฐ ๋ชจ๋ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ค๋ณต ์ฒดํฌ๋ฅผ ํ๋ค๋ฉด `else`๊ฐ ์๋ `if`๋ฌธ์ ๋ค์ด๊ฐ๊ฒ ๋ ๊ฒ์ด์์.
825๋ฒ์งธ ์ค์ ๋ณด๋ฉด `Axios`๋ฅผ ์ด์ฉํ๊ธฐ ์ํ Method `apiSignUp`์ ํธ์ถํ๋ ๊ฒ์ด์์.
๊ทธ๋ผ ์ด ์น๊ตฌ๊ฐ ๋์ํ๊ฒ ๋๋๋ฐ, ์ด ์น๊ตฌ๋ ๋งค๊ฐ ๋ณ์๋ก ์ด์ฉ `inputParam` ๊ฐ์ฒด(Object)์์ ์๋ ๋ชจ๋ ๋ณ์๋ฅผ ์ ๋ฌ ๋ฐ๋ ๊ฒ์ด์์.
`inputParam`๊ฐ์ฒด ์์๋ ์ด์ฉ์๊ฐ ์ ๋ ฅํ์ ID, ๋น๋ฐ๋ฒํธ, ๋ณ๋ช , E-mail์ฃผ์, ํธ๋ํฐ ๋ฒํธ๊ฐ ๋ค์ด ์๊ฒ ๋๋ ๊ฒ์ด์์.
์ต์ด `apiSignup()`์ด ๋์ํ๊ฒ ๋๋ฉด console์ 48, 49๋ฒ์งธ์ ํด๋นํ๋ ๋ด์ฉ์ ์ถ๋ ฅ ํด ์ฃผ๊ณ , `Back End`์ URI์ ๋ง๋ `Controller` Method๋ฅผ ํธ์ถํ์ฌ `HTTP Method`๋ `POST`๋ก `์์ฒญ(Request)`์ ๋ณด๋ด๋๋ฐ, ์ด์ฉ์๊ฐ ์ ๋ ฅํ ํ์ ๊ฐ์ ๋ด์ฉ์ ๋ชจ๋ ์ ๋ฌํ๋ ๊ฒ์ด์์.
๋ค์ ์ด ๊ณณ์ผ๋ก ๋์์ `Back End`์๊ฒ ๋ฐ์ `์๋ต(Response)`์ ๋ํ Data๊ฐ 824๋ฒ์งธ ์ค `response`์ ๋ด๊ธฐ๊ฒ ๋๊ณ , 825๋ฒ์งธ ์ค์ `์๋ต(Response)` Data ์ค `statusCode(HTTP Status Code Number)`๊ฐ์ด ๋ฌด์์ธ์ง Console์ ์ฐ์ด ์ค ๋ค 827๋ฒ์งธ ์ค์ ํด๋น ๊ฐ์ด 200๊ณผ ๊ฐ๋ค๋ฉด if๋ฌธ์ด ๋์ํ๊ฒ ํด ์ค ๊ฒ์ด์์.
์ต์ด ํด๋น If๋ฌธ ์์ ๋ค์ด์ค๊ฒ ๋๋ฉด ํ์ ๊ฐ์ ์ด ์ ์์ ์ผ๋ก ์๋ฃ๊ฐ ๋์๊ณ , `Data Base`์ ์ด์ฉ์๊ฐ ์ ๋ ฅํ ๋ด์ฉ๋ค์ด ์ ์ฅ์ด ๋์๊ธฐ ๋๋ฌธ์ `Router`๋ฅผ ์ด์ฉํด์ `Main Page`๊ฐ `Re Rendering` ๋๊ฒ ํด์ฃผ์ด ์ด์ฉ์๊ฐ Main Page๋ก ์ด๋ํ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํด ์ฃผ์๊ณ , `์๋ต(Response)` Data ์ค `statusCode(HTTP Status Code Number)`๊ฐ์ด 200์ด ์๋๋ผ๋ฉด ๊ฒฝ๊ณ ์ฐฝ์ ๋์ 'ํ์ ๊ฐ์ ์ด ์คํจ ํ์ต๋๋ค'๋ฅผ ์๋ ค์ฃผ๊ฒ ํ ๊ฒ์ด์์.๋ง์ฝ ์ด๋ค `Error`์ ๋ฐ์์ผ๋ก `catch`๋ฌธ์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด ํด๋น `Error`๋ฅผ Console์ ์ฐ๊ฒ ํ๊ณ , ๊ฒฝ๊ณ ์ฐฝ์ ๋์ 'ํ์ ๊ฐ์ ์คํจ ํ์์ต๋๋ค!'๋ฅผ ์๋ ค ์ฃผ๋๋ก ํ ๊ฒ์ด์์.
์ง์! ๐
์ด๋ ๊ฒ ํ์ ๊ฐ์ ์ด ์๋ฃ ๋์์ด์!
์ด์ `Login` ๊ธฐ๋ฅ์ด ๊ตฌํ์ด ๋๋ฉด ํ์ ๊ฐ์ ์ด ์๋ฃ๋๋ฉด Main Page๊ฐ ์๋ `Login` Page๋ก ์ด๋ํ๊ฒ Refectoring ํด ๋ณผ ๊ฒ์ด์์.