[SQL Angeles] 2016-10-04 LA 한인 SQL Server 스터디 모임

[SQL Angeles] 2016-10-04 LA 한인 SQL Server 스터디 모임

 

SQL Angeles 커뮤니티는 정기적으로 화요일 8PM ~ 10PM (2시간) 스터디를 진행하며(장소 및 시간은 공식 홈페이지를 통해 공지 합니다.) SQL Server를 함께 공부하고 다양한 IT 트렌드를 공유하는 기술 및 네트워크를 공유하는 모임 입니다. SQL Angeles 스터디에 참여하고 싶은 분들은 카카오톡(ID : SQLMVP), 페이스북(https://www.facebook.com/sqlmvp) 메신저, email(jevida@naver.com) 등으로 연락 주시기 바랍니다.  스터디 장소의 출입이 자유롭지 못한 관계로 반드시 사전에 협의가 되어야 합니다.

 

스터디는 회원제로 운영되며  불성실 회원의 경우 회칙에 따라 참여 또는 기타 활동이 제한될 수 있습니다.

 

오늘의 주제는 데이터 타입(Data Type)으로 테이블을 생성할 때 데이터 특성에 따라 어떤 데이터타입을 사용해야 할지, 또는 데이터를 형 변환하여 사용하거나 연산을 할 때 데이터 타입에 따라 결과가 어떻게 표현되는지에 대한 내용을 살펴보고 실제 현업에서 발생할 수 있는 오류 케이스에 대해서 살펴 보았습니다.  저 또한 오랫동안 SQL Server를 운영하면서 모든 데이터 타입을 사용하지는 않았지만 이번 기회를 통해 데이터 타입에 대한 특성에 대해서 다시 한번 생각할 수 있는 의미있는 시간이었습니다.

 

오늘 발표는 Ryan(이하 라이언)님께서 진행해 주셨습니다. 라이언님은 소프트웨어 엔지니어로 금융분야에 개발 경험 및 지식이 많으신 분입니다. 오늘 데이터 타입을 발표하면서 금융권에서 사용하는 데이터 타입과 과거 데이터 타입이 다양하지 않았을 때 발생했던 해프닝등을 사례로 설명해 주셨는데 정말 재미있는 시간이었습니다.

 

데이터 타입을 발표 첫 시작은 SQL Server에서 사용하는 데이터 타입을 카테고리화 하여 각 카테고리별로 설명을 진행해 주셨습니다. 발표 자료를 너무 잘 준비해주셔서 그리고 많이 준비해주셔서 2시간의 스터디 시간동안 다 진행하지 못해 다음 주 한번 더 발표를 진행해 주시기로 하였습니다. 데이터 타입에 대한 모든 것을 파헤쳐 보는 시간이었습니다.

 

늘 느끼는 것이지만 발표 준비를 하면 발표 준비를 하는 사람이 가장 많은 공부가 되는 듯 합니다. 라이언님께서도 발표 준비를 하면서 자신이 가장 많은 공부가 되었다고 합니다. 이번 발표에서 우리가 현업에서 쉽게 오해 또는 오류를 범할 수 있는 케이스를 잘 정리해 주셨는데 그 중 하나가 int 데이터 타입을 초과하는 숫자를 연산하였을 때 자동으로 NUMERIC으로 연산되는 케이스를 소개하면서 실제 현업에서 주의할 것을 당부하셨습니다.

관련 자료 : https://msdn.microsoft.com/ko-kr/library/ms187745.aspx

+, -, *, / 또는 % 산술 연산자를 사용하여 int, smallint, tinyint 또는 bigint 상수 값을 float, real, decimal 또는 numeric 데이터 형식으로 암시적 또는 명시적으로 변환하는 경우 SQL Server에서 데이터 형식과 식의 전체 자릿수를 계산할 때 적용하는 규칙은 쿼리에 자동으로 매개 변수가 지정되는지 여부에 따라 결과가 달라집니다.

그러므로 경우에 따라 쿼리의 비슷한 식이 다른 결과를 생성하기도 합니다. 쿼리에 자동으로 매개 변수가 지정되지 않는 경우 상수 값은 먼저 전체 자릿수가 상수 값을 보유할 수 있을 만큼 큰 numeric으로 변환된 다음 지정된 데이터 형식으로 변환됩니다. 예를 들어 상수 값 1은 numeric (1, 0)으로 변환되고 상수 값 250은 numeric (3, 0)으로 변환됩니다.

쿼리에 자동으로 매개 변수가 지정되는 경우 상수 값은 최종 데이터 형식으로 변환하기 전에 항상 numeric (10, 0)으로 변환됩니다. / 연산자가 들어 있는 경우 비슷한 쿼리 간에 결과 형식의 전체 자릿수뿐만 아니라 결과 값도 달라질 수 있습니다. 예를 들어 자동으로 매개 변수가 지정되며 SELECT CAST (1.0 / 7 AS float) 식이 포함된 쿼리의 결과 값은 자동으로 매개 변수가 지정되지 않는 동일한 쿼리의 결과 값과 달라집니다. 자동으로 매개 변수가 지정되는 쿼리의 결과는 numeric (10, 0) 데이터 형식에 맞게 잘리기 때문입니다.

 

 

SQL Server에서 큰 숫자 데이터 형식을 다루다 보면 NUMERIC와 DECIMAL 형식이 있는데 이 둘의 차이점은 무엇인지(결론 : 차이점 없습니다.), 전체 자릿수에 따라 데이터 저장소는 어떻게 차지하는지에 대해 살펴보고 자릿수에 따라 반환되는 결과 값에 대해서도 상세히 설명해 주셨습니다.

 

발표 중간에 궁금한 사항에 대해서는 그 자리에서 즉시 테스트를 진행하면서 궁금증을 풀어가며 진행되었으며 데이터 타입 및 사용법에 대한 설명을 실습과 함께 병행하여 이해하기 쉽게 전달해 주셨습니다.

 

이번 데이터 타입 시간은 너무 준비를 열심히 해주셔서 2시간 동안 절반 정도 밖에 진행하지 못했지만(사실 너무 재미있어서 다양한 테스트를 하는데 시간을 많이 사용하였습니다.) 사실 이 부분은 너무 중요하면서도 많은 사람들이 대부분 대충 이해하고 넘어가는 파트여서 이번 스터디에서는 심도있게 다루어야 할 필요성을 느껴 다음주에 이어서 나머지 내용을 발표하기로 하였습니다.

 

스터디 시간이 마무리되고 정리하는 단계에서는 데이터 길이에 따라 문자열이 잘리면서 데이터가 입력되는데 이때 오류가 반환되지않는 케이스에 대해서도 살펴 보았습니다. 프로시저 개발 및 파라메터의 데이터 타입 및 길이를 잘 정의해야함을 다시 한번 생각해보는 시간이었습니다.

create table tbl_a (col_1 varchar(10))

 

— case a (fail)

insert into tbl_a values (‘adsfewtrqwetewrfdsf’)

 

— case b (success, 데이터 잘림)

declare @a varchar(10)

set @a = ‘aerfsadfsafdsafdsafdsaf’

insert into tbl_a values (@a)

 

— case c (success, 데이터 잘림)

declare @b varchar(50)

set @b = @a

insert into tbl_a values (@a)

 

 

select * from  tbl_a

 

 

오늘도 유익한 시간이었습니다. SQL 뿐만 아니라 각 현업에서 겪은 다양한 운영 이슈, 프로그램 개발 이야기 등 다양한 내용을 공유하여 너무 좋았습니다. 모두 고생 많으셨습니다. 다음주에 뵙겠습니다.

 

2016-10-04 / 강성욱 / http://sqlmvp.kr / http://sqlangeles.com

 

LA 한인 SQL 스터디 모임, LA IT 모임, DB 스터디, SQL 스터디, SQL Server, DB 스터디, LA SQL Server, sqlmvp, SQL Angeles