๋ฆฌ๋ ์ค์ ๋ํ ๋งค์ฐ ์ด๋ณด์ ์ธ ๊ธ์ด๋ฏ๋ก(์ ๊ฐ ๋ฆฌ๋ ์ค ์ด๋ณด์ด๊ธฐ์ ใ ใ ) ์๋ฌ๋ ๊ฐ๋ฐ์๋ถ๋ค์๊ฒ ๋งค์ฐ ์ฌ์ด ๊ธ์ผ ์๋ ์์ต๋๋ค. ํ๋ฆฐ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ธ์ ๋ ์ง ์ง์ ํด์ฃผ์ธ์ :) '๋ฆฌ๋ ์ค ์ปค๋'๊ณผ '์ปค๋'์ ํผ์ฉํด์ ์ฌ์ฉํ์์ง๋ง ๋์ด ๊ฐ๋ค๊ณ ๋ณด์ ๋ ๋ฌด๋ฐฉํฉ๋๋ค. ๋ง์ ์ฌ๋๋ค์ด ์ด์์ฒด์ ์ ์ปค๋์ ํฐ ์๋ฏธ ์ฐจ์ด๋ฅผ ๋์ง ์๊ณ ์ฌ์ฉํฉ๋๋ค. ์ ๋ํ ์ปค๋์ ๊ทธ๋ฅ ์ด์์ฒด์ ๋ผ ์๊ฐํ๊ณ ๋์ ํผ์ฉํด์ ์ฌ์ฉํ์ต๋๋ค. ํ์ง๋ง ์๋ฏธ๊ฐ ๊ฐ๋ค๋ฉด ๊ตณ์ด ์ด๋ฆ์ ๋ค๋ฅด๊ฒ ํด์ ๋ถ๋ฅผ ํ์๊ฐ ์์์ ๊ฒ์ ๋๋ค. # ์ปดํจํฐ์์ ์ปค๋๊น์ง ์ปดํจํฐ๋ ํฌ๊ฒ ํ๋์จ์ด ์ ์ํํธ์จ์ด ๋ก ๋๋ฉ๋๋ค. ์ด ๋์ ์ปดํจํฐ์ ๋ํ ์ง์์ด ์์ด๋ ์ฝ๊ฒ ๊ตฌ๋ณํ์ค ์ ์์ ๊ฒ์ ๋๋ค. ํ๋์จ์ด๋ ๋์ ๋ณด์ด๊ณ , ์์ผ๋ก ๋ง์ง์ ์๋ ๊ฒ๋ค ์๋ฅผ ๋ค๋ฉด ๋ชจ๋ํฐ, ๋ฐ์คํฌํฑ, CPU ๋ฑ์ด ๋ ์..
ํ์ด์ฌ์ sort() ํจ์๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ฃผ๋ ํจ์์ ๋๋ค. ๋ฌธ์์ด ๋ํ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ์ด ๋ฉ๋๋ค. sort(reverse=True) ๋๋ reverse()๋ฅผ ์ด์ฉํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก๋ ๊ตฌํ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด ๊ธ์์๋ key ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ sort()์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. key ๋งค๊ฐ๋ณ์๋ฅผ ๊ฐ์ง๋ sort() ํจ์๋ key ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋๊ณ ๊ธฐ๋ณธ๊ฐ์ ์ค๋ฆ์ฐจ์์ ๋๋ค. ๋ํ lambda์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ฐฑ์ค 1181๋ฒ ๋ฌธ์ ๋ฅผ ์์๋ก ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ์ด ๋ฌธ์ ๊ฐ์ ๊ฒฝ์ฐ sort(key)๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ ๊ตฌํ ์ ์์ต๋๋ค. data_list = ['but','i','wont','hesitate','no','more','no','more','it','cannot','wait','im','yo..
ํ์ด์ฌ์ collections ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๊ทธ ์ค ๋ง์ด ์ฌ์ฉ๋๋ deque์ Counter์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ํ์ด์ฌ์์ ํ๋ฅผ ๊ตฌํํ๋๋ฐ ์์ด Queue๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ง๋ง ์ผ๋ฐ์ ์ธ ํ๋ฅผ ๊ตฌํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋๋๋ค. ๋ฐ๋ผ์ deque๋ฅผ ์ด์ฉํ์ฌ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๊ตฌํํด์ผ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌ์คํธ ๊ฐ์ฅ์์ ์์๋ฅผ ์ฝ์ ํ ๋ ์๊ฐ ๋ณต์ก๋๋ O(N)์ ๋๋ค. ํ์ง๋ง deque์ appendleft()๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฐ๋ณต์ก๋๋ฅผ O(1)๋ก ์ค์ผ ์ ์์ต๋๋ค. ๋ฆฌ์คํธ deque ๊ฐ์ฅ ์์ชฝ์ ์์ ์ถ๊ฐ(appendleft(x)) O(N) O(1) ๊ฐ์ฅ ๋ค์ชฝ์ ์์ ์ถ๊ฐ(append(x)) O(1) O(1) ๊ฐ์ฅ ์์ชฝ์ ์๋ ์์ ์ ๊ฑฐ(leftpop()) O(N) ..
itertools๋ ํ์ด์ฌ์์ ๋ฐ๋ณต๋๋ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฅ์ ํฌํจํ๊ณ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๊ทธ ์ค ์์ฃผ ์ฌ์ฉ๋๋ 4๊ฐ์ง ํด๋์ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ์์๋ณด๊ธฐ ์ ๊ณตํต์ผ๋ก ์์๋ ๊ฒ์ด ์์ต๋๋ค. itertools๋ ํ์ด์ฌ ์ธ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ด๋ฏ๋ก import ์ ์ธ์ ํด์ฃผ์ด์ผํฉ๋๋ค. ๋ง์ฝ combinations ํด๋์ค๊ฐ ํ์ํ๋ค๋ฉด from itertools import combinations ๋ก ์ ์ธํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ํญ์ list() ๋ฅผ ํด์ฃผ์ด ๋ฆฌ์คํธ ๊ฐ์ฒด๋ก ๋ฐ์์ผ ํฉ๋๋ค. combinations ์ฒ๋ผ ๋ค์ s ๊ฐ ๋ถ์ด์๋์ง ํ์ธํด์ฃผ์ด์ผํฉ๋๋ค. product ๊ฒฝ์ฐ๋ s๊ฐ ์์ต๋๋ค. ํจ์ ์ค๋ช ์ฌ์ฉ๋ฒ permutations iterable ๊ฐ์ฒด์์ r๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ์์๋๋ก ๋์ดํฉ๋๋ค. permuta..
ํ์ด์ฌ์๋ ์ปดํ๋ฆฌํจ์ ์ด๋ผ๋ ๊ธฐ๋ฅ์ด ์์ด์ ๋ฆฌ์คํธ(๋ฐฐ์ด)๋ฅผ ์ด๊ธฐํ ํ๋๋ฐ ์์ด์ ์ฝ๋๋์ ๋ง์ด ์ค์ผ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ด์ฌ์์ 2์ฐจ์ ๋ฆฌ์คํธ๋ฅผ ์ด๊ธฐํ ํ ๋๋ ๋ฐ๋์ ์ปดํ๋ฆฌํจ์ ์ ์ฌ์ฉํ์ฌ์ผ ํฉ๋๋ค. n = 3 m = 4 array = [[0]*m for _ in range(n)] print(array) #[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] array[1][1] = 5 print(array) #[[0, 0, 0, 0], [0, 5, 0, 0], [0, 0, 0, 0]] ๋ง์ฝ ์ปดํ๋ฆฌํจ์ ์ ์ฌ์ฉํ์ง ์๊ณ ์ ์ธํ๋ค๋ฉด ์ค๋ฅ๊ฐ ์๊ธธ ์ ์์ต๋๋ค. n = 3 m = 4 array = [[0]*m] * n print(array) array[1][1] = 5 print(arra..
ํ์ด์ฌ์์ ๋ฆฌ์คํธ ๊ฐ ์ค ํน์ ๊ฐ๋ค์ ์ ๊ฑฐํ๊ธฐ ์ํ ์ฝ๋๋ฅผ ์ค๋ช ํ๋ ๊ธ์ ๋๋ค. ํ์ด์ฌ์ ๋ค๋ฅธ ์ธ์ด๋ค๊ณผ๋ ๋ค๋ฅด๊ฒ ๋ฆฌ์คํธ(๋ฐฐ์ด)์์ ํน์ ๊ฐ๋ค์ ๋ชจ๋ ์ ๊ฑฐํ๋ ํจ์๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ์๊ฒ ์ง๋ง ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๊ตฌํํ์ต๋๋ค. a = [1,2,3,3,3,3,5,5,5] remove_set = {3,5} result = [i for i in a if i not in remove_set] print(result)#[1, 2] a ๋ฆฌ์คํธ์ 3, 5๊ฐ ์ค๋ณต๋์ด ์๋ ๋ฐ remove_set๊ณผ ์ปดํ๋ฆฌํจ์ ์ ์ฌ์ฉํ์ฌ ์ฝ๊ฒ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ด๋ฒ๊ธ์์๋ ํ์ด์ฌ์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ฌธ์์ด ํจ์๋ค์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค. # ๋๋ฌธ์์ ์๋ฌธ์๋ก ๋ณํํ๊ธฐ ํจ์ ์ค๋ช ์ฌ์ฉ๋ฒ upper() ์๋ฌธ์๋ฅผ ๋๋ฌธ์๋ก ๋ณํํฉ๋๋ค string.upper() lower() ๋๋ฌธ์๋ฅผ ์๋ฌธ์๋ก ๋ณํํฉ๋๋ค string.lower() swapcase() ๋๋ฌธ์๋ ์๋ฌธ์๋ก, ์๋ฌธ์๋ ๋๋ฌธ์๋ก ๋ณํํฉ๋๋ค string.swapcase() title() ๊ฐ ๋จ์ด์ ์๊ธ์๋ง ๋๋ฌธ์๋ก ๋ณํํฉ๋๋ค. ๋ง์ฝ ๊ฐ ๋จ์ด ์ค๊ฐ์ ๋๋ฌธ์๊ฐ ์๋ค๋ฉด ์๋ฌธ์๋ก ๋ณํ๋ฉ๋๋ค. string.title() inputStr = "ByungJun And Jiwon" upperStr = inputStr.upper() print(upperStr)#BYUNGJUN AND JIWON lowerStr = inputStr.low..
์ด๋ฒ ๊ธ์์๋ ํ์ฉ๋๊ฐ ์ ๋ง ๋์ ํจ์์ธ set() ํจ์์ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. # set() ํจ์ set๋ ํค๋ง ๋ชจ์ ๋์ ๋์ ๋๋ฆฌ์ ํน์ํ ํํ์ ๋๋ค. ๋์ ๋๋ฆฌ์ ํค๋ ์ค๋ณต๋๋ฉด ์๋๋ฏ๋ก set์ ์๋ ๊ฐ์ ํญ์ ์ ์ผํฉ๋๋ค. ๋ฐ๋ผ์ ๋ฆฌ์คํธ์์ ์ค๋ณต์ ์ ๊ฑฐํ ๋ ๋ง์ด ์ฌ์ฉ ๋๊ธฐ๋ ํฉ๋๋ค. myList = [20,30,10,10,10,20] myList = set(myList) print(myList) #{10, 20, 30} ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด 10๊ณผ 20์ ์ค๋ณต์ ๋ชจ๋ ์ ๊ฑฐ๋์์ต๋๋ค. set ํจ์๋ ๋ฆฌ์คํธ, ํํ, ๋์ ๋๋ฆฌ ๋ฑ์ set๋ก ๋ณ๊ฒฝ์์ผ์ค๋๋ค. ์ฐธ๊ณ ๋ก ๋์ ๋๋ฆฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ณ๋์ ์์๋ก ์ ์ฅ๋์ง ์์ต๋๋ค. ์ฆ, ๋ฆฌ์คํธ์ ๋ค๋ฅด๊ฒ ์์๊ฐ ์์ต๋๋ค. # set() ํ์ฉ ์ฌํ myList = [20,30,..
์ด๋ฒ ๊ธ์์๋ ํ์ด์ฌ์ ์๋ง์ ํจ์๋ค์ค ๋ฆฌ์คํธ๋ฅผ ์กฐ์ํ ์ ์๋ ํจ์๋ค์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. # ๋ฆฌ์คํธ ์กฐ์ ํจ์ ํจ์ ์ค๋ช ์ฌ์ฉ๋ฒ append() ๋ฆฌ์คํธ ๋งจ ๋ค์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ค. list.append("๊ฐ") pop() ๋ฆฌ์คํธ ๋งจ ๋ค์ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ค. list.pop() sort() ๋ฆฌ์คํธ์ ํญ๋ชฉ์ ์ ๋ ฌํ๋ค. list.sort() reverse() ๋ฆฌ์คํธ ํญ๋ชฉ์ ์์๋ฅผ ์ญ์์ผ๋ก ๋ง๋ ๋ค. list.reverse() index() ์ง์ ํ ๊ฐ์ ์ฐพ์ ํด๋น ์์น๋ฅผ ๋ฐํํ๋ค. list.index(์์น, "๊ฐ") remove() ๋ฆฌ์คํธ์์ ์ง์ ํ ๊ฐ์ ์ญ์ ํ๋ค. ๋จ ์ง์ ํ ๊ฐ์ด ์ฌ๋ฌ ๊ฐ๋ฉด ์ฒซ๋ฒ์งธ ๊ฐ๋ง ์ง์ด๋ค. list.remove("์ง์ธ๊ฐ") extend() ๋ฆฌ์คํธ ๋ค์ ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๋ค. ๋ฆฌ์คํธ์ ๋ํ๊ธฐ ..
ํ์ฌ๋ ์ง์ ํน์ ๋ ์ง๋ฅผ ๋น๊ตํ๋ ์ฝ๋์ ๋๋ค. ex) ์์ฝ๋ ์ง๋ฅผ ํ์ฌ๋ ์ง๋ณด๋ค ์ ์ผ๋ก ์ ๋ ฅํ ๊ฒฝ์ฐ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํฉ๋๋ค. ๋ ์ง ํ์์ด "YYYY-MM-DD"์ด๋ฉด ๊ฐ์ ํ์์ผ๋ก ๋ง์ถ์ด ์ค ๋ค์์ ๋น๊ต๋ฅผ ํด์ผํฉ๋๋ค. "2020-01-01", "2020-1-1" ์ด๋ ๊ฒ ๋น๊ตํ๋ฉด false๊ฐ ๋ฉ๋๋ค. ํ์์ ๊ผญ ๋ง์ถฐ์ผ ํฉ๋๋ค. function leadingZeros(n, digits) { var zero = ''; n = n.toString(); if (n.length < digits) { for (i = 0; i < digits - n.length; i++) zero += '0'; } return zero + n; } var rsvDate = "2020-01-01"; var now = new Date(); if(r..
์ด๋ฒ ๊ธ์์๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋ฌธ์์ด์ ์ซ์๋ก ๋ณํํ ๋ ์ฌ์ฉํ๋ ํจ์์ธ parseInt์ Number์ ์ฐจ์ด๋ฅผ ์์๋ณด๊ฒ ์ต๋๋ค. ๋ ํจ์ ๋ชจ๋ ๋ฌธ์์ด์ ์ซ์๋ก ํ์ฑํด์ค๋ค๋ ์ ์์ ๊ธฐ๋ฅ์ด ๋์ผํ๋ค๊ณ ๋ณผ ์ ์์ง๋ง, ์ฐจ์ด๊ฐ ์์ต๋๋ค. # ์์ ์ฝ๋ var test = "09"; console.log(parseInt(test, 10)); console.log(Number(test2)); ์์ ๊ฐ์ด ๋ณ์๋ฅผ ์ ์ธํ๊ณ ์ถ๋ ฅํด๋ณด์์ต๋๋ค. l parseInt ๋๋ฒ์งธ ์ธ์๋ฅผ ๋ญ๊ฐ์? parseInt์ ๋๋ฒ์งธ ์ธ์๋ก 10์ ๋ฃ์ด์คฌ๋๋ฐ ์ด๋ฅผ ํด์ฃผ์ง ์์ ๊ฒฝ์ฐ 08, 09 ๊ฐ์ด ์์ 0์ด ์์๋ 8์ง์๋ก ์ธ์ํ์ฌ ์๋ฌ๋ฅผ ์ด๋ํ๋ค๊ณ ํฉ๋๋ค. ๋ค์ ๋ณธ๋ก ์ผ๋ก ๋์์ ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ ๊ฒ์ ๋ณด์ค์๊ฐ ์์ต๋๋ค. ์ฐจ์ด๊ฐ ์์ด ๋ณด์ด..
์ค๋ผํด์์ ์ง๊ณํจ์์ธ COUNT()๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. SELECT COUNT(CASE WHEN CRSE_TY = '0' THEN 1 END) FROM DUAL # ์์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ ์ ์ด๋ฏธ์ง๋ณด๋ค ๋ ๋ง์ต๋๋ค. SELECT COUNT(CASE WHEN CRSE_TY = '0' THEN 1 END) AS CRSE_TY_ELRN ,COUNT(CASE WHEN CRSE_TY = '1' THEN 1 END) AS CRSE_TY_OFL ,COUNT(CASE WHEN CRSE_TY = '2' THEN 1 END) AS CRSE_TY_BLEND FROM CRSE_MASTR WHERE EDC_TY = '001' CASE WHEN์ ์ฌ์ฉํ์ฌ ์ง๊ณํ ์ปฌ๋ผ์ ์กฐ๊ฑด์ ๊ฑธ์ด์ฃผ๊ณ THEN์ ์ฌ์ฉํ์ฌ ์ผ์นํ ๋ 1์ ๋ํด..
# ์์ธ ๋ด์ฉ์ ๋ณด๋ฉด ๋ ๋ด์ฉ์ ๋ณผ ์ ์์ต๋๋ค. ๋ด์ฉ์ธ ์ฆ ์ค๋ผํด์ ์ ์ํ ๋ ์ง์ ํด์ฃผ๋ SID๊ฐ ์๋๋ฐ ํด๋น SID๋ฅผ ๊ฐ์ง ๋ฆฌ์ค๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์ง ์๋ค๋ ๋ด์ฉ์ ๋๋ค. ์ํฉ์ ๋ฐ๋ผ์ SID์์ฒด๋ฅผ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ๋ง ํด๊ฒฐ์ด ๋ ์๋ ์์ง๋ง ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ ์์ด ๋๋ค๊ฐ ์ด๋๋ ๊ฐ์๊ธฐ ์ ์์ด ์๋๋ค๋ฉด ๋ฆฌ์ค๋๊ฐ ์คํ๋์ง ์์์ ๊ทธ๋ ์ต๋๋ค. ๋๋ถ๋ถ์ ์ฐ์ต์ฉ Oracle์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด SID๋ฅผ XE๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค. # ํด๊ฒฐ ์๋์ฐํค+R ์ ๋๋ฌ ์คํ์ฐฝ์ ์ด์ด ์ค๋๋ค. ์ด๊ธฐ์ services.msc๋ฅผ ์ ๋ ฅํด ์ค๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์๋น์ค ์ฐฝ์ด ๋น๋๋ค. ๋ฐ์ผ๋ก ๋ด๋ฆฌ๋ค ๋ณด๋ฉด ํด๋น ๋ผ์ธ์ OracleServiceXE ๋ ์ด๋ฆ์ ๋ณด์ค ์ ์์ต๋๋ค. ๋๋ธํด๋ฆญํด ์ค๋๋ค. ์ค๋ผํด์ ์ค์นํ๊ฒ ๋๋ฉด ์๋์ผ๋ก ์..
์ค๋ผํด์์ ํ์ด์ง ์ฒ๋ฆฌ ๋ฑ์ ํ ๋ ๋ก์ฐ์ ์๋ฒ์ ๋งค๊ธด ๋ค ์ ๋ ฌ์ ํด์ค์ผ ํฉ๋๋ค. ์ด๋ ROW_NUMBER() ์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ์๋ฒ์ ๋งค๊ธธ์ ์์ต๋๋ค. # ์์ ์ฝ๋ ์์ ํ ์ด๋ธ์์ ๋จ์ SELECT ์ฟผ๋ฆฌ๋ฌธํ์ ๋ ์์ ๊ฐ์ ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ํ ์ด๋ธ์ ๋ก์ฐ๋ฅผ ๋ ์ง(REGIST_DT)๋ก ์ ๋ ฌํ๊ณ ์ถ์ต๋๋ค. ORDER BY๋ฅผ ์ฌ์ฉํ์ฌ ์ ๋ ฌ ํ ์ ์๊ฒ ์ง๋ง ์ด๋ ๊ฒ๋ง ํ๋ฉด ๋ถ๋ช ํ๊ณ๊ฐ ์กด์ฌํฉ๋๋ค. ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํด์ผํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. 1, 2, .. ํ์ด์ง ๋ฑ์ด ์กด์ฌํ ๊ฒ์ด๊ณ , ํ ํ์ด์ง์๋ 10๊ฐ์ ๋ก์ฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ๋ก์ฐ๋ ๋ ์ง๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ทฐ์ ๋ฟ๋ ค์ง๋ค๊ณ ํฉ์๋ค. ๋ง์ฝ ORDER BY๋ง ์ฌ์ฉํ๋ค๋ฉด 1ํ์ด์ง์๋ ๋ฌธ์ ์์ด ๋ก์ฐ๊ฐ์ ๋ฟ๋ฆด์ ์๊ฒ ์ง๋ง, ๋ฌธ์ ๋ 2ํ์ด์ง๋ถํฐ ์ ๋๋ค. 2ํ์ด์ง์์ 11๋ฒ์งธ๋ถ..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑํ์๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ๋๊ธ๋ก ํ๋ฆฐ ๋ถ๋ถ์ ๋ํด ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :) # ๋น๋๊ธฐ์ ๋๊ธฐ ์ฒ๋ฆฌ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๋ ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ๋ ธ๋ ์ฌ์ด์ ์์ ์ฒ๋ฆฌ ๋จ์๋ ๋์์ ๋ง์ถ ํ์๊ฐ ์์ต๋๋ค. ๋๊ธฐ์ ์ฒ๋ฆฌ๋ ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋ฉ๋๋ค. ๋ฐ๋ผ์ ๋ ธ๋ ์ฌ์ด์ ์์ ์ฒ๋ฆฌ ๋จ์๋ฅผ ๋์์ ๋ง์ถ ํ์๊ฐ ์์ต๋๋ค. ์์ ๋ฅผ ๋ค์ด๋ณด๊ฒ ์ต๋๋ค. ใ ฃ๋น๋๊ธฐ ์๋๊ณผ ์๋ฆฌ์ฌ๋ ์๋ก์ ํ์(๋ชฉ์ )๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์์ ์ฒ๋ฆฌ ์๊ฐ์ ์ผ์นํ์ง ์์๋ ๋ฉ๋๋ค. ์๋์ด ์๋ฆฌ๋ฅผ ์ฃผ๋ฌธํ์๋(์์ฒญ) ๋ฐ๋ก ์๋น(๊ฒฐ๊ณผ)ํ ํ์๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ์ ๊น ์ง๊ณ ๋์ด๊ฐ ๊ฒ์ด ์๋๋ฐ ๋ง์ฝ ์๋์ด ์๋ฆฌ๊ฐ ๋์ฌ ๋๊น์ง ์๋ฌด๊ฒ๋ ์ํ๊ณ ๋จ์ง ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ง ํ๋ค๋ฉด ๋ธ..
๋ชจ๋ ๊ณต๋ฐฑ ์ฒดํฌ ์ ๊ท์ var regExp = /\s/g; ์ซ์๋ง ์ฒดํฌ ์ ๊ท์ var regExp = /^[0-9]+$/; ์ด๋ฉ์ผ ์ฒดํฌ ์ ๊ท์ var regExp = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; ํธ๋ํฐ๋ฒํธ ์ ๊ท์ var regExp = /^\d{3}-\d{3,4}-\d{4}$/; ์ผ๋ฐ ์ ํ๋ฒํธ ์ ๊ท์ var regExp = /^\d{2,3}-\d{3,4}-\d{4}$/; ์์ด๋๋ ๋น๋ฐ๋ฒํธ ์ ๊ท์ var regExp = /^[a-z0-9_]{4,20}$/; ํด๋ํฐ๋ฒํธ ์ฒดํฌ ์ ๊ท์ var regExp = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4..
input์ value ๊ธฐ์ค์ผ๋ก ์์ฑํ์์ต๋๋ค. $('#testID').val(); // id ์ ํ์๊ฐ ๊ธฐ์ค์ผ ๋ #์ ๋ถ์ฌ์ค๋๋ค. $('.testClass').val(); // class ์ ํ์๊ฐ ๊ธฐ์ค์ผ ๋ .์ ๋ถ์ฌ์ค๋๋ค. $('[name=testName]').val(); // id, class ์ธ์ ์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. $('[test=testName]').val(); // ๋ง์ฝ test ๊ฒฐ๊ณผ๊ฐ์ ์ ๊ฐ์ ธ์จ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
์ ๊ท์์ ์ฌ์ฉํ์ฌ ํ๊ธ, ์์ด, ์ซ์ ์ฒดํฌ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. # ์์ var pattern1 = /[0-9]/; //์ซ์ var pattern2 = /[a-zA-Z]/; //์์ด var pattern3 = /[ใฑ-ใ |ใ -ใ ฃ|๊ฐ-ํฃ]/; //ํ๊ธ var pattern4 = /[~!@#\#$%^&*]/; //ํน์๋ฌธ์ var testStr = "ํ ์คํธtest"; //์ซ์ ์ฒดํฌํ๊ณ ์ถ์ ๋ if (pattern1.test(testStr)) { alert("์ซ์๊ฐ ํฌํจ๋ฉ๋๋ค."); //false } //์์ด ์ฒดํฌํ๊ณ ์ถ์ ๋ if(pattern2.test(testStr)){ alert("์์ด๊ฐ ํฌํจ๋ฉ๋๋ค."); //true } //ํ๊ธ ์ฒดํฌํ๊ณ ์ถ์ ๋ if(pattern3.test(testStr)){ alert..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑํ์๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ํ๋ฆฐ ๋ถ๋ถ ์๋ค๋ฉด ์ง์ ํด์ฃผ์ธ์ :) ์คํ๋ง์์ ๋งํ๋ ์ปจํ ์คํธ(context)๋ ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋น๋ค์ด ๋ด๊ฒจ ์๋ ์ปจํ ์ด๋ ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์คํ๋ง์ ๊ณ์ ๊ณต๋ถ์ค์ด์ง๋ง ์์ฒญ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด WebApplicationContext์ ApplicationContext์ ๊ด๊ณ, web.xml์์์ servlet-context์ root-context์ ๊ด๊ณ ๊ทธ๋ฆฌ๊ณ ContextLoaderListenter์ dispatcher-servlet์ ๊ด๊ณ ์ด ์ด 3๊ฐ์ ๊ด๊ณ๊ฐ ๋ณผ๋๋ง๋ค ํท๊ฐ๋ ธ์ต๋๋ค. ๋ฐ๋ผ์ ์ด ๊ด๊ณ๋ค์ ์๋์ ๊ฐ์ด ๊ทธ๋ฆผํํด๋ณด์์ต๋๋ค. # web.xml์์์ Context contextConfigLocation c..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๊ฐ๋ ์ ๋ฐํ์ผ๋ก ์์ฑํ์๊ธฐ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ํ๋ฆฐ ๋ถ๋ถ ์๋ค๋ฉด ์ง์ ํด์ฃผ์ธ์ :) ์คํ๋ง์์ ๋งํ๋ ์ปจํ ์คํธ(context)๋ ์คํ๋ง์ด ๊ด๋ฆฌํ๋ ๋น๋ค์ด ๋ด๊ฒจ ์๋ ์ปจํ ์ด๋ ๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ฉ๋๋ค. ์คํ๋ง์ ๊ณ์ ๊ณต๋ถ์ค์ด์ง๋ง ์์ฒญ ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด WebApplicationContext์ ApplicationContext์ ๊ด๊ณ, web.xml์์์ servlet-context์ root-context์ ๊ด๊ณ ๊ทธ๋ฆฌ๊ณ ContextLoaderListenter์ dispatcher-servlet์ ๊ด๊ณ ์ด ์ด 3๊ฐ์ ๊ด๊ณ๊ฐ ๋ณผ๋๋ง๋ค ํท๊ฐ๋ ธ์ต๋๋ค. # root-context ์ sevlet-context ํ๋ฆ ์ด ๊ธ์ WAC์ AC ๊ด๋ จ ๊ธ์ด ์๋๋ฏ๋ก root-context์ ..
# ์์ธ ํ๋ก์ ํธ ์ธ๋ถ์ ์กด์ฌํ๋ ํ์ผ ์ ๋ก๋์ ๊ฒฝ์ฐ ๋ณด์์์ ์ด์ ๋ก ์ด๋ฏธ์ง์ ์ ๊ทผํ์ง ๋ชปํฉ๋๋ค. ์ฆ ์น์์ ๋ก์ปฌํด๋๋ก ์ ๊ทผ์ด ๋ถ๊ฐํฉ๋๋ค. # ํด๊ฒฐ tomcat์ server.xml ์ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค. docBase="D:/FileUpload/kssfbiz/" ์ด๋ ๊ฒ ์ค์ ํด์ฃผ์๋ฉด url๋ก ๋ค์ด๊ฐ ๋๋ localhost:8080/kssfbiz/upload ์ด๋ฐ์์ผ๋ก ๋ค์ด๊ฐ์ฃผ์๋ฉด ๋ฉ๋๋ค. ๋ฌผ๋ฆฌ์ ์ฃผ์ - D:/FileUpload/kssfbiz/ ๋ ผ๋ฆฌ์ ์ฃผ์(์ค์ ์ ์ํ ๋) - http://localhost:8080/kssfbiz/upload/ (๋ก์ปฌ์ผ์) ์ฃผ์ํ ์ ์ ๋ฐ๋์ reloadable์ true๋ก ํด์ฃผ์ ์ผ ํฉ๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์..
์ด๋ฒ ๊ธ์์๋ @RestController๋ผ๋ ์ด๋ ธํ ์ด์ ์ ๋ํด ์์ ๋ณด๊ฒ ์ต๋๋ค. @RestController๋ ์ปจํธ๋กค๋ฌ์์ ๋ธ๋ผ์ฐ์ ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋ ์ด๋ฅผ ์ฒ๋ฆฌํด์ ๋ณด๋ผ ์ ์์ต๋๋ค. ๊ธฐ๋ณธํ ๋ฐ์ดํฐ, VO ๊ฐ์ฒด์ ์์ฑ ๊ฐ, Map์ ์ ์ฅ๋ ๋ฐ์ดํฐ ๋ฑ์ ๋ณด๋ผ ์ ์๊ฒ ํด์ค๋๋ค. ์ฐ์ @RestController๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์คํ๋ง 4.0์ด์์ด์ฌ์ผ ํฉ๋๋ค. ๋ง์ฝ 3.x ๋ฒ์ ์ ์ด์ฉํ๋ค๋ฉด pom.xml์์ 1.6 4.1.1.RELEASE 1.6.10 1.6.6 4.*.* ๋ฒ์ ์ผ๋ก ๋ฐ๊ฟ์ฃผ์๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ JOSN ํ์์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํ JSON ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์ถ๊ฐํด์ฃผ์๋ฉด ๋ฉ๋๋ค. com.fasterxml.jackson.core jackson-databind 2.5.4 # VO ๊ฐ์ฒด ์ ๋ฌํ..
# ์์ธ java.lang.IllegalStateException: Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]: org.apache.catalina.connector.RequestFacade@6b6f9564 at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter$ServletHandlerMethodInvoker.resolveStandardArgument(AnnotationMethodHandlerAdapter.java:826) at org.springframework.web.bind.annot..
์ด๋ฒ ๊ธ์์๋ ajax๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ์๋ฒ์ ์ ๋ก๋ ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณด๊ฒ ์ต๋๋ค. ajax๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๊ตณ์ด ํ์ผ ์ ์ก์ ์ํ์ฌ form ํ๊ทธ๋ก ๊ฐ์ธ์ค ํ์๊ฐ ์์ต๋๋ค. ์ด ๊ธ์ ์คํ๋ง ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค. # Front ์ ์ถํ๊ธฐ ajax์ ์์ฑ ๋๋จธ์ง๋ ์๊ฑฐ๋ผ ์๊ฐํ๊ณ processData๋ง ์ง๊ณ ๋์ด๊ฐ๋ณด๊ฒ ์ต๋๋ค. processData๋ ์ผ๋ฐ์ ์ผ๋ก ์๋ฒ์ ์ ๋ฌ๋๋ ๋ฐ์ดํฐ๋ query string ์ด๋ผ๋ ํํ๋ก ์ ๋ฌ๋ฉ๋๋ค. http://example.com/over/there?title=Main_page&action=raw ? ๋ค์ ์ฟผ๋ฆฌ์คํธ๋ง์ด ์ ๋ฌ๋ฉ๋๋ค. ์ฃผ์ํ ์ ์ ํ์ผ ์ ์ก์ด ์์ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ฐ๋์ false๋ก ํด์ฃผ์ด์ผ ํฉ๋๋ค. # Back @Controller("mainControl..
Sevlet Container, Servlet์ ๋ํด ์์๋ณด์๊ณ ์ด๋ฒ์ Servlet์ ๋ํ๊ฒฉ์ ๋งก๊ณ ์๋ Dispatcher-Servlet์ ๋ํด ์์๋ณด๋ ค๊ณ ํฉ๋๋ค. # Dispatcher-Servlet์ ์ ์ ์คํ๋ง์์ ์ ์ํ ๊ฐ๋ ์ ์๋์ ๊ฐ์ต๋๋ค. Servlet Container์์ HTTPํ๋กํ ์ฝ์ ํตํด ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ํ๋ ์ ํ ์ด์ ๊ณ์ธต์ ์ ์ผ์์ ๋ฌ์ ์ค์์ง์ค์์ผ๋ก ์ฒ๋ฆฌํด์ฃผ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller) ์ข ๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด, ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ์ ๋ณด๋ด์ค๋ฉด ์๋ธ๋ฆฟ ์ปจํ ์ด๋๊ฐ ์์ฒญ์ ๋ฐ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๋ ์ ์ผ ์์์ ์๋ฒ๋ก ๋ค์ด์ค๋ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ๊ฐ ์๋๋ฐ ์ด๋ฅผ Dipatcher Servlet์ด๋ผ๊ณ ํฉ๋๋ค. # Dispatcher-Servlet์ ํ..
์ด ๊ธ์ ์ ๊ฐ ์ดํดํ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์ ํ๋ฆฐ ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ์๋ค๋ฉด ์ธ์ ๋ ์ง ์ง์ ํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :) ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ฅผ ์ดํดํ๊ธฐ ์์ ์ปจํ ์ด๋๊ฐ ๋ฌด์์ธ์ง์ ๋ํด ์์๋ณผ ํ์๊ฐ ์์ต๋๋ค. ํํ ์คํ๋ง์ ์ฌ์ฉํ๋ฉด์ ์๋ธ๋ฆฟ ์ปจํ ์ด๋์ ์คํ๋ง ์ปจํ ์ด๋ ์ด ๋ ๋จ์ด๋ฅผ ๋ง์ด ๋ค์ด๋ดค์ ๊ฒ๋๋ค. ๊ทธ๋ผ ์ปจํ ์ด๋๋ ๊ณผ์ฐ ๋ฌด์์ผ๊น์? # ์ปจํ ์ด๋๋? ์ฐ๋ฆฌ๊ฐ ์๊ฐํ๋ ๊ทธ ์ปจํ ์ด๋์ ์ฉ๋๊ฐ ๋น์ทํฉ๋๋ค. ๋ฌด์ญ์ ํ ๋ ์ํ์ ๊ด๋ฆฌํ๊ธฐ ์ํ์ฌ ์ปจํ ์ด๋๋ง๋ค ๋ค๋ฅด๊ฒ ๋ด์ ๋ฐฐ๋ก ์ด์กํ๋ ๊ฒ์ฒ๋ผ ์๋ธ๋ฆฟ ์ปจํ ์ด๋๋ ์ด์ ๋น์ทํฉ๋๋ค. ํธ์คํธ ์ด์์ฒด์ ์์ ๊ตฌ๋๋๋ฉฐ ๊ทธ ๋ฐํ์ด ๋๋ ํ๋์จ์ด์ ๊ฐ์์ผ๋ก ์ก์ธ์คํ๋ ๊ฒ์คํธ ์ด์์ฒด์ ๋ฅผ ๋ปํ๋ ๊ฐ์๋จธ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ปจํ ์ด๋๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฐ ์ข ์ ํญ..
์คํ๋ง์์ DB ์ ๋ณด๋ฅผ ๊ฐ์ ์ ๋ณด๋ฅผ ์จ๊ธฐ๊ธฐ ์ํด ํ๊ฒฝ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊นํ์ ํ๋ก์ ํธ๋ฅผ ์ฌ๋ฆด ๋ DB์ ๋ณด๊ฐ ์๋ properties ํ์ผ๋ง gitignore๋ฅผ ์ฌ์ฉํ์ฌ ์ปค๋ฐ์๋๊ฒ ํ ์ ์์ต๋๋ค. properties ํ์ผ์ ๊ฒฝ๋ก์ ๋๋ค. /WEB-INF/config/jdbc.properties PropertyPlaceholderConfigurer ํด๋์ค์ ์์ฑ์ ์ด์ฉํ์ฌ properties์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ""์์ ์ฐ์ค ํ์ ์์ต๋๋ค. ์์ ๊ฐ์ด xml ํ์ผ์์ ๋ฐ์์ ์์ต๋๋ค.
์คํ๋ง์์ ๋น์ ์ด์ฉํ jsp ๊ฒฝ๋ก ์ค์ ๋ฐฉ๋ฒ์ ๋๋ค. bean์ ์ด์ฉํ์ฌ viewResolver ํด๋์ค์ ์์ฑ์ ์์ ๊ฐ์ด ์ค์ ํด์ฃผ์๋ฉด ๋ฉ๋๋ค. ModelAndView mav = new ModelAndView("home"); views๋ก ๊ธฐ์ค์ผ๋ก ์๋๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ์๋ฉด ๋ฉ๋๋ค. ๋ง์ฝ views/list/home.jsp ๋ผ๋ฉด view์ ๊ฒฝ๋ก๋ /list/home์ ๋๋ค. ๋ค์ jsp๋ฅผ ๋ถ์ด์๋ฉด ์๋ฉ๋๋ค.
์๋ฐ๋ฅผ ํ๊ฒ๋๋ฉด ์ฝ์์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด System.out.println()์ ์ฌ์ฉํฉ๋๋ค. ํ์ง๋ง ์คํ๋ง์์๋ ์ด๋ฅผ ์ฌ์ฉํ ํ์์์ด log4j๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ก๊ทธ ๊ด๋ จํ ๊ธฐ๋ฅ๋ค์ ๊ด๋ฆฌํด์ค๋๋ค. ์ด ๊ธ์ STS(Spring toos Suite)๋ก ์์ฑํ ์คํ๋ง ํ๋ก์ ํธ ๊ธฐ์ค์ผ๋ก ์์ฑ๋์์ต๋๋ค. STS๋ฅผ ์ด์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๊ฐ์ฅ ํ๋จ์ ๊ด๋ จ ๊ธ์ ํฌ์คํธํฉ๋๋ค. ์ด ๊ธ์ ์๋ฐ์น์ ๋ค๋ฃจ๋ ๊ธฐ์ ์ฑ ์ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์์ต๋๋ค. log4j๋? ์คํ๋ง์ผ๋ก ๊ฐ๋ฐํ ๋ ๋ณด๋ฉด ์ฝ์์ ์์ ๊ฐ์ ์์ฒญ ๋ง์ ๋ก๊ทธ๋ค์ด ์ถ๋ ฅ๋๋๋ฐ ์ด ๋ชจ๋ ๊ฒ log4j ๋๋ถ์ ๋๋ค. ๊ฐ๋ฐํ ๋น์์ ์ฌ์ฉํ๋ ๋ก๊ทธ ๋ฉ์์ง๋ค์ ์ค์ ๋ก ์๋น์คํ ๋ ์ ํ ํ์์๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ ์ผ์ผ์ด ์ฐพ์์ ํด๋น ๋ก๊ทธ๋ค์ ์ญ์ ํด์ฃผ์ด์ผ ํ๋๋ฐ ์ด๋..
์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ์ฌ ํ์ ์ฐฝ์ ์ฌ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ธ์ ๋๋ค. l window.open() ํจ์ window.open() ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ฝ๊ฒ ํ์ ์ฐฝ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. window.open("ํ์ ์ฐฝ์ผ๋ก ์ฌ์ฉํ ํ์ผ(๊ฒฝ๋กํฌํจ) ๋๋ uri","์ง์ ํ ํ์ ์ ์ด๋ฆ","ํฌ๊ธฐ์ ์์น"); l ์์ window.open("test.html","ํ์ ํ ์คํธ","width=400, height=300, top=10, left=10"); popup.html๋ฅผ ์์ ๊ฐ์ด ํด์ฃผ์์ต๋๋ค. ํ์ ์ฐฝ ํธ์ถํ ํ์ ์ฐฝ์ html์ ๋๋ค. ์ธ๋ฒ์งธ ์ธ์๋ฅผ ์กฐ์ ํ์ฌ ํ์ ์ ํฌ๊ธฐ ๋ํ ์กฐ์ ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ง๋ฌธ์ ์ธ์ ๋ ํ์ํฉ๋๋ค. "๋ ๋ฐ๋์ ๋ฐฑ์๋ ์์ด ๋ ๊ฑฐ์ผ"