Hello! 🖐
✏ Web Backend Developer happyhsryu
๊ณต๋ถํ ๊ฒ์ ์ ๋ฆฌํ๊ณ ๊ณต์ ํ๋ ๊ธฐ์ ๋ธ๋ก๊ทธ์ ๋๋ค.
๋ด์ฉ์ด ๋ถ์กฑํ๊ฑฐ๋ ์๋ชป๋ ๋ถ๋ถ์ด ์์ ์ ์์ผ๋ ๋๋ฅธ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.
Java ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ๋ ค๋ฉด jdk๊ฐ ํ์ํ๋ค.์ปดํจํฐ๊ฐ java๋ฅผ ์ปดํ์ผ ํ๊ธฐ ์ํ javac๋ฅผ ์ฐพ์ ์ ์๋๋ก ํ๊ฒฝ๋ณ์๋ฅผ ์ค์ ํด์ jdk์ ์์น๋ฅผ ์ง์ ํด์ค์ผ ํ๋ค.์ปดํจํฐํํ jdk ์์น๋ฅผ ์๋ ค์ฃผ๋ ๊ณผ์ ..๊ฐ๋จํ์ง๋ง ์์๋๋ฉด ์์ผ๋ก ์์ฃผ ์ธ ๊ฒ ๊ฐ์์ ๊ธฐ๋กํด ๋๋ค.์ด ๊ธ์ 2024๋ 10์ 14์ผ, Windows 11 ๋ฒ์ ์ ์ฌ์ฉํ๋ ํ๊ฒฝ์์ ์์ฑํ๋ค.0. jdk ์ค์น์ฐ์ jdk๋ฅผ ์ค์นํด์ผ ํ๋ค.์ฌ๊ธฐ์ C:\dev_files\jdk\openjdk-1.8์ ์์นํ๋ค๋ ๊ฒ์ ๊ฐ์ ํ๊ณ ์ค๋ช ํ๋ค.1. ์์คํ ํ๊ฒฝ๋ณ์ย ๊ฒ์ํด์ "์์คํ ํ๊ฒฝ๋ณ์ ํธ์ง"์ผ๋ก ๋ค์ด๊ฐ๋ ๋๊ณ ,์ ์ดํ - ์์คํ - ๊ณ ๊ธ ์์คํ ์ค์ (์์คํ ์์ฑ) - ํ๊ฒฝ๋ณ์๋ก ๋ค์ด๊ฐ๋ ๋๋ค.2-1. ์์คํ ๋ณ์ ์ค์ ์ค์ํ ๊ฒ์ jdk ์์น์ด๋ค.๊ทธ๋ฐ๋ฐ..
ํ ์คํธ ๊ฒฐ๊ณผ ์ด Tool์ย ๋์ ์ผ๋ก ํ์ด์ง๋ฅผ ์ด๋ํ๋ฉฐ ๋์ํ๋๊ฒ ์๋,ย ์ฒ์ ์ ๋ ฅํ ํ์ด์ง ํ๋์ ๋ํ ์ง๋จ๋ง ๊ฐ๋ฅํ๋ค.๊ฒฐ๊ณผ์ ์ผ๋ก ์ต์ด ์ง๋จ ๋ชฉ์ ๊ณผ ๋ฌ๋ผ์ ์ฌ์ฉํ์ง ์์ง๋ง ๊ธฐ๋ก์ ์ํด ๋จ๊ฒจ๋๋๋ค.ย Arachni - ์น ๋ณด์์ทจ์ฝ์ ํ ์คํธhttps://github.com/ahannigan/docker-arachniย GitHub - ahannigan/docker-arachni: Arachni Web Application Scanner in DockerArachni Web Application Scanner in Docker. Contribute to ahannigan/docker-arachni development by creating an account on GitHub.github.comย Arachni๋ ..
ICMP๋?ICMP(Internet Control Message Protocol, ์ธํฐ๋ท ์ ์ด ๋ฉ์์ง ํ๋กํ ์ฝ)๋ ๋คํธ์ํฌ ์ฅ์น์์ ๋คํธ์ํฌ ํต์ ๋ฌธ์ ๋ฅผ ์ง๋จํ๋ ๋ฐ ์ฌ์ฉํ๋ ๋คํธ์ํฌ ๊ณ์ธต ํ๋กํ ์ฝ์ด๋ค. ICMP๊ฐ ์ฌ์ฉ๋๋ ์ฃผ์ ๋ฐฉ๋ฒ์ ๋ฐ์ดํฐ๊ฐ ๋ชฉ์ ์ง์ ์ ๋๋ฌํ๋์ง, ๋๋ฌ ์๊ฐ์ด ์ ์ ํ์ง๋ฅผ ํ์ธํ๋ ๊ฒ์ด๋ค.ย ICMP์ ์ฉ๋ICMP์ ์ฃผ์ ์ฉ๋๋ ์ค๋ฅ๋ณด๊ณ ์ด๋ค. ๋ ์ฅ์น๊ฐ ์ธํฐ๋ท์ ํตํด ์ฐ๊ฒฐ๋๋ฉด ICMP๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๊ฐ ์๋ํ ๋์์ ๋๋ฌํ์ง ๋ชปํ ๊ฒฝ์ฐ, ์์ ์ฅ์น์์ ์ ์ก์ฅ์น๋ก ์ ๋ฌํ ์ ์๋ ์ค๋ฅ๋ฅผ ์์ฑํ ์ ์๋ค. ๋ค๋ง ๋ฐ์ดํฐ์ ๋ํ ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ธฐ ์ํ ํ๋กํ ์ฝ์ด์ง๋ง, ๋ฐ์ดํฐ ์์ฒด๋ฅผ ๊ด๋ฆฌํ์ง๋ ์๋๋ค.์๋ฅผ ๋ค์ด ๋ฐ์ดํฐ ํจํท์ด ๋ผ์ฐํฐ์ ๋นํด ๋๋ฌด ํฐ ๊ฒฝ์ฐ ๋ผ์ฐํฐ์์๋ ํจํท์ ์ญ์ ํ๊ณ ICMP ๋ฉ์..
์๋ํ๋ธ๋?์๋ํ๋ธ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ฒ๊ทธ, ์ฝ๋ ์ค๋ฉ, ๋ณด์ ์ทจ์ฝ์ ๋ฑ์ ๋ฐ๊ฒฌํ๊ธฐ ์ํ ์ ์ ์ฝ๋ ๋ถ์ ํด์ด๋ค.ย ์ค์น / ์ธํ 1. ์๋ํ๋ธ ์ค์นhttps://www.sonarsource.com/products/sonarqube/downloads/ย Download | SonarQubeGet the latest LTS and version of SonarQube the leading product for Code Quality and Security from the official download page.www.sonarsource.comย 2. ์๋ํ๋ธ ์คํ๋ค์ด๋ก๋ ํ์ผ ์์ถ ํ๊ธฐ์๋ํ๋ธ ์คํWindow: /bin/windows-x86-64/StartSonar.bat ์คํLinux: /bin/linu..
Apache POI ์์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌApache POI๋ Java์์ ์์ ์ ๋ค๋ฃฐ ์ ์๊ฒ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.ํ์ฌ์์ Excel ํ์ผ์ ํ์ฑ ํ ์ผ์ด ๊ฝค๋ ์์ด์ ์์ฃผ ์ฐ๋ ๊ธฐ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํํ๋ค.ย gradle๋ก apachepoi ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ ๋ค, ์๋ gitlab ์ฝ๋๋ full code๋ฅผ ๋ณต๋ถํด์ ์ฌ์ฉํ๋ฉด ๋๋ค.๊ท์ฐฎ์์ SpringBoot ํ๋ก์ ํธ๋ฅผ ๋ง๋ค์ด์ gradle๋ก apache poi ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํ๋ค.implementation 'org.apache.poi:poi-ooxml:5.2.3'์ฐธ๊ณ ๋งํฌJAVA & Spring/๋ผ์ด๋ธ๋ฌ๋ฆฌ & Tools] - [Apache POI] Java ์ฝ๋๋ก ์์ (.xlsx) ํ์ผ ์์ฑํ๊ธฐ - Java๋ก Excel ๋ค๋ฃจ๊ธฐย [Apac..
ํ๋ก์(Proxy)๋?ํ๋ก์ ์๋ฒ๋ ํด๋ผ์ด์ธํธ - ์๋ฒ ์ฌ์ด์ ์์นํ์ฌ ํต์ ์ ์ค๊ณํ๋ ์ญํ ์ ํ๋ ์์ฉ ํ๋ก๊ทธ๋จ(์๋ฒ)์ ๋งํ๋ค.ํ๋ก์(Proxy)๋ '๋๋ฆฌ', '์ค๊ณ' ๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ์ฌ๋ฌ ๊ฐ์ง ์ด์ ๋ก ์ง์ ํต์ ํ ์ ์๋ ๊ฒฝ์ฐ์ ์ค๊ฐ์์ ํต์ ์ ์ค๊ณํ๋ ์ญํ ์ ์ํํ๋ค. (๋ณด์, ์ฑ๋ฅ, ์์ ์ฑ ํฅ์ ๋ฑ์ ๋ชฉ์ ์ ๊ฐ๊ณ ์๋ค.)์ผ๋ฐ์ ์ผ๋ก ์น์ ํด๋ผ์ด์ธํธ์์ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ด๊ณ , ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์๋ตํ๋ ๋ฐฉ์์ ํต์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. ์ฌ๊ธฐ์ ํ๋ก์ ์๋ฒ๋ฅผ ์ถ๊ฐํด์ ์์ฒญ์ ์ค๊ณํ๋๋ก ํด์, ๋ณด์์์ ์์ ์ฑ์ ๋์ด๊ฑฐ๋, ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์๋ค.์ ๋ฆฌํ์๋ฉด ์๋์ ๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์ณ์ ํต์ ์ด ์ด๋ฃจ์ด์ง๋ค.ํด๋ผ์ด์ธํธ -> ํ๋ก์ ์๋ฒ ์์ฒญํ๋ก์ ์๋ฒ -> ์๋ฒ ์์ฒญ์๋ฒ -> ํ๋ก์ ์๋ฒ ์๋ต..
vue cli ๊ณต์ ์ฌ์ดํธhttps://cli.vuejs.org/ย Vue CLIย cli.vuejs.orgย node, npm ๋ฒ์ ํ์ธnode, npm ๋ฒ์ ์ ํ์ธํ๊ณ , ์์ผ๋ฉด ์ค์นํด์ผํ๋ค.node -vnpm -vย vue cli ์ค์นnpm install -g @vue/cliย vue ํ๋ก์ ํธ ์์ฑvue create ย vue ํ๋ก์ ํธ ์คํnpm run serve
Vue ์ธ์คํด์ค: new Vue()new Vue()๋ก ์์ฑํ Vue ์ธ์คํด์ค๋ ํ๋ฉด์ ๋ฟ๋ ค์ง๋ ์ต์์(Root) ์ปดํฌ๋ํธ๋ฅผ ๋งํ๋ค.ย ํด๋น Vue Instance์์ ์ฌ๋ฌ ์ปดํฌ๋ํธ๋ฅผ ํธ์ถ์์ ์ฌ์ฉํ๋ ๊ฒ์ด Vue์ ๊ธฐ๋ณธ ๋ฌธ๋ฒ์ด๋ค.ย ์๋์ 5๊ฐ์ง ์์๋ค์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.el: '#app'Vue ์ธ์คํด์ค๊ฐ ๊ด๋ฆฌํ DOM ์์๋ฅผ ์ง์ ํ๋ค. ์์ชฝ์ id=app์ธ ์ Vue ์ธ์คํด์ค๋ฅผ ์ฐ๊ฒฐํ๋ค.ํด๋น Vue ์ธ์คํด์ค๋ ์์ id=app์ธ ํ๊ทธ๋ง์ ๊ด๋ฆฌํ๋ค.dataVue ์ธ์คํด์ค์์ ๊ด๋ฆฌํ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ค.ย {{ message }} ย message๋ ์ด๋ฆ์ ๋ฐ์ดํฐ๋ฅผ Vue ์ธ์คํด์ค ๋ด์์ย this.message๋ก ์ฌ์ฉ ๊ฐ๋ฅํ๊ณ , DOM ์์์์๋ย {{message}}๋ก ๊ฐ..
๋์ปค(Docker)๋?๋์ปค(docker)๋ ์ปจํ ์ด๋ ๊ธฐ๋ฐ ๊ฐ์ํ ํ๋ซํผ์ด๋ค. ์ฌ๋ฌ ์์ฉ ํ๋ก๊ทธ๋จ๋ค์ ์ปจํ ์ด๋๋ก ํจํค์ง ํด์ ์คํํ ์ ์๋ค.์ด ๊ธ์์ ๋์ปค๋ฅผ ๊ฐ๋จํ๊ฒ ์์ํ๊ณ , ์ฃผ์ ๋ช ๋ น์ด๋ค์ ํ์ธํ๊ธฐ ์ํ ์์ ๋ฅผ ์ํด DB๋ฅผ ํ๋ ๋์๋ณผ ๊ฒ์ด๋ค.ย ๋์ปค ์ด๋ฏธ์ง(image)๋์ปค ์ด๋ฏธ์ง๋ ํน์ ์ํํธ์จ์ด(PostgreSQL ๋ฑ)๋ฅผ ์คํํ๊ธฐ ์ํ ์ฝ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ์ค์ ํ์ผ, ์ข ์์ฑ, ํ๊ฒฝ๋ณ์ ๋ฑ ๋ชจ๋ ๊ฒ์ ํฌํจํ๋ ์ฝ๊ธฐ ์ ์ฉ ํ ํ๋ฆฟ์ด๋ค. ์ด ํ ํ๋ฆฟ์ ๊ธฐ๋ฐ์ผ๋ก ์ปจํ ์ด๋๋ฅผ ์์ฑํ๋ฉด ์ค์ ๋ก ํด๋น ์ํํธ์จ์ด๋ฅผ ์คํํ ์ ์๋ค.๊ธฐ๋ณธ์ ์ผ๋ก Docker Hub์์ ์ด๋ฏธ์ง๋ฅผ ๊ฐ๊ณ ์๊ณ , docker ๋ช ๋ น์ด๋ฅผ ํตํด ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ฐ์ธ์ด ๋ค์ด๋ฐ์์ ์ปจํ ์ด๋ ์์ฑ์ ์ฌ์ฉํ ์ ์๋ค.๋์ปค ์ปจํ ์ด๋(Container)๋์ปค ์ปจํ ์ด๋๋..
ํด๋น ์ฌ์ดํธ์ ์ ๋ง ์ฝ๊ณ ํธํ๊ฒ ์ค๋ช ๋์ด ์๊ธฐ ๋๋ฌธ์, ๊ธฐ๋ก์ฉ์ผ๋ก ์ฐ๋ ๊ธ์ ๋๋ค.ํ๋ฐํธ์๋ ์ชฝ์ ์ฒ์ ๊ณต๋ถํด ๋ณด๋๋ฐ ์ ๋ง ํธ๋ฆฌํ ์ฌ์ดํธ๋ค์ด ๋ง๋ค์...(์ด๊ฒ ๋ง๋ก๋ง ๋ฃ๋ javascript ์ํ๊ณ..?)ย jsonplaceholder.typicode.comhttps://jsonplaceholder.typicode.com/ย JSONPlaceholder - Free Fake REST API{JSON} Placeholder Free fake and reliable API for testing and prototyping. Powered by JSON Server + LowDB. Serving ~3 billion requests each month.jsonplaceholder.typicode.comย ย ์์ ์ฌ์ดํธ..
Kakao Developers์ด๋ฏธ์ง ์ค๋ช ์ ๊ฐ ์ด๋ฏธ์ง ๋ด์ฉ์ ๋ํ ์์น(๊ฒฝ๋ก) ์ ์ด๋์ผ๋ ์ฐธ๊ณ ํด ์ฃผ์ธ์.ย 1. KakaoDevelopers ์ ์https://developers.kakao.com/ย Kakao Developers์นด์นด์ค API๋ฅผ ํ์ฉํ์ฌ ๋ค์ํ ์ดํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํด๋ณด์ธ์. ์นด์นด์ค ๋ก๊ทธ์ธ, ๋ฉ์์ง ๋ณด๋ด๊ธฐ, ์น๊ตฌ API, ์ธ๊ณต์ง๋ฅ API ๋ฑ์ ์ ๊ณตํฉ๋๋ค.developers.kakao.comย 2. ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐํ๊ธฐย 3. ์ ํ๋ฆฌ์ผ์ด์ ์ถ๊ฐย 4.Rest API ํค ํ์ธย 5. Web ํ๋ซํผ ๋ฑ๋กย 6. ์ฌ์ดํธ ๋๋ฉ์ธ ์ค์ ย 7. ์นด์นด์ค ๋ก๊ทธ์ธ ํ์ฑํ, Redirect URI ๋ฑ๋กย 8. ๋์ ํญ๋ชฉ ์ค์ ์ฌ์ฉํ๋ ค๋ ๊ฐ์ธ ์ ๋ณด ๋์ ์ค์ ( email, nickname ์ ๋ณด )ย 9. (์ถ๊ฐ) ์นด์นด์ค ๋ก๊ทธ์ธ ๋ฒ..
์ด์ ๊ธ์์ S3 bucket๊ณผ IAM์ ์์ฑํ๊ณ SpringBoot project์์ S3 ์ ๊ทผ์ ์ฌ์ฉํ accessKey์ secretKey๋ฅผ ์ป๋ ๊ฒ๊น์ง ๋ค๋ค๋ค. 2024.01.21 - [DevOps] - [AWS/S3] Spring boot project ์ด๋ฏธ์ง ์ ๋ก๋๋ฅผ ์ํด S3 ๋ฒ์ผ ๋ง๋ค๊ธฐ [AWS/S3] Spring boot project ์ด๋ฏธ์ง ์ ๋ก๋๋ฅผ ์ํด S3 ๋ฒ์ผ ๋ง๋ค๊ธฐ Amazon S3 ๋ฒํท ๋ง๋ค๊ธฐ IAM ๋ง๋ค๊ธฐ ์์ฑ ์๋ฃ IAM accessKey, secretKey ์ป๊ธฐ IAM - ์ฌ์ฉ์ - ๋ณด์ ์๊ฒฉ ์ฆ๋ช ์ก์ธ์ค ํค ๋ง๋ค๊ธฐ CLI ์ ํ accessKey, secretKey ์ ์ฅ ์ ๋ ๊ฐ์ง Key๋ฅผ ์ ์ฅํด ๋๋ค๊ฐ spring properties์ ๋ฑ innovation123.ti..
INSERT INTO : ๋ฐ์ดํฐ ์ถ๊ฐ id, name, loginId, password์ attribute๋ฅผ ๊ฐ๊ณ ์๋ MEMBER table์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ์์ ์ด๋ค. TABLE์ ์กด์ฌํ๋ ์ฌ๋ฌ๊ฐ์ง constraints๋ค์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํด์ผํ๋ค. ๋ฐฉ๋ฒ 1 : ๋ชจ๋ ์์ฑ ์ ํ table์ ์กด์ฌํ๋ attribute์ ์์๋๋ก ๊ฐ์ ๋ฃ์ด์ค์ผ ํ๋ค. table์ ์กด์ฌํ๋ ๋ชจ๋ attribute์ ๊ฐ์ ๋ฃ์ด์ค์ผ ํ๋ค. (null์ด๋ผ๋ ๋ฃ์ด์ผํจ) insert into member values(3, 'Lee', 'Lee1', 'pwLee'); ๋ฐฉ๋ฒ 2 : column ์ง์ ์๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด, attribute ์์๋ฅผ ๋ง์ถ์ง ์์๋ ๋๋ค. (์์๋ฅผ ์ง์ ํด์ค๋ค.) ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ๋ชจ๋ attribut..
MyBatis๋?MyBatis๋ JdbcTemplate์ด ์ ๊ณตํ๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ๊ทธ๋ฌ๋ JdbcTemplate์ ๋ฌธ์ ์ ์ค ํ๋์ธ ์ฌ๋ฌ ์ค์ String ํ sql์ ์์ฑํด์ผ ํ๋ค๋ ์ ์ MyBatis๋ฅผ ์ด์ฉํ์ฌ ํด๊ฒฐํ ์ ์๋ค.MyBatis๋ SQL์ xml์ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๊ณ , xml ๋ด์์ ๋์ ์ฟผ๋ฆฌ๋ฅผ ๋งค์ฐ ํธ๋ฆฌํ๊ฒ ์์ฑํ ์ ์๋ค.ย JdbcTemplate์ ์คํ๋ง์ ๋ด์ฅ๋ ๊ธฐ๋ฅ์ด๊ณ , ๋ณ๋์ ์ค์ ์์ด ์ฌ์ฉํ ์ ์์ง๋ง, MyBatis๋ ์ฝ๊ฐ์ ์ค์ ์ด ํ์ํ๋ค. ๋ฐ๋ผ์ ๋์ ์ฟผ๋ฆฌ์ ๋ณต์กํ ์ฟผ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ MyBatis๋ฅผ ์ฌ์ฉํ๊ณ , ๋จ์ํ ์ฟผ๋ฆฌ๋ค์ด ๋ง๋ค๋ฉด JdbcTemplate์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ ๊ฒ์ด๋ค.ย ย 2024.07.31 ์ถ๊ฐ๋จ์ํ ๋๋ฉ์ธ ๊ด๋ จ ์ํฐํฐ๋ฅผ ๋ถ๋ฌ์ค๋..
ํ๋ก์ธ์ค ํ๋ก์ธ์ค = ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ ํ๋ก์ธ์ค(process)๋ ์ปดํจํฐ์์ ์ฐ์์ ์ผ๋ก ์คํ๋๊ณ ์๋ ์ปดํจํฐ ํ๋ก๊ทธ๋จ์ ๋งํ๋ค. foreground process / background process foreground process ์ ธ์์ ํ๋ก์ธ์ค ์คํ์ ๋ช ๋ นํ์ ๋, ํด๋น ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๊ธฐ ์ ๊น์ง ์ฌ์ฉ์๊ฐ ๋ค๋ฅธ ์ ๋ ฅ์ ํ ์ ์๋ ํ๋ก์ธ์ค๋ฅผ ๋งํ๋ค. ํด๋น ํ๋ก์ธ์ค์ ์คํ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฐ๋ค๋ฉด, ํ๋ก์ธ์ค ์ข ๋ฃ ์ ๊น์ง ์ฌ์ฉ์๋ ์ ๋ ฅ์ ํ ์ ์๋ค. [Ctrl] + c ๋ช ๋ น์ด : ์คํ์ค์ธ foreground process๋ฅผ ์ฆ์ ์ข ๋ฃํ๋ ๋ช ๋ น์ด์ด๋ค. ํด๋น ํ๋ก์ธ์ค๋ ์์ ํ ์ข ๋ฃ๋๋ค. -> ์์ ์ด ์คํ ์ค์ ls ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด๋ ํด๋น ์์ ์ด ๋ชจ๋ ๋๋ ๋ค์ ๋์ํ๋ค. (sleep n)์ n์ด๋์ ์๋ฌด๊ฒ๋..
๋ฌธ์ ์ํฉ ์ด๋ค ๋ฐ์ดํฐ์ ๋ํด ๋งค์ฐ ๋น ๋ฅด๊ฒ ์์ ์ด ์ผ์ด๋ ๋ ๋์์ฑ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด A๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ๋ก์ง์ด 0.1์ด ์์๋๋๋ฐ, 0.001์ด ๊ฐ๊ฒฉ์ผ๋ก A๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ์์ฒญ์ด ์ฌ๋ฌ ๋ฒ ๋ค์ด์์ ๋ ๊ฐ์ด ์ ๋๋ก ์์ ๋์ง ์์ ์ ์๋ค. ์ด๋ด ๋, DB ๋ฐ์ดํฐ ์์ ์ ์์ฐจ์ ์ฒ๋ฆฌ๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ผ๋ก Lock์ด ์๋ค. Lock ํธ๋์ญ์ ๋ฝ๊ณผ ๋น์ทํ ๊ฐ๋ ์ผ๋ก ์ด๋ค ๋ฐ์ดํฐ ์์ , ์ ๊ทผ ๋ฑ์ Lock์ ํ์๋ก ํ๊ฒ ์ค์ ํ๋ ๊ฒ์ด๋ค. ๋ฐ์ดํฐ๋ฅผ ์์ ํ๋ ค๋ฉด ์ฐ์ Lock์ ํ๋ํ๊ณ ์์ ํ์ Lock์ ๋ฐ๋ฉํ๋ค. ๋ง์ฝ Lock์ ํ๋ํ ์ ์๋ ์ํฉ์์๋ Lock์ ํ๋ํ ์ ์์ ๋๊น์ง ๋๊ธฐํ๊ฑฐ๋ ์์ ์ ์ทจ์ํ ์ ์๋ค. ๋ถ์ฐ ๋ฝ(Distributed Lock) ํ๋์ ๊ณต์ ์..
๋ฐฉํ๋ฒฝ์ด๋?๋ฐฉํ๋ฒฝ(Firewall)์ ๋คํธ์ํฌ ๋ณด์ ์์คํ ์ด๋ค. ๋ฏธ๋ฆฌ ์ ์๋ ๋ณด์ ๊ท์น์ ๋ฐ๋ผ ๋ค์ด์ค๊ณ ๋๊ฐ๋ ๋คํธ์ํฌ ํธ๋ํฝ์ ๋ชจ๋ํฐ๋งํ๊ณ ์ ์ดํ๋ ์ฅ์น ๋๋ ์ํํธ์จ์ด์ด๋ค. ๋ถ๋ฒ ์ ๊ทผ, ์ ์์ ์ ๊ทผ, ํธ๋ํฝ ๋ญ๋น ๋ฑ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.ย ๋ฐฉํ๋ฒฝ์ ํธ๋ํฝ ํํฐ๋ง, ๋คํธ์ํฌ ์ธ๋ถํ, ๊ฐ์ ๋ฐ ๋ก๊น , ์ธ์ฆ, ํ๋ผ์ด๋ฒ์ ๋ณดํธ ๋ฑ์ ์ฌ๋ฌ ๊ฐ์ง ๊ธฐ๋ฅ์ ํ๋ค.์ด์ค ์ธ๋ฐ์ด๋ ๊ท์น, ์์๋ฐ์ด๋ ๊ท์น์ ํธ๋ํฝ ํํฐ๋ง ๊ธฐ๋ฅ์ ํฌํจ๋๋ค.ย ํธ๋ํฝ ํํฐ๋ง(์ ๊ทผ ์ ์ด)ํธ๋ํฝ ํํฐ๋ง์ด๋ ๋ฐฉํ๋ฒฝ์ด ๋คํธ์ํฌ๋ฅผ ํตํด ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ ํจํท์ ๊ฒ์ฌํ๊ณ ์ ์ดํ๋ ๊ฒ์ ๋งํ๋ค.๋ฐฉํ๋ฒฝ์ด ํ์ฉํ ํธ๋ํฝ๋ง ๋คํธ์ํฌ๋ก ๋ค์ด์ค๊ฑฐ๋ ๋๊ฐ ์ ์๋๋ก ํ๋ค.ํธ๋ํฝ ํํฐ๋ง ๋ฐฉ์ ์ค ํจํท ํํฐ๋ง ๋ฐฉ์์ย ๋ฐ์ดํฐ ํจํท์ ํค๋ ์ ๋ณด๋ฅผ ๋ถ์ํ์ฌ ํธ๋ํฝ์ ํ์ฉ/..
@PathVariable ๊ฒฝ๋ก๋ณ์ PathVariable์ ์ฌ์ฉํ๋ฉด ๋ฆฌ์์ค ๊ฒฝ๋ก์ ์๋ณ์๋ฅผ ๋ฃ์ด์ ๋์ ์ผ๋ก URL์ ์ ๋ณด๋ฅผ ๋ด์ ์ ์๋ค. URL ๊ฒฝ๋ก์ ์ค๊ดํธ { } ์์ชฝ์ ๋ณ์๋ฅผ ๋ด๊ณ , ๊ทธ ๋ณ์๋ฅผ @PathVariable(" ")๋ก ๋ฐ์์ ์ฌ์ฉํ ์ ์๋ค. 1. ๊ธฐ๋ณธ URL์{postId}์ ๋งค๊ฐ๋ณ์ long orderId์ ์ด๋ฆ์ ๋ง์ถฐ์ค๋ค. @GetMapping ("/order/{orderId}") public String getOrder(@PathVariable String orderId){ log.info("orderId : {}", orderId); return "orderId:"+ orderId; } ์์ฒญ : http://localhost:8080/order/123 ์๋ต : orderId:1..
์ฟ ํค ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ์๋ ์๋น์ค๋ฅผ ๊ฐ๋ฐํ๋ค ๋ณด๋ฉด, ๋ก๊ทธ์ธ ์ ์ด์ฉํ ์ ์๋ ํ์ด์ง์ ๊ทธ๋ ์ง ์์ ํ์ด์ง๊ฐ ์๋ค. ๊ฐ์ ํ๋ฉด๋ ๋ก๊ทธ์ธ ์ด์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด๊ณผ ๋น๋ก๊ทธ์ธ ์ด์ฉ์์๊ฒ ๋ณด์ฌ์ค ํ๋ฉด์ ๋ค๋ฅด๊ฒ ์ค์ ํด์ผ ํ ๋๋ ์๋ค. ์ด๋, ์ฟ ํค๋ฅผ ์ฌ์ฉํด์ ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค. ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก loginId๊ฐ ๋ด๊ธด ์ฟ ํค๋ฅผ ์ ๋ฌํ๊ณ , ํด๋ผ์ด์ธํธ์์๋ ๊ทธ ์ฟ ํค๋ฅผ ์ ์ฅํด ๋๋ค๊ฐ HTTP ์์ฒญ ์ ์๋ฒ๋ก ์ ๋ฌํ๋ค. //Cookie ์์ฑ์ Cookie idCookie = new Cookie( String name, String value ) //HTTP ์๋ต์ ์ฟ ํค ๋ด๊ธฐ response.addCookie( idCookie ); //์ฟ ํค ์ญ์ ํ๋ ๋ฒ idCookie.setMaxAge(0); //..
์ฌ๋ฌ ๋ฌธ์์ด์ ์ด์ด ๋ถ์ผ ๋ ๋ณดํต StringBuilder๋ฅผ ์ฌ์ฉํ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ํน์ ์ํฉ์์ ๋ ์ ์ฉํ ํด๋์ค๊ฐ ์์ด์ ์๊ฐํ๋ ค ํฉ๋๋ค. StringBuilder๋ฅผ ์ผ์ ๋ ์์ฌ์ด ์ ์๋์ ๊ฐ์ด ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ฌธ์์ด์ ์ด์ด ๋ถ์ผ ๋ ๋ง์ง๋ง์ ๊ตฌ๋ถ์๊ฐ append ๋๋ ๊ฒ์ ์ฒ๋ฆฌํด์ผ ํ๋ ๋ฌธ์ ๊ฐ ์๋ค. String[] arr = {"one", "two", "three"}; StringBuilder sb = new StringBuilder(); for(int i = 0; i < arr.length; i++){ if(i == arr.length - 1){ sb.append(arr[i]); break; } sb.append(arr[i]).append(","); } System.out.println(sb); ..