SQL Injection
·
Backend/DB
SQL Injection은 웹 애플리케이션 보안에서 가장 흔하고 치명적인 취약점 중 하나.원리부터 PreparedStatement, ORM을 통한 보호 방법까지 설명하려 함1. SQL Injection 원리SQL Injection은 웹 애플리케이션의 `입력 폼`이나 `URL 파라미터 ` 등을 통해 악의적인 SQL 구문(Query)을 주입(Injection)하여, 데이터베이스를 비정상적으로 조작하거나 민감한 정보를 탈취하는 공격 기법핵심 원리: 사용자 입력이 SQL 쿼리에 직접 결합애플리케이션이 사용자로부터 입력받은 값을 아무런 검증이나 처리 없이 SQL 쿼리 문자열에 직접 삽입하여 실행할 때 발생SELECT * FROM users WHERE username = '사용자_입력_ID' AND password..
트랜잭션 분산 환경 처리
·
Backend/DB
트랜잭션 분산 환경 처리단일 DB 환경에서의 트랜잭션 개념(ACID 속성)을 여러 개의 독립적인 DB나 서버에 걸쳐 확장하는 것을 의미함단일 DB에서는 ACID 속성을 DBMS가 보장해 주지만, 분산 환경에서는 이 보장이 훨씬 복잡해지거나 불가능할 수 있음❓ ACID 속성- Atomatic (원자성): 트랜잭션 내의 모든 연산이 완전히 성공하거나, 아니면 완전히 실패- Consistency (일관성): 트랜잭션이 성공적으로 완료되면, DB는 항상 일관된 상태 유지- Isolation (고립성): 여러 트랜잭션 동시 실행 시, 각 트랜잭션은 독립적으로 실행- Durability (지속성): 트랜잭션이 성공적으로 커밋되면, 변경된 모든 데이터는 영구적으로 DB에 반영단일 트랜잭션 / 분산 트랜잭션단일 트랜잭..
DB 분산 구조
·
Backend/DB
DB 분산 구조DB 분산 구조는 말 그대로 DB를 여러 개의 서버에 나누어 저장하고 관리하는 시스템을 의미함단일 DB 시스템이 가질 수 있는 한계 (성능, 용량, 가용성 등)을 극복하고, 더욱 확장성 있고 안정적인 서비스를 제공하기 위해 도입된 개념DB 분산 구조를 사용하는 이유단일 데이터 베이스는 아래와 같은 한계를 가짐성능 한계모든 R/W 요청이 하나의 서버로 집중되면, 서버의 CPU, 메모리, I/O 자원이 고갈되어 처리 속도가 급격히 느려짐데이터 양이 방대해지면 인덱스를 사용해도 쿼리 속도가 저하됨용량 한계하나의 서버에 저장할 수 있는 데이터 양에는 물리적 한계 존재데이터가 계속 증가하면, 언젠가는 공간 부족가용성 문제단일 서버에 장애가 발생하면 전체 서비스가 중단될 수 있음DB 분산 구조는 위와..
Redis -2
·
Backend/DB
여러 사용자가 동시에 같은 데이터를 수정하려고 할 때 경쟁 조건이 발생하는 경우 Redis는 어떻게 대처할까?Redis는 경쟁 조건을 방지하기 위해 두 가지 접근 방식인 Optimistic Lock, Pessimistic Lock 을 사용한다.시나리오전략이유재고 감소, 좋아요 수 증가Optimistic충돌 적고 성능 중요결제, 티켓팅, 중복 요청 방지Pessimistic무조건 1개만 처리해야 함Optimistic Lock (낙관적 락)문제가 발생하지 않을 것이라는 낙관적인 개념으로동시 접근을 허용하되, 마지막에 충돌이 발생하면 롤백하는 방식이다.Redis에서는 `WATCH`, `MULTI`, `EXEC` 명령어를 사용하여 구현한다.특징항목설명장점락을 사용하지 않아 빠르고 병렬 처리에 유리단점충돌이 많으..
Redis - 1
·
Backend/DB
Redis (Remote Dictionary Serve)Redis란 Remote Dictionary Server의 약자로, 오픈 소스 인메모리 데이터 저장소이다.주로 캐시, 메시지 브로커, 세션 저장소, 실시간 데이터 처리 등에 사용 됨Remote: 원격 서버 / Dictionary: 해시 테이블, 자바에 비유하면 해시 맵`키 -값` 구조의 인메모리 데이터 베이스빠른 속도 덕에 캐시 시스템이나 실시간 애플리케이션에서 많이 사용데이터를 디스크에도 저장할 수 있어 영속성(persistence) 제공❓ 영속성 (Persistence)이 머더라데이터를 생성한 프로그램의 실행이 종료되더라도 사라지지 않는 데이터의 특성주요 특징 (장점) 특징 설명 인메모리 저장소모든 데이터를 `메모리(RAM)`에 저장하여 매우..
트랜잭션 (Transaction)
·
Backend/DB
트랜잭션이란?트랜잭션은 데이터베이스에서 하나의 작업 단위를 의미일련의 SQL 문장이 모두 성공해야만 반영되고, 중간에 하나라도 실패하면 전체가 취소(rollback) 되는 구조📌 은행 계좌 이체 예시1. A → B 계좌로 돈 이체 2. A 계좌에서 출금, B 계좌에 입금 👉중간에 B 계좌 입금 실패 시 → A 계좌 출금도 되돌려야 함트랜잭션의 특징 (ACID)원자성(Atomicity)트랜잭션은 전체가 수행되거나, 전혀 수행되지 않거나중간 실패 시 rollback 가능일관성(Consistency)트랜잭션이 완료되면 DB는 항상 일관된 상태로 유지예: 잔액 총합은 항상 동일격리성(Isolation)여러 트랜잭션이 동시에 실행되더라도 서로 간섭하지 않음지속성(Durability)트랜잭션이 성공적으로 끝나면..
DB 정규화, 역정규화, 이상현상
·
Backend/DB
정규화RDB에서 중복을 제거하고, 데이터 구조를 논리적으로 분해하여 삽입, 삭제, 갱신 이상을 방지하고일관성 있는 구조를 만드는 과정제 1정규형 (1NF: First Normal Form)모든 컬럼은 원자값만 가져야 함👉 한 셀에는 하나의 값만 있어야 한다.수강 과목이 여러 값을 가짐 = `비정규형`정규화 후제 2정규형 (2NF: Second Normal Form)1NF 만족`부분 함수 종속 제거` 👉 기본 키가 복합키일 경우, 일부 키에만 의존하는 속성 제거기본 키 (학번, 수강 과목) → 하나의 학생이 여러 과목 수강성적은 기본키 전체에 종속 됨 = OK이름은 학번으로만 결정됨 = 부분 종속! (2NF 위반)제 3정규형 (Third Normal Form)2NF 만족이행적 함수 종속 제거 👉 A ..
스키마 3계층
·
Backend/DB
데이터베이스를 사용자와 시스템 관점에서 나누어 설계하기 위해 ANSI/SPARC 모델에서 제안한 개념총 3가지 수준으로 나누어 DB 정의외부 스키마 개념 스키마내부 스키마이 구조는 데이터 독립성을 보장하는 핵심 메커니즘이다.외부 스키마 (External Schema)사용자 관점의 스키마각 사용자 또는 응용프로그램이 보는 부분적인 데이터 구조하나의 DB에 대해 여러 개 존재 가능 (사용자마다 다름)-- 실제 테이블에는 이름, 나이, 급여, 주소 등이 있지만-- 외부 사용자 1은 이름과 급여만 조회하도록 설계SELECT name, salary FROM employees;개념 스키마 (Conceptual Schema)DB 전체를 통합적으로 표현한 논리 구조모든 사용자와 응용 프로그램에 공통으로 보이는 구조관계..