๋ชฉ๋ก๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ (124)
DevLog ๐ถ
์ง๋ ๋ฒ์ ์ง๋ ฌํ ๊ด๋ จํด์ ๊ธ์ ์์ฑํ์์ด์, ์ด๋ฒ์๋ Jackson์์ ์ ๊ณตํ๋ ์ญ์ง๋ ฌํ ๊ธฐ๋ฅ์ ๋ํด์ ๊ณต๋ถํด๋ณด๊ณ ์ ํ๋ค. โ๏ธ Deserialization Deserialization is the process of reconstructing a data structure or object from a series of bytes or a string in order to instantiate the object for consumption. ์ญ์ง๋ ฌํ๋ data structure๋ ๊ฐ์ฒด๋ฅผ ์ผ๋ จ์ ๋ฐ์ดํธ๋ ๋ฌธ์์ด๋ก ์ฌ๊ตฌ์ฑํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ์ธ์คํด์คํํ๋ ํ๋ก์ธ์ค์ด๋ค. ์ง๋ ฌํ์ ๋ฐ๋๋ผ๊ณ ๋ณผ ์ ์์ผ๋ฉฐ, ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฅ์น๊ฐ์ ์ ์ฅ์ด๋ ์ ์กํ๋ ๊ฒ์ด๋ค. Jackson์์๋ ์ด๋ค ์ด๋ ธํ ์ด์ ์ ํตํด ์ญ์ง..
๋๋ ๊ณผ ์งํํ ๋ ๋ฒจ 2 ์ฒซ ํ์ด ํ๋ก๊ทธ๋๋ฐ ๋ฏธ์ ์ธ ์น ์๋์ฐจ ๊ฒฝ์ฃผ ๋ฏธ์ ์ด๋ค :D ์ด์ฉ๋ค ๋ณด๋ 1๋ฑ์ผ๋ก ๋ ๋ฒจ 2 ์ฒซ ๋ฏธ์ ์ ๋ง๋ฌด๋ฆฌํ๊ฒ ๋์๋ค ๐ ๋ ๋ฒจ 2์ ๋ชฉํ๋ ๋ฏธ์ ์ ๋ํ ํ๊ณ ๊ธ์ด ๋ฐ๋ฆฌ์ง ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ๋น ๋ฅด๊ฒ ํ๊ณ ๊ธ์ ์์ฑํด๋ณด๊ณ ์ ํ๋ค. ์ด๋ฒ ๋ฏธ์ ์ ์๊ตฌ์ฌํญ์ ๋นํด ๋ฏธ์ ๊ธฐ๊ฐ์ด ๊ธธ์๊ธฐ ๋๋ฌธ์, ๋ฏธ์ ์ ์ฌ์ ๋กญ๊ฒ ์งํํ ์ ์์๋ค. ๋จ์ ๊ธฐ๊ฐ ๋์์๋ ์คํ๋ง์ ๋ํด์ ์ข ๊ณต๋ถํด๋ณด๋ ์๊ธฐ๋ก ๊ฐ์ ธ๋ณด๋ ค๊ณ ํ๋ค. โ๏ธ ์์ฑํ ์ฝ๋ GitHub - Cl8D/jwp-racingcar: ๋ ๋ฒจ 2 ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ์น ๊ตฌํ ์ ์ฅ์ ๋ ๋ฒจ 2 ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ์น ๊ตฌํ ์ ์ฅ์. Contribute to Cl8D/jwp-racingcar development by creating an account on GitHub..
โ๏ธ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๋ฒ ๊ฒ์๊ธ์์๋ HTTP ๋ฉ์์ง๋ฅผ ์ด๋ค ์์ผ๋ก ๋ง๋๋์ง ๋ฐฐ์ ๋ค. ๋ธ๋ผ์ฐ์ ๋ URL์ ํด๋ ํ๊ฑฐ๋ HTTP ๋ฉ์์ง๋ฅผ ๋ง๋๋ ๊ฒ๊น์ง๋ ์งํํ์ง๋ง, ๋คํธ์ํฌ์ ์ก์ถํ๋ ๊ธฐ๋ฅ์ด ์๊ธฐ ๋๋ฌธ์ OS์ ์๋ขฐํ์ฌ ์ก์ ํ๊ฒ ๋๋ค. ์ด๋, URL ๋ด๋ถ์ ์๋ ์๋ฒ์ ๋๋ฉ์ธ๋ช ์์ IP ์ฃผ์๋ฅผ ์กฐ์ฌํ๋๋ฐ, OS์๊ฒ ์ก์ ํ ๋๋ IP ์ฃผ์๋ก ๋ฉ์์ง๋ฅผ ๋ฐ์ ์๋๋ฅผ ์ง์ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ป๊ฒ IP ์ฃผ์๋ฅผ ์กฐ์ฌํ๋์ง ๊ฐ๋ตํ๊ฒ ์ ๋ฆฌํด๋ณด์. ๋ํ, IP ์ฃผ์๋ฅผ ๋๋ฉ์ธ ์ฃผ์๋ก ๋ณํํ๊ธฐ ์ํด ์ด๋ป๊ฒ ํ๋์ง ์์๋ณด์. โ๏ธ TCP / IP ๋คํธ์ํฌ TCP/IP ๋คํธ์ํฌ๋ ์์ ์๋ธ๋ท์ ๋ผ์ฐํฐ๋ก ์ฐ๊ฒฐํ์ฌ ์ ์ฒด ๋คํธ์ํฌ๋ฅผ ์์ฑํ๋ค. ์๋ธ๋ท์ด๋ ํจํท์ ์ค๊ณํ๋ ์ฅ์น์ธ ํ๋ธ์ ์ฌ๋ฌ PC๊ฐ ์ฐ๊ฒฐ๋ ํํ๋ผ๊ณ ์๊ฐํด๋ ๋๋ค. XX๋ Y..
๐ฑ ๋ค์ด๊ฐ๊ธฐ ์ ์คํฐ๋๋ฅผ ์งํํ๋ฉด์, GET ์์ฒญ๊ณผ POST ์์ฒญ์ ์ฐจ์ด๊ฐ ๋จ์ํ '์๋ฏธ๋ก ์ '์ผ๋ก๋ง ์ฐจ์ด๊ฐ ์๋ ๊ฑด์ง ๊ถ๊ธํด์ ์ฐพ์๋ณด๊ฒ ๋์๋ค. ์ต๊ด์ ์ผ๋ก ๋๋ ๋ฆฌ์์ค ๋ฑ๋ก ์ POST๋ฅผ, ๊ทธ๋ฆฌ๊ณ ์กฐํ ์ GET์ ์ฌ์ฉํ์๋ค. ํ์ง๋ง ๋ฆฌ์์ค ๋ฑ๋ก ์์๋ GET์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌธ๋ฒ์ ์ผ๋ก๋ ์ ๋๋ ๊ฑด์ง, ์๋๋ฉด ๊ด์ต์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ ๊ฒ์ธ์ง๋ ๊ถ๊ธํด์ ์ฐพ์๋ณด์๋ค. ๊ทธ๋ฆฌ๊ณ ๋ช ๊ฐ์ง ์์ฒญ๋ค์ ์ค์ตํด๊ฐ๋ฉฐ ์ด๋ ์ ๋ ์๊ฐ์ ์ ๋ฆฌํด๋์๋ค. (์์ด ์๋ฌธ์ ๋ํ ๋ฒ์ญ์ ํ๋ค ๋ณด๋ ๋ค์ ์๋ฏธ์ ์ฐจ์ด๊ฐ ์์ ์๋ ์์ต๋๋ค ๐ฅฒ) โ๏ธ GET The GET method requests that the target resource transfer a representation of its state. GET requests..
๋ ๋ฒจ 2 ์์ ์๊ฐ์ ์์กด์ฑ ์ฃผ์ ๊ด๋ จ ๋ด์ฉ์ ๋ค์ผ๋ฉด์ ์กฐ๊ธ ์ ๋ฆฌ๋ฅผ ํด๋ณด๊ณ ์ถ์ด์ ๊ฐ๋จํ๊ฒ ๊ธ์ ์์ฑํด๋ณด๊ณ ์ ํ๋ค. ๊ทธ๋์ ์คํ๋ง์ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์์ฑํ๊ธฐ ์ข์ ํ๋ ์์ํฌ๋ผ๊ณ ๋ง์ ๋ค์ด๋ดค์ง๋ง, ์ ํํ๊ฒ ์์ธ์ง๋ ์ดํดํ ์ ์ด ์์๋ค. ์ ๋ฆฌ๋ฅผ ํตํด์ ์กฐ๊ธ ๋ ๋จธ๋ฆฌ์... ๋ด์๋๊ณ ์ ํ๋ค! โ๏ธ ๊ฐ์ฒด์งํฅ์ ์ค๊ณ๊ณผ ๋์์ธ ํจํด ์ฐ์ , ๊ฐ์ฒด์งํฅ ์ค๊ณ ์์น์ผ๋ก ๋ง์ด๋ค ์ธ๊ธํ๋ SOLID์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์๊ฐํด๋ณด์. - SRP (๋จ์ผ ์ฑ ์ ์์น): ์ด๋ค ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ์ค์ง ํ๋๋ฟ์ด์ด์ผ ํ๋ค. - OCP (๊ฐ๋ฐฉ ํ์ ์์น): ์์ ์ ํ์ฅ์๋ ์ด๋ ค์๊ณ , ์ฃผ๋ณ์ ๋ณํ์๋ ๋ซํ์์ด์ผ ํ๋ค. - LSP (๋ฆฌ์ค์ฝํ ์นํ ์์น): ์๋ธ ํ์ ์ ํญ์ ์์ ์ ๊ธฐ๋ฐ ํ์ ์ผ๋ก ๊ต์ฒดํ ์ ์์ด์ผ ํ๋ค. - ISP (์ธํฐํ์ด์ค..
๋ฌธ๋ ์ง๋ ฌํ ๊ด๋ จํด์ ๊ถ๊ธํดํ๋ค๊ฐ, Jackson ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด์๋ ํ ๋ฒ ๊ณต๋ถํด๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ์์ฑํ๋ ๊ธ! ์ ๋ง ๊ฐ๋จํ๊ณ ์๊ฒ ์ ๋ฆฌํ ์์ ์ด๋ผ, ๋์ค์ ๊น๊ฒ ๊ณต๋ถํ๊ฒ ๋๋ค๋ฉด ํ ๋ฒ ๋ ์์ฑํด๋ณด์ง ์์๊น ์ถ๋ค ๐ซ โ๏ธ Serialization Serialization is taking the properties of an object, and converting them into json string representation. ์ง๋ ฌํ๋ ๋ฌด์์ผ๊น? ๊ฐ์ฒด์ ์์ฑ์ ๊ฐ์ ธ์์ Json ๋ฌธ์์ด ํํ์ผ๋ก ๋ณํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ ํํ๊ฒ๋, ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํธ ์คํธ๋ฆผ์ผ๋ก ๋ณํํ๋ ๊ฒ์ด๋ฉฐ, ์ง๋ ฌํ๋ ๊ฐ์ฒด๋ ๋์ค์ ๋ค์ ๋ณต์์ด ๊ฐ๋ฅํ๋ค. public class Crew { private String name; ..
โ๏ธ URL ์ ๋ ฅ๊ณผ ํจํท ์ฌํ ๊ต์ฌ์ ๋์์๋ ๋ด์ฉ์ด์ง๋ง ๋๋ฆ ์ ๋ฆฌํด๋ณด๊ณ ์ถ์ด์ ๋ค์ ๊ทธ๋ฆผ์ ๊ทธ๋ ค๋ณด์๋ค. ํด๋ผ์ด์ธํธ, ์น ์๋ฒ LAN, ์น ์๋ฒ๊น์ง ํ ๋ฒ ๋์๋ณด๋ฉด์ ์ ๋ฆฌ๋ฅผ ํ ๋ค์, ์๊ฐ์ด ๋ ๋ ํ๋ธ๋ ํ์ ์ชฝ์ ๊ณต๋ถํด๋ณด๊ณ ์ ํ๋ค. (์ฑ๊ณต๊ณผ ์คํจ๋ฅผ ๊ฒฐ์ ํ๋ 1% ์ ๋คํธ์ํฌ ์๋ฆฌ๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค :D) โ๏ธ ์ฌ์ฉ์๊ฐ URL์ ์ ๋ ฅํ์ ๋ ์๊ธฐ๋ ์ผ URL์ด๋ ๋ฌด์์ผ๊น? Uniform Resource Locator๋ก, http://๋ก ์์ํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ file:, ftp:, mailto: ๋ฑ๋ฑ ๋ค์ํ ์ข ๋ฅ์ ๊ฒ์ผ๋ก ์์ํ๋ URL๋ค์ด ์กด์ฌํ๋ค. ๋ธ๋ผ์ฐ์ ๋ ๋จ์ํ ์น ์๋ฒ์ ์์ธ์ค ํ๋ ์ญํ ๋ง ํ๋ ๊ฒ์ด ์๋, ํ์ผ ๋ค์ด๋ก๋, ์ ๋ก๋ ๊ฐ์ FTP ํด๋ผ์ด์ธํธ๋ ๋ฉ์ผ ํด๋ผ์ด์ธํธ ๊ธฐ๋ฅ๋ ์๊ธฐ ๋..
๐ฑ ๋ฌธ์ ์ํฉ ํ์ด ํ๋ก๊ทธ๋๋ฐ์ ์งํํ๋ฉด์, ๋ถ๋ช ํ ์คํธ ์ฝ๋ ๊ฐ๊ฐ์ ์คํํ์ ๋๋ ์ ๋์๊ฐ๋๋ฐ ์ ์ฒด๋ฅผ ์คํํ๋๊น ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๋ฅผ ๋ง๋ฌ์๋ค. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSourceScriptDatabaseInitializer' defined in class path resource [org/springframework/boot/autoconfigure/sql/init/DataSourceInitializationConfiguration.class]: Invocation of init method failed; nested exception is ..
โ๏ธ ์ถ์ํ ๐ฑ ์ถ์ํ๋, ๋ช ํํ๊ฒ ์ดํดํ๊ธฐ ์ํด ํน์ ์ ์ฐจ๋ ๋ฌผ์ฒด๋ฅผ ์๋์ ์ผ๋ก ์๋ตํ๊ฑฐ๋ ๊ฐ์ถค์ผ๋ก ๋ณต์ก๋๋ฅผ ๊ทน๋ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ณต์ก์ฑ์ ์ดํดํ๊ธฐ ์ฌ์ด ์์ค์ผ๋ก ๋จ์ํํ๋ ๊ฒ์ด ๋ชฉ์ ์ด๋ค. ์ง๋ ํฌ์คํ ๋ถํฐ ๊ณ์ ์๊ธฐํ๊ณ ์๋ '๊ณ ์์ด ์ค๋ต๋ฐ'๋ผ๋ ๊ฒ์์ด๋ค. ์ ์ด๋ฏธ์ง๋ ์ค์ ๋ก ๊ฒ์์ ํ๋ ์ดํ๋ ์ฅ๋ฉด์ด๋ค. ์ ๊ทธ๋ฆผ์์ ๋ฌด์์ด ๋ณด์ด๋๊ฐ? ๊ฐ๊ฐ ์๋๋ฅ, ์๋ฐ๋ฅ, ์ ฐํ๋ฅ์ด๋ผ๊ณ ๋ช ํํ๊ฒ ์กด์ฌํ๋ค. ๊ทธ๋ฌ๋, ์๋๋ฅ๋, ์๋ฐ๋ฅ๋, ์ ฐํ๋ฅ๋ ๋ชจ๋ ๊ณ ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋์์ ๊ฐ์ฒด๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด์ ๊ฐ์ด ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ค์ ‘๊ณ ์์ด’๋ผ๊ณ ํ ๋ฒ์ ์ ์๋ด๋ฆฌ๋ ๊ฒ์ '์ถ์ํ'๋ผ๊ณ ํ๋ค. ๊ณ ์์ด๋, ๊ณตํต์ ์ ๊ฐ์ง ๊ฐ์ฒด๋ค์ ํฌ๊ดํ ์ ์๋ ๊ฐ๋ ์ด ๋๋ค. ๊ทธ๋ฆฌ๊ณ , ์ด๋ฌํ ‘๊ณ ์์ด’๋ผ๋ ๊ฐ๋ ์ ์ ์ฉํ์ฌ ๋ค์ ์๋๋ฅ, ์๋ฐ๋ฅ, ์ ฐํ๋ฅ์ผ..
๐ฌ ๋ชจ๋ ์๋ฐ ์ธ ์ก์ ์ฑํฐ 5์ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. โ๏ธ ํํฐ๋ง ๐ฑ ํ๋ฆฌ๋์ผ์ดํธ๋ก ํํฐ๋งํ๊ธฐ List crews = new ArrayList(); List backendCrews = crews.stream() // ๋๋ค์ ์ธ์(๋ฐฑ์๋ ํฌ๋ฃจ)๋ฅผ ๋ฐ์ ํน์ ์์๋ฅผ ์ ํํ๋ค. .filter(crew -> crew.getCourse() == Course.BACKEND) .collect(Collectors.toUnmodifiableList()); ์ง๋ ์ฑํฐ์์ ์ฌ์ฉํ๋ ์์ ์ด๋ค. ์ฌ๊ธฐ์ filter ๋ฉ์๋๋ Predicate๋ฅผ ์ธ์๋ก ๋ฐ์์, ํด๋น ํ๋ฆฌ๋์ผ์ดํธ์ ์ผ์นํ๋ ๋ชจ๋ ์์๋ฅผ ํฌํจํ๋ ์คํธ๋ฆผ์ ๋ฐํํ๋ค. ๐ฑ ๊ณ ์ ์์ ํํฐ๋ง distinct ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ณต์ ์ ๊ฑฐํ ์์๋ก ์ด๋ฃจ์ด์ง ์คํธ๋ฆผ์ ๋ฐ..