์คํ๋ง (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์ ์ ์ฅํ๋ฉฐ ํ์๊ฐ์ ์ ๋ง์น๋ค. ์ฐจ์ฅ๋๊ณผ์ ์ฝ๋๋ฆฌ๋ทฐ์์ ํด๋น ๋ก์ง์ ๋ํด ์กฐ์ธ์ ๋ฐ์๋ค. ์ต๊ทผ์๋ ํ์๊ฐ์ ์ ๋ง์ณค์ง๋ง ์์ง ์ธ์ฆ์ด ์๋ฃ๋์ง ์์ ์ฌ์ฉ์์๊ฒ ์ผ๋จ ์ผ๋ถ์ ๊ถํ(์ต์ํ์ ๊ถํ)๋ง ์ ๊ณตํ ํ, ์ธ์ฆ์ด ์๋ฃ๋๋ฉด ์ถ๊ฐ ๊ถํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๋ ๊ฒ์ด์๋ค. ํ์ง๋ง ํ์ฌ ๊ฐ๋ฐ ์ค์ธ ์๋น์ค(์์์ค๋ท.. ์ด์ 1 2 ๋ค์