์ ์ฒด ๊ธ(53)
-
[CS] ์์คํค์ฝ๋(ASCII), ์ ๋์ฝ๋(Unicode), UTF-8 ์ ๋ํด - ์ปดํจํฐ ๋ด๋ถ์ ์ธ์ด ์ฒด๊ณ
์ต๊ทผ์ "ํ ๊ถ์ผ๋ก ์ฝ๋ ์ปดํจํฐ ๊ตฌ์กฐ์ ํ๋ก๊ทธ๋๋ฐ"์ด๋ผ๋ ์ฑ ์ ์ฝ๋ ์ค์ด๋ค. ๋ด์ฉ์ด ๊ต์ฅํ ์์ฐจ๋ค. ์ ๋ชฉ ๊ทธ๋๋ก ์ปดํจํฐ์ ๊ตฌ์กฐ์ ๋ด๋ถ์์ ์ด๋ป๊ฒ ์ผ์ ์ฒ๋ฆฌํ๋์ง ๋ฑ๋ฑ. ํ์์ ์ค์ค๋ก CS ์ชฝ ์ง์์ด ๋ถ์กฑํ๋ค๊ณ ๋๊ปด ๊ด๋ จํด ์ธ๊ฐ์ ๋ฃ๊ฑฐ๋ ์ด์์ฒด์ ์ฑ ์ ์ฌ์ ์ฝ์๋๋ฐ, ์ปดํจํฐ ๊ตฌ์กฐ ์ชฝ์ ๋ฐ๋ก ๊ณต๋ถํด๋ณธ ์ ์ด ์์ด์ ์ด๋ฒ ๊ธฐํ์ ์ฑ ์ ํตํด ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค. ๋งค์ผ ์กฐ๊ธ์ฉ ๊ณต๋ถํ ๋ด์ฉ๋ค์ ๋ชจ์ ์ผ์ฃผ์ผ์ ํ ๋ฒ์ฉ ์ด๋ ๊ฒ ๊ธ๋ก ์ ๋ฆฌํด ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค. ์ค๋์ ์ฑ ์ ์ค ์ปดํจํฐ์์ ํ ์คํธ๋ฅผ ํํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ฆฌํ๋ ค๊ณ ํ๋ค. ์ปดํจํฐ๋ ์ด๋ป๊ฒ ๋งํ ๊น? ์ฐ๋ฆฌ๋๋ผ ์ฌ๋๋ค์ ํ๊ธ์ ์ฌ์ฉํด ์ํตํ๋๋ฐ, ์ปดํจํฐ๋? ์ปดํจํฐ๋ ๋นํธ๋ฅผ ์ฌ์ฉํด ๋งํ๋ค. ์ฆ, ์ปดํจํฐ๋ ๋นํธ ์ฒด๊ณ๋ฅผ ํตํด์๋ง ์ํตํ ์ ์์ด! '๋นํธ'๋ผ๋ ๋จ์ด๋ 2์ง๋ฒ์ ..
2021.07.31 -
HTTPS ํต์ ์๋ฆฌ ์ฝ๊ฒ ์ดํดํ๊ธฐ (Feat. SSL Handshake, SSL ์ธ์ฆ์)
์ด ๊ธ์ ์ฐ๊ฒ ๋ ์ด์ ๋,, ๋์ ํ์ HTTPS ์ ๋ํ ์ง์์ HTTPS ๊ฐ ์ํธํ๋ ๋คํธ์ํฌ ํต์ ํ๋กํ ์ฝ์ด๊ณ HTTPS ๋ฅผ ์ฌ์ฉํ ๋คํธ์ํฌ ํต์ ์์๋ ์ฃผ๊ณ ๋ฐ๋ ํจํท์ ๊น๋ ๋ฐ์ดํฐ๊ฐ ์ํธํ๋์ด ์์ด ์์ ํ๋ค! ์ด ์ ๋์๋ค. ๊ทธ๋์ ํ์์ ๊ทผ๋ฐ ์ด๋ป๊ฒ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ์ ํด๋ผ์ด์ธํธ๋ ๋ณตํธํํ๊ณ ์๋ก ์ด๋ป๊ฒ ์ ๋ขฐํ์ง? ๋ฑ์ ์๋ฆฌ๊ฐ ํญ์ ๊ถ๊ธํ์๋๋ฐ, ์ด๋ฒ ๊ธฐํ(์๋ ์๋๋ก์ด๋ SSL Pinning ๊ณต๋ถํ๋ค๊ฐ,, ์ฌ๊ธฐ๊น์ง ์๋ฒ๋ ธ๋ค^^)์ ์์ฃผ ๊น๋ํ๊ฒ ์ดํดํด๋ฒ๋ ธ๋ค. ๋๋ฌด ์์ํด !!!! ๋ชฉ์ฐจ HTTPS ๊ธฐ๋ณธ ๊ฐ๋ SSL ์ธ์ฆ์๋, ๋ฐ๊ธ ๊ณผ์ ๋ฐ ์๋ฆฌ SSL Handshake ๋์ ์๋ฆฌ (์์ด์ด ์คํฌ๋ก ํจํท๊น์ง ๊น ๋ดค๋ค) HTTPS ๊ฐ ๋ญ์ผ? ํน์ ์ ๋ชจ๋ฅด๋ ๋ถ๋ค์ ์ํด ์งง์ ๊ฐ๋ ์ค๋ช . Hypert..
2021.07.25 -
[Android] Fragment์์ viewModel ์ ๊ทผ์ onAttach() ์ดํ์ ํด์ผํ๋ ์ด์
TL;DR: Fragment ์์ ์๋์ ๊ฐ์ด viewModel ์์ฑํ์ ๋, onAttach() ๋ฉ์๋๊ฐ ํธ์ถ๋ ์ดํ์ viewModel ์ ์ ๊ทผํด์ผ ํ๋ค. private val viewModel by viewModels() ์ฌ๋ฐ๋ฅธ ์ ๊ทผ (โญ๏ธ) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) arguments?.apply { viewModel.initAddTask(getInt(ARG_TASK_ID).toLong()) } } ์ฌ๋ฐ๋ฅด์ง ์์ ์ ๊ทผ (โ) override fun onAttach(context: Context) { super.onAttach(context) arguments?.appl..
2021.07.17 -
[Linux] grep ๋ช ๋ น์ด ์ฌ์ฉํ๊ธฐ - ์ ๊ทํํ์์ ์ฌ์ฉํ์ฌ ์ ์ฉํ๊ฒ
grep์ ํ์ผ์ ๋ด์ฉ์์ ํน์ ๋ฌธ์์ด์ ์ฐพ๊ณ ์ํ ๋ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ด๋ค. ์ต๊ทผ ํ์ฌ์์ ์๋๋ก์ด๋ ํ๋ก์ ํธ ๋ด ์ฝ๋์์ ํน์ ํ์์ ๋ฌธ์์ด์ ์ฐพ์์ ํต๊ณ๋ฅผ ๋ด๋ ๊ธฐ๋ฅ์ ๊ตฌํํ ๋ ์ด grep ๋ช ๋ น์ด๋ฅผ ์์ฃผ ์ ์ฉํ๊ฒ ์ผ๋ค. grep ์ ์ ๊ทํํ์๋ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ์ํ๋ ๋ฌธ์์ด์ ์ฝ๊ฒ ์ฐพ์ ์ ์๋ค. grep ๊ธฐ๋ณธ ๋ฌธ๋ฒ PATTERN : ๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด [FILE...] : ๋ด๊ฐ ์ฐพ๊ณ ์ ํ๋ ๋ฌธ์์ด์ ์ฐพ์ ํ์ผ ๋๋ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก grep [OPTION...] PATTERN [FILE...] grep ๋ง๋ณด๊ธฐ test.txt ๋ผ๋ ํ์ผ ๋ด์ฉ์ ์๋์ ๊ฐ๊ณ , ๋๋ ์ด test.txt ํ์ผ์์ "pizza" ๋ผ๋ ๋จ์ด๋ฅผ ์ฐพ๊ณ ์ถ๋ค! ์ด ๋, grep "pizza" test.txt ๋ผ๋ ๋ช ๋ น์ด๋ฅผ ..
2021.07.13 -
[Shell Script] ๋ฐฐ์ด(array)๊ณผ Map ์ฌ์ฉํ๊ธฐ
Shell script ์์๋ ๋ฐฐ์ด๊ณผ map ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ์ต๊ทผ์ ํ์ฌ์์ shell script ๋ฅผ ํตํด ํน์ ๋ฆฌ์คํธ์ ํต๊ณ๋ฅผ ๋ด์ผํด์ map ๊ตฌ์กฐ๊ฐ ํ์ํ์๋๋ฐ ์ด๋ ๊ฒ ์ธ ์ ์๋ค๋ ๋๋ฌด๋ ์ ์ฉํ๋ค. ๊ฐ๋ฐ ํ๊ฒฝ bash ๋ฒ์ : 5.1.8 bash ๋ฒ์ ์ bash --version ์ ํตํด ํ์ธํ ์ ์๋ค. bash ๋ฒ์ ๋ณ๋ก ๋ช ๋ น์ด๊ฐ ์๋จนํ๋ ๊ฒฝ์ฐ๊ฐ ์์ผ๋ ์ฐธ๊ณ ํ ๊ฒ !!!!! ๋์ ๊ฒฝ์ฐ์๋, ์ฒ์์ map ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๊ณ ํ๋๋ฐ, bash ๋ฒ์ ์ด ๋ฎ์ ์๊พธ ์ํ๋๋๋ก ๋์ง ์์๋ค. ์์. ๊ด๋ จํด์๋ ์๋ map ์น์ ์์ ์์ธํ ์ค๋ช ํ๊ฒ ๋ค. ๋ฐฐ์ด(array) ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. # ๊ธฐ๋ณธ ๋ฌธ๋ฒ ๋ณ์=(๊ฐ1 ๊ฐ2 ๊ฐ3 ๊ทธ์ธ ์ญ์ญ) # ์์ array=(V1 V2 V3 V4 V5..
2021.07.12 -
[Shell Script] ๊ธฐ๋ณธ ๋ฌธ๋ฒ ์์๋ณด๊ธฐ - if ๋ฌธ, for ๋ฌธ
์ต๊ทผ์ ํ์ฌ์์ Jenkins ์์ ์คํฌ๋ฆฝํธ ํ์ผ์ ๋๋ ค ํ๋ ์์ ์ ์งํํ๋ค. ์ค๋๋ง์ shell script ๋ฅผ ์ง๋ค ๋ณด๋ ์ด๋ฐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ๋ค๊น์ง๋ ์ฐพ์๋ณด๋ฉด์ ํ๋๋ผ ์๊ฐ์ด ๋ค์๋ค. ์ด๋ฒ ์์ ๋ ์ฌ์ฉํ ๋ฌธ๋ฒ๋ค์ ์ ๋ฆฌํด๋๊ณ ์์ผ๋ก ์ฐพ์๋ด์ผ์ง ๐งค๐งค๐งค ๋ํ ๋๊ฐ์ ๋ถ๋ค๊ป ๋์์ด ๋์ผ๋ฉด ํ๋ ๋ง์์ ์ ๋ฆฌํด ๋๋๋ค. ์ฐ์ ์ฌ๊ธฐ์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ธ if๋ฌธ๊ณผ for๋ฌธ์ ์ ๋ฆฌํด๋๊ณ , ๋๋จธ์ง๋ ๋ฐ๋ก ํฌ์คํ ํ๋ ค๊ณ ํ๋ค. (๋ด์ผ์ ๋๋ฅผ ๋ฏฟ๋๋ค..... ๐ถ) if ๋ฌธ if [ ์กฐ๊ฑด๋ฌธ ]; then echo "if" elif [ ์กฐ๊ฑด๋ฌธ ]; then echo "else if" else echo "else" fi ํต์ฌ์, if [ ] ๋ก ์์ํ๊ณ fi ๋ก ๋๋๋ค๋ ๊ฒ !!! ์ด๊ฒ๋ง ์๋ฉด ๋. if ๋ง ์ฌ์ฉํ ๊ฒฝ์ฐ์๋ ์๋์ ๊ฐ์ด..
2021.07.11