๐์์ง 2์ฐจ ์ ๋ฆฌ๊ฐ ํ์ํ ๊ธ!
๐ MSA(Microservice Architecture)๋?
๐์ ์
์๋น์ค๋ฅผ ๊ฐ๊ฐ ๋ง์ดํฌ๋กํ๊ฒ ๋๋์ด ์ฐ๊ฒฐํ ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค. ์ด๋ ๊ฒ ๋๋ ์๋น์ค๋ ์ค์ค๋ก ๋์๊ฐ ์ ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ ์๋น์ค๋ฅผ ์๋ฏธํฉ๋๋ค.
๐์ฅ์
์์คํ ์ ๋ถ๋ถ๋ถ๋ถ์ผ๋ก ๋๋ ํน์ฑ ๋๋ถ์ ์์คํ ์ ์ฒด์ ์ค๋จ ์์ด ํ์ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธ-๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค.
์ ์ฐํ ๋์์ด ๊ฐ๋ฅํด ์ค์๊ฐ์ผ๋ก ์๊ตฌ์ฌํญ์ ๋ฐ์ํ ์ ์๋ค.
ํ ๋จ์๋ก ์ ์ ํ ๊ธฐ์ ์คํ์ ๊ฐ์ ธ๊ฐ ์ ์๋ค.
์๋น์ค ๋ถํ์ ๋ฐ๋ผ ๊ฐ๋ณ์ scale-out์ด ๊ฐ๋ฅํ๋ค. ํ์๋ฐ๋ผ ํฌ๊ธฐ๋ฅผ ๋ง์ถ์ ์์ด ๋ฉ๋ชจ๋ฆฌ, CPU์ ์ผ๋ก ์๋น๋ถ๋ถ ์ด์ต์ด๋๋ค.
๐๋จ์
์๊ฒ ๋๋๋ ๋งํผ ๋ณต์ก์ฑ์ด ๋์ด๋๋ค.
๊ฐ๋ณ ์๋น์ค๋ก ๊ตฌ์ฑํ๊ธฐ ๋๋ฌธ์ ์ด์ ํ์ํ ์ธํ๋ผ ๊ตฌ์ฑํ ๋ ์ธํ๋ผ๊ฐ ๋ถ์กฑ, ๋น์ฉ์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. ๊ฐ๋ฐ ํ๊ฒฝ๊ณผ ์ค์ ์ด์ํ๊ฒฝ์ ๋์ผํ๊ฒ ๋๋ ๊ฒ์ด ์ด๋ ต๋ค. (์ธํ๋ผ ๋ฌธ์ )
๋ ๋ฆฝ๋ ๊ตฌ์กฐ ๋๋ฌธ์ ๋ฐฐํฌ๋ ํ ์คํธ๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ํํ๊ธฐ ์ด๋ ต๋ค.
์๋น์ค๊ฐ ๋ถ์ฐ๋์ด ๋ด๋ถ ์์คํ ๊ฐ์ ํต์ ์ ์ด๋ป๊ฒ ํ ์ง, ๋ ํต์ ์ฅ์ ์ ์ด๋ป๊ฒ transaction์ ์ ์งํ ์ง๋์ ๋ํ ๊ณ ๋ ค๊ฐ ํ์ํ๋ค.
๐Monolithic Architecture(๋ชจ๋๋ก์ ์ํคํ ์ณ)
์ํํธ์จ์ด์ ๋ชจ๋ ๊ตฌ์ฑ์์๊ฐ ํ ํ๋ก์ ํธ์ ํตํฉ๋์ด ์๋ ๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ ๊ฐ๋ฐ์ ์ํด ๋ชจ๋๋ณ๋ก ๊ฐ๋ฐํ๊ณ , ๊ฐ๋ฐ์ด ์๋ฃ๋๋ฉด ํ๋์ ๊ฒฐ๊ณผ๋ฌผ๋ก ํจํค์งํ์ฌ ๋ฐฐํฌํ๋ ํํ
์๊ท๋ชจ ํ๋ก์ ํธ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ฉฐ ๊ท๋ชจ๊ฐ ์ปค์ง์๋ก ํ๊ณ๊ฐ ์๋ค.
๐Monolithic Architecture ์ฅ์
- ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋์ ์ฝ๋ ๋ฒ ์ด์ค์ ๊ธฐ๋ฐ์ ๋์ด ๋จ์ํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ ์๋๊ฐ ๋น ๋ฆ
- ์คํ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ๊ฐ ํ๋์ฌ์ ๋ฐฐํฌ๊ฐ ์ฌ์
- ์ค์ ์ง์ค์์ด์ด์ ํ๋์ API๋ง์ผ๋ก MSA๊ฐ ์ฌ๋ฌ API๋ก ์ํํ๋ ๊ฒ๊ณผ ๋์ผํ ๊ธฐ๋ฅ์ด ๊ฐ๋ฅํ๋ค.
- ๋ถ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ณด๋ค ์๋ํฌ์๋ ํ ์คํธ๋ฅผ ๋ ๋น ๋ฅด๊ฒ ์ํํ ์ ์๋ค.
- ๋ชจ๋ ์ฝ๋๊ฐ ํ ๊ณณ์ ์์ด ๋๋ฒ๊น ์ด ์ฌ์ด ์๋ฌ ํธ๋ ์ด์ฑํ๊ธฐ ์ฉ์ด
๐Monolithic Architecture ํ๊ณ, MSA ๋ฑ์ฅ ๋ฐฐ๊ฒฝ
- ๋ถ๋ถ ์ฅ์ ๊ฐ ์ ์ฒด ์๋น์ค ์ฅ์ ๋ก ํ๋๋ ์ ์๋ค.
- ๋ถ๋ถ์ ์ผ๋ก Scale-outํ๊ธฐ ์ด๋ ต๋ค
- ์๋น์ค ๋ณ๊ฒฝ์ด ์ด๋ ต๊ณ , ์์ ์ด ์ฅ์ ์ ์ํฅ์ ํ์ ํ๊ธฐ ํ๋ค๋ค
- ๋ฐฐํฌ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค
- ํ๋์ ํ๋ ์์ํฌ์ ์ธ์ด์ ์ข ์์ ์ด๋ค
๐MSA๋ฅผ ์ง๊ธ ์๋น์ค์ ๋ น์ธ๋ค๋ฉด ์ด๋ป๊ฒ ๋ น์ผ ์ ์์๊น?
User ์๋น์ค, ๊ฒ์ ์๋น์ค, ๊ฒ์๊ธ ์๋น์ค๋ก ๋๋ ๋ณผ ์ ์์ ๊ฑฐ ๊ฐ๋ค.
๐์๋ฌ์ ๊ด๋ จํ ๊ทน๋ณต ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด๊ธฐ
- API Gateway
- ๋ก๋๋ฐธ๋ฐ์
๐๋ณด์ ํธ๋์ญ์ , Saga
๐์๋ง์ ๋์ปค๋ฅผ ๊ด๋ฆฌ ์ฟ ๋ฒ๋คํฐ์ค
์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ
๐๋ชจ๋๊ฐ์ ํต์ ๋ฐฉ์
API๋ก ํต์ , ๋ฉ์ธ์ง ๋ธ๋ก์ปค ๋ฑ์ ๋ค์ํ ๋ฐฉ์์ด ์๋๋ฐ ๋ฐฉ์ ์ฐพ์๋ณด์
๐์ธ์ด๊ฐ ๋ง์์ง๋ฉด ์ฅ์ ๋ ์๊ณ ๋จ์ ๋ ์์ด
์ฅ์ ์ ์ธ์ด๋ง๋ค์ ํน์ฑ์ ์ด๋ ค ์ฅ์ ์ ๋ชจ์ ์๋น์ค๋ฅผ ๋ง๋ค์ ์๋ค๋ ์ฅ์ ์ด ์์ง๋ง
์ธ์ด๊ฐ ๋๋ฌด ๋ง์์ง๋ฉด ์ธ์ฌ ํ์ ์ ์งํ๊ธฐ๊ฐ ํ๋ค๋ค. ํนํ ๋ฉ์ด์ ์ธ์ด๊ฐ ์๋๋ผ๋ฉด ํด๋น ์ธ์ด๋ฅผ ์๋ ์ฌ๋์ ์ฐพ๊ธฐํ๋ค๊ธฐ ๋๋ฌธ
๐ ์ ๋ค๋ฆญ์ ๋ํด์ ์ค๋ช ํ๊ณ , ์ปฌ๋ ์ ํด๋์ค์์ ์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ์ง ์ค๋ช ํด์ฃผ์ธ์.
๐ ์ ์
ํด๋์ค ์ ์์ ํน์ ํ์ ์ ๋ฏธ๋ฆฌ ์ง์ ํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ถ์ ์ฌ์ฉ์์ ์ํด ์ง์ ๋๋ ๊ฒ
๐์ฅ์
- ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ์๋ชป๋ ํ์ ์ด ๋ค์ด์ฌ ์ ์๋ ๊ฒ์ ์ปดํ์ผ ๋จ๊ณ์์ ๋ฐฉ์งํ ์ ์๋ค.
- ํ์ ๋ณํ์ ์ค์ธ๋ค. ์ปฌ๋ ์ ํด๋์ค์ ๋ฃ๊ณ ๋บ ๋ ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํ์ ๋ณํ์ด ํ์ ์์ด์ ธ ํด๋จผ์๋ฌ ์ค์ผ์ ์๋ค
- ๋น์ทํ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ํ์ ์ ์ง์ํ๋ ๊ฒฝ์ฐ ๋ณ๋์ ์ค๋ฒ๋ก๋ฉ์ ํ ํ์๊ฐ ์์ด ์ฝ๋๋ผ์ธ์๊ฐ ์ค๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค.
- ํน์ ํ์ ์ ์ข ์๋์ง ์์ ์ ์ฐํ ๋ก์ง์ด ๊ฐ๋ฅํ๋ค.
๐์ ๋ค๋ฆญ์ "์ปฌ๋ ์ ํด๋์ค"์์ ์ฌ์ฉํ๋ ์ด์ , ์ปฌ๋ ์ ํด๋์ค๋ฅผ ์ ๋ค๋ฆญ ๊ธฐ๋ฒ์ผ๋ก ๋ง๋ ์ด์ (์ด๊ฑธ ์ ํน์ ํ์ง ๋ชปํ๊ฑฐ ๊ฐ์์ ์ถ๊ฐ์ ์ธ ์์ ์ด ํ์ํจ)
๋ฐ์ดํฐ ํ์ ์ ๋ฌถ์ด ์ ์ฅํ๋ ์ปฌ๋ ์ ํด๋์ค์์๋ ๋ค์ํ ํ์ ์ ๋ํด ๋์ผํ ๊ธฐ๋ฅ์ ์ง์ํด์ผํ๋ ๋ฐ ์ด๋ ์ค๋ฒ๋ก๋ฉ์ ํ ํ์๊ฐ ์์ด ์ฝ๋๋ผ์ธ์๊ฐ ์ค๊ณ ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๋ค. ํ์ฅ์ฑ ์ฐพ์๋ณด์
๐ ๋จ์
- ์ฝ๋์ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ค. ํ์ ์ ํน์ ํ์ง ์์ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ค์ด์ค๋ ์ง ๋ฐ๋ก ์ฝ๋๋ฅผ ์ถ์ ํด์ ์ฝ์ด๋ด์ผ ํ๋ค.
๐์ ๋ค๋ฆญ ์์ผ๋ ์นด๋
๋ชจ๋ ํ์ ์ ๋์ ํ ์ ์๋ ํ์ ์ ์์ผ๋ ์นด๋๋ผ๊ณ ํ๋ฉฐ ์ด 3๊ฐ์ง ํํ๋ก ์ด์ฉํฉ๋๋ค.
๋ชจ๋ ํด๋์ค๋ ์ธํฐํ์ด์ค๊ฐ ์ฌ์ ์๋ ์์ผ๋ ์นด๋ ?(๋ฌผ์ํ) ๋ก๋ง ํ๊ธฐ
์ต์์ ํ์ ์ ์ ์ํด ํ๊ณ๋ฅผ ์ ํ๋ ์ํ ๊ฒฝ๊ณ ์์ผ๋ ์นด๋๋ ? extends ํค์๋์ ํจ๊ป ํ๊ธฐ
์ตํ์ ํ์ ์ ์ ์ํด ํ๊ณ๋ฅผ ์ ํ๋ ํํ ๊ฒฝ๊ณ ์์ผ๋ ์นด๋๋ ? super ํค์๋์ ํจ๊ป ํ๊ธฐ
๐์ ๋ค๋ฆญ์ ์์๊ณผ ๊ตฌํ
์ ๋ค๋ฆญ๋ ์์์ด ๊ฐ๋ฅํ๋ฉฐ ํ์ํด๋์ค๋ ์ถ๊ฐ๋ก ํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ์ ์๋ค.
์ธํฐํ์ด์ค ๋ํ ๊ฐ๋ฅํ๋ฐ ์ด๋ฅผ ๊ตฌํํ ํด๋์ค๋ ์ ๋ค๋ฆญ ํ์ ์ด์ด์ผ ํ๋ค.
๐ ์ ๋ค๋ฆญ์์ ํ์ ์ ์์ ์ฑ
ํ์ ์ ์์ ์ฑ์ ๋์ธ๋ค๋ ๊ฒ์ ์๋ํ์ง ์๋ ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ ์ฅํ๋ ๊ฒ์ ๋ง๊ณ , ์ ์ฅ๋ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ฌ ๋ ์๋์ ํ์ ๊ณผ ๋ค๋ฅธ ํ์ ์ผ๋ก ํ๋ณํ๋์ด ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ค์ฌ์ค๋ค๋ ๋ป
๐์ ๋ค๋ฆญ๊ณผ ์ค๋ธ์ ํธ์ ์ฐจ์ด
์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ฉด ํ์ ์ ๋์ ์ผ๋ก ์ฒดํฌํ์ฌ ๋ถํ์ํ ํ๋ณํ์ ์ํด๋ ๋๋๋ฐ, ์ค๋ธ์ ํธ์ ๊ฒฝ์ฐ ์ถ๋ ฅํ๊ณ ์ ํ ๋๋ ํ ๋ณํ์ ํด์ผ๋๋ค. ์๋์ ์ผ๋ก ํ ๋ณํ์ ์งํํ๋ค๋ณด๋ ์๋ชป๋ ํ์ ์ผ๋ก ๋ณํ์ ์๋ํ๋ ๋ฑ์ ์ค๋ฅ ๊ฐ๋ฅ์ฑ์ด ์กด์ฌํ๋ค.
๐ํ๋ก์ ํธ์์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํด๋ณธ ๊ฒฝํ
๊ณตํต ์๋ต ์ฒ๋ฆฌ์์ ์์ฒญํ ๊ฒฐ๊ณผ์ data๋ฅผ ์ด๋ ํ ํ์ ์ผ๋ก๋ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ ๋ค๋ฆญ์ ์ฌ์ฉํ ๊ฒฝํ์ด ์๋ค.
์์ฒญ์ ๋ํ ์๋ต์ผ๋ก ์ ๋ง ๋ค์ํ ํ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ฒ ๋๋๋ฐ ์ด ์๋ต๋ง๋ค ๋ณ๊ฐ์ ๋งค๊ฐ์ธ์์ ๋ฆฌํด๊ฐ์ ์ ์ํด ์ค๋ฒ๋ก๋ฉํ๊ฒ ๋๋ฉด ๊ต์ฅํ ๋ง์ ์์ ๋ฉ์๋๋ค์ด ํ์๋ก ํ๊ฒ ๋๋ค. ์ด๋ฅผ ํ๋๋ก ๊ฐ๋ตํ๊ฒ ํ๊ธฐ ์ํด์ ์ ๋ค๋ฆญ์ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ ์๋ตํ ์ ์๊ฒ ์ฒ๋ฆฌํ์๋ค.
๐์ ๋ค๋ฆญ ๋ฉ์๋
์ ๋ค๋ฆญ ํ์ ์ ๋ฉ์๋ ๋ฆฌํด ํ์ ์์ ์ ์ธํ ๋ฉ์๋๋ฅผ ์ ๋ค๋ฆญ ๋ฉ์๋๋ผ ํ๋ค.
๐ ๊ฒฝํ์ ๋ํด ๋ฌป๋๋ฐ ๊ฒฝํ์ด ์๋ค๋ฉด ์์์ ํด๋ด๋ผ
๐ List, Set, Map, HashMap์ ์ฐจ์ด์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์.
๐ ์ ์
- List : ์์๋ฅผ ๊ฐ์ง๊ณ ์ผ๋ ฌ๋ก ๋์ด๋ ๋ฐ์ดํฐ๋ค์ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ, ์ค๋ณต์ ํ์ฉํ๋ฉฐ, ํฌ๊ธฐ๊ฐ ๊ณ ์ ๋์ด์์ง ์์ ๊ฐ๋ณ์ฑ์ด ์๋ค. ์ข ๋ฅ์๋ Vector, ArrayList, LinkedList๊ฐ ์๋ค.
- Set : ๋ฐ์ดํฐ ์งํฉ ์๋ฃ๊ตฌ์กฐ๋ก ๋น์์ฐจ์ ์ด๊ธฐ์ ํน์ ํ ์์๊ฐ ์๊ณ ์ค๋ณต์ ํ์ฉํ์ง ์์ ๊ฐ์ ๊ฐ์ ์ฝ์ ํ๋ฉด ๋ง์ง๋ง ๊ฐ ํ๋๋ง ์ ์ฅํ๊ฒ ๋๋ค. index๊ฐ ์์ด iterator์ ์ฌ์ฉํ๋ค. ์ข ๋ฅ์๋ HashSet, LinkedHashSet, TreeSet์ด ์๋ค.
- Map : Java์์ key์ value์ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ ํํ๋ฅผ ๋งํ๋ค. ๋ค์ํ ๊ตฌํ์ฒด๊ฐ ์กดํดํ๋ ๋ฐ HashMap, LinkedHashMap, TreeMap, EnumMap ๋ฑ ๋ง๋ค.
- HashMap : Map์ ๊ตฌํ์ฒด ์ค ํ๋๋ก key์ ๋ํ ์ค๋ณต์ด ์๊ณ ์์๋ฅผ ๋ณด์ฅํ์ง ์๋๋ค. index๊ฐ ์์ด iterator์ ์ฌ์ฉํ๋ค. ํค ๊ฐ์ผ๋ก ํด์ํจ์๋ฅผ ์คํํ ๊ฒฐ๊ณผ๋ก ์ ์ฅ์์น๋ฅผ ๊ฒฐ์ ํ๊ณ , ํด์ ํจ์๋ฅผ ํตํด ์์น๋ฅผ ๋ฐ๋ก ์ ์ ์์ด ๋ฐ์ดํฐ์ ์ถ๊ฐ, ์ญ์ , ๊ฒ์์ด ๋น ๋ฅด๋ค๋ ์ฅ์ ์ด ์๋ค.
+List ์ HashMap์ ๋ฅ๋ค์ด๋ธํด์ ๊ณต๋ถํ ๊ฒ
+Java์์ List, Set, Map ๋ชจ๋ ์ธํฐํ์ด์ค
๐iterator?
๋ป ๋ฐ๋ณต์, ๋ฐฐ์ด์ด๋ ๊ทธ์ ์ ์ฌํ ์๋ฃ ๊ตฌ์กฐ ๋ด๋ถ์ ์์๋ฅผ ์ํํ๋ ๊ฐ์ฒด
๐List๊ฐ ์ง๋ฌธํ ๊ฑฐ๋ฆฌ๊ฐ ๋ง๋ค. ์ข ๋ฅ์ ํน์ง์ ์์๋ฌ๋ผ
- ArrayList : Vector ํด๋์ค์ ๋จ์ ์ ๋ณด์ํ๊ธฐ ์ํด์ ๋์จ ํด๋์ค. ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ์ฒด๊ฐ ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌ๋๋ค. ์ธ๋ฑ์ค๋ก ๊ด๋ฆฌ๋๋ ๊ฒ์ ๋ฐฐ์ด๊ณผ ์ ์ฌํ์ง๋ง ์ฌ์ฉ์ค์ ํฌ๊ธฐ๊ฐ ๋ณํ ์ ์๋ค๋ ํฐ ์ฐจ์ด์ ์ด ์๋ค. Thread-safeํ์ง ๋ชปํ๋ค. ๋ฉํฐ์ค๋ ๋ ํ๊ฒฝ์์ ์ฌ์ฉํด์ผ ํ๋ค๋ฉด CopyOnWriteArrayList ๋๋ Collections.synchronizedList๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ArrayList๋ ์ด๊ธฐ ์ฉ๋์ด 10์ด๊ณ ์ด๊ณผํ๋ฉด 1.5๋ฐฐ, iterator๋ง์ฌ์ฉํ ์ ์๋ค.
- Vector : ๋ฒกํฐ๋ ์๋ฐ ์ปฌ๋ ์ ํ๋ ์์ํฌ๊ฐ ๋์ค๊ธฐ ์ ๋ถํฐ ์๋ ํด๋์ค. ์์๋ฅผ ์ ์งํ๊ณ , ์ค๋ณต์ ํ์ฉํ๋ค. , iterator์ Enumeration์ด ์ฌ์ฉ๊ฐ๋ฅํ๋ค. ์ด๊ธฐ์ฉ๋ 10์ด๊ณ ์ด๊ณผํ๋ฉด 2๋ฐฐ. HashTable๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์์ค ์ฝ๋ ํธํ ๋๋ฌธ์ ๋จ์ ์๋ ํด๋์ค ์ด๊ธฐ ๋๋ฌธ์ ArrayList๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ถ์ฒ๋๋ค. Vector๊ฐ ์ฑ๋ฅ์ ์ผ๋ก ๋ฌธ์ ๊ฐ ๋๋ ๊ฑด Thread-safe ํน์ฑ ๋๋ฌธ์ธ๋ฐ ๋๊ธฐํ๊ฐ ํ์ํ์ง ์ฌ๋ถ์ ์๊ด์์ด ์์ ์ ์ ๊ทธ๋ ์ค๋ฒํค๋๊ฐ ์๊ธฐ ๋๋ฌธ.
- LinkedList : ๋งํฌ๋๋ฆฌ์คํธ ์ญ์ List์ ๊ตฌํ์ฒด์ง๋ง, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ์ง ์๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ด์ ๋ ธ๋๋ค์ ์ด์ ๊ณผ ๋ค์ ๋ ธ๋๋ฅผ ๋ํ๋ด๋ ํฌ์ธํฐ๋ฅผ ํตํด ์ฐ๊ฒฐ๋๋ค. ๋ฐฐ์ด์์๋ ์ค๊ฐ ๊ฐ์ ์ฝ์ ํ๊ฑฐ๋ ์ญ์ ํ๋ฉด ๊ทธ ๋ค์ ๊ฐ์ ์ ๋ถ ์์ผ๋ก ๋๊ณ ์ค๊ฑฐ๋ ๋ฐ์ด๋ด์ผํ๋ ํฐ ์ด๋์ด ์๋๋ฐ ๋งํฌ๋๋ฆฌ์คํธ ์ฌ์ด์ ๊ฐ์ ์ฝ์ , ์ญ์ ์ ์ฐ๊ฒฐํ๋ ํฌ์ธํฐ๋ฅผ ์์ ํ๊ธฐ๋ง ํ๋ฉด ๋๋ฏ๋ก ์ด๋ฐ ์ํฉ์์์ ์ฑ๋ฅ์ด ์ฐ์ํ๋ค
๐List ์ฆ๊ฐํ๋ ์๋ฆฌ
๐Set ์ข ๋ฅ
HashSet์ HashMap๊ณผ Set ์ธํฐํ์ด์ค๋ฅผ ์์ํ์ฌ ๋น ๋ฅธ ์ฐ์ฐ์ด ๊ฐ๋ฅํ ์๋ฃํ, ์ ๋ ฌ ๋ถ๊ฐ
LinkedHashSet์ LinkedList๋ก ์ฐ๊ฒฐ๋ HashSet์ด๋ผ ํ ์ ์๊ณ , ์
๋ ฅ ์์๋ฅผ ๋ณด์ฅํด์ค๋ค.
TreeSet์ Tree์ Set์ ์์ํ ๊ฒ์ผ๋ก ์ฐ์ฐ์ด ๋๋ ค๋ ๋ค์ํ ์ ๋ ฌ์ ์ง์ํ๋ ์๋ฃํ, ์ฝ์
๊ณผ ๋์์ ์ ๋ ฌ
๐Set์ ์ค๋ณต ์ญ์ ์๋ฆฌ
๐ HashMap์ ์๋ฆฌ
HashMap์ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐฐ์ด์ ์ฌ์ฉํ๋ค. ๋ฐฐ์ด์ ์ธ๋ฑ์ค๋ฅผ ํตํด ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค๋ ํน์ง์ด ์๋๋ฐ, HashMap์ ํด์ฑ์ ํตํด Map๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ์์น์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํ์ฌ ์ ์ฅํ๊ฒ ๋๋ค.๐Map.Entry
Map์ธํฐํ์ด์ค์ ๋ด๋ถ ์ธํฐํ์ด์ค๋ก Map์ ์ ์ฅ๋๋ key-value ์์ ๋ค๋ฃจ๊ธฐ ์ํด ๋ด๋ถ์ ์ผ๋ก ์ ์ํด ๋์ ๊ฒ์ ๋งํ๋ค.
๐ํด์ฑ
๐HashMap, HashTable์ ์ฐจ์ด
HashMap์ด๋ HashTable์ด๋ Map ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ๊ฐ๋ค.
๋ค๋ง,
- HashTable์ Thread-safeํ๊ณ HashMap์ Thread-safeํ์ง ์๋ค๋ ์ฐจ์ด
- HashTable์ key์ null๊ฐ์ ํ์ฉํ์ง๋ง HashMap์ key์ null๊ฐ์ ํ์ฉํ์ง ์๋๋ค.
- HashMap์ ๋ณด์กฐํด์๋ฅผ ์ฌ์ฉํด ๋ณด์กฐํด์๊ฐ ์๋ HashTable์ ๋นํด ํด์ ์ถฉ๋์ด ๋ ๋ฐ์ํ ์ ์์ด ์๋์ ์ผ๋ก ์ฑ๋ฅ์ ์ด์ ์ด ์๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ผ๋จ HashMap์ ๊พธ์คํ ๊ฐ์ ๋๊ณ ์๊ธฐ์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ๋ํด ๋ ์ข์ ์ ์ด ๋ง๋ค.
HashTable์ ์ปฌ๋ ์ ํ๋ ์์ํฌ ์ด์ ๋ถํฐ ์กด์ฌํ์ฌ JRE 1.0, JRE 1.1 ํ๊ฒฝ์ ๋์์ผ๋ก ๊ตฌํํ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ํ ์ ์๊ฒ ํ์ ํธํ์ฑ์ผ๋ก ์ ๊ณตํ๊ณ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ
๐HashMap vs ๋ค๋ฅธ ๋งต๊ณผ ๋น๊ต (์๊ฐ ๋ณต์ก๋ ๋น๊ต)
|
Get
|
ContainsKey
|
Next
|
Data Structure
|
HashMap
|
O(1)
|
O(1)
|
O(h / n)
|
Hash Table
|
LinkedHashMap
|
O(1)
|
O(1)
|
O(1)
|
Hash Table + Linked List
|
IdentityHashMap
|
O(1)
|
O(1)
|
O(h / n)
|
Array
|
WeakHashMap
|
O(1)
|
O(1)
|
O(h / n)
|
Hash Table
|
EnumMap
|
O(1)
|
O(1)
|
O(1)
|
Array
|
TreeMap
|
O(log n)
|
O(log n)
|
O(log n)
|
Red-black tree
|
ConcurrentHashMap
|
O(1)
|
O(1)
|
O(h / n)
|
Hash Tables
|
ConcurrentSkipListMap
|
O(log n)
|
O(log n)
|
O(1)
|
Skip List
|
์ถ์ฒ : http://infotechgems.blogspot.com/2011/11/java-collections-performance-time.html
๐ํด์ ํจ์
๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์์์ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ํ์ ์ฐ์ฐ์ ํตํด ๊ณ ์ ๋ ๊ธธ์ด์ ๋ฐ์ดํฐ๋ก ๋งคํํ๋ ํจ์
๐ํด์ ํ ์ด๋ธ
ํด์ ํจ์๋ก ์ป์ ํด์๋ฅผ ํค๋ก ํ์ฉํ์ฌ index๋ก ์ฌ์ฉํ๊ณ ํด๋น index์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ํจ์จ์ ์ธ ๊ฒ์์ ์ํด ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๐ํด์ ์ถฉ๋
๋๊ฐ์ ๋ค๋ฅธ key๊ฐ ๋์ผํ hash๊ฐ์ ๊ฐ๋ ๊ฒฝ์ฐ๋ฅผ ์ถฉ๋์ด ๋ฐ์ํ๋คํ๋ค.
๐ํด์ ์ถฉ๋ ํด๊ฒฐ๋ฒ
์๋ฐ๋ ์ด๋ค๊ฑธ ์ ํํ์ ๊น๋
Open Addressing (๊ฐ๋ฐฉ์ฃผ์๋ฒ))
์ถฉ๋ ๋ฐ์์ ํด์ ํจ์๋ก ์ป๋ ์ฃผ์๊ฐ ์๋๋ผ ๋น์ด์๋ ๋ค๋ฅธ ์ฃผ์ ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค.
์ข ๋ฅ : ์ ํ ํ์, ์ ๊ณฑ ํ์, ์ด์ค ํด์
Chaining)
์ถฉ๋์ด ๋๋ฉด ํด๋น ๋ฒํท์ ์ฒด์ธ ํํ๋ก ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ๋ ๋ฐฉ์์ด๋ค.
+ ํ์ง๋ง ํ๊ณณ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ๋ชฐ๋ฆฌ๊ฒ ๋๋ ์ ๋ฆผ ํ์๋ฑ์ด ์๋ค.
์๋ฐ์์ ์ฑํํ๊ณ ์๋ ์ถฉ๋ ํด๊ฒฐ๋ฒ
๐ Map์ ๊ตฌํํ ํด๋์ค๋ค ์ค ํ๋์ HashMap๊ณผ ๋น๊ตํ์ฌ ์ค๋ช
ํด์ฃผ์ค ์ ์์ผ์ค๊น์?
๐TreeMap๊ณผ HashMap์ค ๊ฐ๋ณ ํ์๊ณผ ๋ฒ์ ํ์์ ๊ฐํ ๊ฒ์?
๊ฐ๋ณ ๊ฒ์์ HashMap,๋ฒ์ ๊ฒ์์ TreeMap
๐TreeMap
์ค๋ฆ์ฐจ์์ผ๋ก ์ ์ฅํ๊ณ ์ด์ง๊ฒ์ ๋ฐฉ๋ฒ์ผ๋ก.. ์ฅ์ ๊ณผ ์ฉ๋
๐HashMapํด์ ์กฐํ ์๋๋ฅผ ๊ฐ์ ํ๋ ๊ฒฝํ
'Memo' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฉด์ ๋๋น] ์ค๋ฒ๋ก๋ฉ vs ์ค๋ฒ๋ผ์ด๋ฉ, RDB vs NoSql (0) | 2023.03.02 |
---|---|
๋ฉด์ ๋๋น - ํ๋ก๊ทธ๋๋ฐ, ์๊ฐ๋ณต์ก๋ vs ๊ณต๊ฐ๋ณต์ก๋ (0) | 2023.03.01 |
๋ฉด์ ๋๋น - WS vs WAS, Stack vs Queue, Array vs Linked List (0) | 2023.02.28 |
๋ฉด์ ๋๋น - Spring Test์ฐจ์ด, ํธ๋์ญ์ , TCP vs UDP (0) | 2023.02.27 |
๋ฉด์ ๋๋น - parameter vs argument, ํ๋ก์ธ์ค vs ์ค๋ ๋ (0) | 2023.02.24 |