728x90
valkey를 내부 접근용으로 만들어 놨기 때문에 spring 프로젝트에서 접근하기 위해서는 ssh 터널링 작업이 필요하다
이전 rds 를 ssh 터널링으로 접근 한것과 같이 세팅을 해준다.
https://soobysu.tistory.com/215
[Spring] SSH 터널링으로 DB접속 ( EC2 RDS )
RDS 인스턴스에 public ip 를 사용하면 매달 5천원 ~ 1만원의 요금을 내야 한다보안에서도 RDS 를 외부에 노출 시키지 않고 EC2 만 열어두어서 더 안전하다 AWS 설정1. EC2 와 RDS 가 같은 리전에 있어야
soobysu.tistory.com
JSch 셋팅
@PreDestroy
fun destroy() {
if (::session.isInitialized && session.isConnected) {
session.disconnect()
}
}
@Bean
fun sshSession(): Map<String, Int> {
try{
val classPathResource = ClassPathResource("aws/key.pem")
if (!classPathResource.exists()) {
throw FileNotFoundException("❌ 리소스가 classpath에 존재하지 않음: aws/was_key.pem")
}
val tempKeyFile = File.createTempFile("temp-key", ".pem").apply {
outputStream().use { classPathResource.inputStream.copyTo(it) }
deleteOnExit() // JVM 종료 시 자동 삭제
}
val jsch = JSch()
jsch.addIdentity(tempKeyFile.absolutePath)
val session = jsch.getSession(sshUser, sshHost, sshPort)
val config = Properties()
config["StrictHostKeyChecking"] = "no"
session.setConfig(config)
session.connect()
val forwardedDbPort = session.setPortForwardingL(0, dbEndpoint, Integer.parseInt(dbPort))
val forwardedValkeyPort = session.setPortForwardingL(0, "localhost", valkeyPort.toInt())
return mapOf(
"rds" to forwardedDbPort,
"valkey" to forwardedValkeyPort
)
}catch (ex: Exception){
throw RuntimeException("Failed to create SSH session", ex)
}
}
map 에 key 값을 사용할 프로세스명을 기입하고 value 를 가져올 포트로 만들어 주자
RedisConnectionFactory
@Bean
fun redisConnectionFactory(): RedisConnectionFactory {
val forwardedPorts = initializer.sshSession()
val valkeyPort = forwardedPorts["valkey"]
?: throw IllegalStateException("Valkey 포워딩 포트를 찾을 수 없습니다.")
val config = RedisStandaloneConfiguration("localhost", valkeyPort)
return LettuceConnectionFactory(config)
}
일반 redis 와 같이 spring data redis 를 사용해주면 된다.
implementation("org.springframework.boot:spring-boot-starter-data-redis")
728x90
'개-발 > Java + Spring + Kotlin' 카테고리의 다른 글
| [spring] read , write 분리하기 (DB Replication) (0) | 2025.06.12 |
|---|---|
| [Kotlin] 웹 크롤링 지연 후 가져오기 (0) | 2025.05.19 |
| [Spring] SSH 터널링으로 DB접속 ( EC2 RDS ) (0) | 2025.04.01 |
| [Spring] NCP SMS 인증번호 시스템 구현 (1) | 2024.12.03 |
| [Spring] ServletRequest 캐싱 (ContentCachingRequestWrapper) (0) | 2024.12.02 |