분류 전체보기 38

MySQL 아키텍처

MySQL의 논리적 아키텍처 MySQL의 논리적인 뷰는 아래와 같은 그림과 같이 크게 세 개의 계층으로 나타낼 수 있다. 최상위 계층인 클라이언트부터 최하위 계층인 스토리지 엔진까지는 다음과 같이 역할이 분담되어 있다. - 첫 번째 계층 ( 클라이언트 ): 네트워크 기반 클라이언트 / 서버 도구 또는 서버에 필요한 연결 처리, 인증, 보안. - 두 번째 계층 ( 파서, 옵티마이저 등 ): 쿼리 파싱, 분석, 최적화 및 모든 기본 제공 함수 등 MySQL의 대부분의 지능적인 부분. - 세 번째 계층 ( 스토리지 엔진 ): MySQL에 데이터를 저장하고 검색하는 역할. 서버는 스토리지 엔진 API를 통해 통신하고, 이 API는 스토리지 엔진 간의 차이를 숨겨서 쿼리 계층에서는 그 차이를 느끼지 못함. "트랜..

MySQL 성능 최적화 (실비아 보트로스, 제레미 틴리) 리뷰를 시작하기 전

2년간 회사를 다니면서, MySQL 데이터베이스와 관련한 다양한 이슈는 항상 내 곁을 따라왔다. 대게 이슈는 다음과 같은 형태를 가진다. 1. 슬로우 쿼리 최적화 이슈 2. 트랜잭션과 그 격리 레벨에 따른 동시성 이슈 3. 데이터 베이스이 리소스 관리 이슈 - 커넥션, CPU, 메모리 중 하나가 부족하여, 라이브 서비스에 발생한 장애가 그 예다. 위와 같은 이슈를 겪으면서 내가 가졌던 생각을 나열하면, 다음과 같다. 1. 데이터 베이스는 서버가 갖는 불가피한 외부 의존성이기에, 데이터 베이스의 장애는 서비스에 치명적일 수 밖에 없다. 2. 그렇기에, HA와 같이 장애가 발생했을 때의 방어 조치들도 중요하지만, 장애를 피할 수 있다면 최대한 피하는 것이 필요하다. 정리하면, 데이터 베이스의 선제/후속 조치..

Pace 회고

1. 개요 이전 회사를 다니며 진행했던 SaaS 프로젝트에 대해 회고해보고자 한다. 1) Saas 프로젝트란? 더보기 SaaS(Software as a Service)는 클라우드 기반의 소프트웨어 제공 모델로, 클라우드 제공업체가 클라우드 애플리케이션 소프트웨어를 개발 및 유지 관리하고, 자동 소프트웨어 업데이트를 제공하고, 인터넷을 통해 Pay-as-you-Go 방식으로 고객에게 소프트웨어를 제공합니다. 출처: https://www.oracle.com/kr/applications/what-is-saas/ 쉽게 생각하면, 로컬한 소프트웨어를 클라우드 형식으로 제공하는데에 그 의의가 있다. 2) 왜 SaaS를 사용할까? 내가 생각하는 SaaS의 가장 큰 장점은 '접근성'에 있는 것 같다. 우선 로컬한 소프..

Etc/Experience 2022.05.14

SQL Injection ( SQL 주입 )

1. 개요 평화롭게 개발을 하고 있던 어느 날 .. 한 유저로부터 게임 접속이 되지 않는다는 문의 메일을 받게 된다. 빠르게 패킷 로그를 확인해보았고, 유저가 메일을 보낸 시간대에 DB 구문 에러가 발생한 패킷을 확인할 수 있었다. 2. 원인 원인은 바로 .. SQL Injection ....! 유저가 계정을 변경하면서, ( 실수인지 아닌지는 모르겠지만 ) 홑따옴표를 넣은 것이다. (예) user@naver.com' 확인해보니, 로그인 로직 상에서 Raw query를 사용하는 부분이 있었다. 여기서 injection에 대한 처리를 따로 해주지 않아서 발생한 문제였던 것이다. 3. 해결 1) 우선 다른 Repository에서도 Injection 문제가 발생하는지 확인해보았다. 그 결과, Sequelize의..

Database 2022.05.14

아키텍처

MySQL 서버의 구조는 다음과 같이 나누어 생각할 수 있습니다. - MySQL 엔진: 머리 역할 - 스토리지 엔진: 손발 역할 MySQL 엔진 아키텍처 My SQL 전체 구조 MySQL 서버는 다른 DBMS에 비해 구조가 상당히 독특합니다. 이 구조로 인해 엄청난 혜택이 있기도 하지만, 이상한 곳에서 문제가 되기도 합니다. MySQL은 다른 DBMS와 마찬가지로 대부분의 프로그래밍 언어에서 접근 방법을 모두 지원하고 있습니다 ( C/C++, PHP, JAVA, Python, Ruby 등 ). a) MySQL 엔진 MySQL 엔진은 클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 위한 옵티마이저가 중심을 이룹니다. b) 스토리지 엔진 My..

Database/Real MySQL 2022.05.07

사용자 및 권한

MySQL의 사용자 계정은 단순히 사용자의 아이디 뿐 아니라 해당 사용자가 어느 IP에서 접속하고 있는지도 확인합니다. MySQL 8.0부터는 권한을 묶어서 관리하는 역할의 개념이 도입됐기 때문에 각 사용자의 권한으로 미리 준비된 권한 세트를 부여하는 것도 가능합니다. 데이터베이스의 보안은 중요하기에, 반드시 계정의 식별 방식과 권한, 역할에 대한 기본적인 내용을 숙지해야 합니다. 사용자 식별 MySQL은 다른 DBMS와 달리 사용자의 접속 지점(클라이언트가 실행된 호스트명이나 도메인 또는 IP주소)도 계정의 일부가 됩니다. → 계정을 언급할 때는 항상 아이디와 호스트를 함께 명시해야 한다. (예) svc_id@127.0.0.1 호스트가 함께 명시되기 때문에, 위 아이디로 MySQL서버에 접속을 하면, ..

Database/Real MySQL 2022.05.07

MySQL 설치와 설정

MySQL 서버 설치 1) 버전 선택 가능한 한 최신 버전을 설치하는 것이 좋습니다. MySQL 8.0 버전이라면 MySQL 8.0.15와 8.0.20 사이의 버전부터 시작하는 걸 권장합니다. 커뮤니티 에디션과 엔터프라이즈 에디션 사이에 기능적인 차이는 없습니다. 다만, 기술 지원의 차이만 존재합니다. ( 이런 상용화 방식을 오픈 코어 모델이라고 합니다 ) 2) 설치 설치는 MySQL 사이트에서 DMG파일로 진행합니다. ( mac 기준 ) 저 같은 경우, Homebrew를 이용해 설치를 했습니다. brew install mysql 설치 버전에 x86과 ARM이 있는데, 두 가지의 차이는 뭘까? x86과 ARM의 차이는 사용하는 CPU의 아키텍처. 일반적으로 데스크탑에서는 x86을 주로 사용하고 스마트폰에..

Database/Real MySQL 2022.05.06

소개

MySQL의 시작 - MySQL은 스웨덴의 TcX라는 회사의 터미널 인터페이스 라이브러리인 UNIREG로부터 시작하였습니다. TcX에서 몬티와 데이빗을 중심으로 개발 시작합니다. - Oracle에 인수된 후, 시장에서 사라질 것이라는 사람들의 예상과는 달리 안정성과 성능 개선에 집중하면서 MySQL 8.0부터는 상용 DBMS가 가지고 있는 기능들이 장착되기 시작하였습니다. MySQL의 경쟁력 - 오라클과 비교했을 때, MySQL의 경쟁력은 당연히 가격이나 비용에 있습니다. - 최근 컴퓨터 시장의 변화는 방대한 데이터량을 산출하고 있는데, 이를 감당하기에 오라클 RDBMS는 비용이 많이 듭니다. - 페이스북 DBA는 이렇게 말합니다. "페이스북이 가진 데이터를 모두 오라클 RDBMS에 저장하면 페이스북은 ..

Database/Real MySQL 2022.05.06