๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ 33

[Gradle] implementation, runtimeOnly, compileOnly ์ฐจ์ด์ 

spring boot ํ”„๋กœ์ ํŠธ์—์„œ DB ์„ธํŒ…์„ ํ•˜๋‹ค๊ฐ€ ์•„๋ž˜ gradle ์„ค์ •์— ๋Œ€ํ•ด ์˜๋ฌธ์ด ์ƒ๊ฒผ๋‹ค. implementation 'org.postgresql:postgresql' runtimeOnly 'org.postgresql:postgresql' implementation์€ ์ž์ฃผ ์“ฐ๋Š”๋ฐ runtimeOnly์™€ compileOnly์— ๋Œ€ํ•œ ๋ช…ํ™•ํ•œ ์‚ฌ์šฉ ์‹œ์ ์ด ๊ถ๊ธˆํ•ด์กŒ๋‹ค. Classpath Classpath๋Š” ํด๋ž˜์Šค๋‚˜ jar ํŒŒ์ผ์ด ์กด์žฌํ•˜๋Š” ์œ„์น˜์ด๋‹ค. ํฌ๊ฒŒ complileClasspath, runtimeClasspath๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. compileClasspath๋Š” ์—๋Ÿฌ์—†์ด ์ปดํŒŒ์ผ์„ ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ํด๋ž˜์Šค์™€ jar ํŒŒ์ผ์ด ์œ„์น˜ํ•œ๋‹ค. runtimeClasspath๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ์œ„..

[PostgreSQL] MacOS์—์„œ Postgresql ์„ค์น˜ ๋ฐ ์„ค์ •ํ•˜๊ธฐ

์„ค์น˜ ๋ฐ ์‹คํ–‰ ์„ค์น˜ ๋ช…๋ น์–ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. brew install postgresql ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด postgresql์„ ์‹คํ–‰ํ•œ๋‹ค. brew services start postgresql ์‹คํ–‰์ด ๋˜๋Š” ๊ฑธ ํ™•์ธํ•˜๊ณ  ์‹ถ์œผ๋ฉด ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. postgres -V ์„ค์ • ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด postgreSQL์— ์ ‘์†ํ•œ๋‹ค. psql postgres ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ •์˜๋œ ๊ถŒํ•œ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. postgres=# \du Role name | Attributes | Member of -----------+------------------------------------------------------------+----------- user_name | Superuser, Create ro..

์ƒˆํšŒ์‚ฌ ์ ์‘๊ธฐ

์ด์งํ•œ ํšŒ์‚ฌ์— ๋“ค์–ด์˜จ์ง€ ์‚ผ๊ฐœ์›”์ด ๋‹ค ๋˜์–ด๊ฐ„๋‹ค. ํŒ€์— ๋ฐฐ์น˜๋˜์–ด์„œ ์‹ ์ž…์‚ฌ์› OJT๋ฅผ ์ฃผ์ œ๋กœ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ–ˆ๋‹ค. spring boot + jpa + html + css๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐœ๋ฐœ๋œ ์›Œํฌ๋ณด๋“œ์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ ๊ฐœ์„ ์ด์—ˆ๋‹ค. ๋‚˜๋Š” dhtmlx gantt library๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ฐ„ํŠธ์ฐจํŠธ ๋ทฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ–ˆ๋‹ค. ์ด์ „ ํšŒ์‚ฌ์—์„œ ๋น„์Šทํ•˜๊ฒŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ํ•œ ๊ฒฝํ—˜์ด ์žˆ์–ด์„œ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•ด๋‚ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ˆ˜์Šต ๋”ฑ์ง€๋ฅผ ๋–ผ๊ณ  ํŒŒํŠธ์— ๋ฐฐ์น˜๋˜์–ด์„œ ๋‚ด์ผ๋ถ€ํ„ฐ๋ฉด ๋ณธ๊ฒฉ์ ์ธ ์—…๋ฌด๋ฅผ ์‹œ์ž‘ํ•˜๊ณ , ์‹ ์ž…์‚ฌ์› OJT์— ๋Œ€ํ•œ ๋ฐœํ‘œ๋ฅผ ์ค€๋น„ํ•ด์•ผ ํ•œ๋‹ค. ์•ž์— ๋†“์—ฌ์ง„ ์ผ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ทธ ์ด์ƒ์˜ ์ผ์„ ํ•ด๋‚ด์„œ ๋‚ด ์ž์‹ ์—๊ฒŒ ๋งŒ์กฑํ•˜๋Š” ํšŒ์‚ฌ์ƒํ™œ์„ ์ฆ๊ธฐ๊ณ  ์‹ถ๋‹ค.

์ทจ์ค€, ํ‡ด์‚ฌ ๊ทธ๋ฆฌ๊ณ  ์ด์ง

๋ช‡๋‹ฌ๊ฐ„ ์ด์ง์„ ์œ„ํ•œ ์ทจ์—… ์ค€๋น„์— ํž˜์“ฐ๋А๋ผ ๋ธ”๋กœ๊ทธ๋ฅผ ์“ฐ์ง€ ๋ชปํ–ˆ๋‹ค. 25์‚ด ์ค‘๋ฐ˜์— ์ฒซ ์ง์žฅ์œผ๋กœ ๋“ค์–ด๊ฐ„ ์ค‘์†Œ๊ธฐ์—…์„ 1๋…„ ์ข€ ๋„˜๊ฒŒ ๋‹ค๋‹ˆ๊ณ  ์ด์ง์„ ์ค€๋น„ํ–ˆ๋‹ค. ์„ธ ๋‹ฌ ์ •๋„ ์ค€๋น„๋ฅผ ํ•˜๊ณ  ์„œ๋ฅ˜, ์ฝ”๋”ฉํ…Œ์ŠคํŠธ/์ธ์ ์„ฑ, ์‹ค๋ฌด/์ž„์› ๋ฉด์ ‘์„ ํ†ตํ•ด ์ตœ์ข… ํ•ฉ๊ฒฉ์„ ํ–ˆ๋‹ค. ๊ธฐ์กด์— ๋‹ค๋‹ˆ๋˜ ํšŒ์‚ฌ๋ฅผ ํ‡ด์‚ฌํ•˜๊ณ  ์ข€ ์‰ฌ๋‹ค๊ฐ€ ์ž…์‚ฌํ•  ์˜ˆ์ •์ด๋‹ค. ์•ž์œผ๋กœ๋Š” ์ทจ์—…์„ ์œ„ํ•œ ๊ณต๋ถ€๊ฐ€ ์•„๋‹Œ ๋‚ด๊ฐ€ ํ•˜๊ณ  ์‹ถ์€ ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ , ๊ทธ๋Ÿด๋“ฏํ•œ ์ทจ๋ฏธ๋„ ์—ฌ๋Ÿฌ ๊ฐœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค. ๊ฑฑ์ •์„ ์ข€ ๋‚ด๋ ค๋†“๊ณ  ๋‚˜๋ฅผ ์œ„ํ•œ ์‚ถ์„ ์‚ด์•„์•ผ๊ฒ ๋‹ค.

[python] ์ˆœ์—ด๊ณผ ์กฐํ•ฉ

์ˆœ์—ด(permutation) - ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•œ ์„ ํƒ - nPr๋กœ ํ‘œ์‹œ import imertools arr = ['A', 'B', 'C'] perm = itertools.permutations(arr, 2) # 2๊ฐœ ์„ ํƒ print(list(perm)) # [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')] ์กฐํ•ฉ(combination) - ์ˆœ์„œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์„ ํƒ - nCr๋กœ ํ‘œ์‹œ import itertools arr = ['A', 'B', 'C'] combi = itertools.combinations(arr, 2) print(list(combi)) # [('A', 'B'), ('A', 'C'), ('B', 'C')]

[python] bisect

bisect - bisect : ํŒŒ์ด์ฌ์—์„œ ์ด์ง„ํƒ์ƒ‰์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค. - ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ ํŠน์ •ํ•œ ์›์†Œ๋ฅผ ์ฐพ์•„์•ผํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. - bisect_left(), bisect_right() ํ•จ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค. bisect_left, bisect_right - bisect_left(list, n) : ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋ฆฌ์ŠคํŠธ list์— ๋ฐ์ดํ„ฐ n์„ ์‚ฝ์ž…ํ•  ๊ฐ€์žฅ ์™ผ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š”๋‹ค. - bisect_right(list, n) : ์ •๋ ฌ๋œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉฐ ๋ฆฌ์ŠคํŠธ list์— ๋ฐ์ดํ„ฐ n์„ ์‚ฝ์ž…ํ•  ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์ธ๋ฑ์Šค๋ฅผ ์ฐพ๋Š”๋‹ค. - bisect_left(list, n, lo = 0, hi = len(list)) : lo์™€ hi๋Š” ๊ณ ๋ คํ•  ๋ฆฌ์ŠคํŠธ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ์ง€์ •ํ•˜๋Š” ๋ฐ ์‚ฌ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] BFS(Breadth First Search)

BFS๋ž€? - ํ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. - ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋ฉด์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ ๋…ธ๋“œ์˜ ์ •๋ณด๋งŒ ํ์— ๋„ฃ๊ณ , ํ์–ด ๋“ค์–ด์žˆ๋˜ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•œ๋‹ค. - ํŒŒ์ด์ฌ์—์„œ ํ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ, list๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ธ๋ฐ. list.pop(0)์€ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(N)์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ ‡๊ฒŒ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ ์‹œ๊ฐ„์ ์œผ๋กœ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ collections ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ deque๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค. - ๋˜ํ•œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ ์ค‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋˜ ๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ์„ ๋•Œ๋Š” set ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ํƒ€์ดํ‹€ ์ž…๋ ฅ๋ถ€๋ถ„2 BFS ๊ตฌํ˜„ - ๋™์ž‘ ๊ณผ์ • 1) root ๋…ธ๋“œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด deque์— root๋ฅผ ๋„ฃ๋Š”๋‹ค. 2) ํ๊ฐ€ ๋นŒ ๋–„๊นŒ์ง€ loop๋ฅผ ๋Œ๋ฆฐ๋‹ค. 3) ํ์˜ ๋งจ์•ž ๋…ธ๋“œ๋ฅผ..

[์•Œ๊ณ ๋ฆฌ์ฆ˜] DFS(Depth First Search, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

DFS๋ž€? - ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋๊นŒ์ง€ ํƒ์ƒ‰ํ•ด ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ , ์ด์ „ ๊ฐˆ๋ฆผ๊ธธ์—์„œ ์„ ํƒํ•˜์ง€ ์•Š์•˜๋˜ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ํƒ์ƒ‰ ๋ฐฉ๋ฒ• - ์Šคํƒ์œผ๋กœ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์Šคํƒ ๋Œ€์‹  ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ๋งŽ๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ ์ข…๋ฃŒ ์กฐ๊ฑด์„ ๋ฐ˜๋“œ์‹œ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค. DFS ๊ตฌํ˜„ - ๋™์ž‘ ๊ณผ์ • 1) ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž… ํ›„ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•œ๋‹ค. 2) ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด ๊ทธ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•œ๋‹ค. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์Šคํƒ์—์„œ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ๋‹ค. 3) 2๋ฒˆ์˜ ๊ณผ์ •์„ ๋”์ด์ƒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. def dfs(graph, start): vist = list() stack = list() stack.a..

[MyBatis] Unknow column '' in 'field list'

๋ฐœ์ƒ์›์ธ ์œ„์ฒ˜๋Ÿผ DB์— ํ•ด๋‹น ์ปฌ๋Ÿผ์ด ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋–ด๋‹ค. ์ด์— ๋Œ€ํ•œ ์›์ธ์€ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค. 1. ์ •๋ง ํ•ด๋‹น DB์— ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. 2. ์‚ฌ์šฉ์ž๊ฐ€ ๋ฌธ์ž์—ด๋กœ ์ค€ ๋ฐ์ดํ„ฐ๊ฐ€ ์Œ๋”ฐ์˜ดํ‘œ("")๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ์ง€ ์•Š๋‹ค. ๋‚˜ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” 2์— ์†ํ–ˆ๋‹ค. ํ•ด๊ฒฐ๋ฐฉ๋ฒ• ์ฝ”๋“œ๋ฅผ ๋ณด๋‹ˆ xml ํŒŒ์ผ์— ์˜คํƒ€๊ฐ€ ์žˆ์—ˆ๋‹ค. ${test} -> #{test} ๋‹ค์Œ๊ณผ ๊ฐ™์ด $๋ฅผ #๋กœ ๋ฐ”๊ฟ”์ฃผ๋‹ˆ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

[Python] ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋ฒ„๋ธ”์ •๋ ฌ - ์ด์›ƒํ•œ ๋‘ ๊ฐ’์„ ๋น„๊ตํ•ด ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. - ๋ชจ๋“  ์›์†Œ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ๋น„๊ตํ•˜์—ฌ swapํ•˜๋Š” ์ž‘์—…์„ ๋ฐ˜๋ณตํ•œ๋‹ค. - ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•˜๋‹ค. - ์ตœ๋Œ€ O(n^2)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„๋‹ค. # ๋ฒ„๋ธ”์ •๋ ฌ a = random.sample(range(1, 10), 5) print("=== bubble ===") print(a) # ์ •๋ ฌ ์ „ n = len(a) for i in range(n - 1): for j in range(n - 1 - i): if a[j] > a[j + 1]: a[j], a[j + 1] = a[j + 1], a[j] print(a) ์‚ฝ์ž…์ •๋ ฌ - ํ˜„์žฌ ์œ„์น˜์—์„œ, ์ด๋ฏธ ์ •๋ ฌ๋œ ์ด์ „ ๋ฐฐ์—ด๋“ค์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๋น„๊ตํ•˜์—ฌ ์ž์‹ ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ๊ทธ ์œ„์น˜์— ์‚ฝ์ž…ํ•œ๋‹ค. - ์ตœ์•…์˜ ๊ฒฝ์šฐ O(n^2), ์ตœ์„ ์˜ ..