์ ์ฒด ๊ธ
Kotlin์ผ๋ก ํ๋ก์ ํธ ์งํ ์ค์ ํ ์คํธ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋์๋ค. @DataJpaTest class MemberRepositoryTest @Autowired constructor(private val memberRepository: MemberRepository) : BehaviorSpec() { init { given("Member Entity ์์ฑ") { val member = Member("123456", "ํ ์คํธ ๋๋ค์") `when`("์์ฑํ Member Entity๋ฅผ ์ ์ฅ") { val savedMember = memberRepository.save(member) then("Entity ์ ์ฅ ์ฑ๊ณต") { savedMember.kakaoId shouldBe member.kakaoId saved..
Docker(๋์ปค)๋? ์ ํ๋ฆฌ์ผ์ด์ ์ ์ปจํ ์ด๋๋ผ๋ ๋จ์๋ก ๊ด๋ฆฌํ๊ณ ์คํํ๋ ์คํ์์ค ํ๋ก์ ํธ์ด๋ค. ์ปจํ ์ด๋์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ํ์ํ ๋ชจ๋ ๊ฒ๋ค์ด ํจํค์ง๋์ด ์๊ธฐ ๋๋ฌธ์ ๋์ผํ ๊ฐ๋ฐํ๊ฒฝ์ ๋ง๋ค ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค. ์ ๋ง์ ๋ง ๊ฐ๋จํ๊ฒ ์๋์ ๊ฐ์ ๊ณผ์ ์ผ๋ก ์งํ๋๋ค. Dockerfile์ ํตํด ์ ํ๋ฆฌ์ผ์ด์ ์ด ํฌํจ๋ ๋์ปค ์ด๋ฏธ์ง ์์ฑ -> ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ฐํ์ผ๋ก ์ปจํ ์ด๋ ์์ฑ ๋ฐ ๋น๋ Dockerfile ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค๊ธฐ ์ํ ํ์ผ ๊ตฌ์ฑ ์์ FROM COPY RUN CMD ENTRYPOINT LABEL ENV ARG ... Docker Image Build Docker Image๋ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ ํ ํ๋ฆฟ(ํ) ์ญํ docker image build -t ์ด๋ฏธ์ง[:ํ๊ทธ๋ช ] -f Dockerfile๋ช ..
A ์ธ๋ฑ์ค์์ ๋ฝ์์จ ๋ฆฌ์คํธ๋ฅผ B ์ธ๋ฑ์ค์ ์์ฒญํ์ฌ ์์ธ ์ ๋ณด๋ฅผ ๋ฐํ๋ฐ์์ผ ํ๋ ๋ก์ง์ด ํ์ํ๋ค. ์ด ๋ ์์ฒญํ ๋ฆฌ์คํธ ์์๋๋ก ๋ฐํ๊ฐ์ ๋ฐ๊ธธ ์ํ์ง๋ง Elasticsearch์์๋ ์ด๋ฐ ๊ธฐ๋ฅ์ด ์์๋ค... ๊ทธ๋์ ๊ตฌ๊ธ๋ง์ ํ๋๋ ์ญ์ ๋จผ์ ๊ณ ๋ฏผํด๋ณธ ๋ถ๋ค์ด ๊ณ์ จ๋ค. [๐๐ป ์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ] https://danthetech.netlify.app/Backend/how-sort-by-specific-order-using-elasticsearch Search ๊ฒฐ๊ณผ๋ฅผ ์์ฒญํ ์์๋๋ก Sortingํ์ฌ Return ๋ฐ๋๋ฒ ๊ธ์ ์์ํ๊ธฐ ์์ ์ด ๋ธ๋ก๊ทธ๋ Elasticsearch(์ดํ ES)์ ๊ดํ ๊ธ์ด์ง๋ง, ES์์ ํต์ ์ python์ ์ด์ฉํด์ ํ๋ ๊ฒ์ด๋ฏ๋ก url์ ์ด์ฉํ query๋ฅผ ๊ณต๋ถํ๊ณ ์ ํ๋ ๋ถ์๊ฒ๋ ..
์ด๋ฒ ํ๋ก์ ํธ์์ Elasticsearch๋ก ๊ฒ์์์ง์ ๋ด๋นํ๊ฒ ๋์๋ค. ํ๋ก ํธ์์ ๊ฒ์์ด๋ฅผ SpringBoot ์๋ฒ๋ก ๋๊ฒจ์ฃผ๋ฉด SpringBoot์์ Elasticsearch์ api๋ฅผ ํธ์ถํด์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋๋ก ๋ก์ง์ ์ง์ผํ๋ค. ๋์ ๊ฒฝ์ฐ๋ Elasticsearch์ Search API๋ง ์ฌ์ฉํ ์์ ์ด๋ค!!! ๐ ๊ฐ๋ฐ ํ๊ฒฝ SpringBoot 2.7.3 Java 8 Elasticsearch 7.9.1 ๐ ์ฐธ๊ณ ์๋ฃ [์๋ผ์คํฑ์์น ์ค๋ฌด ๊ฐ์ด๋] ๋ด๊ฐ ์ํ๋ ๋ด์ฉ์ด ๋๋ฌด ์ ๋์์์ด์ ์ฐธ๊ณ ํ์๋ค. ์์ฌ์ด ์ ์ ์ ์๋ ์๋ผ์คํฑ์์น 6๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์๋ค๋ ์ ... ๋๋ ์ด ์ฑ ์ High Level Rest ํด๋ผ์ด์ธํธ๋ก ํต์ ํ๋ ๋ฒ์ ์ ์ฉํด๋ณด์๋ค. ๐ฉ๐ป๐ป build.gradle dependency ์ถ๊ฐ! d..
์ธํผ์์ ์งํํ ๊ณตํตํ๋ก์ ํธ ๋ API ๋ช ์ธ์๋ก Swagger๊ฐ ์๋ Spring Rest Docs๋ฅผ ์ฑํํ๋ค. ๊ทธ ๋ ์ ์ฉํ๋ ๋ฒ์ ๋ ธ์ ์ ๋์ถฉ ์ ์ด๋จ๋๋ฐ ์ด๋ฒ์ ์ ์ฉํ๋ฉด์ ๊น๋ํ๊ฒ(?) ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค. ๐๐ป ๋ด๊ฐ ์๊ฐํ์ ๋ Spring Rest Docs์ ์ฅ์ - ํ ์คํธ๊ฐ ์ฑ๊ณตํด์ผ ๋ฌธ์ํ๊ฐ ๋๊ธฐ๋๋ฌธ์ ํญ์ ์ต์ ํ ๋์์๊ณ ํ์ง์ ๋ณด์ฅํ ์ ์๋ค. - ๋ฌธ์ํ ๋์ ๋ Swagger๋ณด๋ค๋ ํ๋ก ํธ๊ฐ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค๊ณ ์๊ฐํ๋ค. - Request, Response์ ๊ดํ ์ค๋ช ์ ์ด๋ ธํ ์ด์ ์ด ์๋ ํ ์คํธ ์ ์์ฑํ ์ ์์ด spring ์๋ฒ์ ์ฝ๋๊ฐ ์ข ๋ ๊น๋ํด๋ณด์ธ๋ค. ๐๐ป Spring Rest Docs์ ๋จ์ - ํ ์คํธ ์ฝ๋ ์ง๋๊ฒ ๋๋ฌด๋๋ฌด๋๋ฌด ๊ท์ฐฎ๋ค... ์ ๋ง๋ก... ๋จ์ ์ ์ ๊ทน๋ณตํ๋ฉด ๋ฟ๋ฏํ..
toString์ ํญ์ ์ฌ์ ์ํ๋ผ Object์ ๊ธฐ๋ณธ toString ๋ฉ์๋๋ ์ปค์คํ ์ผ๋ก ์์ฑ๋ ํด๋์ค์ ์ ํฉํ ๋ฌธ์์ด์ ๋ฐํํ๋ ๊ฒฝ์ฐ๊ฐ ๊ฑฐ์ ์๊ณ , ํด๋์ค์ด๋ฆ@ํด์์ฝ๋ ํํ๋ก ๋ฐํํ๋ค. toString์ ์ผ๋ฐ ๊ท์ฝ ์ค... ๊ฐ๊ฒฐํ๋ฉด์ ์ฌ๋์ด ์ฝ๊ธฐ ์ฌ์ด ํํ์ ์ ์ตํ ์ ๋ณด๋ฅผ ๋ฐํํ๋ผ ๋ชจ๋ ํ์ ํด๋์ค์์ ์ด ๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๋ผ ์ค์ ์์ toString์ ๊ทธ ๊ฐ์ฒด๊ฐ ๊ฐ์ง ์ฃผ์ ์ ๋ณด ๋ชจ๋๋ฅผ ๋ฐํํ๋ ๊ฒ ์ข๋ค. ๊ฐ์ฒด๋ฅผ ์ถ๋ ฅํ์ ๋ {Jenny=PhoneNumber@123dsdfa12l} ์ด๋ฐ ์ ๋ณด๋ณด๋ค๋ {Jenny=707-349-1284}๋ผ๋ ๋ฉ์์ง๊ฐ ํจ์ฌ ์ ์ตํ ์ ๋ณด๋ผ๊ณ ํ ์ ์๋ค. โก๏ธ ์ค์ค๋ก๋ฅผ ์๋ฒฝํ ์ค๋ช ํ๋ ๋ฌธ์์ด์ด์ด์ผ ํ๋ค. ๊ณ ๋ คํด๋ณผ ์ฌํญ ๋ฐํ๊ฐ์ ํฌ๋งท์ ๋ฌธ์ํํ ์ง ์ ํด์ผ ํ๋ค. ์ ํ๋ฒํธ๋ ํ๋ ฌ ๊ฐ..
equals๋ฅผ ์ฌ์ ์ํ๋ ค๊ฑฐ๋ hashCode๋ ์ฌ์ ์ํ๋ผ equals๋ฅผ ์ฌ์ ์ํ ํด๋์ค ๋ชจ๋์์ hashCode๋ ์ฌ์ ์ํด์ผ ํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด hashCode์ ์ผ๋ฐ ๊ท์ฝ์ ์ด๊ธฐ๊ฒ ๋์ด ํด๋น ํด๋์ค์ ์ธ์คํด์ค๋ฅผ HashMap, HashSet ๋ฑ์ ์์๋ก ์ฌ์ฉํ ๋ ๋ฌธ์ ๋ฅผ ์ผ์ผํจ๋ค. - equals ๋น๊ต์ ์ฌ์ฉ๋๋ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์ง ์์๋ค๋ฉด, hashCode ๋ฉ์๋๋ ๋ช ๋ฒ์ ํธ์ถํด๋ ๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. - equals๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ํ๋จํ๋ค๋ฉด, hashCode๋ ๋๊ฐ์ ๊ฐ์ ๋ฐํํด์ผ ํ๋ค. - equals๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๋ค๋ฅด๋ค๊ณ ํ๋จํ๋๋ผ๋, hashCode๊ฐ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํ ํ์๋ ์๋ค. ํ์ง๋ง ๋ค๋ฅธ ๊ฐ์ฒด๋ ๋ค๋ฅธ ๊ฐ์ ๋ฐํํด์ผ ํด์ํ ์ด๋ธ์ ์ฑ๋ฅ์ด ์ข์์ง๋ค. equals๊ฐ ๋ ๊ฐ์ฒด๋ฅผ ๊ฐ๋ค๊ณ ..
equals๋ ์ผ๋ฐ ๊ท์ฝ์ ์ง์ผ ์ฌ์ ์ํ๋ผ ํด๋์ค๋ฅผ ์ฌ์ ์ ํ์ง ์๊ฒ ๋๋ฉด ์ธ์คํด์ค๋ ์ค์ง ์๊ธฐ ์์ ๊ณผ๋ง ๊ฐ๊ฒ ๋๋ค. ๋ค์ ์ํฉ์ ํด๋นํ๋ค๋ฉด ์ฌ์ ์ํ์ง ์๋ ๊ฒ์ด ์ต์ ์ด๋ค. ๊ฐ ์ธ์คํด์ค๊ฐ ๋ณธ์ง์ ์ผ๋ก ๊ณ ์ ํ๋ค. ์ธ์คํด์ค์ '๋ ผ๋ฆฌ์ ๋์น์ฑ(logical equality)'์ ๊ฒ์ฌํ ์ผ์ด ์๋ค. ์์ ํด๋์ค์์ ์ฌ์ ์ํ equals๊ฐ ํ์ ํด๋์ค์๋ ๋ฑ ๋ค์ด๋ง๋๋ค. ํด๋์ค๊ฐ private์ด๊ฑฐ๋ package-private์ด๊ณ equals ๋ฉ์๋๋ฅผ ํธ์ถํ ์ผ์ด ์๋ค. equals๋ฅผ ์ฌ์ ์ํด์ผ ํ ๋?! ์์ ํด๋์ค์ equals๊ฐ ๋ ผ๋ฆฌ์ ๋์น์ฑ์ ๋น๊ตํ๋๋ก ์ฌ์ ์๋์ง ์์์ ๋ ์ฃผ๋ก ๊ฐ ํด๋์ค๋ค์ด ์ฌ๊ธฐ ํด๋นํ๋ค. equals๋ฅผ ์ฌ์ ์ํ ๋ ๋ฐ๋ผ์ผํ ์ผ๋ฐ ๊ท์ฝ ๋ฐ์ฌ์ฑ(reflexivity) : null์ด ์๋ ๋ชจ..
๊ธฐ์กด์ ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ ๋ ์ฌ์ฌ์ฉํ์ // 1๋ฒ String s = new String("hello"); // 2๋ฒ String s = "hello"; ๋ ๊ฐ์ String์ ๊ฐ์ ๋ฌธ์์ด์ ์ฌ์ฉํ์ง๋ง 1๋ฒ์ ๊ฒฝ์ฐ์๋ ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๊ณ , 2๋ฒ์ ๊ฒฝ์ฐ์๋ String Pool์์ ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ์ฌ ์ฌ์ฌ์ฉํ๋ค. ๋ง์ฝ s += " java"; ๋ผ๋ ์ฝ๋๊ฐ ์คํ๋๋ค๋ฉด? "hello java"๋ผ๋ ์ธ์คํด์ค๋ฅผ ์๋ก ์์ฑํ ๋ค String Pool์์ ์ด ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋ค. boolean b1 = new Boolean(true); boolean b2 = Boolean.valueOf(true); ------- int i1 = new Integer(10); int i2 = Integer.valueO..



