MSSQL 장단점 - MSSQL jangdanjeom

MSSQL 사용후기

"마이크로소프트에서 출시한 DBMS로 딱히 큰 장점은 못 느끼겠다."

장점

1. 마이크로스프트에서 출시한 DBMS로, .net, VS와 쉽게 연계가능

2. 설치가 쉽고 편하다.

3. 기본적으로 설치되는 sql server management studio가 사용하기 편하게 되어 있다.

단점

1. 기본적으로 auto commit이다. commit / rollback 하려면 추가적으로 타이핑을 해야한다 (BEGIN TRAN)

까먹고 안하다가 delete, update 하면 난감한 상황이 생길 수 있다.

2. 비용이 비싸다. 라고하지만 개인적으로는 무료버전만쓰거나 외주작업만 해서 실감해보지는 못했다.

3. microsoft 지원이 딱히 좋지 않다고 한다. 개인적으로 웬만한 이슈는 msdn이나 stackoverflow에서 해결을 해본지라 체감이 되지는 않는다.

총평

.net, VS와 쉽게 연계가능하다고는 하지만 딱히 막 추천하지는 않는다. oracle이나 maria DB등 좋은 대안이 있고, 사용자가 많아 커뮤니티가 활성화된 DBMS 제품을 쓰는쪽이 낫지 않을까 싶다. 혹은 자신에게 편한 DB를 쓰는게 좋은것 같다. 개인저으로 새로운 IT프로젝트를 하게 된다면, 비용이 부담스러울 경우 maria DB, 비용이 부담스럽지 않고 안정성을 원한다면 Oracle을 선택하겠다.

https://devscb.wordpress.com/2021/10/07/mssql-review/

Microsoft SQL Server는 소프트웨어입니다자주 사용되는 관계형 데이터베이스 관리 시스템 (RDBMS)의 한 종류. 이름에서 알 수 있듯이이 소프트웨어는 대규모 Microsoft 회사에서 개발되었으며 확장 성이 뛰어납니다. 모든 랩톱, 클라우드 서버 네트워크 등 모든 곳에서 Microsoft SQL Server를 사용하는 것이 목적입니다. 그러나이 확장 가능한 용어는 여전히 하드웨어 및 소프트웨어 요구 사항에주의해야합니다.

1989 년 첫 출시 이후Microsoft SQL Server는 데이터베이스 사용자가 선택했으며 여전히 널리 사용됩니다. 개발은 SQL Server 1.0의 첫 번째 버전부터 지금까지 매우 유망했습니다. 이 기능은 이제 RDBMS (관계형 데이터베이스 관리 시스템)뿐만 아니라 내장 된 비즈니스 인텔리전스 도구를 포함하여 그 이상의 기능을 수행 할 수 있으며 분석 및보고로도 사용할 수 있습니다.

Microsoft SQL Server 기능

대기업 제품 중 하나로물론 Microsoft는 Microsoft SQL Server의 존재가 데이터베이스 관리 세계에서 중요한 기능을합니다. 이름에서 알 수 있듯이이 소프트웨어는 쿼리 또는 SQL 명령을 사용하여 데이터베이스 관리를 수행합니다. SQL 또는 구조 쿼리 언어는 전 세계적으로 인정되는 컴퓨터 언어이며 데이터베이스에 저장된 데이터에 액세스하는 데 사용됩니다.

MSSQL 장단점 - MSSQL jangdanjeom

이 기능은 또한 활동에 매우 첨부됩니다많은 개발자 나 프로그래머가 Microsoft SQL Server를 사용하기 때문에 프로그래밍 세계에서는 모든 프로그래밍 언어가 아니더라도 Microsoft SQL Server가 있으면 데이터베이스 서버를 사용하는 프로그램이나 응용 프로그램을 개발하는 데 매우 도움이됩니다. Microsoft SQL Server에서 필요한 다른 기능 중 하나는 미러링 및 데이터베이스 클러스터링을 만드는 기능입니다.

Microsoft SQL Server의 강점과 약점

MSSQL 장단점 - MSSQL jangdanjeom

현재 Microsoft SQL Server가 시작되었습니다7 세대 이상이며 모든 유형의 컴퓨터에서 32 비트 및 64 비트 및 기타 여러 가지 장점을 사용할 수있는 것으로 입증되었습니다. 그러나 대기업의 제품 임에도 불구하고 Microsoft가이 애플리케이션에 결점이 없다는 것을 의미하지는 않습니다. 아래는 Microsoft SQL Server의 장점에 대한 설명입니다.

모든 버전의 Windows OS에서 매우 잘 작동

관리 및 관리된다는 점을 고려하면 매우 합리적입니다.Microsoft에서 개발 한 Microsoft SQL Server를 포함하여 실행되는 모든 제품은 Windows OS에서 잘 작동합니다. Windows XP, Windows Vista, Windows 7, Windows 8 및 Windows 10부터 Microsoft SQL Server를 설치할 수 있으며 매우 잘 실행될 수 있습니다.

데이터 클러스터링 가능

데이터 클러스터링은 그룹화의 한 형태입니다여러 군집으로 데이터. 앞에서 언급했듯이 Microsoft SQL Server는 데이터 클러스터링 측면에서 이점이 있으므로 프로그래머 나 개발자에게 부가 가치가됩니다. 이 데이터 클러스터링을 사용하면 데이터베이스 관리 작업을 더욱 쉽게 수행 할 수 있습니다.

중앙 집중식 데이터베이스 제어

그런 다음 Microsoft SQL Server를 사용하여데이터베이스 관리는 중앙에서 수행됩니다. 이는 데이터베이스 처리 및 구현시 통신 누락 또는 오류 발생을 최소화합니다. 데이터베이스는 제어 센터로 하나의 컴퓨터 만 사용하기 때문입니다.

데이터베이스 백업을 할 수 있습니다

Microsoft SQL Server에서도구현 프로세스 중 중단이 발생하는 경우 예방 조치로서 데이터베이스 백업 기능을 제공합니다. 또한이 데이터베이스 백업 기능은 나중에 비슷한 시스템을 구축 할 경우에도 두 번 이상 사용할 수 있습니다. 데이터베이스를 다른 장치로 이동하는 프로세스도 크게 촉진됩니다.

데이터 복구 및 복원 기능이 있습니다

게다가 백업 기능이 밝혀졌습니다Microsoft SQL Server에는 데이터 복구 및 복원 기능도 있습니다. 데이터베이스에서 손상된 데이터 부분이있어 복구 및 복원을 수행 할 수있는 경우에 유용합니다.

위의 장점 외에도 지금까지 극복 할 수 없었거나 실제로 한계에 도달하지 못한 약점이 있습니다. 전체 설명은 다음과 같습니다.

Windows OS에서만 사용할 수 있습니다

LINUX 또는 MAC OS 사용자는지금까지는 모든 버전에서 Windows OS에서만 사용할 수 있기 때문에 Microsoft SQL Server 사용을 자제해야합니다. 이러한 결함으로 인해 Microsoft는 Microsoft SQL Server의 사용이 여전히 회사의 범위 내에 있기 때문에 Windows로 제한되도록 허용한다고 가정 할 수 있습니다.

구매 가격이 비싸다

실제로 Windows의 거의 모든 소프트웨어이 Microsoft SQL Server를 포함하여 상당히 높은 가격으로 책정되었습니다. 그러나 이것은 물론 고가의 가격으로 합리적인 상당한 기능과 매력적인 기능에 의해 지원됩니다.

제한된 프로그래밍 언어

Microsoft SQL Server는 이미 잘 알려져 있습니다.프로그래밍 언어와의 호환성이 있기 때문입니다. 따라서 Net 이외의 언어를 사용하는 데 익숙한 프로그래머 인 경우 Microsoft가이 소프트웨어를 .Net 언어의 구현에만 초점을 맞추도록 설계 한 것으로 보이므로 사용하기 어려움을 감수해야합니다.

대규모 데이터베이스에는 적합하지 않습니다

대기업의 이름을 지니고 있지만Microsoft 반 친구이지만 Microsoft SQL Server는 대규모 데이터베이스 사용을 지원할 수 없습니다. 실제로 지금까지는 Oracle Database만이 대규모 사용을 견딜 수있는 것으로 간주되어 아무도 경쟁 할 수 없었습니다.

이는 Microsoft SQL Server와 그 기능, 장점 및 단점에 대한 이해에 대한 설명입니다. 희망적으로 유용하고 이해하기 쉬운!

금백조의 개발 블로그

서론

회사에서 개발을 하면서 프로시저로 많은 비즈니스 로직을 구현했습니다. 그동안 프로시저를 사용해본 경험을 기반으로 장단점, 사용 예시에 대해 정리해볼까 합니다. 장단점 같은 경우는 네이버 기술 블로그 중 [백엔드 개발자를 꿈꾸는 학생개발자에게] 글에서 설명하는 내용을 참고하여 공감되는 부분 위주로 작성했습니다. (아래 링크 참고)


본론

저장 프로시저의 장점

1) 프로시저만 수정이 필요할 경우 애플리케이션을 배포하지 않고 프로시저만 배포하면 됩니다.

→ 즉 어플리케이션 코드 내에 SQL 로직이 포함되었을 경우 애플리케이션도 재배포 해야하지만 프로시저 내에 포함될 경우 프로시저만 수정하여 배포하면 됩니다.

2) 자연스럽게 프로시저에 인자를 추가하여 바인드 변수를 사용하게 되므로 SQL 하드 파싱을 걱정할 일이 없습니다.

 어플리케이션 코드에 SQL 작성을 아래와 같이 하는 코드들이 종종 보입니다.

[어플리케이션 레벨에서 작성된 안좋은 Dynamic SQL 예]

//strCOL1 : 입력마다 바뀌는 String 변수
String strSQL = "SELECT * FROM T1 WHERE COL1 = '" + strCOL1 + "'";

이 경우 strCOL1은 계속 변하는데 바인드 변수를 사용하지 않으므로 매번 DB에서 하드 파싱을 하게 됩니다. 라이브러리 캐시에 있는 SQL문을 제대로 활용하지 못하여 매번 하드 파싱이 일어나면 CPU 점유율이 높아져 성능이 악화되고 서비스 자체가 마비되는 경우가 생길 수도 있습니다. 그런데 아래의 SP_T 프로시저 처럼 @COL1 인자를 받아서 사용할 경우 자연스럽게 바인드 변수를 사용하여 매번 하드 파싱하지 않고 라이브러리 캐시에 있는 프로시저를 활용할 수 있게 됩니다. (소프트 파싱) 따라서 이 또한 하나의 장점이 아닐까 생각됩니다. (필자 본인 생각!)

[바인드 변수를 자연스럽게 사용한 저장 프로시저 예]

CREATE PROC [dbo].[SP_T](
             @COL1 NVARCHAR(10)
)
AS
    SELECT * FROM T1 WHERE COL1 = @COL1
GO

3) SQL문을 캡슐화하여 여러 곳에서 재사용할 수 있습니다.

프로시저 내부의 SQL문을 최적화하여 여러 곳에서 재사용할 수 있다면, 코드도 줄어들테고 최적화된 SQL문을 사용하므로 성능상에도 이점이 생길 것입니다.

저장 프로시저의 단점

1) 배포 절차가 따로 없으므로 이력(버전)관리가 힘듭니다.

2) 길게 작성된 프로시저의 경우 로직 파악이 어렵습니다. (feat. 스파게티 코드일 확률이 높습니다...)

3) 프로시저 내부에 연산이 포함될 경우 CPU 점유율이 높아지고 실행시간도 길어지므로 LOCK이 걸려있을 경우 병목이 될 확률이 높아지게 됩니다.

예제

[테스트 데이터 생성]

CREATE TABLE T1(
	 CODE_COL1 NVARCHAR(10)
	,CODE_COL2 NVARCHAR(10)
	,NUM_SEQ INT
	,NUM_COL NUMERIC(10,2)
)

INSERT INTO T1
SELECT 'A1','A2',1,1000000
UNION ALL
SELECT 'A1-1','A2-1',1,1100000
UNION ALL
SELECT 'A1-2','A2-2',1,1200000
UNION ALL
SELECT 'A1-3','A2-3',1,1300000
UNION ALL
SELECT 'B1','B2',2,2000000
UNION ALL
SELECT 'B1-1','B2-1',2,2100000
UNION ALL
SELECT 'B1-2','B2-2',2,2200000
UNION ALL
SELECT 'C1','C2',3,3000000
UNION ALL
SELECT 'D1','D2',4,4000000
UNION ALL
SELECT 'E1','E2',5,5000000

[사용 예]

--EXEC [dbo].[USER_STORED_PROCDURE_TEST] 'A%','1100000'
CREATE PROC [dbo].[USER_STORED_PROCDURE_TEST](
             @CODE_COL1 NVARCHAR(10)
	        ,@NUM_COL NUMERIC(10,2)
)
AS

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    Set	Nocount	On

    SELECT
		 CODE_COL1
		,CODE_COL2
		,NUM_SEQ
		,NUM_COL
	FROM
		T1
	WHERE
		CODE_COL1 LIKE @CODE_COL1
		AND NUM_COL >= @NUM_COL

GO

[실행 결과]

MSSQL 장단점 - MSSQL jangdanjeom

[같이 사용하면 좋은 옵션들]

[Set Nocount On]

SQL이 실행되면서 영향 받은 행들에 대해 메세지 출력되는 부분을 안나오도록 지워줌으로서 성능 향상에 도움을 줍니다. (위 실행 결과의 메세지 탭에 나오는 출력메세지) 특히 저장 프로시저가 CUD 작업을 하여 영행 받은 행 출력 메세지가 많이 나올 경우 좋습니다.

[SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED]

조회 저장 프로시저의 트랜잭션 격리수준을 전부 READ UNCOMMITTED로 하는 정책이 있다면, 테이블 각각에 (NOLOCK)을 적어줘야 합니다. 그러나 격리 수준을 프로시저에 설정하면 프로시저 내부에 있는 전체 쿼리에 적용되므로 SQL 코드도 줄이고 작성 시간도 줄일 수 있습니다. 다른 격리수준이 필요할 경우 아래를 참조하면 됩니다.

[MSSQL 트랜잭션 격리수준 설정]

SET TRANSACTION ISOLATION LEVEL
    { READ UNCOMMITTED
    | READ COMMITTED
    | REPEATABLE READ
    | SNAPSHOT
    | SERIALIZABLE
    }

결론

저장 프로시저는 특별한 배포 절차 없이 사용하기에는 좋으나 프로그램 규모가 커질수록 단점이 더욱 부각된다고 생각합니다. 그러나 비즈니스, 업무 특성, 여러 이해 관계에 따라 프로시저를 사용할 수 밖에 없는 경우도 있습니다. 또한 프로시저의 장점을 잘 살리면 개발 생산성을 올릴 수 있기에 상황에 맞게 적절히 사용하면 좋을 것으로 생각됩니다.

Reference

[네이버 기술 블로그] - [백엔드 개발자를 꿈꾸는 학생개발자에게]

https://d2.naver.com/news/3435170

[Microsoft SQL docs] - [트랜잭션 격리 수준]

https://docs.microsoft.com/ko-kr/sql/t-sql/language-elements/transaction-isolation-levels?view=sql-server-ver15 

트랜잭션 격리 수준 - SQL Server

트랜잭션 격리 수준

docs.microsoft.com

MSSQL 장단점 - MSSQL jangdanjeom