🧠 Redis & 암호화/쿠키 정리 (정규 Markdown 테이블 버전)
본 문서는 GitHub-Flavored Markdown(GFM) 기준의 표 문법을 사용해 다시 정리했습니다.
모든 표는 | 헤더 | 헤더 | + | --- | --- | 형식을 따릅니다.
🚀 Redis
🧩 사용법
1️⃣ RedisTemplate 객체 생성
| 방법 | 선언 방식 | 설명 |
|---|
| 방법1 | private final StringRedisTemplate stringRedisTemplate; | 문자열 타입 저장용 |
| 방법2 | private final RedisTemplate redisTemplate; | DTO, JSON, Map 등 다양한 타입 저장용 |
2️⃣ RedisTemplate 설정 (RedisConfig)
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
3️⃣ Redis에 데이터 저장
| 구분 | 코드 예시 | 설명 |
|---|
| 단순 저장 | redisTemplate.opsForValue().set(key, value); | 단순한 key-value 저장 |
| 유효기간 저장 | redisTemplate.opsForValue().set(key, value, TTL); | TTL은 Duration.ofXXX()으로 설정 |
| 데이터 수정 | (키 중복 시) 동일 key의 value 덮어쓰기 | 기존 값 위에 새 값으로 갱신 |
4️⃣ Redis에서 데이터 호출
| 구분 | 코드 예시 | 설명 |
|---|
| 특정 key 조회 | Object value = redisTemplate.opsForValue().get(key); | 지정 key의 value 조회 |
| 전체 key 조회 | Set<String> keys = redisTemplate.keys("*"); | 모든 key 조회 |
| 패턴 key 조회 | Set<String> keys = redisTemplate.keys("student:*"); | 예: student:*, jwt:* |
| 네이밍 규칙 | 의미단어:식별번호 | 예: student:1, jwt:토큰번호 |
5️⃣ Redis 데이터 삭제
| 구분 | 코드 예시 | 설명 |
|---|
| 특정 key 삭제 | boolean result = redisTemplate.delete(key); | 해당 key-value 삭제 |
6️⃣ key 존재 여부 확인
| 구분 | 코드 예시 | 설명 |
|---|
| key 존재 확인 | boolean result = redisTemplate.hasKey(key); | key 존재 여부 반환 |
🔐 암호화와 쿠키
🔑 BCrypt (비밀번호 암호화)
📦 Gradle 의존성 추가
implementation 'org.springframework.security:spring-security-crypto:6.4.4'
📋 특징
| 번호 | 설명 |
|---|
| 1 | 복호화가 불가능한 단방향 알고리즘 |
| 2 | 동일한 평문이라도 매번 서로 다른 암호문 생성(솔트 포함) |
⚙️ 사용법
| 단계 | 코드 | 설명 |
|---|
| 1 | private final BCryptPasswordEncoder bCrypt = new BCryptPasswordEncoder(); | BCrypt 객체 생성 |
| 2 | String 암호문 = bCrypt.encode(평문); | 평문 암호화 |
| 3 | bCrypt.matches(평문, 암호문); | 평문과 암호문 비교 |
🍪 쿠키 (Cookie)
💡 개념
- 클라이언트 브라우저의 임시 저장소
- 장점: 서버 부담 감소
- 단점: 세션보다 보안이 취약 → 안전장치 필요
- 사용처: 사용자 설정값 저장 (예: 자동 로그인)
- 특징: 서버 종료 후에도 상태 유지
⚙️ 사용법
| 단계 | 코드 예시 | 설명 |
|---|
| 1 | Cookie cookie = new Cookie("loginUser", result.getUid()); | 쿠키 객체 생성 |
| 2 | cookie.setHttpOnly(true); | JS에서 접근 불가(HTTP 전용) |
| 2-1 | cookie.setSecure(false); | HTTPS에서만 전송하려면 true |
| 2-2 | cookie.setPath("/"); | 접근 경로 지정 |
| 2-3 | cookie.setMaxAge(3600); | 유효기간(초) |
| 3 | response.addCookie(cookie); | 쿠키를 클라이언트로 전달 |
| 4 | Cookie[] cookies = request.getCookies(); | 저장된 모든 쿠키 가져오기 |