์ ์ฒด ๊ธ250 [Effective Kotlin] ์์ดํ 32. ์์ฑ์ ๋์ ํฉํ ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉํ๋ผ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ฉฐ ๊ฐ์ฅ ์๋ฏธ ์๊ฒ ์ฝ์ ์ฑ ์ [์ดํํฐ๋ธ ์๋ฐ]์ด๋ค. ์๋ฐ๋ฅผ ๋ง๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์งํํ ์ฑ ์ด๋ฏ๋ก, ์๋ฐ๋ฅผ ์๋ฐ๋ต๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด ์์ฃผ ๋ช ํํ๊ฒ ์ค๋ช ๋์ด ์๋ค. ๊ฐ์ฅ ์ฒซ ์ฑํฐ์ธ '์์ฑ์ ๋์ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ผ'๋ผ๋ ์์ดํ ์ ๊ต์ฅํ ์๋ฏธ ์๊ฒ ์ฝ๊ฒ ๋์๊ณ , ๊ทธ ๋ด์ฉ์ ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ ์ฉํ์๋ค. ์ฝํ๋ฆฐ๋ ์๋ฐ์ ์ด์ ์ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ ์ธ์ด์ด๋ฏ๋ก, ๋น์ทํ๊ฒ ์ ์ฉ ๋๋ ๋ถ๋ถ์ด ์์์ง๋ฅผ ์๊ฐํด ๋ดค๋ค. ํ์ฌ์ ๋ค์ด๊ฐ์ ์ฝํ๋ฆฐ์ ๋ฐฐ์ฐ๊ณ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์, ๊ฐ์ฅ ๋์ ๋์๋ ๋ถ๋ถ์ด dto ๊ฐ์ฒด๋ฅผ ๋งคํํ๋ ๋ถ๋ถ์ด์๊ณ , ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ด๋จ๊น๋ผ๋ ์๊ฐ์ ํ๋ค. ์ฝํ๋ฆฐ์ ์ฌ์ฉํ๋ ๋ถ๋ค๊ณผ ๊ตฌ๊ธ๋ง์ ํตํด ์๋ฐ์ ๋์ผํ๊ฒ ํฉํ ๋ฆฌ ๋ฉ์๋๋ฅผ ๋ง์ด๋ค ์ฌ์ฉํ๋ค๋ ์ ๋ณด๋ฅผ ์ป์๊ณ , ๊ทธ๋๋ก ์ ์ฉํ์๋ค. ์ดํํฐ๋ธ.. 2023. 1. 29. [Effective kotlin] ์์ดํ 27. ๋ณํ๋ก๋ถํฐ ์ฝ๋๋ฅผ ๋ณดํธํ๋ ค๋ฉด ์ถ์ํ๋ฅผ ์ฌ์ฉํ๋ผ ์๋ฐ๋ฅผ ๊ณต๋ถํ๋ฉฐ ๊ฐ์ฒด์งํฅ์ ์ ๋๋ก ๊ณต๋ถํ๊ธฐ ์์ํ๊ณ , ๊ฐ์ฒด์งํฅ์ 4๋ ํน์ฑ ์ค '์ถ์ํ'์ ์ฐธ๋ ์๋ฏธ๋ฅผ ์๊ธฐ๊น์ง ์๊ฐ์ด ๊ฑธ๋ ธ๋ค. ๊ฒฐ๋ก ์ ๋ง์ด ๊ณต๋ถํ๊ณ ์๊ฐํ๋ฉฐ ํ์ฅํ๊ณ ์ ์ฉํด ๋ด์ผ ๊ทธ ์๋ฏธ๋ฅผ ๋น๋ก์ ์ดํดํ๋ฆฌ๋ผ ์๊ฐํ๋ค. ์์ const val NAME_PREFIX = "prefix" fun getName() : String = NAME_PREFIX + this.name ๊ฐ์ฅ ๊ฐ๋จํ ์ถ์ํ ๋ฐฉ๋ฒ์ด๋ค. ๋ณธ ์ฝ๋์์ String ๋ฆฌํฐ๋ด ๊ฐ์ ๋ฐ๋ก ๋นผ์ ์์ํ๋ฅผ ์ํค๋ฉด ์ดํด๋ ์ฌ์ธ ๋ฟ ์๋๋ผ. ๋ณ๊ฒฝํ๊ธฐ๋ ํจ์ฌ ์์ํ๋ค. ๋ฆฌํฐ๋ด ๊ฐ์ ์๋ฏธ ์๋ ์ด๋ฆ์ ๋ถ์ผ ์ ์๊ณ , ๋ณ๊ฒฝ์ด ์ฝ๋ค. ํจ์ ํน์ ํ์๋ฅผ ํจ์๋ก ์ ์ธํ๋ฉด, ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค. ์ฝํ๋ฆฐ์์๋ ๊ฐ๋จํ ํ์ฅ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฌ๋ฌ ๊ณณ์์ ์ฌ์ฌ์ฉํ ์ ์์ด, ์ถ์.. 2023. 1. 29. [Effective Kotlin] ์์ดํ 24. ์ ๋ค๋ฆญ ํ์ ๊ณผ variance ํ์ ์๋ฅผ ํ์ฉํ๋ผ ์๋ฐ๋ฅผ ๊ณต๋ถํ๊ณ ์ ์ฉํ๋ฉด์ ์ถ์ํ๋ฅผ ํ๊ธฐ ์ํด ์ธํฐํ์ด์ค๋ฅผ ์ ๊ทน ํ์ฉํ์๊ณ , ๊ฐํ์ ์ธ์ด์๊ธฐ์ ํนํ ํ์ ์ ์ ํ์ฉํ์ด์ผ ํ๋ค. ๊ทธ ๊ณผ์ ์์ ์ ๋ค๋ฆญ์ ๋ค์ ํ๋ฒ ๊ณต๋ถํ๊ฒ ๋์๊ณ , ๊ณต๋ณ, ๋ฐ๊ณต๋ณ ์ฑ ๋ฑ์ ํน์ง์ ์ ๋ค๋ฆญ์ด ์ด๋ป๊ฒ ํ์ด๋๋์ง ๊ณต๋ถํ๋ค. extend, super ๋ฑ์ ํ์ ์๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ ์ ์ ํ ์ ์ดํ์๋ ๊ธฐ์ต์ด ์๋ค. ์ฝํ๋ฆฐ๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ค๋ฆญ์ ํ์ ์๋ฅผ ์ ๊ณตํ๋ค. ์๋ฐ์ ๊ฒฐํจ์ ๊ฐ์ ํ๋ฉด์ ๋ง์ด์ง. Out ํ์ ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ณต๋ณ์ผ๋ก ๋ง๋ ๋ค. class University open class Student class FreshMan : Student() fun main(args: Array) { val b: University = University() // OK val a: Universi.. 2023. 1. 27. [Effective Kotlin] ์์ดํ 23. ํ์ ํ๋ผ๋ฏธํฐ์ ์๋์์ ํผํ๋ผ ์๋์์ด๋ ๋ฌด์์ธ๊ฐ? class Person(val name : String) { fun addPerson(name : String) { // ... } } addPerson() ํจ์์ ํ๋ผ๋ฏธํฐ๊ฐ Person class์ ํ๋กํฐํฐ ์ด๋ฆ๊ณผ ๊ฐ์์ง๋ค. ์ธ๋ถ ์ค์ฝํ์ ํ๋กํผํฐ๋ฅผ ๊ฐ๋ฆฌ๊ฒ ๋๋ ๊ฒฝ์ฐ๋ฅผ ์๋์์ด๋ผ ํ๋ค. ์ด๋ฅผ ๊ฐ๋ฐ์๊ฐ ์์์ฐจ๋ฆฌ๊ธฐ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค. ํ์ ํ๋ผ๋ฏธํฐ์์๋ ๋ฌธ์ ๊ฐ ์๊ธด๋ค. interface Payment class KakaoPay: Payment class NaverPay: Payment class PaymentHistory { fun addPayment(payment: T) { // ... } } ์ด๋ฌํ ๊ฒฝ์ฐ๋ PaymentHistory์ ์ ๋ค๋ฆญ ํ์ ๊ณผ addPayment()์ ํ์ .. 2023. 1. 25. [๊ฐ์๋ฌธ] Kotlin In Action์ ์ฝ๊ณ ํ์ฌ ์ ์ฌํ ํ์ฌ์์ ๋ฐฑ์๋ ์ธ์ด๋ ์ฝํ๋ฆฐ ๊ธฐ๋ฐ์ด๋ค. ์ฝํ๋ฆฐ์ ๋น ๋ฅด๊ฒ ์ ์ํด์ผ ํ๊ธฐ์, ์ ์ฌ ์ ๋ถํฐ ํํํ ๊ฐ๋ ์ ๊ณต๋ถํ์๋ค. ํ์ง๋ง ๊ตฌ๊ธ๊ณผ ์ ํ๋ธ๋ ์ ๋ณด์ ๋์กํจ๊ณผ ํ๊ณ, ๊ทธ๋ฆฌ๊ณ ์ ๋ขฐ์ฑ์ด ๋จ์ด์ง๋ค. ํ์คํ ์ธ์ด ๋ฐ ๋ฐฑ์๋ ๊ณต๋ถ๋ ์ฑ ์ด ์ง๋ฆฌ๋ผ๋ ๊ฒ์ด ๋ด ์ ๋ก ์ด๋ค..ใ ใ ์ ์ฌ ์ฒซ ๋ ์ฌ์ ๋ถ๊ป ์ฝํ๋ฆฐ ๊ด๋ จ ์์ ์ด ์๋์ง ์ฌ์ญค๋ดค๊ณ , ๊ฐ์ฌํ๊ฒ๋ ํ์พํ [์ฝํ๋ฆฐ ์ธ ์ก์ ] ์ฑ ์ ๋น๋ ค์ฃผ์ จ๋ค. ์ฑ ์ ๋ค๊ณ ํด๊ทผํ๊ณ , ๊ทธ ๋ ๋ฐค๋ถํฐ ๋ฐ๋ก ์ฝ๊ธฐ ์์ํ๋ค. ์ผ์ด ๋ง์ ๋ , ๋๋ฌด ํผ๊ณคํ ๋ ๊ณผ ์ผ์ ์ด ์๋ ๋ ์ ์ ์ธํ ๋ฐค 11์์๋ 1์๊ฐ ๊ผญ ๋ ์๋ฅผ ํ๊ณ ์์๋ ๋ค์ง๊ณผ ํจ๊ป. ์ ์ฝํ์ง ์์ ๊ฒ์ ์ผ๋ คํ์ง๋ง, ๋คํํ ์ด ์ฑ ์ด ์งํฅํ๊ณ ์ ํ๋ ๋ฐ๋ ๊ธฐ์กด ์๋ฐ ๊ฐ๋ฐ์์๊ฒ ์ด์ ์ด ๋ง์ถฐ์ ธ ์๋ ๊ฒ์ด ์ฐธ ์ธ์ ๊น์๋ค. ์ฑ ์ ๊ธฐ์กด ์.. 2023. 1. 17. ์ผ์ฃผ์ผ ๊ฐ ํ์ฌ ์ ์๊ธฐ ํ์ฌ์ ์ ์ฌํด์ ์ผ์ฃผ์ผ ๊ฐ ์จ๋ณด๋ฉ ๊ณผ์ ๋ฅผ ์ํํ๋ค. ๋น ๋ฅด๊ฒ ํ์ด ๋ณด์์ ๋ ๋ง๋ง์น ์์ ์๊ตฌ์ฌํญ๊ณผ ๊ธฐ๊ฐ ๋๋ฌธ์ ์ฝ์ง ์์ ๊ฑฐ๋ผ๋ ์๊ฐ์ ํ๋ค. ์ฒซ ๋ ๋งฅ ์ธํ ๋ถํฐ ์ ์ ์ด ์ด์ง์ด์งํ๊ณ , ๋ฐฐํฌ ๋๋ง ์ ๊น ์จ์ค๋ CLI๋ ๋ ์ ์ ์๊ฒ ํ๋ค. 5์ผ ๋์ ๋ง์ ํ์์ ์ฐธ์ํ๊ฒ ๋์๊ณ , ์ด๋ฒ ์ผ์ฃผ์ผ ์จ๋ณด๋ฉ์ ํ์คํ ๋๋ด๋์ผ ๋ค์์ฃผ๋ถํฐ ๋น๋ก์ ๋ด ํ ์ผ์ ํ์คํ๊ฒ ํ ์ ์๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๋ฌด์กฐ๊ฑด ๋๋ด๊ฒ ๋ค๋ ๋ค์ง์ ํ๋ค. ์ฝํ๋ฆฐ ์คํ๋ง ๋ถํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ณ ์คํ๋ง ์ํ๋ฆฌํฐ config ๋ฐ ๋๋ฉ์ธ ์ค๊ณ๊น์ง ๊ฑฐ์ง 2, 3์ผ ์๋ชจํ๋ค. ์ค๊ฐ์ ์๊ตฌ์ฌํญ์ ๋ค์ ๋ณด๊ฒ ๋์ด ์์ ์ ์์ ์ ๊ฑฐ๋ญํ๋ค. ๋ง์ด ์๋ค๊ณ ์๊ฐํ์ง๋ง, ๋๋ฉ์ธ ์ค๊ณ๋ ํ์คํ ๊พธ์คํ ์ฐ์ต์ด ํ์ํ ๊ฒ ๊ฐ๋ค. ๋ณธ๊ฒฉ์ ์ผ๋ก ๋น์ฆ๋์ค ๋ก์ง์ ์์ฑํ๊ณ API.. 2023. 1. 8. ์๋ก์ด ์์ ์์ทจ๋ฅผ ์์ํ๋ค. ์ด๋ฒ ์ฃผ๋ ์ด์ฌ ๋๋ฌธ์ ์ ์ ์ด ์์๋ค. ์ด์ ๊ฒจ์ฐ ์ด์ฌ๋ฅผ ๋ง์น๊ณ ํ์ํ ์ฉํ๋ค์ ๊ตฌ๋งคํ ํ ๊ฒจ์ฐ ์ ๋ฆฌ ๋ฐ ์์ ์ด ๋์๋ค. ๋์ค์ ํ์ฌ๋ฅผ ๋ค๋๊ฒ ๋ ๊ฒฝ์ฐ, ์ ์ผํ๊ฒ ๋ฐฉํด๋ฐ์ง ์๊ณ ๊ณต๋ถํ๋ฉฐ ์ ๋ฌด๋ฅผ ๋ณผ ์ ์๋ ๊ณต๊ฐ์ด ํ์ํ๊ธฐ์ ์ด์ฌ๋ฅผ ์๊ฐํ์๋ค. ์ ์ฌํ๊ฒ ๋์ด ๊พธ์คํ ์์ ์ผ๋ก ์ค์ค๋ก ์์ทจ ๋น์ฉ์ ์ถฉ๋นํ ์ ์๊ฒ ๋์๊ณ , ๋ฐ๋ก ์คํ์ผ๋ก ์ฎ๊ฒผ๋ค. ์์์ ๋ฏธ์ฝํ์ง๋ง ๋ชฉํํ๋ ์ถ์ ๊ทธ๋ฆฌ๋ฉฐ ์ฃผ๊ฑฐ ๊ณต๊ฐ์ ํ์ฅ์ ๊พธ์คํ ์ด๋ค๋๊ฐ ๊ฒ์ด๋ค. ์ ์ ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋น ๋ฅธ ์ ์์ ์ํด ์งฌ์งฌ์ด ์๋ก ์ฐ๊ฒ ๋ ์ธ์ด์ธ ์ฝํ๋ฆฐ ๊ฐ๋ ์ ๊ณต๋ถํ๊ณ ์๋ค. ํ์คํ ์์ง์ ๋ฏ์ค๋ค. ํด์ ์ฝํ๋ฆฐ ์คํ๋ง ํ๊ฒฝ์์ DB ์ฐ๋๋ ํด๋ณด๊ณ ์์ฃผ์์ฃผ ๊ฐ๋จํ api ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด๋ดค๋ค. ํ์ง๋ง ์ธํฐ๋ท์ผ๋ก๋ง ๋ณด๋ ๊ฑด ํ๊ณ๊ฐ ์๋ ๊ฒ ๊ฐ๋ค. .. 2023. 1. 1. [ํ๊ณ ] 2022๋ ์ ๋ง์น๋ฉฐ ์ด์ ์๋ 2022๋ ์ด ๋ฒ์จ ๋๋ ๊ฐ๋ค. ์๊ทธ์ ๊ฐ์๋ค. 2022๋ 1์ 1์ผ. 2021๋ 12์ 31๊ณผ 2022๋ 1์ 1์ผ ์๋ง๋ ์์ ์ด ๋๋๊ณ ์คํฐ๋๋ฅผ ์งํํ์ ๊ฒ์ด๋ค. ๋ ํด์ค๋ ๋๋ก ์คํฐ๋๊ฐ ๋๋๊ณ ์ง๊ฐ์ ์ ๋ฆฌ ์ฝ๋ฉ์ ํ๋ฉฐ ์ง์ธ๋ค๊ป ์นดํก ์ํด ์ธ์ฌ๋ฅผ ๋๋ฆฌ๊ณ ์ ์ ์ค๋ ๊ธฐ์ต์ด ์๋ค. 24์ด๊ณผ 25์ด์ ๊ฒฝ๊ณ, ๋ฐ ์ค์ญ์ด ๋์๋ค๋ ์ฌ์ค์ด ๊ทธ๋ ๊ฒ ๊ธฐ์์ง๋ ์ฌํ์ง๋ ์์๋ค. ํฌ๊ฒ ์๋ฏธ ๋ถ์ฌํ ์ฌ์ ๊ฐ ์์์ ๊ฒ์ด๋ฆฌ๋ผ. 2022๋ , ๋ ๋ฌด์์ ์ด๋ฃจ๊ณ ์ ํ๋์ง ์ค๋ก์ง ๊ฐ๋ฐ์๋ง ์ง์คํ๋ 2022๋ ์ด๋ค. ๋์ ํ์ง๋ง, ์น๊ตฌ๋ค์๊ฒ ํฌ์ํ๋ ์๊ฐ์กฐ์ฐจ ์๊น์ ๋ค. ์ฝ์์ ๋ง์ด ๋ชป ๋๊ฐ์ ์น๊ตฌ๋ค์ด ์์ดํดํ๊ฑฐ๋ ๊ฐ์ ์ด ์ํ์์ง๋ ๋ชจ๋ฅด๊ฒ ๋ค. ํ์ง๋ง ์ข ์ข Burned ์ํ๊ฐ ๋๋ฉด, ์ฌ๋ ๋ง๋๊ธธ ์ข์ํ๋ ๋ด๊ฐ ์น๊ตฌ๋ฅผ ์ฐพ๊ธด ํ์ง๋ง... 2022. 12. 29. [@DataJpaTest] h2 ์ธ๋ฉ๋ชจ๋ฆฌ db๋ฅผ ์ด์ฉํ ํ ์คํธ ์ค์ ๋ฐฉ๋ฒ ์๋ก ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํ๋ค๊ณ ์ตํ ๋ค์๊ณ , ํ์์ ์ธ ์์ญ์ด๊ธฐ ๋๋ฌธ์ ์ด์ ํญ์ ๋ง์ ์ ๊ธฐํ๊ณ ์๋ค. ๋ชจ๋ ์ผ์ด์ค๋ฅผ ํ ์คํธํ ์ด์ ๋ ์๊ธฐ ๋๋ฌธ์, ํฌ๊ฒ ๊ฒฝ์ฐ๋ฅผ ๋๋์ด ํ์ํ๋ค๊ณ ์๊ฐํ๋ ๋ถ๋ถ๋ง ์๋๋ฆฌ์ค, ํตํฉ, ๋จ์ ํ ์คํธ๋ฅผ ๋๋์ด ์งํํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ผ๊ณ ๋ค์๋ค. ๋ฐฐํฌ๋ฅผ ๊ณ์ ํด์ค๋ฉด์ jar ํ์ผ์ ๋น๋ํ๋ ๋์ค ํ ์คํธ๋ฅผ ์ ์ธํ๋ ๊ฒ์ ๋ฌด์๋ฏธํ๋ค๊ณ ํ๋จํ๊ธฐ ๋๋ฌธ์, ๋ชจ๋ ํ ์คํธ๋ฅผ ์ด๋ค ํ๊ฒฝ์์๋ ๋์ ๊ฐ ์ ์๊ฒ ๊ณ ๋ฏผ์ ํ๋ ๊ธฐ์ต์ด ์๋ค. ์ด๋ ๊ฒ ํ๋ํ๋ ์์ฑ๋ ์๊ฒ ์์๋๊ฐ๋ ๊ณต๋ถ๋ฅผ ํ๋ ๊ฒ์ด ์๋๋ ๋๋ฆฌ์ง๋ง, ์ ์๋ฏธํ ๋ฐ์ ๊ณผ์ ์ด๋ผ ๋๋๋ค. ์ด๋ฒ์ ๋๊ท๋ชจ ๋ฆฌํฉํ ๋ง์ ์ค์ํ๋ฉด์ ์ฝ๋ ์์ ๋ฐ ๊ตฌ์กฐ๊ฐ ํฌ๊ฒ ๊ฐํธ๋์๊ณ , ํ ์คํธ ์ฝ๋๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง์ด ์๊ฒจ์ ๋ค ์์ ํ๋ค. persi.. 2022. 12. 21. [๋ฆฌํฉํ ๋ง] ๋๋ฉ์ธ ๋ชจ๋ธ ์ค์ฌ Clean Architecture ๋ก์ ๋ฆฌํฉํ ๋ง ํ๋ก์ ํธ๋ฅผ ์๋ ์์ด ๋ฆฌํฉํ ๋งํ๋ค. ๋ณด๋ค ๋ ๊ฐ์ฒด์งํฅ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ, ์ ์ง ๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๊ธฐ ์ํ, ๋ ์์ ๊ฐ์ฒด๋ฅผ ์ํ ์ฝ๋๋ฅผ ๊ณ์ํด์ ๊ณ ๋ฏผํ๊ณ ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ๋ค. ์ง๋ ๋ฌ๋ถํฐ ํด์ ์ํํธ ์จ์ด ์ํคํ ์ฒ์ ๊ดํด์ ๊ด์ฌ์ด ์๊ฒผ๋ค. ํด๋ฆฐ ์ฝ๋๋ฅผ ์ถ๊ตฌํ๋ค ๋ณด๋ ์์ฐ์ค๋ฝ๊ฒ ์ค๊ณ์ ๊ณ ๋ฏผ์ผ๋ก ๊ท๊ฒฐ๋์๋ค. ์ํฐ๋ ๋ฐฑ์๋ ์ฑ๋ฆฐ์ง๋ฅผ ํ๋ฉฐ ์๊ฒ๋ ํด๋ฆฐ ์ํคํ ์ฒ, ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ ์ฒ ์ ์ ๋ฌธ, ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ก ์์ํ๋ ๋ง์ดํฌ๋ก ์๋น์ค๋ฅผ ์ฝ์ด๊ฐ๋ฉฐ, ๋ด๊ฐ ๊ตฌ์ฑํด์ค๋ ์ํํธ์จ์ด ์ค๊ณ์ ํฐ ์ ํ์ ์ ๋ง์ดํ๊ฒ ๋์๋ค. ๋จ์ํ ์์ ํ๋ก์ ํธ๋ง์ ๋ง๋๋๊ฒ ์๋ ๋ณธ ํ๋ก์ ํธ์ ์ด๋ฅผ ์ ์ฉ์์ผ๋ณด๊ธฐ๋ก ๊ฒฐ์ ํ๋ค. MSA ๋ ์ค๋ฒ ์์ง๋์ด๋ง์ด๋ผ ํ๋จํ๊ณ , ๋ชจ๋ ธ๋ฆฌ์ค ๊ตฌ์กฐ์ด์ง๋ง ์ต๋ํ ๋๋ฉ์ธ ๋ณ ๋ถ๋ฆฌ๊ฐ ๋ ์์ ๋ฐ์ด๋๋ ์ปจํ .. 2022. 12. 12. [๊ฐ์๋ฌธ] <๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ก ์์ํ๋ ๋ง์ดํฌ๋ก ์๋น์ค ๊ฐ๋ฐ> ์ ์ฝ๊ณ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ ์ฒ ์ ์ ๋ฌธ๊ณผ ๊ฐ์ด ๊ตฌ๋งคํ ์ฑ ์ด๋ค. DDD ์ MSA ๋ผ๋ ์ ๋ชฉ์ด ๋งค์ฐ ํฅ๋ฏธ๋ก์ ๊ณ , ๋ถ์ฐ ํ๊ฒฝ์์ ์ ์์ ์ธ ์ํคํ ์ฒ ์ค๊ณ ๋ฐ ์ฝ๋ ์์ฑ๋ฒ์ ๋ฐฐ์ฐ๊ณ ์ถ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฒ ๋์๋ค. ์ฒซ ์ฅ์ ์๋ง์กด์ ๋น์ฆ๋์ค ๋ฏผ์ฒฉ์ฑ์ ๋น๋ฐ ๋ด์ฉ์ ์ค๋ช ํ๋ฉฐ ์๋ง์กด ๋ง์ ๋น ๋ฅธ ๋ฐฐํฌ ์๋์ ๋ ธํ์ฐ์, ํ์ฌ ๊ฐ์ฅ ๋์คํ๋ ์ธํ๋ผ์ธ ํด๋ผ์ฐ๋ ์๋น์ค ๋ด์์ ์ด์ธ๋ฆฌ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์กฐ๊ฑด์ ์ค๋ช ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์์ฐ์ค๋ฝ๊ฒ ๋ง์ดํฌ๋ก ์๋น์ค์ ์๊ฐ๋ก ์ด์ด์ง๋ค. ๋ง์ดํฌ๋ก ์๋น์ค ์ํคํ ์ฒ๋ ๊ธฐ์กด ๋ชจ๋ ธ๋ฆฌ์ค ์ํคํ ์ฒ์ ๋ค๋ฅด๊ฒ ์ค๊ณ์ ๊ฐ๋ณํ ์ ๊ฒฝ์ ์จ์ผ ํ๋ค. ์๋์ ์ผ๋ก ์ ์ง๋ณด์๋ฅผ ๋ ์ฝ๊ฒ ํ ์ ์๋ ๊ตฌ์กฐ์ด์ง๋ง, ๋ฐ์ดํฐ ์ ํฉ์ฑ ๋ฌธ์ ๊ฐ ๊ฐ์ฅ ํฐ ์ด์์ด๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋ฅผ ๋ณด์ํ๊ธฐ ์ํ ์๋ง์ ํจํด๋ค์ ์๊ฐํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๋ ๋ฒจ์์๋ ์ ํฉ์ฑ์.. 2022. 12. 9. [๊ฐ์๋ฌธ] ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ ์ฒ ์ ์ ๋ฌธ์ ์ฝ๊ณ ๋์ ์ด ์ฑ ์ ์ฝ์ ์ด์ ๋ ์ฐธ ์ํ๋ค. โ ์ฌ์ผ ํ ์ฑ ์ ์ฐฉ๊ฐํ๋ค.. ใ ใ ์ฐฉ๊ฐํ๊ณ ์๋ชป ๊ตฌ๋งคํ ์ฑ ์ด๋ค. ๋น๊ทผ๋ฌ์๊ฒ ๊ตฌ๋งคํ ์ฑ ์ด๋ผ ํ๋ถ์ ์ด๋ ต๊ณ ๋ค์ ๋ฌผ์ด๋ณด๊ธฐ ๊ท์ฐฎ์์ ๊ทธ๋ฅ ์ฝ๊ธฐ๋ก ํ๋ค. โ ์ฝ๋๊ฐ C# ์ธ์ด๋ก ์์ฑ๋์ด ์๊ณ , ์ ์๋ ์ผ๋ณธ ์ฌ๋์ด๋ผ์ ์ ์ฝํ ๊ฒ ๊ฐ์๋ค. ๋์ถฉ ๋ณด๋ค๊ฐ ์ ์ฝํ๋ฉด ๋น๊ทผ์ ํ๋งคํ๋ ค๊ณ ํ์๋ค. โ ๋คํํ C#์ ์ข ํด์ ๊ทธ๋ฐ์ง (์์ ์ฝ๋๊ฐ ๊ทธ๋ ๊ฒ ์ด๋ ต์ง ์์๋ค) ๊ทธ๋ญ์ ๋ญ ์ดํดํด๊ฐ๋ฉฐ ์๋ ํ๋ค. โ โ ๋๋ฉ์ธ ์ฃผ๋ ์ค๊ณ๋ ๊ณ์ธตํ ์ํคํ ์ฒ, ํด๋ฆฐ ์ํคํ ์ฒ๋ ์ค๋ช ํ๋ ๊ฐ๋ ๋ค์ ๋ค ์ค๊ฐ๋ค๊ฐ ๋ฐฐ์ฐ๊ณ ๋ด์๋ ์ฝ๋ ๊ตฌ์ฑ์ด ์งฌ์งฌ์ด ์์๋ค. ๊ทธ๋ ๊ทธ๋ ๊ฒ ์จ์ผ ๋๋ ๋ณด๋ค ํ๊ณ ์ต๋ฌด์์ฒ๋ผ ์ธ์์ ์ผ๋ ๊ธฐ์ต์ด ์๋ค. โ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ฉฐ ์ดํด๊ฐ ๋ท๋ฐ์นจ๋์ง ๋ชปํ ํ์ ๊นจ๊ณ ๊ทธ๋ฅ ์ ์๋๋ก ์ฝ๋ ์์ฑ์ ํ์.. 2022. 11. 27. [์ด์] Pageable test ๊ด๋ จ ์๋ฌ ๐ก๋ฌธ์ API Controller๋ฅผ ํ ์คํธ ํ๋๋ฐ ์ ์ฑ๊ณตํ๋ ํ ์คํธ๊ฐ ๊ณ์ ์คํจํ๋ค. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalStateException: No primary or single unique constructor found for interface org.springframework.data.domain.Pageable ํ ์คํธ ์ฝ๋ mockMvc.perform(get("/api/v2/users") .param("page", String.valueOf(page))) .andExpect(status().isOk()) .andE.. 2022. 11. 23. [ํ๊ณ ] ํด๋ฆฐ ์ํคํ ์ฒ ์ฑ ์คํฐ๋ ๋ฐ ๋ฏธ๋ ํ๋ก์ ํธ๋ฅผ ๋ง์น๋ฉฐ ์ต๊ทผ ์ ์ ๊ฐ๋ฐ์๋ก์ ์ฌ์ ์ ์์ํ๊ธฐ ์ํด ์ฑ์ฉ ์ฐ๊ณํ ์ธํด์ญ, ์ ์ ๊ณต์ฑ๋ฅผ ๋ณด๊ณ ํ์ธํ๋ฉฐ ์๋ฅ ์ง์์ ํ๊ณ ์๋ค. ์ฌ์ ํ ํ ์ผ์ ์ฐ๋๋ฏธ์ง๋ง, ์กฐ๊ธ ๋ ์๊ฐ์ ํจ์จ์ ์ผ๋ก ์จ๊ฐ๋ฉฐ ๋ฐ์ ํ๊ณ ์ถ๊ธฐ์ ์ฝ๊ณ ์ถ์๋ ์ฑ ์ ๊ฐ์ง๊ณ ์คํฐ๋๋ฅผ ํ๋ฉด ์ด๋จ๊น๋ผ๋ ์๊ฐ์ ํ์๋ค. ๋ง์นจ ๊ฐ์ ์ฌ์ ๊ธธ์ ์ฌ๋ผ์๋ ์น๊ตฌ๊ฐ ๋ ์ฌ๋๊ณ , ์ ์์ ์๋ฝํ์ฌ ๋ง๋ค๋ฉด์ ๋ฐฐ์ฐ๋ ํด๋ฆฐ ์ํคํ ์ฒ๋ผ๋ ์ฑ ์ ๊ฐ์ง๊ณ 2์ฃผ ๊ฐ์ ์คํฐ๋๋ฅผ ๋ง์ณค๋ค. ์ด ์ฑ ์ ์ฝ๊ณ ์ํํธ์จ์ด์ ์ค๊ณ์ ๊ณ ๋ฏผ์ ํ์ธต ๋ ๊น์ด ๋น ์ง๊ฒ ๋จ๊ณผ ๋์์ ์๋ก์ด ์ธ์์ผ๋ก์ ๋ฐ์ ๋๋ ๋๋์ด ๋ค์๋ค. ์ค๊ณ ๋ด์ฉ์ ํ์์ ๊ฐ์ฅ ๋ง์ด ๊ณ ๋ฏผํ๋ ๋ถ๋ถ์ธ์ง๋ผ ์ฑ ์ด ์ดํด๊ฐ ์ ๋์์๊ณ , ์ ๋งคํ๋ ๋ถ๋ถ์ 2ํ๋ , ๋ค๋ฅธ ๊ด์ ์ผ๋ก ์ฝ์ด๋ณด๋ ค 3 ํ๋ ํ๋ฉฐ ์๋ ์ ํ๋ค. ์ฃผ๊ด์ ์ด์ง๋ง ๊ฐ๋ฐ ๊ณต๋ถ๋ฅผ ํ๋ฉฐ ๋๋ ์๊ฐ.. 2022. 11. 20. [๋ง๋ค๋ฉด์ ๋ฐฐ์ฐ๋ ํด๋ฆฐ ์ํคํ ์ฒ] Chapter10. ์ํคํ ์ฒ ๊ฒฝ๊ณ ๊ฐ์ ํ๊ธฐ 10. ์ํคํ ์ฒ ๊ฒฝ๊ณ ๊ฐ์ ํ๊ธฐ 1. ๊ฒฝ๊ณ์ ์์กด์ฑ ์ํคํ ์ฒ์ ๊ฒฝ๊ณ์ '๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ํ๋ค๋ ๊ฒ'์ ์๋ฏธ๋ฅผ ์์๋ณด์. ์ํคํ ์ฒ์ ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ ํ๋ค๋ ๊ฒ์ ์์กด์ฑ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉํฅ์ ํฅํ๋๋ก ๊ฐ์ ํ๋ ๊ฒ. ๊ฐ์ฅ ์์ชฝ ๊ณ์ธต ๋๋ฉ์ธ ์ํฐํฐ ๋๋ฉ์ธ ์ํฐํฐ์ ์ ๊ทผํ๋ ์ ํ๋ฆฌ์ผ์ด์ ๊ณ์ธต ์ ์ค์ผ์ด์ค ๊ตฌํ ์ด๋ํฐ ์ธ์ปค๋ฐ ํฌํธ๋ฅผ ํตํด ์๋น์ค ์ ๊ทผ ์๋น์ค ์์๊ณ ์ ํฌํธ๋ฅผ ํตํด ์ด๋ํฐ ์ ๊ทผ ์ค์ ๊ณ์ธต ์ด๋ํฐ & ์๋น์ค ๊ฐ์ฒด ์์ฑ์ฉ ํฉํฐ๋ฆฌ ํฌํจ ์์กด์ฑ ์ฃผ์ ๋งค์ปค๋์ฆ ์ ๊ณต ์์กด์ฑ์ ํญ์ ์์ชฝ์ผ๋ก ํฅํด์ผ ํ๋ค. 2. ์ ๊ทผ ์ ํ์ package-private ์ ํ์์ ์ค์์ฑ ํจํค์ง๋ฅผ ํตํด ํด๋์ค๋ค์ ์์ง๋ ๋ชจ๋๋ก์ ๋ง๋ค์ด์ค๋ค. ํจํค์ง ๋ฐ๊นฅ ์๋ ์ ๊ทผ ๋ถ๊ฐ. ๋ชจ๋ ์ง์ ์ฉ ํด๋์ค๋ง ๋ฐ๋ก public์ผ๋ก ๋ง๋ค๋ฉด ๋๋ค. ๊ฒฝ๊ณ๊ฐ ์ธ๋ถ๋ก.. 2022. 11. 15. ์ด์ 1 ยทยทยท 3 4 5 6 7 8 9 ยทยทยท 17 ๋ค์ ๋ฐ์ํ