🧠 SQL · Redis 정리 노트
🧾 SQL
🛡️ DCL (Data Control Language)
| 항목 | 설명 |
|---|
| 정의 | 데이터베이스 사용자 계정 생성, 권한 부여 및 회수 등을 관리하는 명령어 |
| 목적 | 계정별 접근 권한 분리로 보안 강화 |
🔧 주요 명령어
| 번호 | 명령어 | 설명 |
|---|
| 1 | CREATE USER '계정명'@'허용IP' IDENTIFIED BY '비밀번호'; | 계정 생성 |
| 2 | GRANT 권한 ON 데이터베이스명.테이블명 TO '계정명'@'허용IP'; | 권한 부여 |
| 3 | REVOKE 권한 ON 데이터베이스명.테이블명 FROM '계정명'@'허용IP'; | 권한 회수 |
| 4 | SHOW GRANTS FOR '계정명'@'허용IP'; | 권한 확인 |
| 5 | ALTER USER '계정명'@'허용IP' IDENTIFIED BY '새로운비밀번호'; | 비밀번호 수정 |
| 6 | DROP USER '계정명'@'허용IP'; | 계정 삭제 |
| 7 | SELECT * FROM mysql.user; | 모든 계정 확인 |
💡 허용 IP 예시:
localhost → 로컬 환경만 허용
% → 모든 IP 허용
192.168.0.1 → 특정 IP만 허용
⚡ INDEX
| 항목 | 설명 |
|---|
| 정의 | 특정 필드 기준으로 데이터를 빠르게 검색하기 위한 색인 |
| 장점 | 대용량 데이터의 SELECT, JOIN, 정렬 속도 향상 |
| 단점 | INSERT, DELETE, UPDATE 성능 저하 가능 |
| 특징 | PK 속성은 기본적으로 인덱스를 가짐 |
🔧 주요 명령어
| 번호 | 명령어 | 설명 |
|---|
| 1 | CREATE INDEX 인덱스명 ON 테이블명(속성명); | 단일 인덱스 생성 |
| 2 | CREATE INDEX 인덱스명 ON 테이블명(속성명1, 속성명2); | 복합 인덱스 생성 |
| 3 | SHOW INDEX FROM 테이블명; | 인덱스 확인 |
| 4 | DROP INDEX 인덱스명 ON 테이블명; | 인덱스 삭제 |
| 5 | EXPLAIN ANALYZE 쿼리문; | 실행 계획 분석 |
| 6 | CREATE FULLTEXT INDEX 인덱스명 ON 테이블명(속성명); | 자연어 검색용 인덱스 생성 |
📘 자연어 검색 예시:
SELECT * FROM 테이블명 WHERE MATCH(속성명) AGAINST('검색어');
※ LONGTEXT, TEXT, CHAR, VARCHAR 타입만 가능
🧩 Redis
| 항목 | 설명 |
|---|
| 정의 | 인메모리 기반의 데이터 저장소 |
| 특징 | 속도가 매우 빠르며, 서버 종료 시 데이터가 소멸 |
| 구조 | Key-Value 형태 (Map, JSON, DTO와 유사) |
| 기본 포트 | 6379 |
| 언어 비교 | MySQL / Oracle → SQL 기반, Redis → NoSQL 기반 (객체지향) |
⚙️ 캐싱
| 항목 | 설명 |
|---|
| 개념 | SELECT 결과를 임시 저장해 DB 부하를 줄이는 기술 |
| 특징 | 서버가 종료되면 데이터도 사라짐 |
💻 Redis 설치
| 구분 | 내용 |
|---|
| 공식 사이트 | https://redis.io/ko/ |
| Github를 통해 설치 | Redis Windows Releases |
| 옵션 1 | Redis-8.2.2-Windows-x64-msys2-with-Service.zip → 백그라운드 실행 |
| 옵션 2 | Redis-8.2.2-Windows-x64-msys2.zip → 직접 실행 |
| 실행 방법 | redis-server.exe를 관리자 권한으로 실행 → CMD 유지 시 서버 실행 상태 |
☕ Spring과 Redis 연동
build.gradle에 Spring Data Redis 의존성 추가
application.properties 설정spring.data.redis.host=localhost
spring.data.redis.port=6379
🧱 RedisConfig 예시
@Configuration
public class RedisConfig {
@Bean
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;
}
}
🧩 직렬화(Serialization):
Redis에 저장된 데이터를 자바 객체 형태로 변환하는 과정
🧠 주요 사용법
| 기능 | 코드 예시 |
|---|
| 1. 저장 | redisTemplate.opsForValue().set(key, value); |
| 2. 유효시간 설정 저장 | redisTemplate.opsForValue().set(key, value, Duration.ofXXX()); |
| 3. 조회 | redisTemplate.opsForValue().get(key); |
| 4. 모든 key 조회 | redisTemplate.keys("*"); |
| 5. 삭제 | redisTemplate.delete(key); |
🗂️ 개발에서의 주요 저장소 비교
| 저장소 | 위치 | 보안 | 주요 용도 |
|---|
| 로컬/세션 스토리지 | 클라이언트 | 낮음 | 설정 정보 등 임시 데이터 |
| DB | DB 서버 | 높음 | 영구적 데이터 저장 |
| 톰캣 세션 | 자바 서버 | 중간~높음 | 로그인 상태 등 세션 정보 |
| Redis | 메모리(서버) | 중간 | 캐싱, 실시간 데이터, 다중 서버 공유 |
| CSV | 로컬 파일 | 낮음 | 단순 데이터 백업용 |