๋ฐ์ํ ์ ์ฒด ๊ธ419 ์ข์์ ๊ธฐ๋ฅ์ ํตํด ์ดํด๋ณด๋ ๋์์ฑ ์ด์ (synchronized) ์๋ ํ์ธ์, ์ด๋ฒ ํฌ์คํ ์์๋ ๋์์ฑ(Concurrency)์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. (์์ ์ฝ๋๋ ๊นํ๋ธ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.) ๋์์ฑ(Concurrency) ๊ฐ๋ ๋ค์ด๋ฒ ์ฌ์ ์ ๊ฒ์ํด๋ณธ ๋์์ฑ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ด๋ค ๋ ์ฌ๊ฑด์ด ๊ฐ์ ์๊ฐ์ ์ผ์ด๋๋ ๊ฒ์ ์ด๋ฅด๋ ๋ง ๋๋ถ๋ถ์ ์น ์๋ฒ๋ ์ฌ๋ฌ ๊ฐ์ ์์ฒญ(ํด๋ผ์ด์ธํธ)์ ๋์์ ์ํํ ์ ์๊ณ , ์ด๋ ์์ฑํ ์ฝ๋๊ฐ ๋์์ ์ํ๋ ์ ์๋ค๋ ์๋ฏธ์ ๋์ผํ ๋งฅ๋ฝ์ ๋๋ค. ์ด๋ฌํ ๋์์ฑ ๋ฌธ์ ๋ฅผ ์ดํด๋ณด๊ธฐ ์ํด ๊ฒ์๊ธ์์ ํด๋ผ์ด์ธํธ๊ฐ ๋์์ ์ข์์๋ฅผ ํ์ ๋ ๋ฐ์ํ ์ ์๋ ๋ฌธ์ ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. ์ ๊ทธ๋ฆผ์ ๋ํ ์ค๋ช ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. User A๊ฐ ๊ฒ์๊ธ 1์ ์ข์์๋ฅผ ํด๋ฆญํ์ ๋ likeCount ์กฐํ (likeCount = 0) User B๋ ๊ฒ์๊ธ .. 2023. 2. 26. Spring ๋ถ์ฐ ํ๊ฒฝ์์ ์ธ์ ๊ด๋ฆฌํ๊ธฐ (Redis Session Clustering) ๐ Spring ๋ถ์ฐ ํ๊ฒฝ์์ ์ธ์ ๊ด๋ฆฌํ๊ธฐ(์ธ์ ํด๋ฌ์คํฐ๋ง) ์๋ ํ์ธ์, ์ด๋ฒ ํฌ์คํ ์์๋ ์ฌ๋ฌ ์๋ฒ ํ๊ฒฝ์์ ์ธ์ ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ดํด๋ณด๊ฒ ์ต๋๋ค. (์ฝ๋๋ ๊นํ๋ธ์์ ํ์ธํ์ค ์ ์์ต๋๋ค.) ๋จ์ผ ์๋ฒ์์ ์ธ์ ์ ๊ด๋ฆฌํ๋ค๋ฉด ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์๊ฒ ์ง๋ง, ๋ณดํต ์ค์ผ์ผ ์์ ๋ฑ์ ํตํด ๋ถ์ฐ๋ ์๋ฒ ํ๊ฒฝ์์ ์ธ์ ์ ๊ด๋ฆฌํ ๋(๋ก๊ทธ์ธ ์ ์ ์ ์ธ์ ์ ๋ณด) ์ธ์ ๋ถ์ผ์น ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์์๋ก ์ดํด๋ณผ๊น์? ์ฌ์ฉ์ A๊ฐ localhost:8080ํฌํธ๋ก login ํธ์ถ ์ ์ธ์ ์ด ์์ฑ๋๊ณ JSESSIONID์ ์์์ ๊ฐ์ ์ค์ ํฉ๋๋ค. JSESSIONID? - ์ธ์ ์ ์ ์งํ๊ธฐ ์ํด Tomcat Container์์ ๋ฐ๊ธํ๋ Key์ด๊ณ Value๋ฅผ ํตํด ์ธ์ ์ ์ ์งํ ์ ์์ต๋๋ค. ๋์ ๋ฐฉ์? 1. ๋ธ๋ผ์ฐ.. 2023. 2. 12. Spring DispatcherServlet(๋์คํจ์ฒ์๋ธ๋ฆฟ) ๊ฐ๋ ๋ถํฐ ๋์ ๊ณผ์ ๊น์ง ๐ DispatcherServlet ์๋ ํ์ธ์, ์ด๋ฒ ํฌ์คํ ์์๋ Spring์์ HTTP ์์ฒญ ๋ฐ ์๋ต๊ณผ ๊ด๋ จํ์ฌ ๊ฐ์ฅ ํต์ฌ ๊ธฐ์ ์ธ DispatcherServlet์ ๋ํด ์ดํด๋ณด๊ณ ์ ํฉ๋๋ค. ํ์์ ๊ฐ๋ ์ ๋ํด์๋ ์ด๋ ์ ๋ ์๊ณ ์์์ง๋ง ์ด๋ ํ ๊ณผ์ ์ ํตํด ๋์คํจ์ฒ ์๋ธ๋ฆฟ์ด ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ฐ๊ณ , ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํ๊ณ ์๋ต์ ๋ฐํํ๋์ง ๋ด๋ถ ๋์์ ์ ๋ชฐ๋์๋๋ฐ์, ์ด๋ฒ ๊ธฐํ์ ์ ๋ฆฌํด ๋ณด์์ต๋๋ค. (ํ๋ฆฐ ๋ด์ฉ์ด ์กด์ฌํ ์ ์์ผ๋ ๋ง์ํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๐) | DispatcherServlet ๊ฐ๋ ํ๋ก ํธ ์ปจํธ๋กค๋ฌ(Front Controller)๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ DispatcherServlet์ HTTP ํ๋กํ ์ฝ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ ๋จผ์ ๋ฐ์์ ์ ํฉํ ์ปจํธ๋กค๋ฌ์ ์์(Delega.. 2023. 2. 11. EasyRandom - Java beans๋ฅผ ๋๋ค์ผ๋ก ์์ฑํด ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๐ EasyRandom - Java beans๋ฅผ ๋๋ค ์์ฑํด ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ณดํต ํ ์คํธ๋ฅผ ์์ฑํ ๋ ๊ฐ์ฒด๋ฅผ ์์๋ก ์์ฑํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์ข ์ข ์์ต๋๋ค. ๊ฐ์ฒด์ ํ๋๊ฐ 1~2๊ฐ๋ผ๋ฉด ์๊ด์๊ฒ ์ง๋ง, ์กฐ๊ธ ๋ง์์ง๋ค๋ฉด ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ์๊ทผ(?) ๊ท์ฐฎ์๋ฐ์, ์ ์ฌ์ง์ฒ๋ผ ๊ฐ ํ๋์ ๋ง๋ ๊ฐ์ ํ๋์ฉ ์ค์ ํด ์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ฝค๋ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ ๋๋ค. ์ด์ ๊ฐ์ ๋, ๊ฐ์ฒด์ ํ๋๋ฅผ ๋ฐ๋ก ์ค์ ํ์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ EasyRandom ์ ๋๋ค. (์ฌ์ฉ๋ฒ๋ ๊ต์ฅํ ๊ฐ๋จํ๋, ์์ธํ ๊ฑด ๊นํ๋ธ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด ์ฃผ์ธ์.) ๐ ์ฌ์ฉ๋ฒ ์์กด์ฑ ์ถ๊ฐ ํ ์คํธ์์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์ด๋ค์ testImplementation์ผ๋ก ์ค์ ํ์ต๋๋ค. Member ํด๋์ค Post ํด๋์ค EasyRandom Cust.. 2023. 1. 27. SpringBoot Multi DataSource - JPA ๐ SpringBoot์์ ๋ฉํฐ ๋ฐ์ดํฐ์์ค ์ค์ ํ๊ธฐ - JPA ํ๋์ ํ๋ก์ ํธ์์ ์ฌ๋ฌ ๊ฐ์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ์, ์ด๋ฐ ๊ฒฝ์ฐ DataSource๋ฅผ ์ปค์คํ ์ผ๋ก ์ค์ ํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ๋จํ ์ค์ ์ ํตํด ํ ํ๋ก์ ํธ์์ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. ์์ ์ฝ๋๋ GitHub์์ ํ์ธํ ์ ์์ต๋๋ค. ๐ application.yml yml ํ์ผ์ ๋ ๊ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค(datasource, datasource-second)๋ฅผ ์ค์ ํฉ๋๋ค. (๊ธฐ๋ณธ ์คํ๋ง ๋ถํธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์ ๊ณผ ๋ฌ๋ฆฌ ๋ฉํฐ ๋ฐ์ดํฐ ์์ค HikariConfig์์๋ url์ด ์๋ jdbc-url์ผ๋ก ๋ค์ด๋ฐ์ ํด์ผํฉ๋๋ค.) ๐ DataSource Configuration ์๋ ์ฝ๋์์ ์ฌ์ฉํ ํจ.. 2023. 1. 21. Spring Batch (11) Repeat ๐ Spring Batch Repeat Batch Processing๋ ๋จ์ ์ต์ ํ ๋๋ ๋ฐ๋ณต์ ์ธ ์์ ์ ๊ดํ ๊ฒ์ ๋๋ค. ๋ฐ๋ณต์ ์ ๋ตํํ๊ณ ์ผ๋ฐํํ๊ธฐ์ํด Spring Batch์์๋ ๋ฐ๋ณต ์์ ์ ์ ์ดํ๋ RepeatOperation ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ RepeatTemplate ํด๋์ค ์ ๋๋ค ๐ ๋ฐ๋ณต ์ข ๋ฃ๋ฅผ ๊ฒฐ์ ํ๋ ์ธ ๊ฐ์ง ํญ๋ชฉ Spring Batch์์์ ๋ฐ๋ณต ์์ ์ ๋ํ ์ข ๋ฃ ์ฒ๋ฆฌ๋ RepeatTemplate ํด๋์ค์์ ์ค์ ํ ์ ์์ต๋๋ค. 1. RepeatStatus ์คํ๋ง ๋ฐฐ์น์ ์์ ์ด ์ข ๋ฃ๋์๋์ง ํ๋ณํ๊ธฐ ์ํ Enum 2. CompletionPolicy RepeatTemplate ๋ด๋ถ์์ ๋ฐ๋ณต ๋ฉ์๋์ ์ข ๋ฃ๋ CompletionPolicy์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค. .. 2023. 1. 15. Spring AOP๋ฅผ ์ฌ์ฉํ์ฌ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ ๋ณด ๋ก๊น ํ๊ธฐ ์๋น์ค์์ ํด๋ผ์ด์ธํธ์ ๋ชจ๋ ํธ์ถ์ ๋ํด ์ ์ฅํ์ฌ ๊ด๋ฆฌ๋ฅผ ํ ์ ์์ต๋๋ค. ์ด ๋, ๋จ์ํ ๋ก๊ทธ๋ก ๋จ๊ธธ์๋ ์๊ณ ํน์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ชจ๋ ์์ฒญ ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด๋ฒ ํฌ์คํ ์์๋ ํด๋ผ์ด์ธํธ์ ์์ฒญ ์ ๋ณด(URI, Http Method, payload ๋ฑ๋ฑ)๋ค์ ๋ก๊น ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ์ฌ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ฐ๋ตํ ์ดํด๋ด ๋๋ค. ์์ ์ฝ๋๋ GitHub์์ ํ์ธํ ์ ์์ต๋๋ค :) ๐ ApiRequestEntity ApiRequestEntity ํด๋์ค๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ํด๋ผ์ด์ธํธ์ ์์ฒญ ๋ฐ์ดํฐ์ ์ผ๋ก ๊ฐ ํ๋์ ์ญํ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. id : PK methodValue : Http Method apiUri : Request URI payload : Request Body req.. 2023. 1. 14. MySQL EXPLAIN ์คํ๊ณํ ๋ง์คํฐํ๊ธฐ(feat. RealMySQL 8.0) ๐ฏ MySQL EXPLAIN ์คํ๊ณํ ๋ง์คํฐํ๊ธฐ(feat. RealMySQL 8.0) ์คํ ๊ณํ(EXPLAIN) ์ด๋? ๋๋ถ๋ถ์ DBMS๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ณ , ๋น ๋ฅด๊ฒ ์ ์ฅ ๋ฐ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ฃผ๋ชฉ์ ์ด๋ค. ์ด๋ฌํ ๋ชฉ์ ์ ๋ฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ์์ ์ฟผ๋ฆฌ๋ฅผ ์ตํฐ๋ง์ด์ ๊ฐ ์ต์ ์ผ๋ก ์ฒ๋ฆฌ๋ ์ ์๋๋ก ์ฟผ๋ฆฌ์ ์คํ ๊ณํ์ ์๋ฆฝํ ์ ์์ด์ผ ํ๋ค. ํ์ง๋ง ์ตํฐ๋ง์ด์ ๊ฐ ํญ์ ์ต์ ์ ์คํ ๊ณํ์ ๋ง๋ค์ด๋ผ ์ ์๋ ๊ฒ์ ์๋๋ฏ๋ก DBMS ์๋ฒ๋ ์ด๋ฌํ ๋ฌธ์ ์ ์ ๊ด๋ฆฌ์๋ ์ฌ์ฉ์๊ฐ ๋ณด์ํ ์ ์๋๋ก EXPLAIN ๋ช ๋ น์ผ๋ก ์ตํฐ๋ง์ด์ ๊ฐ ์๋ฆฝํ ์คํ ๊ณํ์ ํ์ธํ ์ ์๋ค. ํ ์คํธ ๋ฐ์ดํฐ๋ฒ ์ด์ค: https://github.com/datacharmer/test_db ์คํ ๊ณํ ์๋ฏธ id SELECT ์ฟผ๋ฆฌ ๋ณ ๋ถ์ฌ๋๋ ์๋ณ์ ๊ฐ se.. 2023. 1. 7. ๋ฌด๋ํ๋ 2022๋ , ์๋ก์ด ์์ 2023๋ ๐ ๋ฌด๋ํ๋ 2022๋ , ์๋ก์ด ์์ 2023๋ ์๋ ํ๊ณ ๋ฅผ ์์ฑํ ๋๋ ๋ฒ์จ 2021๋ ์ด ๋๋ฌ๋ค๊ณ ํ๋๋ฐ, 2022๋ ๋ ๋์ผํ๊ฒ ๋ฒ์จ๊ฐ ๋ฌด์ํ ๋งํผ ๋น ๋ฅด๊ฒ ์ง๋๊ฐ๋ฒ๋ ธ๋ค. (์ฐ๋ง์ ๊ณ ํฅ์ ๋ค๋ ์ค๋ค ๋ณด๋ ์์ฑ ์์ ์ 2022๋ ์ด์ง๋ง ๋ฐํ ์์ ์ 2023๋ ์ด ๋์ด๋ฒ๋ ธ๋ค.. ๐ญ ๋ฐํ ์์ ์ 2023๋ ์ด์ง๋ง ์์ฑ์ 2022๋ 12์ 31์ผ ๊ธฐ์ค์ด๋ค.) 2021๋ ๋ ํ๋ฑ ์ง๋๊ฐ๋ฒ๋ ธ๋๋ฐ, ์ฌํด๋ ์ด์ฉ๋ฉด ๋ ๋น ๋ฅด๊ฒ ์ง๋๊ฐ ๊ฒ๋ง ๊ฐ์ ๋๋์ด ๋ ๋ค. ์ด๋ฒ ๋ฌ ์ด๋ถํฐ ๋ฒ์จ 12์์ด๋ผ๊ณ ๋ ธ๋๋ฅผ ๋ถ๋ ๋๋ฐ, ์ ์ ์ ์ฐจ๋ ค๋ณด๋ ๋ฒ์จ 2022๋ ๋ง์ง๋ง ๋ ์ด ๋์ด๋ฒ๋ ธ๋ค. ์ต๊ทผ์ ๋ดค์๋ ํ์ฌ ๋ค๋๋ฉด์ ๋ฐ์ ์์ค์๋ ์ฑ์ฅํ๋ ํ์ด๋ผ๋ ํฌ์คํ ์์ ์ฒซ ๋ฌธ์ฅ์ ๋ค์๊ณผ ๊ฐ์ด ์์ํ๊ณ ์๋๋ฐ, ๋ด ์๊ธฐ๋ฅผ ํ๋ ๊ฒ๋ง ๊ฐ์ ๋๋ฌด๋ ๊ณต๊ฐ์ด ๋์๋ค. ๐.. 2023. 1. 2. Spring Batch (10) @JobScope, @StepScope ๐ Spring Batch @JobScope, @StepScope ์ง๋ ํฌ์คํ ์์๋ JobParametersValidator์ ๋ํด ์ดํด๋ณด์๋๋ฐ์ ๊ฐ๋ตํ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Job ์คํ ์ ํ์์ ์ธ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ฆํ๋ ์ญํ ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก DefaultJobParametersValidator ๊ตฌํ์ฒด๋ฅผ ์ง์ํ๋ฉฐ, JobParametersValidator ์ธํฐํ์ด์ค๋ฅผ ์ง์ ๊ตฌํํ์ฌ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฒ์ฆํ ์๋ ์์ต๋๋ค. ์ด๋ฒ์ ์ ๋ฆฌํ @JobScope, @StepScope๋ ์ง๋ Spring Batch Job ํฌ์คํ ์์ JobParameters๋ฅผ ๋ฐ์ ๋ ๊ฐ๋ตํ ์ฌ์ฉ์ ํ์์ต๋๋ค. ์ฝ๋๋ก ์์ฑ : JobParameterBuilder SPEL ์ฌ์ฉ : @Value(“#{jobParameter[reques.. 2022. 12. 8. ์ด์ 1 2 3 4 5 6 7 8 ยทยทยท 42 ๋ค์ ๋ฐ์ํ