DB

[DB] MSSQL과 MYSQL 차이점

DungDung.dev 2023. 12. 10. 21:07

 

 원래 mssql을 사용하며 sp(저장 프로시저)로 비즈니스 로직을 관리했었는데 이직하면서 mysql을 사용하게 되었습니다.

 

 그저 편리한 mssql만 사용하다가 mysql로 던져져 생각지도 못한 이슈들이 발생하고 msslq과는 설계부터 달라지는 것을 느끼며 다시금 저의 부족한 DB지식을 느꼈습니다. 

 

 제가 겪은 이슈들은 파일 저장 방식의 차이 때문에 발생하는 다른 DB의 접근 방식 차이트랜잭션 방식, 동시성 이슈 등이 있었는데 이 부분에 대해서 각각 다른 게시글로 정리해 보고 우선 mssql과 mysql의 차이부터 조사해 보겠습니다.

 

 

  • 공통점
    • mssql(Microsoft SQL Server)과 MySQL은 둘 다 RDBMS(관계형 데이터베이스 관리 시스템)이며 열과 행으로 나눠진 표준 관계형 데이터베이스 테이블 모델을 사용하고, sp트리거를 지원하지만 내부 로직은 상당한 차이가 있습니다.

 

  • 차이점
    • 금액과 환경
      • mssql과 mysql의 선택에 가장 중요한 요소는 금액과 환경이라고 생각합니다. mssql의 라이선스 비용을 생각하면 어쩔 수 없이 mysql을 선택하게 되는 경우도 많은 것 같습니다. 그리고 OS의 환경을 맞추려면 대부분 windows는 mssql을, linux는 mysql을 선택하게 됩니다. (mysql은 Oracle사에 인수하면서 5.5 버전을 발표하였고 그 후 5.7 버전에서 바로 8.0 버전으로 업그레이드되었습니다.  최근 AWS Aurora에서 MySQL 5.7 버전의 지원을 종료한다고 하니 되도록 8.0 이후 버전을 사용하는 걸 추천합니다.)
    • 언어
      • mssql은 T-SQL(Transact-SQL)이라는 프로지서 및 함수 언어를 사용하지만 myssql은 일반적인 SQL언어를 사용합니다. 기본 CRUD 문법은 비슷할 수 있지만 sp를 관리하려면 내부적인 차이점을 잘 파악해야 합니다.
    • 물리적인 폴더 구조
      • 물리적인 폴더 구조에 대해서 차이점이 있기 때문에 이에 따라 차이점이 파생됩니다.
      • 만약 mssql과 mysql에 각각 DB1, DB2라는 데이터베이스가 있고 그 DB에 각각 user, admin, payment라는 테이블이 존재한다면 mssql과 mysql의 폴더 구조는 아래와 같아집니다.
        # MSSQL
        C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB1.mdf
        C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB1.ldf
        
        C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB2.mdf
        C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\DB2.ldf
        
        # MYSQL
        C:\ProgramData\MySQL\MySQL Server 8.0\data\DB1\
        C:\ProgramData\MySQL\MySQL Server 8.0\data\DB2\
        mssql은 DATA폴더 안에 .mdf라는 데이터를 저장하는 파일과 .ldf라는 로그를 저장하는 파일이 DB1과 DB2가 함께 존재하고 mysql은 data폴더 밑에 각 DB별로 폴더가 나눠져 있는 것을 볼 수 있습니다.
      • 저는 사용하면서 이 부분에 대해서 가장 큰 차이점을 느꼈는데 mssql은 각 데이터베이스를 명시적으로 지정하지 않고도 다른 데이터베이스의 테이블에 접근할 수 있습니다. 반면 mysql은 각 데이터베이스 간에 명시적으로 스위칭이 필요합니다. 
    •  스토리지 엔진
      • mssql은 직접 엔진을 선택할 수 없지만 mysql은 InnoDb, MyISAM 등 서비스의 성격에 따라 여러 엔진을 선택할 수 있습니다. (대표적으로 InnoDb: 트랜잭션 지원, 대용량 데이터, MyISAM: 트랙잭션 미지원, Read only 기능에 효과적)
    • 그 외에 데이터 타입과 세부적인 기능들에 따라 차이점이 있을 수 있습니다.

 

 

 

 개인적으로 .net을 좋아하는 입장에서 mssql이 좋지만 회사는 라이선스 비용과 개발 OS(linux) 때문에 mysql을 많이 사용하는 것 같습니다. 하지만 .net과 mssql의 연결성, mssql에서 시도할 수 있는 다양한 기능(예전에 mssql에서 외부 API를 호출하는 것도 프로젝트에 포함되었는데 DB에서 이런 기능이 가능하다는 것에 재미를 느꼈습니다.)을 포기하고 싶지는 않아 항상 마음속에는 mssql을 품고 있습니다.

 DBA분이 계시면 개발자가 직접 DB를 수정할 일은 없지만 저에게 DB는 항상 부족함을 느끼는 분야입니다. 부족하거나 질문사항이 있다면 언제나 코멘트 남겨주세요! 감사합니다.