์ „์ฒด ๊ธ€

https://school.programmers.co.kr/learn/courses/30/lessons/60057 ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค ์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”. programmers.co.kr ๋ฌธ์ œ ๋ฌธ์ œ ์„ค๋ช… ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ „๋ฌธ๊ฐ€๊ฐ€ ๋˜๊ณ  ์‹ถ์€ "์–ดํ”ผ์น˜"๋Š” ๋ฌธ์ž์—ด์„ ์••์ถ•ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ ๋น„์†์‹ค ์••์ถ• ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๊ณ  ์žˆ๋Š”๋ฐ, ๋ฌธ์ž์—ด์—์„œ ๊ฐ™์€ ๊ฐ’์ด ์—ฐ์†ํ•ด์„œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๊ทธ ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜์™€ ๋ฐ˜๋ณต๋˜๋Š” ๊ฐ’์œผ๋กœ ํ‘œํ˜„ํ•˜์—ฌ ๋” ์งง์€ ๋ฌธ์ž์—ด๋กœ ์ค„์—ฌ์„œ ํ‘œํ˜„ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต๋ถ€ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ„๋‹จํ•œ ์˜ˆ๋กœ "aabbaccc"์˜ ๊ฒฝ์šฐ "2a..
API๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ์ด 3๊ฐœ์˜ ํด๋ž˜์Šค๊ฐ€ ํ•„์š” Request ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์„ DTO API ์š”์ฒญ์„ ๋ฐ›์„ Controller ํŠธ๋žœ์žญ์…˜, ๋„๋ฉ”์ธ ๊ธฐ๋Šฅ ๊ฐ„์˜ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” Service โœ… ์—ฌ๊ธฐ์„œ ๋งŽ์€ ์˜คํ•ด → Service์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ But, ์ „ํ˜€ ๊ทธ๋ ‡์ง€ ์•Š์Œ โœ… Service๋Š” ํŠธ๋žœ์žญ์…˜, ๋„๋ฉ”์ธ ๊ฐ„ ์ˆœ์„œ ๋ณด์žฅ์˜ ์—ญํ• ๋งŒ ํ•จ Web Layer ํ”ํžˆ ์‚ฌ์šฉํ•˜๋Š” ์ปจํŠธ๋กค๋Ÿฌ(@Controller)์™€ JSP/Freemarker ๋“ฑ์˜ ๋ทฐ ํ…œํ”Œ๋ฆฟ ์˜์—ญ ์ด์™ธ์—๋„ ํ•„ํ„ฐ(@Filter), ์ธํ„ฐ์…‰ํ„ฐ, ์ปจํŠธ๋กค๋Ÿฌ ์–ด๋“œ๋ฐ”์ด์Šค(@ControllerAdvice)๋“ฑ ์™ธ๋ถ€ ์š”์ฒญ๊ณผ ์‘๋‹ต์— ๋Œ€ํ•œ ์ „๋ฐ˜์ ์ธ ์˜์—ญ Service Layer @Service์— ์‚ฌ์šฉ๋˜๋Š” ์„œ๋น„์Šค ์˜์—ญ ์ผ๋ฐ˜์ ์œผ๋กœ Controller์™€ Dao ์ค‘๊ฐ„ ..
MyBatis ์‹ค์ œ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ์‹œ๊ฐ„ ๋ณด๋‹ค SQL ์„ ๋‹ค๋ฃจ๋Š” ์‹œ๊ฐ„์ด ๋” ๋งŽ์•˜์Œ ๊ฐ์ฒด ๋ชจ๋ธ๋ง๋ณด๋‹ค๋Š” ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์—๋งŒ ์ง‘์ค‘ํ•˜๊ณ , ๊ฐ์ฒด๋ฅผ ๋‹จ์ˆœํžˆ ํ…Œ์ด๋ธ”์— ๋งž์ถ”์–ด ๋ฐ์ดํ„ฐ ์ „๋‹ฌ ์—ญํ• ๋งŒ ํ•˜๋Š” ๊ฐœ๋ฐœ์„ ํ•˜๊ฒŒ ๋จ MyBatis๋Š” ORM์ด ์•„๋‹˜. SQL Mapper์ด๋‹ค. ORM์€ ๊ฐ์ฒด๋ฅผ ๋งคํ•‘ํ•˜๋Š” ๊ฒƒ์ด๊ณ , SQL Mapper๋Š” ์ฟผ๋ฆฌ๋ฅผ ๋งคํ•‘ JPA ํ˜„๋Œ€์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(RDB, Relational Database)๋Š” ๋น ์งˆ ์ˆ˜ ์—†๋Š” ์š”์†Œ ๊ทธ๋Ÿฌ๋‹ค ๋ณด๋‹ˆ ๊ฐ์ฒด๋ฅผ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฌด์—‡๋ณด๋‹ค ์ค‘์š” ํ˜„์—… ํ”„๋กœ์ ํŠธ ๋Œ€๋ถ€๋ถ„์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ณด๋‹ค SQL๋กœ ๊ฐ€๋“ํ•˜๊ฒŒ ๋œ ๊ฒƒ ์ด๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ SQL๋งŒ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ธ๋ฐ, SQL๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ˆ ๊ฐ ํ…Œ์ด๋ธ”๋งˆ๋‹ค ๊ธฐ๋ณธ์ž‘์ธ CRUD(Create, ..
ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์†Œ๊ฐœ TDD์™€ Unit Test(๋‹จ์œ„ ํ…Œ์ŠคํŠธ)๋Š” ๋‹ค๋ฆ„ TDD : ํ…Œ์ŠคํŠธ๊ฐ€ ์ฃผ๋„ํ•˜๋Š” ๊ฐœ๋ฐœ → ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ํ•ญ์ƒ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  (Red) ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋Š” ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  (Green) ํ…Œ์ŠคํŠธ๊ฐ€ ํ†ต๊ณผํ•˜๋ฉด ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋ง (Refactoring) ๋ฐ˜๋ฉด ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” TDD์˜ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ธ ๊ธฐ๋Šฅ ๋‹จ์œ„์˜ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ ๐Ÿ‘‰ ์ˆœ์ˆ˜ํ•˜๊ฒŒ ํ…Œ์ŠคํŠธ๋งŒ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ
Junit 5 Annotation Junit5์—์„œ ์ œ๊ณตํ•˜๋Š” org.junit.jupiter.api ํŒจํ‚ค์ง€ ๋‚ด์˜ ์–ด๋…ธํ…Œ์ด์…˜ @Test ํ•ด๋‹น ์–ด๋…ธํ…Œ์ด์…˜์„ ๋‹ฌ์•„๋‘” ๋ฉ”์„œ๋“œ๊ฐ€ ํ…Œ์ŠคํŠธ ๋ฉ”์„œ๋“œ์ž„์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. @BeforeEach ๊ฐ๊ฐ์˜ @Test, @RepeatedTest, @ParameterizedTest, @TestFactory ์ „์— ์‹คํ–‰๋จ @AfterEach ๊ฐ๊ฐ์˜ @Test, @RepeatedTest, @ParameterizedTest, @TestFactory ํ›„์— ์‹คํ–‰๋จ @BeforeAll ๋ชจ๋“  @Test, @RepeatedTest, @ParameterizedTest, @TestFactory ์ „์— ์‹คํ–‰๋จ @AfterAll ๋ชจ๋“  @Test, @RepeatedTest, @ParameterizedTest, @Te..
https://www.acmicpc.net/problem/17825 17825๋ฒˆ: ์ฃผ์‚ฌ์œ„ ์œท๋†€์ด ์ฃผ์‚ฌ์œ„ ์œท๋†€์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒŒ์ž„ํŒ์—์„œ ํ•˜๋Š” ๊ฒŒ์ž„์ด๋‹ค. ์ฒ˜์Œ์—๋Š” ์‹œ์ž‘ ์นธ์— ๋ง 4๊ฐœ๊ฐ€ ์žˆ๋‹ค. ๋ง์€ ๊ฒŒ์ž„ํŒ์— ๊ทธ๋ ค์ง„ ํ™”์‚ดํ‘œ์˜ ๋ฐฉํ–ฅ๋Œ€๋กœ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ง์ด ํŒŒ๋ž€์ƒ‰ ์นธ์—์„œ ์ด๋™์„ ์‹œ์ž‘ํ•˜๋ฉด www.acmicpc.net ํ’€์ด ์ง€๋ฆ„๊ธธ์ด ์•„๋‹Œ ์นธ๋“ค์€ +2์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ  ์žˆ๊ณ , ์ง€๋ฆ„๊ธธ์„ ๊ฐ€์ง„ ์นธ, 10/20/30์€ ๊ต์ฐจ์ ์ธ 25๋กœ ํ–ฅํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฐ ๋…ธ๋“œ๋Š” ์ ์ˆ˜, ๋„์ฐฉ์ง€์ ์ธ์ง€, ๋ง์ด ์žˆ๋Š”์ง€, ์ง€๋ฆ„๊ธธ ์—ฌ๋ถ€๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค. init() ์ง€๋„๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ•จ์ˆ˜ !! ์ œ์ผ ๋ฐ”๊นฅ์ชฝ ๊ฒฝ๋กœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ง€๋ฆ„๊ธธ์„ ๊ฐ€์ง„ 10/20/30 ์นธ์„ ์ฐพ์•„ ์ง€๋ฆ„๊ธธ์„ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค! permutation(int depth) ์ฃผ์‚ฌ์œ„์˜ ๊ฐ ์ˆซ์ž๋ฅผ 1~4๋ฒˆ ๋ง..
https://www.acmicpc.net/problem/14594 14594๋ฒˆ: ๋™๋ฐฉ ํ”„๋กœ์ ํŠธ (Small) ์ฒซ ๋ฒˆ์งธ ํ–‰๋™์œผ๋กœ 1๋ฒˆ๊ณผ 2๋ฒˆ ๋ฐฉ์ด ํ•ฉ์ณ์ ธ (1, 2), (3), (4), (5) ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ์ดํ›„ ๋‘ ๋ฒˆ์งธ ํ–‰๋™์œผ๋กœ 2, 3, 4๋ฒˆ ๋ฐฉ์ด ํ•ฉ์ณ์ ธ (1, 2, 3, 4), (5)์˜ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๋‚จ์•„์žˆ๋Š” ๋™๋ฐฉ์˜ ์ˆ˜๋Š” 2๊ฐ€ ๋œ๋‹ค. www.acmicpc.net ๋ฌธ์ œ ๋™์•„๋ฆฌ๋ฐฉ์ด ๊ฐ€์ง€๊ณ  ์‹ถ์—ˆ๋˜ ๋ณ‘์ฐฌ์ด๋Š” LINK ์‚ฌ์—…๋‹จ์— ๋ฌธ์˜ํ•˜์—ฌ N๊ฐœ์˜ ๋ฐฉ ์ค‘์˜ ํ•˜๋‚˜๋ฅผ ์–ป์„ ๊ธฐํšŒ๋ฅผ ์–ป์—ˆ๋‹ค. ์ผ์ž๋กœ ๋˜์–ด์žˆ๋Š” ๊ฑด๋ฌผ์— N๊ฐœ์˜ ๋ฐฉ์€ ์ผ์ง์„ ์ƒ์— ์กด์žฌํ•˜๋ฉฐ, ๊ฐ ๋ฐฉ์—๋Š” ๋ฒˆํ˜ธ๊ฐ€ ๋งค๊ฒจ์ ธ ์žˆ๋‹ค. ๋งจ ์™ผ์ชฝ ๋ฐฉ์˜ ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ์ด๋ฉฐ, ์ˆœ์„œ๋Œ€๋กœ ์ฆ๊ฐ€ํ•˜์—ฌ ๋งจ ์˜ค๋ฅธ์ชฝ ๋ฐฉ์˜ ๋ฒˆํ˜ธ๊ฐ€ N๋ฒˆ์ด๋‹ค. ๊ฐ ๋ฐฉ ์‚ฌ์ด์—๋Š” ๋ฐฉ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๋ฒฝ์ด ์กด์žฌํ•œ๋‹ค. ๋ฌผ๋ก ..
https://www.acmicpc.net/problem/13460 13460๋ฒˆ: ๊ตฌ์Šฌ ํƒˆ์ถœ 2 ์ฒซ ๋ฒˆ์งธ ์ค„์—๋Š” ๋ณด๋“œ์˜ ์„ธ๋กœ, ๊ฐ€๋กœ ํฌ๊ธฐ๋ฅผ ์˜๋ฏธํ•˜๋Š” ๋‘ ์ •์ˆ˜ N, M (3 ≤ N, M ≤ 10)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ N๊ฐœ์˜ ์ค„์— ๋ณด๋“œ์˜ ๋ชจ์–‘์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ธธ์ด M์˜ ๋ฌธ์ž์—ด์ด ์ฃผ์–ด์ง„๋‹ค. ์ด ๋ฌธ์ž์—ด์€ '.', '#', 'O', 'R', 'B' www.acmicpc.net ๋ฌธ์ œ ์Šคํƒ€ํŠธ๋งํฌ์—์„œ ํŒ๋งคํ•˜๋Š” ์–ด๋ฆฐ์ด์šฉ ์žฅ๋‚œ๊ฐ ์ค‘์—์„œ ๊ฐ€์žฅ ์ธ๊ธฐ๊ฐ€ ๋งŽ์€ ์ œํ’ˆ์€ ๊ตฌ์Šฌ ํƒˆ์ถœ์ด๋‹ค. ๊ตฌ์Šฌ ํƒˆ์ถœ์€ ์ง์‚ฌ๊ฐํ˜• ๋ณด๋“œ์— ๋นจ๊ฐ„ ๊ตฌ์Šฌ๊ณผ ํŒŒ๋ž€ ๊ตฌ์Šฌ์„ ํ•˜๋‚˜์”ฉ ๋„ฃ์€ ๋‹ค์Œ, ๋นจ๊ฐ„ ๊ตฌ์Šฌ์„ ๊ตฌ๋ฉ์„ ํ†ตํ•ด ๋นผ๋‚ด๋Š” ๊ฒŒ์ž„์ด๋‹ค. ๋ณด๋“œ์˜ ์„ธ๋กœ ํฌ๊ธฐ๋Š” N, ๊ฐ€๋กœ ํฌ๊ธฐ๋Š” M์ด๊ณ , ํŽธ์˜์ƒ 1×1ํฌ๊ธฐ์˜ ์นธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ๊ฐ€์žฅ ๋ฐ”๊นฅ ํ–‰๊ณผ ์—ด์€ ๋ชจ๋‘ ๋ง‰ํ˜€์ ธ ์žˆ๊ณ , ๋ณด๋“œ์—๋Š” ..
KIMHYEYUN
๐Ÿ’