์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ์ฅํจ์ ๋ฐ๋ผ ๋จ์ผ ์๋ฒ๋ก๋ ๋ชจ๋ ํธ๋ํฝ์ ์ฒ๋ฆฌํ๊ธฐ ์ด๋ ค์์ง๋๋ค. ์ฌ๋ฌ ์๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ก๋๋ฅผ ๋ถ์ฐ์ํฌ ์ ์์ง๋ง, ์ฌ์ฉ์ ์ธ์ ์ ๋ณด๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ ๊ฒ์ธ๊ฐ๊ฐ ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค. ์ธ์ ํด๋ฌ์คํฐ๋ง์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ฌ ์ฌ์ฉ์๊ฐ ์ด๋ค ์๋ฒ์ ์ ์ํ๋๋ผ๋ ์ผ๊ด๋ ์ธ์ ์ ๋ณด๋ฅผ ์ ์งํ ์ ์๊ฒ ํด์ค๋๋ค.
Spring Session์ ์ธ์ ๊ด๋ฆฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. Redis์ ํจ๊ป ์ฌ์ฉํ๋ฉด ๋ถ์ฐ ํ๊ฒฝ์์ ์ธ์ ์ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. Redis๋ ๊ณ ์ฑ๋ฅ ์ธ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ ์ฅ์๋ก, ์ธ์ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅํ๊ณ ๊ฒ์ํ ์ ์์ต๋๋ค.
๋จผ์ build.gradle ํ์ผ์ ํ์ํ ์์กด์ฑ์ ์ถ๊ฐํฉ๋๋ค:
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.session:spring-session-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-web'
// ๊ธฐํ ํ์ํ ์์กด์ฑ๋ค...
}
Redis ์ฐ๊ฒฐ ์ ๋ณด๋ฅผ application.properties ๋๋ application.yml ํ์ผ์ ์ถ๊ฐํฉ๋๋ค:
spring:
redis:
host: localhost
port: 6379
Spring Session์ ํ์ฑํํ๊ธฐ ์ํด @EnableRedisHttpSession ์ด๋ ธํ ์ด์ ์ ์ค์ ํด๋์ค์ ์ถ๊ฐํฉ๋๋ค:
@Configuration
@EnableRedisHttpSession
public class SessionConfig {
}
๊ธฐ๋ณธ์ ์ผ๋ก Java ์ง๋ ฌํ๊ฐ ์ฌ์ฉ๋์ง๋ง, JSON ๋ฑ ๋ค๋ฅธ ํ์์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค:
@Bean
public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
return RedisSerializer.json();
}
JSON ์ง๋ ฌํ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ SecurityContext์ ๊ฐ์ ์ผ๋ถ ๊ฐ์ฒด์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 3600)
์ธ์ ๋ฐ์ดํฐ ํฌ๊ธฐ: Redis์ ์ ์ฅ๋๋ ์ธ์ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๊ด๋ฆฌํด์ผ ํฉ๋๋ค.
๋คํธ์ํฌ ์ง์ฐ: Redis ์๋ฒ์์ ํต์ ์ ๋ฐ๋ฅธ ์ฝ๊ฐ์ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ณด์: Redis ์๋ฒ์ ๋ณด์ ์ค์ ์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค.
Spring Session์ HTTP ์์ฒญ์ ๊ฐ๋ก์ฑ์ด ๊ธฐ์กด์ HttpSession์ Spring Session์ผ๋ก ๋์ฒดํฉ๋๋ค.
์ธ์
๋ฐ์ดํฐ๋ Redis์ ์ ์ฅ๋๋ฉฐ, ๊ฐ ์ธ์
์ ๊ณ ์ ํ ํค๋ก ์๋ณ๋ฉ๋๋ค.
ํด๋ผ์ด์ธํธ์๋ SESSION ์ฟ ํค๊ฐ ์ ์ก๋๋ฉฐ, ์ด ์ฟ ํค๋ Redis์ ์ ์ฅ๋ ์ธ์
์ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฒ ๊ฐ ์ธ์ ๊ณต์ : ์ฌ๋ฌ ์๋ฒ ์ธ์คํด์ค์์ ๋์ผํ ์ธ์ ์ ๋ณด์ ์ ๊ทผํ ์ ์์ต๋๋ค.
ํ์ฅ์ฑ: ์๋ฒ๋ฅผ ์ฝ๊ฒ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
์ฑ๋ฅ: Redis์ ๋น ๋ฅธ ์ฝ๊ธฐ/์ฐ๊ธฐ ์๋๋ก ์ธํด ์ธ์ ๊ด๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋ฉ๋๋ค.