์ค๋ง์ผ๊ฒ์ดํธ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ (8) ์ธ๋ค์ผํ ๋ฆฌ์คํธํ ๐ ์ค๋ง์ผ๊ฒ์ดํธ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ - ํ๊ณ ์ค๋ง์ผ๊ฒ์ดํธ์์ ๋ ๋ฌ ๊ฐ ์งํ๋์๋ ์๋ฒ๊ฐ๋ฐ์บ ํ๊ฐ ์ข ๋ฃ๋์๋ค. ์ฝ๋ก๋ ๋๋ฌธ์ ๊ฐ์์ค๋ฝ๊ฒ ๋ง๋ฌด๋ฆฌ๋์ด ์์ฌ์ ์ง๋ง, ๋ง์ ๊ฒ์ ์ป์ ์ ์์๋ ์๊ฐ์ด์๋ค. ์ด๋ฒ ํฌ์คํ ์์ ์๋ฒ๊ฐ๋ฐ์บ ํ๋ฅผ ํตํด ์ป์ ์ ๊ณผ ๋๋์ ์ ๋ํด ์ ์ด๋ณด๋ คํ๋ค. RESTful API ๊ฐ๋ฐ ์ด๋ฒ ํ๋ก์ ํธ์์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ฅผ ๋ถ๋ฆฌํ์ฌ ๊ฐ๋ฐ์ ์งํํ๊ฒ๋์๋ค. ๋ค์ด๋ฒ ๋ถ์คํธ์ฝ์ค๋ฅผ ์งํํ๋ฉฐ REST API๋ฅผ ๊ฐ๋ฐํด๋ดค์ง๋ง, ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ํ์ ํ์ฌ API๋ฅผ ๊ฐ๋ฐํ ๊ฒ์ ์ฒ์์ด์๊ณ , ์์ฃผ ์๋ก์ด ๊ฒฝํ์ด์๋ค. ์ผ๋จ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์์ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ์ ์ํต์ด ์ค์ํ๋ค๋ ๊ฒ์ ๊นจ๋ฌ์๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฒ ํ๋ก์ ํธ์์ API๋ฌธ์๋ฅผ ์์ฑํ์ฌ ๊ณต์ ํ๋ค. ํด๋น API๋ฌธ์์๋ API๋ณ URL๊ณผ ๋ฉ์๋, ์์ฒญ๊ณผ ์๋ต์ ๋ํ ๋ด์ฉ๋ค์ด ๋ด๊ฒจ์์๋ค. ํด๋น ๋ด์ฉ์ ๋ฏธ๋ฆฌ.. [์๋ฒ๊ฐ๋ฐ์บ ํ] ์ธ์ฆ ์๋ฒ - ์์ ๋ก๊ทธ์ธ ๋ค์ด๋ฒ ์์ด๋๋ก ๋ก๊ทธ์ธ ์ธ์ฆ์๋ฒ์ ๋ค์ด๋ฒ ์์ด๋๋ก ๋ก๊ทธ์ธ(๋ค์๋ก) ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค. ๋ค์๋ก์ ์ ์ฒด์ ์ธ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค. 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์ ์ ์ฅํ๋ฉฐ ํ์๊ฐ์ ์ ๋ง์น๋ค. ์ฐจ์ฅ๋๊ณผ์ ์ฝ๋๋ฆฌ๋ทฐ์์ ํด๋น ๋ก์ง์ ๋ํด ์กฐ์ธ์ ๋ฐ์๋ค. ์ต๊ทผ์๋ ํ์๊ฐ์ ์ ๋ง์ณค์ง๋ง ์์ง ์ธ์ฆ์ด ์๋ฃ๋์ง ์์ ์ฌ์ฉ์์๊ฒ ์ผ๋จ ์ผ๋ถ์ ๊ถํ(์ต์ํ์ ๊ถํ)๋ง ์ ๊ณตํ ํ, ์ธ์ฆ์ด ์๋ฃ๋๋ฉด ์ถ๊ฐ ๊ถํ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ผ๋ ๊ฒ์ด์๋ค. ํ์ง๋ง ํ์ฌ ๊ฐ๋ฐ ์ค์ธ ์๋น์ค(์์์ค๋ท.. [์๋ฒ๊ฐ๋ฐ์บ ํ] ์ธ์ฆ ์๋ฒ - Spring Security + JWT ์๋ฒ๊ฐ๋ฐ์บ ํ์ ๋ ๋ฒ์งธ ๊ฐ์ธ ๊ณผ์ ๋ก ์ธ์ฆ ์๋ฒ ๊ตฌ์ถ์ด ์ฃผ์ด์ก๋ค. ์ธ์ฆ ์๋ฒ๋ฅผ ๊ตฌ์ถํ๋ฉฐ ์ฌ์ฉํ๋ ๊ธฐ์ ๊ณผ ์ด์๋ค์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. ์คํ๋ง์์๋ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ํตํด ๋ฆฌ์์ค์ ์ฌ์ฉ์ ์ฝ๊ฒ ์ปจํธ๋กค ํ ์ ์๋๋ก Spring Security๋ฅผ ์ ๊ณตํ๋ค. ์ํ๋ฆฌํฐ๋ฅผ ์ ์ฉํ๋ฉฐ ๋ฐฑ๊ธฐ์ ๋์ ์ ํ๋ธ ๊ฐ์ข์ happydaddy๋์ ํฌ์คํ ์ด ํฐ ๋์์ด ๋์๋ค. ์คํ๋ง ์ํ๋ฆฌํฐ๋ ์คํ๋ง์ Dispatcher Servlet ์๋จ์ ํํฐ๋ฅผ ๋ฑ๋ก์์ผ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๊ฐ๋ก์ฑ๋ค. ์ด ํ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ๋ํด ๊ถํ์ด ์์ ๊ฒฝ์ฐ ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ๋ฆฌ๋ค์ด๋ ํธ ์ํจ๋ค. ๋๋ API ์๋ฒ๋ฅผ ๊ตฌ์ถํ๊ณ , ํ ํฐ ๊ธฐ๋ฐ์ผ๋ก ํต์ ํ ๊ณํ์ด์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ง๋ ์ํ๋ฆฌํฐ ์ค์ ๊ณผ ๋๋ถ์ด JWT๋ฅผ ์ํ ํํฐ๊ฐ ํ์ํ๋ค. Spring Securi.. ๐ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ ๐ป 2020 ์ค๋ง์ผ๊ฒ์ดํธ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ ์ค๋ง์ผ๊ฒ์ดํธ์์ ์ด์ํ๋ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ์ ํฉ๊ฒฉํ๊ฒ ๋์๋ค(thanks to 1ilsang). ์๋ฒ๊ฐ๋ฐ์บ ํ๋ ์ค๋ง์ผ๊ฒ์ดํธ์์ ์ด์ํ๋ ํ๋ก๊ทธ๋จ์ด์ง๋ง, ๋ถ์ผ์ ๋ฌด๊ดํ๊ฒ ๊ฐ๋ฐ์๋ฅผ ๊ฟ๊พธ๋ ๋ชจ๋ ๋ฏธ๋ ๊ฐ๋ฐ์๋ฅผ ๋์์ผ๋ก ์งํ๋๋ ํ๋ก๊ทธ๋จ์ด๋ค. 1์ฃผ์ฐจ์๋ ์บ ํ์ฅ๋์ ๊ธฐ๋ณธ ๊ฐ์์ ๋๋ถ์ด ๊ฐ์ธ ํ๋ก์ ํธ๋ฅผ ์งํํ๊ณ , ์คํฐ ๋ ๊ตฌ์ฑํ๋ ํ๋ผ๋ฆฌ ๋ ๋ฌ๊ฐ ์งํ ๋ ํ ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ๋ ์๊ฐ์ ๊ฐ์ก๋ค. ๐ ๊ต์ก๊ณผ ๊ฐ์ธ ํ๋ก์ ํธ 1์ฃผ์ฐจ์๋ ์บ ํ์ฅ๋๊ป์ ๋งค์ผ ๋ ์๊ฐ์ ๋ ๊ต์ก์ ์งํํด์ฃผ์ จ๋ค. ๊ธฐ๋ณธ ๊ต์ก์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ํ๋ ์์ํฌ, ๊ฐ๋ฐ์ ์ ์ฉํ ํด ๋๋ ํ๋ก๊ทธ๋จ ๋ฑ์ ์ฃผ์ ๋ก ์งํ๋์๋ค. ๊ต์ก๊ณผ ๋๋ถ์ด ๊ฐ์ธ ํ๋ก์ ํธ๋ ์งํ๋์๊ณ , 1์ฃผ์ฐจ ๊ฐ์ธ ํ๋ก์ ํธ๋ URL Shortener๋ฅผ ๊ฐ.. ์ด์ 1 ๋ค์