๐ Study
[MSA] MSA๋ ๋ฌด์์ธ๊ฐ? ๊ฐ๋ ์ดํดํ๊ธฐ
๋ชฉ์ฐจ 1. MSA๋? 2. MSA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ 3. MSA์ ํน์ง 4. MSA์ ์ฅ์ 5. MSA์ ๋จ์ MSA? MicroService Architecture์ ์ค์๋ง ๐๐ป ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ์ ๋ํ ์ ํํ ์ ์๋ ์๋ค. ํ์ง๋ง ๋ง์ดํฌ๋ก์๋น์ค๋ ์๊ณ , ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ ๊ฐ๋ฅํ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ ์๋น์ค๋ก ๊ตฌ์ฑ๋ ํ๋ ์์ํฌ๋ผ๊ณ ํ ์ ์๋ค. ๋ง์ดํฌ๋ก์๋น์ค๋ ์์ ํ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๊ณ , ๋ค๋ฅธ ๊ธฐ์ ์คํ(๊ฐ๋ฐ ์ธ์ด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฑ)์ด ์ฌ์ฉ ๊ฐ๋ฅํ ๋จ์ผ ์ฌ์ ์์ญ์ ์ด์ ์ ๋๋ค. MSA์ ๋ฑ์ฅ๋ฐฐ๊ฒฝ MSA์ Monolithic์ ๋น๊ต ์ถ์ฒ - https://kr.tmaxsoft.com/info/storyTView.do?seq=345 Monolithic Architecture๋ ์ํํธ์จ์ด์ ๋ชจ๋ ๊ตฌ์ฑ..
[node.js] req.params vs req.body vs req.query
node.js๋ก ํ๋ก์ ํธ๋ฅผ ํ๋ฉด์ ์ฃผ์๋ก ๋ฐ๋ params( ๋ผ์ฐํฐ ๋งค๊ฐ๋ณ์) ์ req.body ๋ฐ์ดํฐ๋ค์ ๋ด์์ ๋ณด๋ผ ๋ ์ฌ์ฉํ๋ ๊ฒ(์ ์ ์ ์ ๋ณด ๋๋ ํ์ผ) ํค ๊ฐ์ผ๋ก ๋ณด๋ด๋ ๊ฒ์ ์๊ณ ์์์ผ๋ req.query๋ฅผ ์ฐ๋ ์ ๋ฐฐ๋ฅผ ๋ณด๊ณ ์ด๊ฑด ๋ชจ๋ฅด๋ฉด ์๋ ๊ฒ ๊ฐ์์ ์ ๋ฆฌ ํฉ๋๋ค. req.params - ๋ผ์ฐํฐ ๋งค๊ฐ๋ณ์ ์๋ฅผ ๋ค์ด /:id/:name ๊ฒฝ๋ก๊ฐ ์์ผ๋ฉด ":id"์์ฑ๊ณผ ":name"์์ฑ์ req.params.id, req.params.name์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. www.example.com/post/1/jun ์ผ ๊ฒฝ์ฐ 1๊ณผ jun์ ๋ฐ๋๋ค. req.body - JSON ๋ฑ์ ๋ฐ์ดํฐ๋ฅผ ๋ด์๋ ์ฌ์ฉํ๋ค. (์ฃผ๋ก POST๋ก ์ ์ ์ ์ ๋ณด ๋๋ ํ์ผ ์ ๋ก๋(formdata)๋ฅผ ๋ณด๋์ ๋ ) ์์ฒญ ๋ณธ๋ฌธ์..
[Git] ์ข์ ์ปค๋ฐ ๋ฉ์ธ์ง ์์ฑํ๊ธฐ์ํ ๊ท์น๋ค
์ข์ ์ปค๋ฐ ๋ฉ์์ง ์์ฑํ๊ธฐ ์ํ ๊ท์น๋ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ์ด๋ ค์ด๊ฒ๋ค์ค ํ๋๋ ์ด๋ฆ์ ์ด๋ป๊ฒ ์ง๋์ง์ ๋ํ ๊ณ ๋ฏผ ๋ฐ๋ก`Naming` ์ผ ๊ฒ์ ๋๋ค. ํด๋์ค, ํจ์, ๋ณ์ ๋ฑ๋ฑ ๋ง์ ์ด๋ฆ์ ๊ณ ๋ฏผํ์ง๋ง ๊ทธ ์ค ํ๋์ธ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ด๋ป๊ฒ ์์ฑํ์ฌ์ผ ์ข์ ์ปค๋ฐ ๋ฉ์์ง์ผ์ง์ ๋ํ์ฌ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. Commit message 7๊ฐ์ง ๊ท์น ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ํ ์ค ๋์ด ๊ตฌ๋ถ ์ ๋ชฉ์ 50์ ์ด๋ด ์ ๋ชฉ ์ฒซ ๊ธ์๋ ๋๋ฌธ์ ์ ๋ชฉ ๋์ ๋ง์นจํ X ์ ๋ชฉ์ ๋ช ๋ น๋ฌธ์ผ๋ก, ๊ณผ๊ฑฐํ X ๋ณธ๋ฌธ์ ๊ฐ ํ์ 72์ ์ด๋ด (์ค๋ฐ๊ฟ ์ฌ์ฉ) ๋ณธ๋ฌธ์ ์ด๋ป๊ฒ ๋ณด๋ค ๋ฌด์์, ์์ ๋ํ์ฌ ์ค๋ช Commit message ๊ตฌ์กฐ ๊ธฐ๋ณธ์ ์ผ๋ก commit message ๋ ์ ๋ชฉ, ๋ณธ๋ฌธ, ๊ผฌ๋ฆฌ๋ง๋ก ๊ตฌ์ฑํฉ๋๋ค. ์ ๋ชฉ์ ํ์์ฌํญ์ด๋ฉฐ, ๋ณธ๋ฌธ๊ณผ ๊ผฌ๋ฆฌ๋ง์ ์ ํ์ฌํญ์ ๋๋ค..
java ์ฝ๋ฉ ๊ท์น
[์ฝ๋ฉ ๊ท์น] ์๋ฐ์ฝ๋ฉ ๊ท์น(Java Code Conventions) ์๋ฐ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์ฝ๋ฉ ๊ท์น ์๋ฌธ : Oracle / Code Conventions for JavaTM Programming Language / 1999-4-20 ๋ฒ์ญ : Kwangshin's Positive Blog, Java Code Conventions / ์๋ฐ ์ฝ๋ฉ ๊ท์น, 2015-2-10 ๋ชฉ์ฐจ 1. ๊ฐ์ 2. ํ์ผ ์ด๋ฆ 2.1 ํ์ผ ํ์ฅ์ 2.2 ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ํ์ผ ์ด๋ฆ 3. ํ์ผ ๊ตฌ์กฐ 3.1 ์๋ฐ ์์ค ํ์ผ 3.1.1 ์์ ์ฃผ์ 3.1.2 Package ๋ฌธ๊ณผ Import ๋ฌธ 3.1.3 Class์ Interface ์ ์ธ 4. ๋ค์ฌ์ฐ๊ธฐ 4.1 ํ ์ค์ ๊ธธ์ด 4.2 ์ค ๋๋๊ธฐ 5. ์ฃผ์ 5.1 ๊ตฌํ ์ฃผ์ ํ์ 5.1.1 ..
[programming Basic][git][principle][Object-Oriented] S.O.L.I.D
์ด๋ฒ ํฌ์คํ ์์ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ํน์ฑ๊ณผ ์ฅ์ ์ ์ต๋ํ์ผ๋ก ๋์ด์ฌ๋ฆฌ๊ธฐ ์ํด ํ๋ก๊ทธ๋จ์ ์ด๋ป๊ฒ ์ค๊ณํด์ผ ํ๋ ์ง์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ๋ค๋ค๋ณธ๋ค. ๊ฐ์ฒด์งํฅ ์ค๊ณ๊ณผ์ ์๊ตฌ์ฌํญ (์ ๊ณตํด์ผ ํ ๊ธฐ๋ฅ) ์ ์ฐพ๊ณ ์ธ๋ถํ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ๋ฅ์ ์๋ง์ ๊ฐ์ฒด๋ก ํ ๋นํ๋ค. ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ฒด์ ์ถ๊ฐํ๋ค. ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค. (๊ธฐ๋ฅ์ ์ต๋ํ ์บก์ํ) ๊ฐ์ฒด ๊ฐ์ ์ด๋ป๊ฒ ๋ฉ์๋ ํธ์ถ์ ์ฃผ๊ณ ๋ฐ์ ์ง ๊ฒฐ์ ํ๋ค. ๊ฐ์ฒด์งํฅ ์ค๊ณ์์น SRP (Single Responsibility) ๋จ์ผ ์ฑ ์ ์์น ํด๋์ค๋ ๋จ ํ๊ฐ์ ์ฑ ์์ ๊ฐ์ ธ์ผ ํจ ํด๋์ค๋ฅผ ๋ณ๊ฒฝํ๋ ์ด์ ๋ ๋จ ํ๋์ฌ์ผ ํจ ์ด๋ฅผ ์งํค์ง ์์ผ๋ฉด, ํ ์ฑ ์์ ๋ณ๊ฒฝ์ ์ํด ๋ค๋ฅธ ์ฑ ์๊ณผ ๊ด๋ จ๋ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น ์ ์์ → ์ด๋ ๊ฒ ๋๋ฉด ์ ์ง๋ณด์..
html img ์ด๋ฏธ์ง ๊ฐ์ ธ์ค๊ธฐ ์ ๋๊ฒฝ๋ก์ ์๋๊ฒฝ๋ก
html imgํ๊ทธ์ src์์ฑ ์ด๋ฏธ์ง ๊ฒฝ๋ก ๊ฐ์ ธ์ค๊ธฐ์ ๋ํ ๋ง์ ๊ณ ๋ฏผ์ด ์์ต๋๋ค. ๋ค์์ img ํ๊ทธ์ src ์์ฑ์ ์ ๋๊ฒฝ๋ก์ ์๋๊ฒฝ๋ก์ ์ฐจ์ด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. html ์๋๊ฒฝ๋ก์ ์ ๋๊ฒฝ๋ก img ํ๊ทธ๋ src์ alt ๋ ๊ฐ์ง ํ์ ์์ฑ์ด ์์ต๋๋ค. ๊ทธ์ค src์์ฑ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ฌ ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ ธ์ฌ ๋ ์์ ๊ฐ์ด html ์ฝ๋๋ฅผ ์์ฑ ํฉ๋๋ค. img ํ๊ทธ๋ ์ข ๋ฃํ๊ทธ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์ด ์๋ ํ๊ทธ ์์์ ๋ง์ง๋ง ์ข ๋ฃ >์ ./๋ก ๋ซ์ ์ค๋๋ค. ๊ทธ๋ผ ์ ๋๊ฒฝ๋ก์ ์๋๊ฒฝ๋ก์ ์ฐจ์ด์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํฉ๋๋ค. ์ ๋๊ฒฝ๋ก ํ์ผ์ ํ์์ ์ํ ์ ๊ทผ ๊ฒฝ๋ก๋ฅผ ํ์ผ ์์คํ ์ ๋ฃจํธ๋ก๋ถํฐ ์์ํด ๋ช ์ํด ์ฃผ๋ ๊ฒ์ ์ ๋ ๊ฒฝ๋ก๋ผ๊ณ ํฉ๋๋ค. ์ธํฐ๋ท ํ์ผ(์๋ฒํธ์คํธ์ ์ ๋ก๋๋ ์ด๋ฏธ์ง)์ ๊ฒฝ์ฐ ํ์ผ ๊ฒฝ๋ก๋ฅผ ์ ์ฒด url..
[svg] SVG viewBox๋ฅผ ์์๋ณด์
๋ชฉ์ฐจ SVG๋ viewBox๋ ์๋ฏธ ๊ธฐ๋ณธ ์์ ์์น ์กฐ์ ์์ ํ๋, ์ถ์ ์์ SVG๋ SVG์ ๋ํด์ ๊ฐ๋จํ๊ฒ ์์๋ณด์. SVG๋ Scalable Vector Graphics์ ์ฝ์๋ก ํ์ฅ ๊ฐ๋ฅํ ๋ฒกํฐ ๊ทธ๋ํฝ, ๋ค์ ๋งํด ํฌ๊ธฐ๋ฅผ ํ๋ํ๊ฑฐ๋ ์ถ์ํ ์ ์๋, ์ํ์ ํจ์๋ฅผ ์ด์ฉํด ๋ํ์ด๋ ์ ์ ๊ทธ๋ ค์ ํํํ ๊ทธ๋ํฝ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ฌ๊ธฐ์ ์ํ์ ํจ์๋ฅผ ์ด์ฉํด ๋ํ์ด๋ ์ ์ ๊ทธ๋ ค์ ํํํ์ด๋ผ๋ ์๋ฏธ๋ ์ฐ๋ฆฌ๊ฐ ์ํ ์๊ฐ์ ๋ฐฐ์ ๋ ์ขํํ์ ์์ ๊ทธ๋ ค์ ธ ์๋ ๊ทธ๋ํ ์ ๋๋ก ์ดํดํ ์ ์๋ค. SVG๋ ์ด๋ฐ ๋ฐฉ์์ ์ฐจ์ฉํจ์ผ๋ก์จ, ์ฐ๋ฆฌ๊ฐ ํํ ์๊ณ ์๋ jpg, png, gif์ ๋ค๋ฅด๊ฒ ํ๋ํด๋ ์ ๋ช ๋๊ฐ ๋จ์ด์ง์ง ์๋๋ค. ๋ํ, ๋ํ์ด๋ ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์์ด ํ์ผ์ ์ฉ๋์ด ์๋์ ์ผ๋ก ์๋ค. ํ์ง๋ง svg๋ฅผ ๊ตฌ์ฑ..
Thymeleaf Fragment (Fragment ๋๋๊ธฐ)
Fragment๋ก ๋ ์ด์์์ ๋๋๊ณ ๊ฐ ํ์ด์ง์์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ Fragment๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธธ์๋ ์๋ค. Thymeleaf Fragment - 1 : Fragment๋ฅผ ๋๋๊ธฐ Thymeleaf Fragment - 2 : ํ๋ผ๋ฏธํฐ ์ ๋ฌ, ์ฌ์ฉํ๊ธฐ Thymeleaf Fragment ๋๋๊ธฐ ๊ฐ๋ฐํ๊ฒฝ์ Springboot + Thymeleaf๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์๊ณ ํ๋ก์ ํธ์์ Thymeleaf๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด Thymeleaf ์์กด์ฑ ์ฃผ์ , Web์ ์ฌ์ฉํ๊ธฐ ์ํด Spring-boot-starter-web ์์กด์ฑ์ ์ฃผ์ ๋ฐ์๋ค. org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-star..
[ mysql ] Event scheduler(ํ๋ฃจ์ ํ๋ฒ mysql์ ์๋ํ๊ณ ์ถ์๋)
์๋ก - ๊ตญ๋ฐฉ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ํด์ฆ ์ฌ์ดํธ๋ฅผ ๋ง๋๋๋ฐ ๋งค์ผ๋ง๋ค ๋ฌธ์ ๋ฅผ ๋ฟ๋ ค์ฃผ๊ธฐ์ํด์ mysql์ ํ๋ฃจ์ ํ๋ฒ์ฉ ๋ฌธ์ ๋ฅผ ์ ๋ฐ์ดํธ ํด์ฃผ์ด์ผํ๋๋ฐ ์ด๋ป๊ฒํ๋ค๊ฐ ์ฝ๋๋ก ํ๋ ๊ฒ ๋ณด๋ค ๋ฐฐํฌ๋ db์์ ๋งค์ผ ์์ฑํด์ค ์ ์๋ ๊ฒ์ด mysql์ ์๋ค๊ณ ํ์ฌ์ ์ฌ์ฉํ์๋ค. ์ค์ eventscheduler๋ฅผ ์ฌ์ฉํ๊ธฐ์ํด์ ์ค์ ์ ํด์ฃผ์ด์ผํ๋ค. ์กฐํํ๋ฉด SHOW VARIABLES LIKE 'event%' ํ์ธํ๋ฉด ์ด๋ ๊ฒ ์กฐํ ํ ์ ์๋๋ฐ OFF๋ก ๋ผ์ด์๋๋ฐ ON์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค. SET GLOBAL event_scheduler = ON; ํ์ธํ๋ฉด ์ด๋ ๊ฒ ์กฐํ ํ ์ ์๋๋ฐ OFF๋ก ๋ผ์ด์๋๋ฐ ON์ผ๋ก ๋ฐ๊พธ์ด์ค๋ค. ์ฌ์ฉ๋ฐฉ๋ฒ( Main) ํน์ ์๊ฐ๋ถํฐ ์์ CREATE EVENT write_event_name ON SCHED..