이번 시간에는 서버에 접속한 상태에서 실제로 간단한 쿼리를 작성하고 결과를 확인하는 기본 쿼리 문법 규칙에 대해 알아보겠습니다.  

​1. 첫 번째 쿼리 작성하기 (SELECT)
​서버와 연결된 상태에서 mysql> 프롬프트가 보인다면, 서버의 버전 정보와 현재 날짜를 조회하는 쿼리를 직접 입력해 볼 수 있습니다.  

mysql> SELECT VERSION(), CURRENT_DATE;


+-----------+--------------+
| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 5.8.0-m17 | 2015-12-21   |
+-----------+--------------+
1 row in set (0.02 sec)


2. 쿼리 작성 시 꼭 기억해야 할 기본 규칙

  • 세미콜론(;) 사용: SQL 쿼리는 일반적으로 문장 끝에 세미콜론을 붙여야 서버로 전송되어 실행됩니다
  • 대소문자 무시: SQL 키워드는 대소문자를 구분하지 않습니다. 예를 들어 SELECT, select, SeLeCt 모두 동일하게 동작합니다.  
  • 간단한 계산기 활용: 테이블이 없더라도 MySQL을 가벼운 계산기처럼 사용할 수 있습니다.  
mysql> SELECT SIN(PI()/4), (4+1)*5;


3. 여러 문장 동시 실행 및 멀티라인 입력

  • 한 줄에 여러 쿼리 실행: 세미콜론을 기준으로 여러 개의 SQL 문장을 한 줄에 연속해서 실행할 수 있습니다.  
mysql> SELECT VERSION(); SELECT NOW();

  • 여러 줄에 걸쳐 입력하기: 쿼리가 길어질 경우 엔터를 쳐도 세미콜론이 나오기 전까지는 -> 프롬프트가 대기하며 입력을 계속 받을 수 있습니다.  
  • 입력 취소(\c): 쿼리를 입력하던 중 잘못되어 취소하고 싶을 때는 \c를 입력하면 언제든지 메인 프롬프트로 돌아갈 수 있습니다.  



안녕하세요! 오늘부터 MySQL 실전 마스터 및 블로그 연재 1일차를 시작하겠습니다.

첫 번째 시간으로는 전 세계적으로 인기 있는 오픈소스 관계형 데이터베이스 관리시스템(RDBMS)인 MySQL의 정의와 아키텍처 구조에 대해 알아보겠습니다.  


​1. MySQL이란 무엇인가?
​MySQL은 데이터를 구조화된 형식으로 저장, 관리, 그리고 검색할 수 있게 해주는 오픈소스 관계형 데이터베이스 관리시스템(RDBMS, Relational Database Management System)입니다.  

  • ​기본 특징: SQL 쿼리, 인덱싱, 트랜잭션, 그리고 강력한 보안 기능을 지원합니다.  

  • ​활용 분야: 웹 애플리케이션, 엔터프라이즈 소프트웨어, 모바일 앱 개발 등 다양한 규모의 시스템에서 널리 사용됩니다.  

  • ​확장성: 하드웨어를 업그레이드하는 수직적 확장(Vertical Scaling)뿐만 아니라, 클러스터에 서버를 추가하는 수평적 확장(Horizontal Scaling)을 모두 지원하여 대용량 데이터를 처리할 수 있습니다.  



​2. MySQL의 클라이언트-서버 아키텍처
​MySQL은 전형적인 클라이언트-서버(Client-Server) 모델을 기반으로 동작합니다.  

  • ​서버 (mysqld): 데이터를 실제로 저장하고 관리하며, 클라이언트의 요청을 받아 처리하는 핵심 엔진입니다.  
  • ​클라이언트 (mysql 터미널 모니터 등): 사용자가 접속하여 SQL 쿼리를 입력하고 결과를 조회하기 위한 인터페이스 프로그램입니다.  

​사용자가 클라이언트 프로그램을 통해 접속한 뒤, 서버로 쿼리를 전송하면 서버가 이를 실행하고 결과를 표(Tabular) 형태로 화면에 출력해 줍니다.  


​3. 간단한 실습: 버전과 현재 날짜 확인하기
​MySQL 서버에 정상적으로 접속했다면, 서버의 버전 정보와 현재 날짜를 반환하는 가장 기본적인 쿼리를 실행해 볼 수 있습니다.  

SELECT VERSION(), CURRENT_DATE;

결과 :

| VERSION() | CURRENT_DATE |
+-----------+--------------+
| 8.0.13    | 2026-09-23   |
+-----------+--------------+
1 row in set (0.02 sec)




쿼리 작성 시 참고할 점

  • ​세미콜론(;): SQL 문장은 일반적으로 세미콜론으로 끝맺음을 해야 서버로 전송되어 실행됩니다.  
  • ​대소문자 무시: SQL 키워드(예: SELECT, select, SeLeCt)는 대소문자를 구분하지 않습니다.  
  • ​결과 형태: 결과는 행(Row)과 열(Column)로 이루어진 표 형식으로 반환되며, 처리 소요 시간과 함께 출력됩니다.  


​마무리하며
​오늘은 MySQL이 무엇인지, 그리고 데이터를 주고받는 클라이언트-서버 구조의 기본 개념을 가볍게 살펴보았습니다.
다음 시간에는 [2강. 서버 접속, 인증 및 종료] 주제로 찾아오겠습니다.

​




안녕하세요.

 

업무를 수행하다 보면 시스템의 가용성과 연속성을 보장하기 위한 인프라 아키텍처 설계를 긴밀하게 논의하게 됩니다.

그 중에서도 가장 흔히 비교되는 전통적인 HA(Active-Standby) 구조와 Oracle RAC(Active-Active) 구조의

핵심 차이점과 작동 원리를 정리합니다.

실무 설계 검토 시 명확한 기준을 제시하는 데 도움이 되기를 바랍니다.

1. 개념 정의

① HA (High Availability, 고가용성) 구조

  • 정의: 시스템이 장애 없이 오랜 기간 지속해서 정상 가동될 수 있도록 하는 모든 아키텍처적 지향점을 뜻합니다.
  • 실무적 의미: 일반적으로 RDBMS 환경에서 HA라고 하면 OS 레벨의 클러스터웨어(예: IBM HACMP, HP Serviceguard, Veritas Cluster Server 등)를 이용한 Active-Standby(주-예비) 형태의 이중화 구조를 의미하는 경우가 많습니다.

② Oracle RAC (Real Application Clusters)

  • 정의: Oracle 사가 독자적으로 개발한 공유 디스크 기반의 데이터베이스 클러스터링 기술입니다.
  • 실무적 의미: 여러 대의 서버(Node)가 하나의 동일한 물리 데이터베이스(Storage)를 공유하며, 모든 서버가 동시에 활성화되어 서비스를 처리하는 Active-Active(주-주) 구조를 의미합니다.

2. 핵심 아키텍처 차이점 비교

두 구조의 결정적인 차이는 "두 대의 서버가 동시에 하나의 데이터에 접근하여 서비스를 처리할 수 있는가?"와 "장애 조치(Failover) 시 데이터 중단 시간이 발생하는가?"에 있습니다.

① 데이터 처리 방식 (Active 상태)

  • 전통적 HA (Active-Standby): 평소에는 Active 서버 1대만 스토리지를 마운트하여 서비스를 처리합니다. Standby 서버는 대기 상태로 유지되며 데이터베이스가 켜져 있지 않습니다.
  • Oracle RAC (Active-Active): 2대 이상의 서버가 물리 디스크를 공유(Shared Disk)하며 동시에 데이터베이스 인스턴스를 기동합니다. 사용자는 어떤 서버로 접속하든 동일한 데이터를 조회하고 수정할 수 있어 부하 분산(Load Balancing)이 자연스럽게 이루어집니다.

② 장애 발생 시 조치 방식 (Failover)

  • 전통적 HA (Active-Standby): Active 서버 장애 시, Standby 서버가 스토리지 소유권을 넘겨받고(Volume Takeover), IP를 전환한 뒤, 데이터베이스 엔진을 처음부터 부팅(Startup)하는 과정을 거칩니다. 이 과정에서 반드시 몇 분간의 서비스 중단(Downtime)이 발생합니다.
  • Oracle RAC (Active-Active): 1번 서버가 죽더라도 2번 서버는 이미 켜져 있고 데이터베이스를 서비스 중인 상태입니다. 죽은 서버의 세션만 살아있는 서버로 즉시 이동하므로 사용자는 단 몇 초간의 지연(Failover)만 느낄 뿐 서비스가 끊기지 않습니다.

③ 데이터 동기화와 캐시 퓨전 (Cache Fusion)

  • 전통적 HA: 데이터를 동기화할 필요가 없습니다. 한 번에 한 서버만 디스크를 쓰기 때문입니다.
  • Oracle RAC: 여러 서버가 동시에 같은 데이터를 수정하려 하면 데이터 정합성이 깨질 수 있습니다. Oracle은 이를 해결하기 위해 서버 간 고속 전용 네트워크(Interconnect)를 통해 메모리(SGA) 상에서 데이터를 주고받는 캐시 퓨전(Cache Fusion) 기술을 사용합니다. 디스크 I/O를 거치지 않고 메모리 간 동기화를 수행하여 병목을 최소화합니다.

3. 요약 및 비교표

비교 항목 전통적 HA (Active-Standby) Oracle RAC (Active-Active)
운영 방식 1대 운영, 1대 대기 모든 서버 동시 운영 (2대 이상 확장 가능)
부하 분산 불가능 (대기 서버 자원 낭비) 가능 (동시 처리로 성능 확장 가능)
Failover 시간 수 분 소요 (DB 재부팅 및 복구 시간 필요) 수 초 소요 (이미 기동된 서버로 세션 이동)
스토리지 연결 한 번에 한 서버만 마운트 가능 모든 서버가 동시에 공유 마운트
구축 비용 상대적으로 저렴 (표준 OS 기능 활용) 매우 고가 (Oracle RAC 라이선스 필요)

실무용 아키텍처 가이드 

두 구조의 차이점이나 선택 기준을 묻는다면 기술적 메커니즘을 엮어 아래와 같이 정제된 언어로 답변하시는 것이 좋습니다.

Q. 전통적인 HA 구조와 Oracle RAC 구조의 가장 큰 차이점과 설계 시 고려사항은 무엇인가요?

"가장 본질적인 차이는 서비스의 연속성과 자원 효율성에 있습니다.

전통적인 Active-Standby HA 구조는 장애 시 Standby 서버가 스토리지 권한을 넘겨받고 데이터베이스를 재부팅해야 하므로 수 분간의 다운타임이 불가피하며, 대기 서버의 자원이 낭비된다는 단점이 있습니다.

반면 Oracle RAC는 공유 디스크 아키텍처를 기반으로 모든 노드가 동시에 서비스를 처리하는 Active-Active 구조입니다. 한 노드에 장애가 발생해도 이미 기동 중인 타 노드로 즉시 세션이 Failover되어 다운타임을 최소화하고, 평시에는 부하 분산을 통해 자원을 효율적으로 활용할 수 있습니다.

다만, RAC는 고가의 라이선스 비용이 발생하며, 노드 간 데이터 정합성을 맞추기 위한 인터커넥트(Cache Fusion) 부하가 존재하므로, 애플리케이션 설계 시 동시다발적인 동일 블록 수정 패턴을 제어하는 튜닝 전략이 동반되어야 합니다."

+ Recent posts