DBMS 2

DA, SQL, DB보안 등 실무자를 위한 위한 DB기술 바이블!

언어 기능 향상/결론

DBMS 2
MS-SQL 가이드
개발자를 위한 SQL Server 2005
언어 기능 향상/결론
작성자
admin
작성일
2021-02-18 14:31
조회
484

언어 기능 향상

Transact-SQL 기능 향상

Transact-SQL은 오랫동안 SQL Server의 모든 프로그래밍을 위한 기본 토대로 활용됐습니다. SQL Server 2005는 확장 가능한 데이터베이 스 응용 프로그램을 개발하는 데 필요한 여러 새로운 언어 기능을 제공합니다. 이처럼 향상된 기능에는 오류 처리, 새로운 재귀적 쿼리 기능, 새 SQL Server Database Engine 기능에 대한 지원 등이 포함됩니다. SQL Server 2005의 Transact-SQL 기능 개선을 통해 쿼리 작성의 표현 력이 향상되어 코드의 성능을 향상시키고 오류 관리 기능을 확장할 수 있습니다. Transact-SQL을 향상시키기 위한 지속적인 노력을 통해 SQL Server 내에서 Transact-SQL이 매우 중대한 역할을 담당한다는 확고한 신념을 확인할 수 있습니다.


재귀적 쿼리 및 CTE (Common Table Expression)

CTE(Common Table Expression)는 정의 구문이 참조할 수 있는 임시 명명된 결과 세트입니다. 간단한 형식 때문에 CTE를 비영구적 형식의 뷰와 매우 비슷한 파생 테이블의 향상된 버전으로 생각할 수도 있습니다. 파생 테이블과 뷰를 참조하는 것처럼 유사한 방식으로 쿼리의 FROM 구문에서 CTE를 참조합니다. 단 한번만 CTE를 정의하면 쿼리에서 여러 차례 참조할 수 있습니다. CTE의 정의에서 동일 배치에서 정의된 변수들을 참조할 수 있습니다. 뷰를 사용하는 것과 유사한 방식으로 INSERT, UPDATE, DELETE 및 CREATE VIEW 문에서 CTE를 사용할 수도 있습니다. 그러나 CTE의 진정한 위력은 바로 CTE가 이들에 대한 참조를 포함하고 있는 재귀적 기능에 있습니다. 쿼리 결과를 참조하고 싶지만, 데이터베이스에서 영구 뷰를 생성하고 싶지는 않을 때 마치 테이블처럼 파생 테이블을 사용할 수 있습니다. 그러나 파생 테이블에는 결정적으로 CTE와 구별되는 한계점이 존재합니다. 즉, 쿼리에서 파생 테이블을 한 번 정의하여 여러 차례에 걸쳐 사용할 수 없기 때문에 동일한 쿼리에서 여러 파생 테이블을 정의해야 한다는 것입니다. 또는 CTE를 한 번 정의하여 데이터베이스에서 영구화하지 않고 쿼리에서 여러 차례 사용할 수도 있습니다.

비재귀적 CTE는 사용자의 표현 능력을 향상시킵니다. 그러나 비재귀적 CTE를 사용하는 각 코드 부분의 경우에는 파생 테이블과 같은 다른 Transact-SQL 구문을 사용하여 동일한 결과를 얻을 수 있는 더 긴 코드를 작성할 수 있습니다. 이 경우는 재귀적 CTE와 다릅니다. CTE가 그 자체를 참조하는 경우 재귀적이라고 간주합니다. 재귀적 CTE는 최소 2개의 쿼리 부분(또는 구성원, 재귀적 쿼리 어법에서)에서 생성됩니다. 한 부분은 비재귀적 쿼리 부분이면서 AM(Anchor Member)으로서 참조되며 다른 부분은 재귀적 쿼리 부분이면서 RM(Recursive Member)으 로서 참조됩니다. 쿼리 부분들은 UNION ALL 연산자에 의해 단일 CTE로 조인됩니다.


PIVOT 및 UNPIVOT 연산자

SQL Server 2005는 쿼리의 FROM 구문에서 사용하는 PIVOT과 UNPIVOT이라는 2개의 새로운 관계형 연산자를 제공합니다. 이들 연산자 는 입력 테이블 반환식에서 일부 조작을 수행하여 결과로서 출력 테이블을 반환합니다. PIVOT 연산자는 행을 열로 회전시켜 계속해서 집계 를 수행합니다. 주어진 피벗 열을 기준으로 입력 테이블 반환식의 범위를 넓혀 피벗 열의 고유한 각각의 값에 대한 열이 있는 출력 테이블을 생성합니다.

PIVOT 연산자는 오픈 스키마 시나리오를 처리할 때와 크로스 탭 보고서를 생성할 때 유용합니다. 오픈 스키마 시나리오에서는 이전에 알려 지지 않았거나 각 엔터티 형식이 다른 속성 집합을 가진 엔터티를 유지합니다. 응용 프로그램 사용자들은 동적으로 속성을 정의합니다. 많은 열을 미리 정의하고 많은 NULL을 테이블에 저장하는 대신에 속성을 다른 열로 분리하여 각 엔터티 인스턴스에 관련 속성만 저장합니다. PIVOT을 사용하면 오픈 스키마는 물론, 행을 열로 회전하는 다른 시나리오에서 크로스 탭 보고서를 생성할 수 있어 계속해서 총계를 계산할 수 있으며 유용한 형식으로 해당 데이터를 표시할 수 있습니다.

UNPIVOT 연산자는 열을 행으로 회전시켜 PIVOT과 반대의 연산을 수행합니다. 이는 피벗 열을 기준으로 입력 테이블 반환 식의 범위를 좁힙니다. UNPIVOT 연산자를 사용하여 이전에 피벗된 데이터를 정상화할 수 있습니다.


APPLY 연산자

APPLY 연산자를 통해 SQL Server 2005에서는 관련 하위 쿼리에서 테이블 반환 함수를 참조할 수 있습니다. APPLY 관계형 연산자를 사용 하면 외부 테이블 반환식의 각 행에 지정된 테이블 반환 함수를 한 번 호출할 수 있습니다. JOIN 관계형 연산자를 사용하는 것과 유사한 방식 으로 쿼리의 FROM 구문에서 APPLY를 지정합니다. APPLY는 CROSS APPLY와 OUTER APPLY의 2가지 형식으로 나타납니다.

CROSS APPLY는 외부 테이블 반환식의 각 행에 테이블 반환 함수를 호출합니다. 테이블 반환 함수의 인수로서 외부 테이블의 열을 참조할 수 있습니다. CROSS APPLY는 테이블 반환 함수의 개별 호출로 반환된 모든 결과가 컴파일된 통합 결과 집합을 반환합니다. 테이블 반환 함수가 주어진 외부 행의 빈 집합을 반환하면 해당 외부 행은 결과로 반환되지 않습니다.

OUTER APPLY는 CROSS APPLY와 매우 유사하지만, 테이블 반환 함수가 빈 집합을 반환하는 외부 테이블의 행도 반환한다는 차이점이 있습니다. NULL은 테이블 반환 함수의 열에 해당하는 열 값으로 반환됩니다.


트랜잭션의 예외 처리

SQL Server의 초기 버전에서는 Microsoft Visual Basic 6.0과 마찬가지로 오류의 소지가 있는 모든 구문 다음에는 오류 처리 코드를 포함해 야 했으며 오류 검사 코드를 중앙화하려면 레이블과 GOTO 문을 사용해야 했습니다. 더욱이 데이터 형식 전환 오류와 같은 오류가 발생하면 배치가 종료되어 버리기 때문에 Transact-SQL에서 이를 발견할 수 없었습니다. SQL Server 2005은 Visual Basic .NET 및 C#에서와 마찬가 지로 TRY/CATCH Transact-SQL 구문 형식의 단순하면서도 강력한 예외 처리 메커니즘을 도입하여 이러한 많은 문제를 해결합니다. 이제 과거 구문, 수준, 배치 또는 트랜잭션의 종료를 야기했던 오류들을 발견하고 처리할 수 있게 됐기 때문에 이들 오류들은 더 이상 연결의 단절 을 야기할 만큼 심각한 문제가 아니라고 간주할 TRY/END TRY 블록 내에서 실행하려는 코드를 작성하여 BEGIN CATCH /END CATCH 블록에서 오류 처리 코드를 따르기만 하면 됩니다. TRY 블록은 해당 CATCH 블록이 있어야 합니다. 그렇지 않으면 구문 오류가 발생할 것입니다.


DDL 이벤트 알림

SQL Server 2005에서는 DDL과 시스템 이벤트를 포착하여 Service Broker 서비스로 이벤트 알림을 보낼 수 있습니다. 동시에 처리되는 트리 거와는 반대로 이벤트 알림은 비동기 실행을 지원하는 이벤트 메커니즘입니다. 이벤트 알림은 지정된 Service Broker 서비스로 XML 데이터 를 전송하고 이벤트 사용자는 비동기적으로 이 데이터를 사용합니다. 이벤트 사용자는 Service Broker Receive 문에서 WAITFOR 구문에 대한 확장을 사용하여 도착할 새 데이터를 기다릴 수 있습니다.


전체 텍스 풍부한 전체 텍스트 응용 프로그램에 대한 지원이 포함되어 있습니다. 카탈로깅 성능도 강화되어 카탈로그할 내용에 있어서 더 큰 유연성을 발휘할 수 있습니다. 쿼리 성능과 확장성도 획기적으로 향상되었으며 새로운 관리 도구가 전체 텍스트 구현에 대한 보다 큰 통찰력을 제공합니다.
향상된 보안 기능

SQL Server 2005는 보안, 개인 정보, 안정성 및 비즈니스 무결성 부문에서 고객 경험을 향상시킨다는 Microsoft의 Trustworthy Computing 프로젝트를 통해 상당한 성과를 거두었습니다. 2002년 1월 전사적으로 발표된 이 프로젝트에 따라 Microsoft는 이제 자사 제품 및 제품 배치 가 설계 단계에서, 기본 설정에서, 그리고 배치 단계에서도 안전하다는 것을 보장할 수 있도록 뒷받침하는 개발 프로세스를 따르고 있습니다. Microsoft SQL Server 개발 팀은 SQL Server 2005의 개발에 이러한 프로세스를 통합했습니다. 배포 후에도 보안 문제에 대한 고객 및 파트 너의 지속적인 커뮤니케이션을 지원합니다. 이에 따라 SQL Server 2005는 지금까지 출시된 모든 SQL Server 릴리즈 중 가장 광범위한 보안 기능을 포함하게 될 것입니다.

일반적으로 이러한 기능과 향상점들은 다음 3가지 부문으로 구분됩니다.


  • SQL 서버에 대한 사용자 액세스 제한 : SQL Server 액세스를 보다 강력하게 제어할 수 있는 것은 물론, 관리자가 정책을 통해 SQL Server 에 대한 액세스를 제어할 수 있는 메커니즘에 대한 투자를 최대한 활용할 수 있습니다.
  • 서비스 사용 금지 및 서비스 구성 제한 : 관리자가 지정한 범위에서 세분화된 수준으로 SQL Server 내 자원에 대한 액세스를 제한할 수 있으며 최소 권한 원칙을 위반하지 않고도 손쉽게 시스템을 관리할 수 있도록 보장합니다. 새 서버 설치 시 기본적으로 특정 서비스를 사용 할 수 없기 때문에 고객은 사용하려는 특정 추가 서비스를 결정하는 데 있어 더욱 능동적으로 개입하게 됩니다.
  • 새 기능에 대한 공격 범위 축소 : SQL Server의 설치 및 설정에서 출발하기 때문에 공격 범위가 최소화됩니다. 새로운 특징들은 제품 개발 주기 전반에 걸쳐 공격 범위를 줄일 수 있도록 보안 측면에 대한 검토 및 검증 작업을 수행하게 됩니다.

이러한 서버 보안과 관련된 주요 향상 기능 외에도 SQL Server 2005는 고유 데이터 암호화 기능을 추가했습니다. SQL Server 기반으로 구축 된 인증서와 주요 관리 시스템을 사용하고 일부 새로운 시스템 기능을 활용함으로써 이제 서버에서 데이터를 암호화하고 해제할 수 있습니다.


결론

Microsoft SQL Server 200는 개발자들에게 새로운 데이터베이스 응용 프로그램 클래스를 구축하는 데 필요한 도구를 제공합니다. 코드 실행 및 스토리지 위치에 대한 장애 요인을 제거하고 XML과 같은 표준을 통합함으로써, SQL Server 2005는 데이터베이스 개발자에게 새로운 가 능성을 열어주고 있습니다. 본 백서에서는 SQL Server 2005의 기능에 대해 간략히 살펴 보았습니다.