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

์Šค๋งˆ์ผ๊ฒŒ์ดํŠธ ์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„ 4๊ธฐ

[์„œ๋ฒ„๊ฐœ๋ฐœ์บ ํ”„] ์ธ์ฆ ์„œ๋ฒ„ - ๋กœ๊ทธ์ธ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ : nGrinder

AWS RDS

 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ตฌ์ถ•์„ ์œ„ํ•ด AWS์—์„œ ํ”„๋ฆฌํ‹ฐ์–ด๋กœ ์ œ๊ณตํ•˜๋Š” RDS db.t2.micro ์ธ์Šคํ„ด์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. ํ•ด๋‹น ์ธ์Šคํ„ด์Šค์˜ ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ์ˆ˜๊ฐ€ 66์ด์—ˆ๊ณ , ์šฐ๋ฆฌ ์„œ๋น„์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•˜๋Š” ์„œ๋น„์Šค ์„œ๋ฒ„๊ฐ€ ์„ธ ๋Œ€์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ ์„œ๋ฒ„์˜ ์ตœ๋Œ€ ์ปค๋„ฅ์…˜ ์ˆ˜๋ฅผ 20์œผ๋กœ ์ง€์ •ํ–ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด HikariDataSource๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

AWS db.t2.micro Max Connection

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๋กœ ๋‘๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค.

https://security.stackexchange.com/a/3993

 

๊ฒฐ๊ณผ

 strength๋ฅผ 4๋กœ ํ–ˆ์„ ๋•Œ ํšŒ์›๊ฐ€์ž…ํ•œ ์œ ์ €์˜ ๋กœ๊ทธ์ธ ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•œ ๊ฒฐ๊ณผ TPS 247.3์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค. ๋ชฉํ‘œ๋กœ ํ–ˆ๋˜ 300์— ๋ชป๋ฏธ์น˜์ง€๋งŒ ๋ณ‘๋ชฉ์ง€์ ์„ ๋ฐœ๊ฒฌํ•˜๊ณ  ํ•ด๊ฒฐํ–ˆ๋‹ค๋Š” ์ ์—์„œ ๋ฟŒ๋“ฏํ–ˆ๋‹ค.