본문 바로가기
공부/Database

Database 경험

by 무심한고라니 2024. 11. 5.

많지 않은 IT 경력이지만, 이것저것 몇 가지 관계형 DB(정확히 말하면 DBMS..)를 다뤄보았다. 사실 기껏해봐야 CRUD를 주로 한 거라 구글 검색, 조금 복잡한 건 CHAT GPT로 작성해서 사용했으나 뒤늦게 공부도 할 겸 모르면 모르는대로 조금 남겨본다. 사실 몇 군데 면접을 가면 요즘 때로 DB 차이를 묻기도 해서...

 

  1. Oracle
    • 맨 첫 직장에서 주로 사용했었고, 대기업에서 주로 사용한다고 한다(최근 대기업에서는 사용하진 않긴 했는데..).
    • 하나의 인스턴스 내 여러 데이터베이스가 아닌 전체 데이터베이스가 존재한다(따라서 쿼리 작성 전에 USE 명령어 사용할 필요 없다). 다만 타 DB와 다르게 User(물리적 컨테이너)와 Schema 개념이 있는데[1][2], 사용자는 스키마를 기준으로 작업을 하기에 특정 스키마의 테이블을 참조하려면 USER.TABLE 형식[3][4]으로 접근한다.
    • 표준 SQL을 상당히 준수하나 자체 확장 기능(ex. ROWNUM, CONNECT BY 연산자)이나 PL/SQL 같은 오라클 고유 기능도 많이 제공한다.
    • 지금도 이 기능들을 다루진 못하지만 당시 처음 듣는 용어들이 많았다. 힌트를 작성한다느니, 링크를 생성하라느니. 조회 시 인덱스를 칼럼을 태워야 한다는 것도 이때 알았다(이후로 는 게 없구만..).
  2. MySQL
    • 주로 공공기관(구청 등)과 대기업 프로토 타입 프로젝트에서 사용했던 경험이 있다.
    • 오라클과는 달리 여러 데이터베이스(물리적 컨테이너)를 하나의 인스턴스에서 관리할 수 있는 구조기 때문에, 데이터베이스 사용하기 위해 사용자가 특정 데이터베이스를 선택해야 한다(USE database_name). 이후 실행되는 쿼리는 해당 데이터베이스 내에서만 적용된다.
    • 표준 SQL을 준수하려고 노력하나, 일부 기능에서는 차이가 있다(ex. LIMIT 구문, AUTO_INCREMENT).
  3. PostgreSQL
    • 가장 최근 대기업 프로젝트에서 사용했다. DBeaver를 사용했던 거 같고.. 사용 이유는 클라우드 지원이었나.. 뭔진 모르겠다..
    • MySQL과 같은 데이터베이스 개념(하나의 인스턴스 안 여러 데이터베이스 관리)을 사용하며, SQL 문법도 매우 유사하다. 다만 좀 더 SQL 표준을 따른다는 특징이 있다.
  4. MSSQL(SQL Server)
    • 이것도 어떤 대기업에서 내부 프로젝트 DB로 사용했었는데.. 또 경험할 일이 있을까?

 

추가적으로 관계형 데이터베이스의 계층 구조에 대해 정리한 글이 있어 남긴다.

 

 

----

1. 오라클 DB에서 User와 Schema 개념의 차이점

  • User는 데이터베이스에 접근할 수 있는 사용자 계정을 의미하고, Schema는 해당 사용자가 소유하는 데이터베이스 객체들의 집합
  • User는 객체를 소유하는 주체이며, Schema는 그 소유한 객체들이 모여 있는 논리적 컨테이너

2. Oracle에서 사용자와 스키마의 차이점

3. Schema는 실질적으로 User의 이름을 갖고 있기 때문에, 일반적으로 User와 Schema는 동일한 이름을 가진다.

  • 오라클에서는 하나의 데이터베이스(인스턴스) 내에서 여러 스키마를 관리하므로, 특정 스키마 테이블에 접근할 때는 SCHEMA.TABLE 형식으로 지정한다.

4. 오라클 내부 구조(논리 구조)는 테이블 스페이스, 세그먼트, 익스텐트, 오라클 블록으로 구성되어 있다고 한다. 실제로 쿼리 작성 시 사용자 생성하면, 해당 사용자(세션)가 새로운 테이블을 생성할 때 기본 테이블 스페이스에 데이터를 저장하게 된다. 테이블 생성시 명시적으로 테이블 스페이스를 지정하고 싶다면 다음과 같다.

-- HR 사용자가 hr_data 테이블 스페이스에 employees 테이블 생성
CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    hire_date DATE
)
TABLESPACE hr_data;

-- 조회 시
SELECT * FROM hr.employees;

 

 

'공부 > Database' 카테고리의 다른 글

조회 성능  (0) 2024.11.05
JOIN과 Sub-Query의 차이  (0) 2021.04.17
LISTAGG Function  (0) 2021.01.12
서브쿼리 사용 예시  (0) 2020.12.12

댓글