๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring20

JPA ์ง‘๊ณ„ํ•จ์ˆ˜ sum ์€ long ์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ตœ๊ทผ ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋“ค์„ ์ง‘๊ณ„ํ•˜์—ฌ ์กฐํšŒํ•˜๋Š” API ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ ์ค‘์—, Spring Data JPA ์™€ Querydsl ์„ ์ด์šฉํ•˜์—ฌ ์ฟผ๋ฆฌ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์—ˆ๋‹ค. ์˜ค๋Š˜, sum ์ง‘๊ณ„ ํ•จ์ˆ˜ ๋•Œ๋ฌธ์—, java object ๋กœ ๋งคํ•‘์ด ์•ˆ๋˜๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ๊ทธ ์ด์œ ์™€ ํ•ด๊ฒฐ๊ณผ์ •์„ ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค. ๊ธฐ์กด ์ฟผ๋ฆฌ @Query( """ select new service.dto.PaymentTotalSumDTO( sum(sub.totalAmount) as totalAmount, sum(sub.discount) as discount, sum(sub.usedPoint) as usedPoint ) from (select tpd.totalAmount as totalAmount, tpd.discount as discount, tpd.u.. 2023. 7. 26.
[Spring Data JPA] JPA Enum ํ•„๋“œ์— ๊ด€ํ•œ ๋ฌธ์ œ ์ฐธ๋‚˜. ์˜ค๋Š˜ 5์‹œ๊ฐ„ ๋‚ ๋ ธ๋‹ค. Pagination ์ฟผ๋ฆฌ๋ฅผ ๋‚ ๋ฆฌ๋Š” API์—์„œ ๊ณ„์† 500 ์—๋Ÿฌ๊ฐ€ ๋‚˜์„œ ๊ณ„์† ๋ถ™์žก๊ณ  ์žˆ์—ˆ๋‹ค. ๋นจ๋ž˜ ๋•œ์— ์ง‘์— ์™”์ง€๋งŒ ๋ถˆ๊ตด์˜ ์˜์ง€๋กœ ํ•ด๊ฒฐํ•ด๋ณด๋ฆฌ๋ผ ๋‹ค์งํ•˜๊ณ  1์‹œ๊ฐ„๋งŒ์— ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ๋‹ค ์ฆ๋ง. ๋ฌธ์ œ์  ๊ฒฐ๋ก ๋ถ€ํ„ฐ ๋งํ•˜๋ฉด ์„œ๋ฒ„ DB์— ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€์„œ์˜€๋‹ค. ๋ฌธ์ œ๋Š” JPA Enum ํ•„๋“œ๊ฐ€ @Enumerated(EnumType.STRING) ใ…ฃ์ด ์•„๋‹ˆ๋ผ, Ordinal๋กœ ๋“ค์–ด๊ฐ€ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ๋‹ค. ์ง€์ •ํ•œ Enum ์ƒ์ˆ˜๋Š” ์ด 4๊ฐœ ์ด๋ฉฐ, ordinal์˜ ๋ฒ”์œ„๋Š” 0~3 ์ด๋‹ค. 4 ์ด์ƒ์˜ ์ˆซ์ž๋Š” ์žˆ์–ด์„œ๋Š” ์•ˆ๋  ๋ฐ์ดํ„ฐ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณ„์† ์ด๋Ÿฐ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 4 ์ฟผ๋ฆฌ.. 2023. 2. 21.
[Spring Data JPA] ํ•œ๋ฐฉ ์ฟผ๋ฆฌ์˜ ํšจ๋Šฅ (feat : JPQL) ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์˜ ๊ธฐ๋ณธ ์†Œ์–‘์ธ SQL์„ ์ž‘์„ฑํ•˜๋Š” ์‹ค๋ ฅ์€ ๋›ฐ์–ด๋‚  ์ˆ˜๋ก ๋”ํ•  ๋‚˜์œ„ ์—†๋‹ค. ์‹ค์ œ๋กœ ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋Š” ์„œ๋น„์Šค์—์„œ๋Š” ์ด ์„ฑ๋Šฅ์„ ๋งค์šฐ ์ค‘์š”์‹œ ํ•˜๋Š”๋ฐ, ์ผ๋ฐ˜์ ์ธ ํ™˜๊ฒฝ์—์„œ๋Š” DB ์กฐํšŒ์  ์ธก๋ฉด์—์„œ ํฐ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์ด๋Œ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๊ฐœ์„  ๋ฐฉ์•ˆ์ด๋ผ๊ณ ๋“ค ํ•œ๋‹ค. SQL์„ ๊ณต๋ถ€ํ•˜๊ณ , JPA ๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉฐ ํ•ญ์ƒ ๋น ์งˆ ์ˆ˜ ์—†๋Š” ์–˜๊ธฐ, ์„ฑ๋Šฅ ์ตœ์ ํ™”. ํ•ญ์ƒ ๊ณ ๋ฏผํ•˜๋‹ค๊ฐ€ ๊ฐœ์„ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ์ฃผ์–ด์กŒ๊ณ , ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ๋‚ด ์ƒ๊ฐ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๊ฒ ๋‹ค. DB ERD Model opnions entity๋ฅผ paging ์ฒ˜๋ฆฌํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ๋ฝ‘์•„์•ผ ํ•˜๋Š” ์ƒํ™ฉ. ์ฃผ์–ด์ง„ ์ค‘์š” ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” user_id ๋ฟ์ด๋‹ค. 1. ๋ณดํ†ต ๊ฐ™์œผ๋ฉด Document Entity๋ฅผ ๋จผ์ € ์กฐํšŒํ•œ ํ›„, opinions ๋ฅผ ํŽ˜์ด์ง• .. 2023. 2. 1.
[Redisson]์„ ์ด์šฉํ•œ ๋ถ„์‚ฐ Lock ๊ตฌํ˜„ & ๋™์‹œ์„ฑ ๋ฌธ์ œ ํ•ด๊ฒฐ ๋‚ด ํ”„๋กœ์ ํŠธ์˜ Payment๋ฅผ ๊ฐœ๋ฐœํ•˜๋ฉด์„œ ๊ฐ€์žฅ ๊ธฐ๋ณธ ์ค‘์— ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ฌธ์ œ๋ฅผ ์ง๋ฉดํ–ˆ์—ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋ฐ”๋กœ ๋™์‹œ์„ฑ ๋ฌธ์ œ! ์Šคํ”„๋ง๋ถ€ํŠธ์˜ ๋‚ด์žฅ ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ†ฐ์บฃ, ์–ธ๋”ํ† ์šฐ ๋“ฑ๋“ฑ์˜ WAS๋กœ ๋Œ์•„๊ฐ€๋Š”๋ฐ ์ด WAS๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. A๋ผ๋Š” ์ƒํ’ˆ (์žฌ๊ณ  3๊ฐœ) ์„ [๊ฐ€]๊ตฐ์ด 2๊ฐœ ๊ตฌ๋งคํ•˜๋ ค ํ•œ๋‹ค. ๋™์‹œ์— [๋‚˜]๊ตฐ์ด 2๊ฐœ ๊ตฌ๋งคํ•˜๋ ค ํ•œ๋‹ค. ๋ฏธ์„ธํ•˜๊ฒŒ ๋‚˜๋งˆ 0.00001์ดˆ์˜ ์ฐจ์ด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐ๊ตญ ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ์ƒํ’ˆ์˜ ์žฌ๊ณ ๋ฅผ ์กฐํšŒํ•œ๋‹ค. ์›๋ž˜๋Œ€๋กœ๋ผ๋ฉด ํ•œ ๋ช…์€ ๋ชป ์‚ฌ์•ผ ์ •์ƒ์ด๋‹ค. ์œ„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ๋ญ๊ฐ€ ์žˆ์„๊นŒ? 1. Synchronized ์ž๋ฐ”๋กœ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. Thread-Safe ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ์ข‹์•„๋ณด์ด๋‚˜, ์„œ๋ฒ„๊ฐ€ ์ฆ์„ค๋  ๊ฒฝ์šฐ ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค. 2. Database Lock D.. 2022. 9. 27.
๊ฒฐ์ œ API ๋ฆฌํŒฉํ† ๋ง - [2] (feat. WebClient) https://sweeeetgoguma.tistory.com/entry/%EA%B2%B0%EC%A0%9C-API-%EB%A6%AC%ED%8C%A9%ED%86%A0%EB%A7%81-1-feat-%EC%A0%84%EB%9E%B5-%ED%8C%A8%ED%84%B ๊ฒฐ์ œ API ๋ฆฌํŒฉํ† ๋ง - [1] (feat. ์ „๋žต ํŒจํ„ด) ๊ฒฐ์ œ API๋ฅผ ๋ฆฌํŒฉํ† ๋ง ์‹œ์ž‘ํ•˜๋ฉฐ ์™ธ๋ถ€ API๋ฅผ ์—ฐ๋™ ๋ถ€๋ถ„์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ดค๋‹ค. ๊ธฐ์กด์—๋„ ์นด์นด์˜คํŽ˜์ด๋ฅผ ์ด์šฉํ–ˆ์—ˆ๊ณ , ์ง€๊ธˆ๋„ ์นด์นด์˜คํŽ˜์ด๋ฅผ ์ด์šฉํ•  ๊ฒƒ์ด์ง€๋งŒ, ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค๋ฅธ ๊ฒฐ์ œ API๋ฅผ ์—ฐ๋™ํ•  ์ˆ˜ ์žˆ sweeeetgoguma.tistory.com ์ง€๋‚œ ํฌ์ŠคํŒ…์— ์ด์–ด์„œ ์ž‘์„ฑํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~ ์‹ค์ œ ๊ฒฐ์ œ API๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” httpClient ๊ธฐ๋ฐ˜์˜ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•˜๋‹ค. ๊ธฐ์กด์—๋Š” ๋™๊ธฐ๋ฐฉ์‹, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉ.. 2022. 9. 22.
WebFlux๋Š” ๋ฌด์—‡์ด๊ณ , ์™œ ๋‚˜์™”๊ณ , ์–ธ์ œ ์“ฐ์ด๋Š”๊ฐ€? ์–ด์ œ Cart API ์ฝ”๋“œ ๋ฆฌํŒฉํ„ฐ๋ง์„ ๋งˆ๋ฌด๋ฆฌํ•˜๊ณ , ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด PR์„ ์˜ฌ๋ ธ๋‹ค.ํด๋ฆฐ ํ•œ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•˜๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ทฐ์–ด๋‹˜์ด ์ฃผ์‹  ์˜๊ฒฌ์„ ๋˜๋‡Œ๊ณ , ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์„ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ํ•˜๋ฃจ ์ข…์ผ ๋ชจ๋‹ˆํ„ฐ๋ฅผ ๋…ธ๋ ค๋ณด๋ฉฐ ํด๋ž˜์Šค ๊ฐ„ ์ฑ…์ž„์„ ๋‚˜๋ˆ„์–ด ๋ณด์•˜๋‹ค. ๋นจ๋ฆฌ ์„ฑ์žฅํ•˜๊ณ  ์‹ถ๋‹ค!!๋ฆฌ๋ทฐ๋ฅผ ์•ž๋‘๊ณ , ์นด์นด์˜คํŽ˜์ด๋ฅผ ์ด์šฉํ•œ ๋„๋ฉ”์ธ ์ฝ”๋“œ๋“ค์„ ๋ฆฌํŒฉํ„ฐ๋ง ํ•˜๊ธฐ ์•ž์„œ, ๊ธฐ์กด์— ์™ธ๋ถ€ API์™€ ํ†ต์‹ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋˜ ํ…œํ”Œ๋ฆฟ์ธ RestTemplate์˜ ๋Œ€์ฒด ์—ฌ๋ถ€์— ๋Œ€ํ•ด ๋– ์˜ฌ๋ž๋‹ค.RestTemplate์€ deprecated ๋˜์—ˆ์œผ๋ฏ€๋กœ, WebClient์˜ ์‚ฌ์šฉ์„ ๊ณ ๋ คํ•ด๋ณด๋ผ๋Š” ์˜๊ฒฌ์„ ๋ฐ›์•˜๋‹ค.WebClient์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋‹ค๊ฐ€ ๋™๊ธฐ/๋น„๋™๊ธฐ, ๋ธ”๋กœํ‚น/๋…ผ๋ธ”๋กœํ‚น์ด๋ผ๋Š” ๊ฐœ๋…์˜ ์ •์˜์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ , ๋‚˜์•„๊ฐ€ WebFlux.. 2022. 8. 31.
DB ์ˆ˜์ • & jpa ์„ธํŒ… ํ”„๋กœ์ ํŠธ์˜ ์ „๋ฐ˜์ ์ธ ๋ฆฌํŒฉํ„ฐ๋ง์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉฐ, ๊ธฐ์กด mybatis๋ฅผ ์ด์šฉํ–ˆ๋˜ ๊ฒƒ์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ฒจ์™”๋‹ค. ํ•˜์ง€๋งŒ SQL Mapper๋ฅผ ์ด์šฉํ•œ ์„ค๊ณ„ ํŠน์„ฑ์ƒ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ฝ”๋“œ์˜ ์ž‘์„ฑ์ด ์–ด๋ ค์› ๊ณ , ๋˜ ๊ธฐ์กด DB ์„ค๊ณ„์˜ ๋ฌธ์ œ๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. DB์˜ ์ „๋ฐ˜์ ์ธ ์ˆ˜์ •๊ณผ ๋”๋ถˆ์–ด, JPA๋ฅผ ์ด์šฉํ•ด ๋‹ค์‹œ ๋ฆฌํŒฉํ„ฐ๋ง์„ ํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •์„ ๋‚ด๋ ธ๋‹ค. ๊ทธ ์ˆ˜์ •๊ณผ์ •๊ณผ JPA ์„ธํŒ… ๋ฐฉ๋ฒ•์„ ๋‚˜์—ดํ•ด๋ณด๊ฒ ๋‹ค. https://github.com/GroovyArea/My-ChickenBreast-Shop GitHub - GroovyArea/My-ChickenBreast-Shop: shop api with spring boot shop api with spring boot . Contribute to GroovyArea/My-ChickenB.. 2022. 8. 8.
ใ€Œํ…Œ์ŠคํŠธ ์ฝ”๋“œ & Spring REST Docsใ€ ๊ฐœ์ธ ํ”„๋กœ์ ํŠธ๋Š” ์™„์„ฑ์ด ๋˜์—ˆ๋‹ค. ์ด์ œ๋Š” ์„ธ๋ถ€์ ์ธ ๋””ํ…Œ์ผ์— ์‹ ๊ฒฝ์„ ์“ฐ๋ฉฐ ๋ฆฌํŒฉํ„ฐ๋ง๊ณผ ๊ทธ์— ํ•„์š”ํ•œ ๊ฐœ๋… ์ •๋ฆฌ๋ฅผ ํ•˜๋ฉฐ ํ”„๋กœ์ ํŠธ์— ์ ์šฉ์‹œํ‚ค๊ณ  ์žˆ๋‹ค. REST API๋ฅผ ์ฒ˜์Œ ์„ค๊ณ„ํ•ด ๋ณด์•˜๋Š”๋ฐ, ๋ถ€์กฑํ•œ ์ ์ด ๋งŽ์•˜์ง€๋งŒ ์‹ ์„ ํ•œ ๊ฒฝํ—˜์ด๊ณ  ์งง์€ ๊ธฐ๊ฐ„ ๋‚ด์— ๋ฐฐ์šด ๊ฒƒ์ด ๋งŽ์€ ์„ค๊ณ„ ๊ณผ์ •์ด์—ˆ๋‹ค. API๋ฅผ ์„ค๊ณ„ํ•˜๋ฉด ๊ทธ์— ๋งž๋Š” ๋ช…์„ธ๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ๋ณดํ†ต Swagger๋‚˜ Spring REST Docs ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•œ๋‹ค๊ณ  ํ•œ๋‹ค. Swagger๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์• ๋…ธํ…Œ์ด์…˜์„ ์ด์šฉํ•ด ํŽธํ•˜๊ฒŒ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•  ์ˆœ ์žˆ์ง€๋งŒ, ํ”„๋กœ์ ํŠธ์˜ ํ™•์‹ค์„ฑ๊ณผ ์ •ํ™•์„ฑ์„ ๋’ท๋ฐ›์นจํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ์ด ํ•„์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— Spring REST Docs๋ฅผ ์ด์šฉํ•˜๊ธฐ๋กœ ์ƒ๊ฐํ•˜๋ฉฐ ์ ์šฉํ•ด๋ณด์•˜๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํฌ๊ฒŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์™€ ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๊ฐ€ ์žˆ๋‹ค. ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ.. 2022. 6. 20.
2022.05.26 ใ€ŒํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ธ์„ ๊ฒฝ์šฐใ€ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•˜๋Š” ๋ฐฉ์‹์€ ๋งค์šฐ ๋Š๋ฆฌ๋‹ค. ์„œ๋ฒ„ ์‚ฌ์šฉ์ž๊ฐ€ ๋Š˜์–ด๋‚ ์ˆ˜๋ก ํŠธ๋ž˜ํ”ฝ์ด ๋งŽ์ด ๋ชฐ๋ ค ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ์ „์†กํ•˜๋Š” ์‹œ๊ฐ„์ด ๋ฌด์ง„์žฅ ๋Š˜์–ด๋‚  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌ๋ฉด ์•ˆ ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณด์•˜๋‹ค. ํŠธ๋ž˜ํ”ฝ์ด ๋ชฐ๋ ธ์„ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ค ์‹์œผ๋กœ ํ•ด๊ฒฐ์„ ํ•˜๋Š”์ง€? ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด ์žˆ๋‹ค. ๋™๊ธฐ๋Š” ์ฒซ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๋ฐฉ์‹์ด๊ณ , ์™„๋ฃŒ ์—ฌ๋ถ€์™€ ์ƒ๊ด€์—†์ด ๋‹ค์Œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์š”์ฒญํ•˜๊ฑฐ๋‚˜ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์ด๋‹ค. ์ด๋ฉ”์ผ ์ „์†ก์— ์ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์ ์šฉํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค. Async Config ์Šคํ”„๋ง์—์„œ๋Š” @Async๋ฅผ ํ†ตํ•ด ๋น„๋™๊ธฐ ๋ฐฉ์‹์„ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. configuration์„ ํ†ตํ•ด ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ปค์Šคํ„ฐ ๋งˆ์ด์ง• ์‹œ์ผฐ๋‹ค. Async ์ ์šฉ ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธธ ๋ฐ”๋ผ๋Š” ๋ฉ”์„œ๋“œ์— ์• ๋…ธํ…Œ์ด์…˜์„ ์ .. 2022. 5. 26.
2022.05.25 ใ€ŒEmail ์ธ์ฆใ€ ์—ด์‹ฌํžˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‹ค๊ฐ€ ์ดˆ๊ธฐ ๊ตฌ์ƒํ•œ wiki๋ฅผ ๋‹ค์‹œ ๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ํšŒ์›๊ฐ€์ž… ์‹œ ์ด๋ฉ”์ผ api๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋Š”๋ฐ ๊ทธ๊ฑธ ๊นŒ๋จน์—ˆ๋‹ค.. ๊ทธ๋ž˜์„œ ํšŒ์›๊ฐ€์ž…์„ ๋‹ค์‹œ ๊ฑด๋“œ๋ฆฌ๊ฒŒ ๋˜์—ˆ๋‹ค. Java์˜ MailSender ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SMTP ๊ตฌ๊ธ€ ์ด๋ฉ”์ผ๋กœ ์ด๋ฉ”์ผ ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ์ด๋ฉ”์ผ๋กœ ๋ณด๋‚ด์ฃผ๋„๋ก ์„ค๊ณ„ํ•˜๊ณ  ์ธ์ฆ ๋ฒˆํ˜ธ๋ฅผ redis DB์— ์ €์žฅํ•˜์—ฌ ๋น„๊ตํ•˜๊ณ  ํšŒ์›๊ฐ€์ž…์„ ์ด๋ฃจ๊ฒŒ ํ•  ๊ฒƒ์ด๋‹ค. Mail Sender // Mail implementation 'org.springframework.boot:spring-boot-starter-mail' ๋จผ์ € ์˜์กด์„ฑ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. Application.yml ์ง€๊ธˆ๊นŒ์ง€ Properties ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋ฒˆ ๊ธฐํšŒ์— yaml์„ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ์ด์œ ๋Š” ์ธ.. 2022. 5. 25.
2022.05.06 ใ€ŒGit Flow ์ด์Šˆใ€ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰์ค‘์ด๋‹ค. ๋‹จ์ˆœํžˆ Master ๋ธŒ๋žœ์น˜๋งŒ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฝ”๋“œ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด Pull Request๋ฅผ ์˜ฌ๋ ค์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ธŒ๋žœ์น˜๋ฅผ ๋‚˜๋ˆ„์–ด ์ž‘์—…ํ•˜๋Š” ๋„์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. pr์„ ์˜ฌ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ธŒ๋žœ์น˜๊ฐ„์˜ ๋ถ„์—…์ด ์ ์ ˆํžˆ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•˜๋Š”๋ฐ ํ˜ผ์ž ํ•˜๋‹ค ๋ณด๋‹ˆ ์ด๊ฒƒ ์ €๊ฒƒ์„ ๊ฑด๋“ค์–ด์„œ ๋‹ค์–‘ํ•˜๊ฒŒ ๊ฑด๋“  ๊ฒƒ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์•Œ๋งž์€ ํ•ด๊ฒฐ๋ฐฉ์•ˆ์„ ๋ชจ์ƒ‰ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค. ์ธํ…”๋ฆฌ์ œ์ด Branch ์ฒดํฌ์•„์›ƒ ํ•˜๋Š” ๋ฐฉ๋ฒ• ํ˜น์—ฌ๋‚˜ ์ž˜๋ชป git push๋ฅผ ํ–ˆ๋‹ค๋ฉด 2022. 5. 6.
2022.04.25์˜ ๊ธฐ๋ก โ–ถ ํŒŒํŠธ 1 (2์‹œ ~ 12์‹œ) 1. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ˆ˜์ • 2. ๋…ธ์…˜ ์ž๊ธฐ์†Œ๊ฐœ์„œ ์ •๋ฆฌ -> ๋””ํ…Œ์ผํ•œ ๋ถ€๋ถ„ ์ถ”๊ฐ€ํ•ด๋ณด์ž 3. Spring ๊ฐœ๋… ์ •๋ฆฌ 4. mysql ์˜ตํ‹ฐ๋งˆ์ด์ €์™€ ํžŒํŠธ 5. wiki ์ˆ˜์ • 6. ๊ฐœ๋…, ์ž์†Œ์„œ, ํ”„๋กœ์ ํŠธ ๊ณ„ํš ๊ฒ€์ˆ˜ 7. ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1๋ฌธ์ œ โ–ท ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฌธ์ œ : ํ•˜๋‚˜์˜ ๊ฐ’๋งŒ ์ž„์˜๋กœ ๋น„๊ตํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™์ง€๋งŒ 3๊ฐ€์ง€ ๊ฒฝ์šฐ๋ฅผ ๋ชจ๋‘ ํ…Œ์ŠคํŠธํ•˜๋ฉด ์ข‹๊ฒ ๋‹ค ํ•ด๊ฒฐ : Static ๋ฉ”์„œ๋“œ๋ฅผ ํ•˜๋‚˜ ์„ ์–ธํ•˜์—ฌ ์ž…๋ ฅ ์ •์ˆ˜ ๊ฐ’๊ณผ ๊ธฐ๋Œ€ ๊ฐ’์„ ๋น„๊ตํ•˜๋Š” ํ…Œ์ŠคํŠธ๋กœ ์ˆ˜์ •ํ•˜์˜€๋‹ค. 2022. 4. 25.
2022.04.22์˜ ๊ธฐ๋ก โ–ถ ํŒŒํŠธ 1 (10์‹œ ~ 7์‹œ) 1. Gradle Test ์ฝ”๋“œ ์ˆ˜์ • (PrintGameResult, ComputerNumber ๋ถ€๋ถ„) 2. ์ž์†Œ์„œ ์ˆ˜์ • 3. Boot project ๊ตฌ์ƒ 4. Spring MVC ๋‚ด๋ถ€ ๊ฐœ๋… ์ •๋ฆฌ 5. ์•Œ๊ณ ๋ฆฌ์ฆ˜ 1๋ฌธ์ œ (2๋ฌธ์ œ) 6. mysql Ch5. ํŠธ๋žœ์žญ์…˜, CH6. ๋ฐ์ดํ„ฐ ์••์ถ• 7. ์ดํŽ™ํ‹ฐ๋ธŒ ์ž๋ฐ” ์•„์ดํ…œ 1 ์ •๋ฆฌ โ–ท ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ : ์ •์ˆ˜์˜ ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ import java.util.Arrays; class Solution { public long solution(long n) { long answer = 0; String number = String.valueOf(n); String stringNum = ""; char[] numArr = new char[num.. 2022. 4. 22.
2022.04.19์˜ ๊ธฐ๋ก โ–ถ ์˜ค๋Š˜ ํ•ด์•ผํ•  ๊ณ„ํš 1. real Mysql CH2 2. Docker ๋ณธ๋ฌธ 1ํŽ˜์ด์ง€ 3. ์ž๊ธฐ์†Œ๊ฐœ์„œ ๋…ธ์…˜ ์ •๋ฆฌ 4. ๊นƒํ—ˆ๋ธŒ ์ฐจ๊ธฐ ํ”„๋กœ์ ํŠธ์šฉ ์ €์žฅ์†Œ ์ƒ์„ฑ 5. ํ…Œ์ŠคํŠธ์ฝ”๋“œ ํ”ผ๋“œ๋ฐฑ์œผ๋กœ ์ˆ˜์ • 6. ์˜ค๋ผํด ์‚ญ์ œ ๋ฐ mysql ์‚ญ์ œ ํ›„ ์žฌ์„ค์น˜ 7. ์•Œ๋ฐ” ๋ฉด์ ‘ 8. ์Šคํ”„๋ง ์งˆ๋ฌธ ๋‹ต๋ณ€ ์ •๋ฆฌ 2022. 4. 19.
2022.03.07 ์˜ ๊ธฐ๋ก โ–ถ ํ•˜๋ฃจ => ๊ณต๋ถ€ ๊ด€๋ จ 1) ์Šคํ”„๋ง ๊ฐœ๊ตฌ๋ฆฌ์ฑ… CH6 2) MVC ๊ฐ์ฒด์ง€ํ–ฅ ๋ฆฌํŒฉํ† ๋ง 3) ๊ธˆ์ผ ๋ฐฐ์šด ๋‚ด์šฉ ๋ณต์Šต => ํŒŒ์ด๋„ ํ”„๋กœ์ ํŠธ ๊ด€๋ จ 1) DB ์žฌํ™•์ธ โ–ถ ๊ฐœ์ธ ๊ณต๋ถ€ 5์žฅ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5์›์น™ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ 5์›์น™ ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ๊ฐœ๋…๊ณผ 4๋Œ€ ํŠน์„ฑ ์ข‹์€ ๋„๊ตฌ์„ ์•Œ๊ฒŒ๋จ. ์ข‹์€ ๋„๊ตฌ๊ฐ€ ์žˆ์–ด๋„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„์•ผ ์ข‹์€ ์š”๋ฆฌ๊ฐ€ ๋‚˜์˜ด. ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ (Object Oriented Design) 5์›์น™ SOLID (๊ฐ์ฒด ์ง€ํ–ฅ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•) SRP (Single Responsibility Principle) : ๋‹จ์ผ ์ฑ…์ž„ ์›์น™ OCP (Open Closed Princinple) : ๊ฐœ๋ฐฉ ํ์‡„ ์›์น™ LSP (Liskov Substitution Principle) : ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™ I.. 2022. 3. 7.
๋ฐ˜์‘ํ˜•