์ „์ฒด ๊ธ€

๐Ÿ“‚ORM:JPA

@JoinColumn

๋‹ค๋Œ€์ผ ์—ฐ๊ด€๊ด€๊ณ„์—์„œ @JoinColumn(name) ์ปฌ๋Ÿผ ์ด๋ฆ„ ๋งคํ•‘์— ์‚ฌ์šฉ๋˜๋Š” ์–ด๋…ธํ…Œ์ด์…˜ ์—ฐ๊ด€๊ด€๊ณ„์—๋Š” ์•„๋ฌด๋Ÿฐ ์˜ํ–ฅ์ด ์—†๋‹ค ์กฐ์ธ ๋Œ€์ƒ ์ปฌ๋Ÿผ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด @JoinColumn(referencedColumnName)์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค! ๋”ฐ๋ผ์„œ ๋ฌด์กฐ๊ฑด @JoinColumn์„ ์ƒ๋žตํ•ด์„  ์•ˆ๋œ๋‹ค ์ผ๋Œ€๋‹ค ๋‹จ๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์—์„œ @JoinColumn @JoinColumn ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ผญ ๋ช…์‹œํ•ด์ค˜์•ผ ํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ค‘๊ฐ„ ํ…Œ์ด๋ธ”์„ ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•จ ์ผ๋Œ€๋‹ค ์–‘๋ฐฉํ–ฅ ์—ฐ๊ด€๊ด€๊ณ„์—์„œ @JoinColumn ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์„ ์ผ(1)์—๊ฒŒ ์ฃผ๋ ค ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค(N)์ชฝ์— @JoinColumn(insertable=false, updateable=false)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—ฐ๊ด€๊ด€๊ณ„์˜ ์ฃผ์ธ์„ ๊ฐ•์ œ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฐธ๊ณ  : https://hyeon9..

๐Ÿ“‚ORM:JPA

JPA ์ฟผ๋ฆฌ ( JPQL )

JPA๋Š” ๋‹ค์–‘ํ•œ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ•์„ ์ง€์›ํ•œ๋‹ค JPQL (๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„ JPQL๋กœ ํ•ด๊ฒฐ) QueryDSL ๋„ค์ดํ‹ฐ๋ธŒ SQL JDBC API ์ง์ ‘ ์‚ฌ์šฉ, MyBatis, SpringJdbcTemplate ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ JPQL์ด๋ž€? : ๊ฐ์ฒด์ง€ํ–ฅ SQL JPA๋Š” SQL์„ ์ถ”์ƒํ™”ํ•œ JPQL์ด๋ผ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์ฟผ๋ฆฌ ์–ธ์–ด(ํ…Œ์ด๋ธ”์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ๊ฒ€์ƒ‰)๋ฅผ ์ œ๊ณต SQL๊ณผ ๋ฌธ๋ฒ• ์œ ์‚ฌ, SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ์ง€์› SQL์„ ์ถ”์ƒํ™”ํ•ด์„œ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค SQL์— ์˜์กดX JPQL์€ ๊ฒฐ๊ตญ SQL๋กœ ๋ณ€ํ™˜๋œ๋‹ค ํ”„๋กœ์ ์…˜(SELECT) SELECT m FROM Member m : ์—”ํ‹ฐํ‹ฐ ํ”„๋กœ์ ์…˜ ๊ฒฐ๊ณผ๋กœ ๋‚˜์˜จ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ์ „๋ถ€ ์˜์†์„ฑ ์ปจํ…์ŠคํŠธ์—์„œ ๊ด€๋ฆฌ๊ฐ€ ๋œ๋‹ค ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด up..

๐Ÿ“‚ORM:JPA

๊ฐ’ ํƒ€์ž…, ๊ฐ’ ํƒ€์ž… ์ปฌ๋ž™์…˜

๊ฐ’ ํƒ€์ž… ์ˆ˜์ • ๊ฐ’ ํƒ€์ž…์€ immutable ํ•ด์•ผ ํ•จ ๊ฐ’ ํƒ€์ž…์˜ setter๋กœ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ๋จ update๋ฌธ์ด ๋‚˜๊ฐ€์ง€๋งŒ side effect๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ์Œ Member findMember = em.find(Member.class,member.getId()); // ๊ฐ’ํƒ€์ž… Address์˜ homeCity ๋ฅผ newCity๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์Œ findMember.getHomeAddress().setCity("newCity"); // ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์•ˆ๋จ ์•„๋ž˜์™€ ๊ฐ™์ด ์ƒˆ๋กœ์šด Address๋กœ ๊ฐˆ์•„๋ผ์›Œ์•ผ ํ•œ๋‹ค // ๊ฐ’ํƒ€์ž… Address์˜ homeCity ๋ฅผ newCity๋กœ ๋ฐ”๊พธ๊ณ  ์‹ถ์Œ Address a = findMember.getHomeAddress(); findMember.setHomeAddress(new Addres..

๐Ÿ“‚ORM:JPA

์ฆ‰์‹œ ๋กœ๋”ฉ๊ณผ ์ง€์—ฐ ๋กœ๋”ฉ

์—ฐ๊ด€๋œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ํ•˜๋‚˜๋ฉด ์ฆ‰์‹œ ๋กœ๋”ฉ ์ปฌ๋ ‰์…˜์ด๋ฉด ์ง€์—ฐ ๋กœ๋”ฉ์„ ์‚ฌ์šฉ ์–ด๋…ธํ…Œ์ด์…˜ default @ManyToOne, @OneToOne ์ฆ‰์‹œ ๋กœ๋”ฉ(FetchType.EAGER) @OneToMany, @ManyToMany ์ง€์—ฐ ๋กœ๋”ฉ(FetchType.LAZY) ManyToMany๋Š” ์“ฐ์ง€ ๋ง์ž ์‹ค๋ฌด์—์„  ์ง€์—ฐ ๋กœ๋”ฉ๋งŒ ์‚ฌ์šฉํ•˜์ž ์ฆ‰์‹œ ๋กœ๋”ฉ์„ ํ•˜๋ฉด ์˜ˆ์ƒ์น˜ ๋ชปํ•œ SQL์ด ๋ฐœ์ƒ ์ฆ‰์‹œ ๋กœ๋”ฉ์€ JPQL์—์„œ N+1 ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚จ๋‹ค. @ManyToOne, @OneToOne์€ ๊ธฐ๋ณธ์ด ์ฆ‰์‹œ ๋กœ๋”ฉ ๐Ÿ‘‰ LAZY๋กœ ์„ค์ • ๋ชจ๋“  ์—ฐ๊ด€๊ด€๊ณ„์— ์ง€์—ฐ ๋กœ๋”ฉ์„ ์„ค์ •ํ•œ ๋’ค JPQL fetch์กฐ์ธ์ด๋‚˜, ์—”ํ‹ฐํ‹ฐ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์ž ์ฆ‰์‹œ๋กœ๋”ฉ์€ ์ƒ์ƒํ•˜์ง€ ๋ชปํ•œ ์ฟผ๋ฆฌ๊ฐ€ ๋‚˜๊ฐ„๋‹ค

๐Ÿ“‚๋ฐฑ์—”๋“œ : BackEnd

Spring๊ณผ SpringBoot์˜ ์ฐจ์ด

Spring์ด๋ž€? ์ •ํ™•ํ•œ ํ‘œํ˜„์œผ๋กœ๋Š” '์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ(Spring Framework) ์˜์กด์„ฑ ์ฃผ์ž…(DI) ์ œ์–ด์—ญ์ „ (IOC) ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP) ์ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ์š”์†Œ ์œ„ ์š”์†Œ๋“ค์„ ํ†ตํ•ด ๋А์Šจํ•œ ๊ฒฐํ•ฉ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Œ ์œ„์™€ ๊ฐ™์ด ๋А์Šจํ•œ ๊ฒฐํ•ฉ์œผ๋กœ ๊ฐœ๋ฐœํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์šฉ์ดํ•จ ๊ด€์ ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP)๋ž€? AOP๋Š” ์‰ฝ๊ฒŒ ๋งํ•ด, OOP(๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์„ ๋ณด์™„ํ•˜๋Š” ์ˆ˜๋‹จ์œผ๋กœ, ์—ฌ๋Ÿฌ ๊ณณ์— ์“ฐ์ด๋Š” ๊ณตํ†ต ๊ธฐ๋Šฅ์„ ๋ชจ๋“ˆํ™”ํ•˜์—ฌ ํ•„์š”ํ•œ ๊ณณ์— ์—ฐ๊ฒฐํ•จ์œผ๋กœ์จ ์œ ์ง€๋ณด์ˆ˜ ๋˜๋Š” ์žฌ์‚ฌ์šฉ์— ์šฉ์ดํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ AOP๋ฅผ ํ†ตํ•ด ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์— ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋กœ์ง ์ˆ˜์ • ์—†์ด ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ ์ด๋Ÿฐ ๊ฐœ๋ฐœ ๋ฐฉ์‹์„ ํ†ตํ•ด ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถ˜ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•จ SpringBoot๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ ์ด์œ  ์Šคํ”„๋ง์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„..

๐Ÿ“‚์ฝ”๋”ฉํ…Œ์ŠคํŠธ:CodingTest

[swea 1868-ํŒŒ์ด์ฌ] ํŒŒํ•‘ํŒŒํ•‘ ์ง€๋ขฐ์ฐพ๊ธฐ

์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด 1. ํ–‰ ์šฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋‹ค 0์ธ ๊ณณ์„ ๋งŒ๋‚˜๋ฉด BFS๋ฅผ ์ˆ˜ํ–‰(์—ฐ์‡„์ ์œผ๋กœ ํด๋ฆญ)ํ•˜๋ฉฐ ์ •๋‹ต(ans)๋ฅผ 1์ฆ๊ฐ€ ์ด๋•Œ 0์œผ๋กœ ์ธํ•ด ์—ฐ์‡„์ ์œผ๋กœ ํด๋ฆญ๋œ ๊ณณ์„ -๋กœ ํ‘œ์‹œ 2. ํ–‰ ์šฐ์„  ๋ฐฉํ–ฅ์œผ๋กœ ๋‹ค์‹œ ํƒ์ƒ‰ํ•˜๋ฉฐ ์—ฐ์‡„์ ์œผ๋กœ ํด๋ฆญ๋˜์ง€ ์•Š์€ ๊ณณ์˜ ๊ฐฏ์ˆ˜๋งŒํผ ์ •๋‹ต(ans)์— ์ถ”๊ฐ€ ์ฝ”๋“œ import sys from collections import deque input = sys.stdin.readline # SWEA ํŒŒํ•‘ํŒŒํ•‘ ์ง€๋ขฐ์ฐพ๊ธฐ # 1. ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋‹ค 0์„ ๋งŒ๋‚˜๋ฉด BFS ์ˆ˜ํ–‰ (๋ฐฉ๋ฌธ์ฒดํฌ), cnt += 1 # 2. ์ฒดํฌ ๋˜์ง€ ์•Š์€ ์นธ ์„ธ๊ธฐ def click(r, c): # ํด๋ฆญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ (์ค‘๋ณต ํด๋ฆญ์€ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Œ), 0์ด๋ฉด True๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ํ•จ์ˆ˜ if arr[r][c] == '..

๐Ÿ“‚์ฝ”๋”ฉํ…Œ์ŠคํŠธ:CodingTest

[swea 3304-ํŒŒ์ด์ฌ]์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด

swea 3304 ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„ ์ˆ˜์—ด ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ์šฐ์„  ์ตœ์ ํ•ด(์ตœ๋Œ“๊ฐ’)์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ’€ ์ˆ˜ ์žˆ๋‹ค. ์ˆœํ™˜์‹(์ ํ™”์‹)์„ ์„ธ์šธ๋•Œ๋Š” "์ตœ์ ํ•ด์˜ ์ผ๋ถ€๋ถ„์ด ๊ทธ ๋ถ€๋ถ„์˜ ์ตœ์ ํ•ด" ๋ฅผ ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค. ์ด ๋ฌธ์ œ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‘ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์™€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ๋ฅผ ์ƒ๊ฐํ•˜์—ฌ ์ˆœํ™˜์‹์„ ์„ธ์›Œ์•ผ ํ•œ๋‹ค. (DP(i,j)์—์„œ i์™€ j๋Š” ๋ฌธ์ž์—ด X์™€ Y์˜ 1...i, 1...j ๋ฒˆ์งธ๊นŒ์ง€์˜ ๋ฌธ์ž์—ด) (1) ๋‘ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ ์˜ˆ๋ฅผ๋“ค์–ด CDABE์™€ CDE๋ผ๊ณ  ๊ฐ€์ •ํ•ด๋ณด๋ฉด ๋งˆ์ง€๋ง‰ ๋ฌธ์ž E๊ฐ€ ๊ฐ™๋‹ค. E๋Š” ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์— ๋ฐ˜๋“œ์‹œ ํฌํ•จ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด๋Š” ๋‘ ๋ฌธ์ž์—ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž E๋ฅผ ์ œ๊ฑฐํ•œ ํ›„ ์ฐพ์€ ์ตœ์žฅ ๊ณตํ†ต ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ธธ์ด +..

๐Ÿ“‚์ฝ”๋”ฉํ…Œ์ŠคํŠธ:CodingTest

[swea 3307-ํŒŒ์ด์ฌ]์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด

swea 3307 ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด ์‚ฌ์šฉ์–ธ์–ด : PYTHON ํ’€์ด ๋ฐฑ์ค€์—์„œ ํ•œ ๋ฒˆ ํ’€์ด๋ฅผ ํ–ˆ๋˜ ๋ฌธ์ œ์˜€๋‹ค dp๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํ’€์–ด์•ผ ํ•˜๋Š”๋ฐ ์ ํ™”์‹์„ ์–ด๋–ป๊ฒŒ ์„ธ์›Œ์•ผ ํ•  ์ง€ ์ž˜ ์ƒ๊ฐ์ด ๋‚˜์ง€ ์•Š์•˜๋‹ค. ์™œ ์ ํ™”์‹์„ ์„ธ์šฐ์ง€ ๋ชปํ–ˆ๋Š”์ง€ ํ’€์ด๋ฅผ ๋ณด๊ณ  ์•Œ์•˜๋‹ค. ์ด ๋ฌธ์ œ๋Š” 0~n๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ dp๋ฆฌ์ŠคํŠธ๋ฅผ ์ฑ„์šด๋’ค dp[n-1]์ด ์ •๋‹ต์ด ๋˜๋Š”๊ฒƒ์ด ์•„๋‹Œ max(dp)๊ฐ€ ์ •๋‹ต์ด๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. dp[i] ๋Š” l[i] (์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ์ˆ˜์—ด) ๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋Š” ์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด์˜ ๊ธธ์ด์ด๋‹ค 0

mc.thd
song