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

์Šคํ”„๋ง

(9)
์ปดํฌ๋„ŒํŠธ ์Šค์บ” ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๊น€์˜ํ•œ๋‹˜์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜(์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ)๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. @ComponentScan ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•  ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์ด @Bean(๋˜๋Š” XML์˜ )์„ ํ†ตํ•ด์„œ ์„ค์ • ์ •๋ณด๋ฅผ ์ง์ ‘ ๋“ฑ๋กํ•  ์Šคํ”„๋ง ๋นˆ์„ ๋‚˜์—ดํ•ด์•ผํ–ˆ๋‹ค. // ์ปดํฌ๋„ŒํŠธ ์Šค์บ”์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” Configuration @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServi..
์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ ์ดํ•ด ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๊น€์˜ํ•œ๋‹˜์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜(์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ)๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ๊ด€์‹ฌ์‚ฌ์˜ ๋ถ„๋ฆฌ "์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํ•˜๋‚˜์˜ ๊ณต์—ฐ์ด๋ผ๊ณ  ํ–ˆ์„ ๋•Œ, ์Šคํ”„๋ง์€ ๊ณต์—ฐ์˜ ๋ฐฐ์—ญ(์—ญํ• )์— ๋งž๋Š” ๋ฐฐ์šฐ(๊ตฌํ˜„์ฒด)๋ฅผ ์„ญ์™ธํ•˜๋Š” ๊ณต์—ฐ ๊ธฐํš์ž๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค." ์•„๋ž˜ ์ฝ”๋“œ๋Š” ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™ ์ค‘ OCP์™€ DIP๋ฅผ ์œ„๋ฐ˜ํ•˜๊ณ  ์žˆ๋‹ค. public class OrderServiceImpl implements OrderService { // private final DiscountPolicy discountPolicy = new FixDiscountPolicy(); private final DiscountPolicy discountPolicy = new RateDiscountPolicy(); ... } OCP ์œ„๋ฐ˜ OCP :..
๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„์™€ ์Šคํ”„๋ง ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๊น€์˜ํ•œ๋‹˜์˜ ์ธํ”„๋Ÿฐ ๊ฐ•์˜(์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ - ๊ธฐ๋ณธํŽธ)๋ฅผ ๋“ฃ๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์Šคํ”„๋ง์˜ ํƒ„์ƒ EJB (Enterprise Java Beans) 2000๋…„๋Œ€ ์ดˆ๋ฐ˜, ์ž๋ฐ” ์ง„์˜์˜ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉ๋˜๋˜ ๊ธฐ์ˆ  ํŠธ๋žœ์žญ์…˜ ์„ค์ •, ๋ถ„์‚ฐ๊ธฐ์ˆ  ๋“ฑ ์ด๋ก  ์ƒ์œผ๋กœ ์ข‹์€ ์ ๋“ค์ด ์žˆ์—ˆ์ง€๋งŒ, ๋ณต์žกํ•˜๊ณ  EJB์— ์˜์กด์ ์ธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผํ•˜๋Š” ๋“ฑ ์žฅ์ ์„ ๋„˜์–ด์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ์Œ 2002๋…„ ๋กœ๋“œ ์กด์Šจ ์ฑ… ์ถœ๊ฐ„ EJB์˜ ๋ฌธ์ œ์ ์„ ์ง€์ ํ•˜๋ฉฐ, EJB ์—†์ด๋„ ์ถฉ๋ถ„ํžˆ ๊ณ ํ’ˆ์งˆ์˜ ํ™•์žฅ ๊ฐ€๋Šฅํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ์„ ๋ณด์—ฌ์ฃผ๊ณ , 30,000๋ผ์ธ ์ด์ƒ์˜ ๊ธฐ๋ฐ˜ ๊ธฐ์ˆ ์„ ์˜ˆ์ œ ์ฝ”๋“œ๋กœ ์„ ๋ณด์ž„ ์ฑ… ์ถœ๊ฐ„ ์งํ›„ ์œ ๊ฒ ํœ ๋Ÿฌ์™€ ์–€ ์นด๋กœํ”„๊ฐ€ ๋กœ๋“œ ์กด์Šจ์—๊ฒŒ ์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ๋ฅผ ์ œ์•ˆ ์ „ํ†ต์ ์ธ J2EE(EJB)๋ผ๋Š” ๊ฒจ์šธ์„ ๋„˜์–ด ์ƒˆ๋กœ์šด ์‹œ์ž‘์ด๋ผ๋Š” ๋œป์œผ..
[์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„] ์ธ์ฆ ์„œ๋ฒ„ - ์†Œ์…œ๋กœ๊ทธ์ธ ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ ์ธ์ฆ์„œ๋ฒ„์— ๋„ค์ด๋ฒ„ ์•„์ด๋””๋กœ ๋กœ๊ทธ์ธ(๋„ค์•„๋กœ) ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค. ๋„ค์•„๋กœ์˜ ์ „์ฒด์ ์ธ ๋กœ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. NAVER Developers์—์„œ Application์„ ๋“ฑ๋กํ•ด client_id์™€ client_secret์„ ๋ฐœ๊ธ‰๋ฐ›๋Š”๋‹ค. 2. client_id๋กœ access_code๋ฅผ ์š”์ฒญํ•œ๋‹ค. 3. client_id์™€ client_secret, access_code๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” access_token๊ณผ refresh_token์„ ์š”์ฒญํ•œ๋‹ค. 4. access_token์œผ๋กœ ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์š”์ฒญํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ access_code๋Š” ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ๋Š” ํ† ํฐ์ด ์•„๋‹ˆ๋ฉฐ, ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•ž์„œ NAVER Developers์—์„œ ๋ฐœ๊ธ‰๋ฐ›์€ client_id ๋ฐ cl..
[์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„] ์ธ์ฆ ์„œ๋ฒ„ - ๋กœ๊ทธ์ธ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ : nGrinder AWS RDS ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์ถ•์„ ์œ„ํ•ด AWS์—์„œ ํ”„๋ฆฌํ‹ฐ์–ด๋กœ ์ œ๊ณตํ•˜๋Š” RDS db.t2.micro ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ 66์ด์—ˆ๊ณ , ์šฐ๋ฆฌ ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ์„œ๋น„์Šค ์„œ๋ฒ„๊ฐ€ ์„ธ ๋Œ€์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์„œ๋ฒ„์˜ ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ์ˆ˜๋ฅผ 20์œผ๋กœ ์ง€์ •ํ–ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด HikariDataSource๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. DatabaseConfig.java @Configuration @PropertySource("classpath:application.properties") public class DatabaseConfig { @Bean @ConfigurationProperties(prefix = "spring.datasource.hikari") public HikariConfig hik..
[์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„] ์ธ์ฆ ์„œ๋ฒ„ - AWS EC2 & RDS ๊ตฌ์ถ• ๋ฐ ๋ฐฐํฌ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์ธ์ฆ์„œ๋ฒ„๋ฅผ AWS EC2์— ๋ฐฐํฌํ•˜๊ณ , RDS์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ตฌ์ถ•ํ–ˆ๋‹ค. ์•„๋ž˜ ๋ธ”๋กœ๊ทธ์— ํ•ด๋‹น ๋‚ด์šฉ์ด ์ž˜ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด ๊ตฌ์ถ•ํ•˜๋Š”๋ฐ๋Š” ํฐ ์–ด๋ ค์›€์ด ์—†์—ˆ์ง€๋งŒ, ๋ฐฐํฌ ํ•  ๋•Œ EC2 ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ๊ณผ ํฌํŠธ ๋ฌธ์ œ ๋•Œ๋ฌธ์— ํž˜๋“ค์—ˆ๋‹ค. ์ฐธ๊ณ ๋งํฌ ๋ฐฐํฌ ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ๋ฐฐํฌ : 4) ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ์›น ์„œ๋น„์Šค ์ถœ์‹œํ•˜๊ธฐ - 4. AWS EC2 & RDS ๊ตฌ์ถ•ํ•˜๊ธฐ 5) ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ์›น ์„œ๋น„์Šค ์ถœ์‹œํ•˜๊ธฐ - 5. EC2์— ๋ฐฐํฌํ•˜๊ธฐ PuTTY Gen์œผ๋กœ ppk ํŒŒ์ผ ์ƒ์„ฑ : [REST API ์‹ค์Šต] 4. Springboot ํ”„๋กœ์ ํŠธ AWS EC2 ์ธ์Šคํ„ด์Šค์— ๋ฐฐํฌ AWS ํ”„๋ฆฌํ‹ฐ์–ด์˜ ๊ฒฝ์šฐ ํ•œ ๊ณ„์ • ๋‚ด์— ๋Œ์•„๊ฐ€๋Š” ๋ชจ๋“  ์ธ์Šคํ„ด์Šค์˜ ์‹œ๊ฐ„์ด ํ•œ ๋‹ฌ ๊ธฐ์ค€ 750์‹œ๊ฐ„์ด ์ดˆ๊ณผํ•˜๋ฉด ์ถ”๊ฐ€์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ๊ณ„์ •์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ฐ ์„œ๋ฒ„๋ฅผ ๋ฐฐ..
[์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„] ์ธ์ฆ ์„œ๋ฒ„ - ๋กœ๊ทธ์ธ : JWT + Redis ๋กœ๊ทธ์ธ JWT ๊ธฐ๋ฐ˜์˜ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ๋‹ค. ์ „์ฒด์ ์ธ ๋กœ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ์š”์ฒญ 2. ์‚ฌ์šฉ์ž ํ™•์ธ ํ›„, access token๊ณผ refresh token ๋ฐœ๊ธ‰ 3. refresh token์„ Redis์— ์ €์žฅ 4. ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ ์‹œ, Redis์— refresh token ์ •๋ณด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ๋ฐœ๊ธ‰ 5. ๋กœ๊ทธ์•„์›ƒ ์‹œ, Redis์— refresh token ์ •๋ณด ์‚ญ์ œ access token์€ 30๋ถ„, refresh token์€ 2์ฃผ์˜ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋‘์—ˆ๋‹ค. refresh token์˜ ๊ฒฝ์šฐ ์œ ํšจ๊ธฐ๊ฐ„์ด ๊ธธ๊ธฐ ๋•Œ๋ฌธ์—, ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก Redis์— ์ €์žฅํ–ˆ๋‹ค. refresh token์„ ํ†ตํ•ด ํ† ํฐ ์žฌ๋ฐœ๊ธ‰ ์š”์ฒญ ์‹œ, refresh token์˜ ์œ ํšจ์„ฑ ์—ฌ๋ถ€ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ Redis..
[์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„] ์ธ์ฆ ์„œ๋ฒ„ - ์ด๋ฉ”์ผ ์ธ์ฆ ํšŒ์›๊ฐ€์ž… ํšŒ์›๊ฐ€์ž… ์ด๋ฉ”์ผ ์ธ์ฆ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํšŒ์›๊ฐ€์ž… ๋กœ์ง์„ ์ž‘์„ฑํ–ˆ๋‹ค. ๋กœ์ง์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 1. ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฉ”์ผ๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋“ฑ ํšŒ์›์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ ํ›„, ํšŒ์›๊ฐ€์ž… ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. 2. ์„œ๋ฒ„์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ด๋ฉ”์ผ๋กœ ์ธ์ฆ๋ฉ”์ผ์„ ์ „์†กํ•˜๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ์ •๋ณด๋ฅผ Redis์— ์ž„์‹œ์ €์žฅํ•œ๋‹ค. 3. ์‚ฌ์šฉ์ž๊ฐ€ ์ „์†ก๋œ ๋ฉ”์ผ์˜ ๋งํฌ๋ฅผ ํ†ตํ•ด ์ธ์ฆํ™•์ธ ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค. 4. ์„œ๋ฒ„์—์„œ๋Š” ์ธ์ฆํ™•์ธ ํ›„, Redis์— ์ €์žฅ ๋œ ํšŒ์› ์ •๋ณด๋ฅผ DB์— ์ €์žฅํ•˜๋ฉฐ ํšŒ์›๊ฐ€์ž…์„ ๋งˆ์นœ๋‹ค. ์ฐจ์žฅ๋‹˜๊ณผ์˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ์—์„œ ํ•ด๋‹น ๋กœ์ง์— ๋Œ€ํ•ด ์กฐ์–ธ์„ ๋ฐ›์•˜๋‹ค. ์ตœ๊ทผ์—๋Š” ํšŒ์›๊ฐ€์ž…์„ ๋งˆ์ณค์ง€๋งŒ ์•„์ง ์ธ์ฆ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ผ๋‹จ ์ผ๋ถ€์˜ ๊ถŒํ•œ(์ตœ์†Œํ•œ์˜ ๊ถŒํ•œ)๋งŒ ์ œ๊ณตํ•œ ํ›„, ์ธ์ฆ์ด ์™„๋ฃŒ๋˜๋ฉด ์ถ”๊ฐ€ ๊ถŒํ•œ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๋ผ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์žฌ ๊ฐœ๋ฐœ ์ค‘์ธ ์„œ๋น„์Šค(์ž์†Œ์„ค๋‹ท..