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 hikariConfig() {
return new HikariConfig();
}
@Bean
public DataSource dataSource() {
return new HikariDataSource(hikariConfig());
}
...
}
application.properties
spring.datasource.hikari.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.hikari.jdbc-url= //
spring.datasource.hikari.username= //
spring.datasource.hikari.password= //
spring.datasource.hikari.maximum-pool-size=20
๋ก๊ทธ์ธ ์ฑ๋ฅ ํ ์คํธ
nGrinder๋ก ์ธ์ฆ์๋ฒ์ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํ๋ค. nGrinder์์๋ ํ ์คํธ๋ฅผ ์ํด ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํด์ผํ๋๋ฐ, ๋ฐ๋ก ์๋๋ฆฌ์ค๋ฅผ ์์ฑํ์ง ์๊ณ ๋ก๊ทธ์ธ API์ ๋ํ ์ฑ๋ฅ๋ง ํ ์คํธ๋ฅผ ์งํํ๋ค.
์ฒ์ ํ ์คํธ ํ ๋, Vuser๋ฅผ 99๋ก ์ค์ ํ๋๋ฐ ๊ณ์ํด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค. ์ด ๋ถ๋ถ์์ ์ด์ ๋ฅผ ๋ชฐ๋ผ ํ์ฐธ ํค๋งค์๋ค. ์ผ๋จ ์๋ฒ์ ์์ฒญ์ด ์ ๋๋ก ๋ค์ด๊ฐ๋์ง ํ์ธํ๊ธฐ ์ํด ๋ก๊ทธ๋ฅผ ์ฐ์ด๋ดค๋๋ฐ, ์์ฒญ์ ์ ๋๋ก ๋ค์ด์ค๋ ์ํฉ์ด์๋ค. Vuser๋ฅผ 1๋ก๋๊ณ ํ ์คํธ๋ฅผ ํ์ ์ค๋ฅ๋ ๋ฐ์ํ์ง ์์๋๋ฐ, 6.5๋ผ๋ ๊ท์ฌ์ด TPS๊ฐ ๋์๋ค...
๊ฒฐ๊ตญ ์๋ฒ ์ฒ๋ฆฌ์๋๊ฐ ๋๋ ค์ Vuser๊ฐ ๋์ผ๋ฉด ํ์์์์ด ๋ฐ์ํด ๊ณ์ํด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ค๋ ๊ฒฐ๋ก ์ด ๋์๋ค. ์ฒ์์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ ํ ๋๋ง๋ค ์ฌ์ฉ์ ์ ๊ทผ ์๊ฐ์ ์ ๋ฐ์ดํธํ๋ ๋ถ๋ถ์ ์์ฌํ์ง๋ง, ์์ธ์ ์ ํ ์์ํ์ง ๋ชปํ ๊ณณ์ ์์๋ค. ๋ฐ๋ก๋ฐ๋ก PasswordEncorder!!!
BCrypt Password Encoder
์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ๊ธฐ ์ํด Spring Security์์ ์ ๊ณตํ๋ BCryptPasswordEncoder๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ญ์ค์ ์ด๊ฒ๋ ๋๋ฌด ๊ฐ๋ ฅํ ์ํธํ ๋๋ถ์ ๋น๋ฐ๋ฒํธ ์ผ์น๋ฅผ ํ์ธํ๋๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋๊ฑฐ์๋ค.(์ฌ์ค์ EC2 t2.micro์ ์ฑ๋ฅ์ด ๋ฅ์ด๊ธฐ ๋๋ฌธ...)
BCrypt๋ ๋น๋ฐ๋ฒํธ ์ํธํ๋ฅผ ์ํด ๊ณ ์๋ ๋จ๋ฐฉํฅ ํด์ฌ์๊ณ ๋ฆฌ์ฆ์ด๋ค. Spring Secrurity์์ ์ ๊ณตํ๋ BCryptPassowrdEncoder๋ ๋ด๋ถ์ ์ผ๋ก ๋๋ค ์ํธ๋ฅผ ์์ฑํด์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ ์ํจ๋ค.
์ด ๋ ํด์ฌํจ์๋ฅผ ๋ช ๋ฒ ๋๋ฆฌ๋๋์ ๋ฐ๋ผ ๋น๋ฐ๋ฒํธ์ ์ํธํ ๊ฐ๋๊ฐ ๊ฒฐ์ ๋๋๋ฐ, ํด๋น ์ธ์ฝ๋๋ 4~31์ฌ์ด ๊ฐ์ผ๋ก strength๋ฅผ ๊ฒฐ์ ํ ์ ์๊ณ , ๋ํดํธ๋ 10์ด๋ค. ์ฆ, strength๊ฐ 10์ด๋ผ๋ฉด 2^10๋ฒ BCrypt ํด์ฌํจ์๋ฅผ ๋๋ ค์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ๋ ๊ฒ์ด๋ค.
๋ฌธ์ ๋ BCrypt๊ฐ ๋จ๋ฐฉํฅ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ด๊ธฐ ๋๋ฌธ์, ๋น๋ฐ๋ฒํธ๋ฅผ ํ์ธ ํ ๋ ๋ง๋ค 2^strength๋ฒ ํด์ฌ๋ฅผ ๋๋ ค์ผํ๋ค๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒฐ๊ตญ ์๋ฒ์ ์ฑ๋ฅ, cpu ์ฝ์ด ์์ ์ฐ๊ด์ด ๋๋๋ฐ, t2.micro๋ ํ๋์ cpu๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋น๋ฐ๋ฒํธ ํ์ธํ๋ ๋ถ๋ถ์์ ๋ณ๋ชฉ ํ์์ด ๋ฐ์ ํ๋ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
๊ฒฐ๊ตญ ๋น๋ฐ๋ฒํธ์ ์ํธํ์ ๋ก๊ทธ์ธ ์๋์ ํธ๋ ์ด๋ ์คํ ๋ฌธ์ ์ธ๋ฐ, ๊ถ์ฅ strength๋ฅผ ๊ณ ๋ฏผํ๋ ์ค Stack Exchange์์ ๋ค์๊ณผ ๊ฐ์ ๊ธ์ ๋ฐ๊ฒฌํ๋ค. ์์ฝํ์๋ฉด ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฉ๋ฉํ ์ ์๋ ์ฑ๋ฅ ๋ด์์, ์ต๋์ strength๋ฅผ ์ง์ ํด์ผ ํ๋ค๋ ๊ฒ์ด์๋ค. ์ฐ๋ฆฌ๋ ๋ก๊ทธ์ธ TPS ๋ชฉํ๋ฅผ 300์ผ๋ก ์ก์์๊ธฐ ๋๋ฌธ์ strength๋ฅผ 4๋ก ๋๊ธฐ๋ก ๊ฒฐ์ ํ๋ค.
๊ฒฐ๊ณผ
strength๋ฅผ 4๋ก ํ์ ๋ ํ์๊ฐ์ ํ ์ ์ ์ ๋ก๊ทธ์ธ ์ฑ๋ฅ ํ ์คํธ๋ฅผ ์งํํ ๊ฒฐ๊ณผ TPS 247.3์ด๋ผ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์๋ค. ๋ชฉํ๋ก ํ๋ 300์ ๋ชป๋ฏธ์น์ง๋ง ๋ณ๋ชฉ์ง์ ์ ๋ฐ๊ฒฌํ๊ณ ํด๊ฒฐํ๋ค๋ ์ ์์ ๋ฟ๋ฏํ๋ค.
'์ค๋ง์ผ๊ฒ์ดํธ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ ์ค๋ง์ผ๊ฒ์ดํธ ์๋ฒ๊ฐ๋ฐ์บ ํ 4๊ธฐ - ํ๊ณ (0) | 2020.03.12 |
---|---|
[์๋ฒ๊ฐ๋ฐ์บ ํ] ์ธ์ฆ ์๋ฒ - ์์ ๋ก๊ทธ์ธ (0) | 2020.03.03 |
[์๋ฒ๊ฐ๋ฐ์บ ํ] ์ธ์ฆ ์๋ฒ - AWS EC2 & RDS ๊ตฌ์ถ ๋ฐ ๋ฐฐํฌ (0) | 2020.02.10 |
[์๋ฒ๊ฐ๋ฐ์บ ํ] ์ธ์ฆ ์๋ฒ - ๋ก๊ทธ์ธ : JWT + Redis (1) | 2020.02.10 |
[์๋ฒ๊ฐ๋ฐ์บ ํ] ์ธ์ฆ ์๋ฒ - ์ด๋ฉ์ผ ์ธ์ฆ ํ์๊ฐ์ (0) | 2020.02.08 |