2025년 10월 17일 금요일 (95일차)

Jeonghoon·2025년 10월 17일

jeonghoon's Study

목록 보기
98/128

🧠 SQL · Redis 정리 노트

🧾 SQL

🛡️ DCL (Data Control Language)

항목설명
정의데이터베이스 사용자 계정 생성, 권한 부여 및 회수 등을 관리하는 명령어
목적계정별 접근 권한 분리로 보안 강화

🔧 주요 명령어

번호명령어설명
1CREATE USER '계정명'@'허용IP' IDENTIFIED BY '비밀번호';계정 생성
2GRANT 권한 ON 데이터베이스명.테이블명 TO '계정명'@'허용IP';권한 부여
3REVOKE 권한 ON 데이터베이스명.테이블명 FROM '계정명'@'허용IP';권한 회수
4SHOW GRANTS FOR '계정명'@'허용IP';권한 확인
5ALTER USER '계정명'@'허용IP' IDENTIFIED BY '새로운비밀번호';비밀번호 수정
6DROP USER '계정명'@'허용IP';계정 삭제
7SELECT * FROM mysql.user;모든 계정 확인

💡 허용 IP 예시:

  • localhost → 로컬 환경만 허용
  • % → 모든 IP 허용
  • 192.168.0.1 → 특정 IP만 허용

⚡ INDEX

항목설명
정의특정 필드 기준으로 데이터를 빠르게 검색하기 위한 색인
장점대용량 데이터의 SELECT, JOIN, 정렬 속도 향상
단점INSERT, DELETE, UPDATE 성능 저하 가능
특징PK 속성은 기본적으로 인덱스를 가짐

🔧 주요 명령어

번호명령어설명
1CREATE INDEX 인덱스명 ON 테이블명(속성명);단일 인덱스 생성
2CREATE INDEX 인덱스명 ON 테이블명(속성명1, 속성명2);복합 인덱스 생성
3SHOW INDEX FROM 테이블명;인덱스 확인
4DROP INDEX 인덱스명 ON 테이블명;인덱스 삭제
5EXPLAIN ANALYZE 쿼리문;실행 계획 분석
6CREATE 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
옵션 1Redis-8.2.2-Windows-x64-msys2-with-Service.zip → 백그라운드 실행
옵션 2Redis-8.2.2-Windows-x64-msys2.zip → 직접 실행
실행 방법redis-server.exe를 관리자 권한으로 실행 → CMD 유지 시 서버 실행 상태

☕ Spring과 Redis 연동

  1. build.gradleSpring Data Redis 의존성 추가
  2. 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);

🗂️ 개발에서의 주요 저장소 비교

저장소위치보안주요 용도
로컬/세션 스토리지클라이언트낮음설정 정보 등 임시 데이터
DBDB 서버높음영구적 데이터 저장
톰캣 세션자바 서버중간~높음로그인 상태 등 세션 정보
Redis메모리(서버)중간캐싱, 실시간 데이터, 다중 서버 공유
CSV로컬 파일낮음단순 데이터 백업용

0개의 댓글