본문 바로가기
반응형

Back-End/Database32

SQL Injection (SQL 인젝션) SQL 인젝션(SQL Injection) 은 웹 애플리케이션에서 사용자의 입력값이 SQL 쿼리에 안전하게 처리되지 않을 때 발생하는 보안 취약점입니다. 공격자는 이 취약점을 이용해 쿼리를 조작하여 인증을 우회하거나, 데이터를 조작하거나, 테이블 자체를 삭제할 수도 있습니다.예를 들어, 로그인 검증 시 아래와 같은 코드를 사용한다고 가정해 보겠습니다.public boolean login(String username, String password) { String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'"; try (Connection conn = DriverMana.. 2025. 9. 11.
NoSQL 데이터베이스 유형 NoSQL 데이터베이스의 유형은 키-값, 문서 지향, 열 지향, 그래프, 시계열이 있습니다.키-값 데이터베이스(Key-value Database) 는 키를 고유한 식별자로 사용하는 키-값 쌍의 형태로 데이터를 저장합니다. 구조가 단순하고, 빠른 읽기 및 쓰기 성능을 제공합니다. Redis, Amazon DynamoDB가 대표적인 예시이고, 세션 저장, 캐시, 실시간 순위 등으로 사용할 수 있습니다.문서 지향 데이터베이스(Document-oriented Database) 는 JSON, BSON, XML 등의 형식으로 데이터를 저장합니다. 유연한 스키마를 가지고 있으며, 복잡한 데이터 구조를 쉽게 표현할 수 있습니다. MongoDB, CouchDB가 대표적인 예시이고, 콘텐츠 관리 시스템, 사용자 프로필 저.. 2025. 9. 9.
트랜잭션 격리 수준 트랜잭션의 격리 수준은 동시에 여러 트랜잭션이 실행될 때 한 트랜잭션이 다른 트랜잭션의 연산에 영향을 받지 않도록 하는 정도를 말합니다.낮은 격리 수준은 동시 처리 능력을 높이지만, 데이터의 일관성 문제를 발생시킬 수 있습니다.반면, 높은 격리 수준은 데이터의 일관성을 보장하지만, 동시 처리 능력이 떨어질 수 있습니다. 즉, 데이터 정합성과 성능은 반비례합니다. 트랜잭션 격리 수준은 개발자가 트랜잭션 격리 수준을 설정할 수 있는 기능을 제공하는 기능입니다.종류 및 특징트랜잭션 격리 수준은 READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ가 존재합니다.READ UNCOMMITTED는 커밋이 되지 않은 트랜잭션의 데이터 변경 내용 을 다른 트랜잭션이 조회하는 것을 허용.. 2025. 8. 28.
논리 삭제와 물리 삭제의 차이점 데이터베이스에서 데이터를 삭제하는 방법은 크게 물리 삭제(Hard Delete) 와 논리 삭제(Soft Delete) 가 존재합니다. 물리 삭제는 DELETE 명령어를 통해 직접 데이터를 삭제하는 방식이며, 논리 삭제는 UPDATE 명령을 사용하여 삭제를 여부를 나타내는 컬럼을 수정하는 방식을 의미합니다. 즉, 물리 삭제는 실제로 데이터를 삭제하는 반면 논리 삭제는 데이터가 삭제되었음을 표시만 한다는 점에서 차이가 있습니다.# 물리 삭제 처리delete from member where id = 1;# 논리 삭제 처리와 조회update member set deleted_at = curdate() where id = 1;select * from member where deleted_at is null;어떤 .. 2025. 8. 25.
열 기반 DB 와 행 기반 DB 의 차이점 행 기반 데이터베이스(Row-oriented Database) 는 데이터를 행 단위로 관리하는 DBMS입니다. 행 단위 읽기 맟 쓰기 연산에 최적화돼 있습니다. PostgreSQL, MySQL이 대표적인 행 기반 데이터베이스입니다.반면, 열 기반 데이터베이스(Column-oriented Database) 는 열 기반으로 데이터를 관리한다는 점에서 행 기반 데이터베이스와 차이가 있습니다. 데이터를 조회할 때 필요한 열만 로드하기 때문에 디스크 I/O를 줄일 수 있으며, 같은 종류의 데이터가 연속적으로 저장되므로 압축 효율이 높습니다. 이러한 특징으로 인해 주로 데이터 분석에 사용됩니다. 대표적인 열 기반 데이터베이스로는 BigQuery, Redshift, Snowflake가 존재합니다.예를 들어, 다음과 .. 2025. 8. 7.
RDB 페이징 쿼리의 필요성 페이징 쿼리(Paging Query) 는 전체 데이터를 부분적으로 나누어 데이터를 조회하거나 처리할 때 사용됩니다. 데이터를 상대적으로 작은 단위로 나누어 처리하기 때문에 데이터베이스나 애플리케이션의 리소스 사용 효율이 증가하며, 로직 처리 시간을 단축 시킬 수 있습니다. MySQL에서 페이징 쿼리는 일반적으로 LIMIT, OFFSET 구문을 사용하여 작성합니다.select *from subscribelimit 500offset 0;LIMIT, OFFSET 방식 페이징 쿼리의 단점 및 해결방안LIMIT, OFFSET 방식의 페이징 쿼리는 뒤에 있는 데이터를 읽을 수록 점점 응답 시간이 길어질 수 있는데요. 왜냐하면, DBMS는 지정된 OFFSET 수만큼 모든 레코드를 읽은 이후에 데이터를 가져오기 때문입.. 2025. 7. 31.
낙관적 락과 비관적 락 낙관적 락과 비관적 락은 데이터베이스 트랜잭션에서 동시성 제어를 위한 주요 기법입니다. 데이터 무결성을 유지하면서 여러 트랜잭션이 동시에 데이터에 접근할 때 발생할 수 있는 충돌을 해결할 때 사용됩니다.낙관적 락(Optimistic Lock) 은 데이터 충돌이 적을 것으로 가정하고, 데이터를 읽을 때 락을 설정하지 않고 트랜잭션이 데이터를 수정할 때 충돌이 발생하지 않았는지 확인하는 방식입니다. 보통 version과 같은 별도의 구분 컬럼을 사용해서 데이터가 변경되었는지 확인하며, 충돌이 발생하면 데이터베이스가 아닌 애플리케이션에서 직접 롤백하거나 재시도 처리를 해야 합니다.비관적 락(Pessimistic Lock) 은 데이터 충돌이 많을 것으로 가정하고, 트랜잭션이 시작될 때 공유락(Shared Loc.. 2025. 7. 30.
[DB] JOIN과 LEFT JOIN, 언제 무엇을 써야 할까요? (초보 개발자 필독) 교집합과 합집합 개념으로 이해하는 SQL/JPA 조인 전략데이터베이스를 다루다 보면 여러 테이블을 엮어 원하는 데이터를 조회해야 할 때가 많습니다. 이때 JOIN은 필수적으로 사용되는 기능입니다.JOIN과 LEFT JOIN은 가장 기본이지만, 많은 주니어 개발자분들이 언제 무엇을 써야 할지 헷갈려 하는 개념입니다. 이 글을 통해 두 조인의 차이점을 명확히 이해하고, 어떤 상황에 사용해야 하는지 알아보겠습니다.1. join (INNER JOIN) - "두 데이터가 모두 있어야만!"join은 SQL의 INNER JOIN과 같습니다. 두 테이블에 모두 데이터가 존재하는 행만을 가져오는, 즉 교집합을 구하는 조인입니다.개념 비유: 소개팅 매칭join을 1:1 소개팅 자리에 비유할 수 있습니다. 회원 테이블과 주.. 2025. 7. 15.
데이터베이스 정규화 데이터베이스에서 정규화(Normalization) 는 테이블을 정리하여 중복 데이터를 최소화하고, 데이터 무결성을 보장하는 과정을 의미합니다. 이를 통해 데이터 저장 용량을 줄이고, 삽입·갱신·삭제 이상(Anomaly) 현상을 해결할 수 있습니다. 정규화는 여러 단계가 존재하며, 대표적으로 1정규화(1NF), 2정규화(2NF), 3정규화(3NF), BCNF가 있습니다.정규화 단계1 정규화(1NF) 는 테이블 컬럼의 값이 원자값(Atomic Value) 을 가지도록 정리하는 것을 의미합니다.2 정규화(2NF) 는 1 정규화를 진행한 테이블에서 완전 함수 종속을 만족할 수 있도록 테이블을 분해하는 것인데요. 쉽게 표현하자면, 기본 키의 일부에만 종속된 속성이 없도록 분해하는 것을 의미합니다. A 속성을 통해.. 2025. 6. 23.
728x90
반응형