TigerCow.Door

안녕하세요. 문범우입니다.

최근 MS SQL에 대해서 필요성을 느끼고 공부를 시작하게 되었습니다.

이전에 Postgresql이나, MySQL, Oracle 등에 대해서 다뤄본 경험이 있어서, 매우 기초적인 내용은 자세히 설명없이 넘어갈 수 있습니다.

혹시나 참고하시는 분들께서 이해가 가지 않거나 추가적인 설명이 필요하실 땐 언제든지 주저말고 댓글 남겨주시거나, 이메일 또는 카카오톡으로 문의주시면 감사하겠습니다.


 

1. SQL Server

 

마이크로소프트사에서 제작한 데이터베이스 관리시스템 SQL Server에 대해서 알아보도록 하겠습니다.

MS SQL이라고도 불리는 SQL Server는 Enterprise를 비롯한 여러개의 버전이 존재합니다. 학습하는 입장에서 다양한 버전에 대해 따져볼 필요는 없다고 생각하며, 무엇보다 우리는 무료로 이용을 해야하기 때문에 선택의 고민도 필요가 없이 평가판을 설치합니다 :)

 

19년 4월 7일 현재 기준 SQL Server 2017 버전이 최신으로 올라와있지만, 저는 2017년 버전을 다운 받지 않고, 2014년 버전으로 학습을 진행해보도록 하겠습니다. 아직 SQL Server를 설치하지 않으신 분들 중 학습을 위해 진행하시는 분들은 저와 같이 2014년 버전을 설치하고 공부하셔도 좋을 것 같습니다. 

( 따라서 2017년 버전과 일치하지 않는 부분들이 있을 수 있으니 양해해 주시기 바랍니다. )

 

 

2. SQL Server 2014 설치하기

 

먼저 SQL Server를 우리가 이용하기 위해서 설치해야 할 항목은 총 2가지 입니다.

 

   - SQL Server

   - SQL Management Studio

 

SQL Server는 말 그대로 우리가 사용할 데이터베이스라고 생각하시면 되고, SQL Management Studio는 우리가 SQL Server를 보다 편하게 다루기 위한 것이라고 생각하시면 되겠습니다.

 

위의 두가지 중 첫번째를 설치하기 위해서 아래 링크에 접속합니다.

 

https://www.microsoft.com/ko-kr/download/details.aspx?id=42299

 

Microsoft® SQL Server® 2014 Express

Microsoft SQL Server 2014 Express는 간단한 웹 사이트 및 데스크톱 응용 프로그램용에 다양하고 안정적인 데이터 저장소를 제공하는 강력하고 안정적인 무료 데이터 관리 시스템입니다.

www.microsoft.com

 

그리고 위의 사이트에서 다운로드 버튼을 눌러 아래와 같이 1개의 파일을 다운 받습니다.

자신의 윈도우가 32비트인지 64비트인지 잘 확인하고 알맞게 선택하시면 됩니다.

이후 설치파일을 다운 받으면 SQLEXPR_x64_KOR.exe 파일을 실행시켜 설치를 진행합니다.

설치 중에는 따로 설정해야할 항목은 없으며 기본 설정값 그대로 설치하시면 됩니다.

해당 설치가 끝나면 아래와 같이 'SQL Server 2014 구성 관리자'가 생기는데 이를 눌러서 실행시켜 봅니다.

 

이제 우리가 이후 설치할 SQL Management Studio에서 해당 SQL Server에 잘 접속할 수 있도록 포트설정을 진행해야 합니다.

구성관리자를 실행시키면 아래 사진과 같이 SQL Server 네트워크 구성 > SQLEXPRESS에 대한 프로토콜 로 들어가서 TCP/IP를 오른쪽 클릭하여 사용을 누릅니다.

 

그리고 다시한번 TCP/IP를 우클릭하여 속성을 누르고 아래 사진과 같이 IP주소 탭에서 제일 하단에 있는, TCP 동적 포트는 비워두시고 TCP 포트는 1433으로 설정합니다.

 

위와 같이 설정을 했으면 아래 사진과 같이 SQL Server 서비스에 들어가 SQL Server 를 우클릭하여 다시시작을 진행합니다.

 

 

이제 SQL Server Management Studio를 설치해보도록 하겠습니다.

먼저 아래 링크로 들어가서 SSMS 설치파일을 다운받습니다.

 

https://docs.microsoft.com/ko-kr/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-2017

 

SSMS(SQL Server Management Studio) 다운로드 - SQL Server

SSMS(SQL Server Management Studio) 다운로드Download SQL Server Management Studio (SSMS) 이 문서의 내용 --> 적용 대상: SQL Server Azure SQL Database Azure SQL Data Warehouse 병렬 데이터 웨어하우스 APPLIES TO: SQL Server Azure SQL Database Azure SQL Data Warehouse Parallel Data War

docs.microsoft.com

위에서 다운받은 SSMS 설치파일을 실행시켜 초기설정 그대로 설치하면 됩니다.

 

이후 아래 사진과 같이 새롭게 설치된 Microsoft SQL Server Management Studio를 실행시킵니다.

 

그리고 아래와 같이 서버에 연결하는 창이 뜨고, 설정된 그대로 연결을 선택합니다.

그럼 아래와 같이 정상적으로 연결되며 데이터베이스나 기타 항목들이 보이는 것을 확인하실 수 있습니다.

 

 

이렇게 해서 정상적으로 SQL Server 2014 설치를 마무리 하였고,

해당 SQL Server 2014를 다루기 위한 SQL Server Management Studio 설치도 마무리하였습니다.

 

실제로 다음 포스팅부터는 SQL Server를 바탕으로 데이터베이스를 구축하고 다루는 방법에 대해서 알아보도록 하겠습니다.

블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요

안녕하세요. 문범우입니다.

이번 포스트에서는 몽고db에서 사용되는 update() 메소드와 제한자에 대해서 알아보도록 하겠습니다.



먼저 오늘 알아볼 내용에 앞서, 필요한 mock-up 데이터는 아래와 같습니다.



위의 데이터를 만드는 쿼리문은 아래와 같습니다.





1. 업데이트(Update)


특정 다큐먼트(document)를 수정하는 업데이트에 대해서 알아보도록 하겠습니다.

userItem에 있는 어둠의 단도라는 항목의 price를 수정해보도록 할게요.

현재 어둠의 단도의 가격은 980,000,000입니다. 해당 가격을 1,000,000,000 으로 바꿔볼게요!


mongoDB의 공식문서를 살펴보면 update메소드는 다음과 같은 구조를 가지고 있습니다.


db.COLLECTION.update(

<query>,<update>,

{

upsert: <boolean>,

multi: <boolean>,

writeConcern: <document>,

collation: <document>

}

)


구조에 있는 각각의 인자에 대한 설명은 아래와 같습니다.


Parameter

Type

Description

query

document

업데이트를 할 항목을 선택합니다. find() 함수에서 사용되는 것과 동일합니다.

update

document

선택된 document에 적용할 수정사항을 입력합니다.

upsert

boolean

Optional. (기본값: false) 만약 해당 값을 true로 설정하면, query한 document가 없을 경우 새로운 document를 추가합니다.

multi

boolean

Optional. (기본값: false) 만약 해당 값을 true로 설정하면, query에 해당하는 다수의 document를 수정합니다.

writeConcern

document

Optional. document의 write concern을 표현합니다. 기본으로 사용할 때는 생략합니다. 자세한 설명을 위해서는 메뉴얼을 참고하세요.

collation

document

Optional. Collation을 통해 사용자는 대문자 및 악센트 부호와 같은 문자열 비교에 대한 언어별 규칙을 지정할 수 있습니다. collation은 기본적으로 다음과 같은 사항을 가지고 있습니다.

collation: {
   locale: <string>,
   caseLevel: <boolean>,
   caseFirst: <string>,
   strength: <int>,
   numericOrdering: <boolean>,
   alternate: <string>,
   maxVariable: <string>,
   backwards: <boolean>
}


위의 공식문서를 확인하여 어둠의 단도라는 item의 가격을 수정합니다.


쿼리문은 다음과 같습니다.


db.gameItem.update({name:"어둠의 단도"},{$set:{price:1000000000}});


<query>는 {name:"어둠의 단도"}로 하였습니다.

{_id:"i777"}로 해도 동일합니다.

<update>는 {$set:{price:1000000000}}으로 함으로써 price를 수정하도록 하였습니다.

$set은 제한자라고 불리는 것인데 제한자에 대한 자세한 것은 아래에서 더 살펴보도록 할게요.

아래 사진과 같이 올바른 결과를 나타냅니다.




2. 배열 데이터 추가, 삭제하기


mock-up data를 살펴보면 gameUser의 item 항목에는 배열로써 각 아이템의 _id값을 가지고 있습니다.

그렇다면 특정 유저가 아이템을 얻게되면 어떻게 표현할까요?

그리고 아이템을 잃게되면 어떻게 표현할까요?

위를 표현하기위해 배열항목에 데이터를 추가하거나 삭제하는 방법을 알아보도록 하겠습니다.


2-1. 추가하기


먼저 배열에 데이터를 추가해보도록 하겠습니다. 이 또한, 위에서 사용된 update() 함수를 사용합니다.

초보자라는 user에게 "초보자의 분노" 아이템을 추가해볼게요.

위의 document 수정에서는 $set이라는 제한자가 사용되었는데, 이번에는 $push라는 제한자를 사용합니다.

쿼리를 확인하면 다음과 같습니다.


db.gameUser.update({name:"초보자"},{$push:{item:"i004"}});


아래와 같이 올바른 결과를 나타냅니다.




2-2. 삭제하기


삭제또한, update() 함수를 사용하지만 제한자가 바뀌게 됩니다.

추가를 할땐 $push를 사용하였는데, 삭제에서는 $pull 제한자가 사용됩니다.

이번에는 장사꾼 user가 초보자의 갑옷을 버린 상황입니다.

즉, 장사꾼 user가 가진 item중 초보자의 갑옷을 삭제하도록 하겠습니다.

쿼리문은 다음과 같습니다.


db.gameUser.update({name:"장사꾼"},{$pull:{item:"i002"}});


이 또한 아래와 같이 올바른 결과를 나타냅니다.




3. 제한자


지금까지 document를 수정하고, document의 배열 항목에 데이터를 추가, 삭제하는 것을 알아보았습니다.

그런데 중간중간 '제한자'라는 개념이 등장했죠. 조금 더 구체적으로 말하면 이는 '갱신 제한자'입니다.

이번에는 갱신 제한자에 대해서 더 구체적으로 알아보도록 하겠습니다.


MongoDB에서 갱신 제한자라는 것은, 문서의 부분 갱신을 할때 매우 효율적으로 수행할 수 있도록 하는 개념입니다. document를 변경하거나 추가 또는 삭제하고, 배열과 같은 항목에 대한 연산을 하는데 사용될 수 있습니다.


그렇다면 갱신 제한자의 종류와 그 사용법에 대해서 알아보도록 하겠습니다.


갱신 제한자

설명

$set

document에서 특정 키의 값을 수정합니다. 특정 키가 존재하지 않다면 새롭게 생성합니다.

특정 키의 데이터형도 수정할 수 있습니다.

$unset

document에서 특정 키와 값을 모두 제거합니다.

$nc

배열에 사용되는 제한자로써, 지정된 키가 존재하는지 확인할 수 있습니다.

$inc

이미 존재하는 키의 값을 수정하거나, 새로운 키를 생성합니다. $set과 비슷하지만 주로 값이 자주 변경되는 값을 수정하는데 사용됩니다.

int, long, double 의 자료형에만 사용이 가능합니다.

$push

배열에 사용되는 제한자로써, 지정된 키가 존재할 때 해당 키(배열)의 끝에 요소를 추가하며 지정된 키가 존재 하지 않으면 새로운 배열을 추가합니다.

$pull

배열에 사용되는 제한자로써, 지정된 키에 대한 요소를 삭제합니다.

$addToSet

배열에 사용되는 제한자로써, 중복을 피해서 요소를 배열에 추가할 때 사용합니다. 즉, $nc와 $push를 함께 수행하는 기능과 같습니다.

$each

$addToSet과 함께 사용되는 제한자로써, 여러 개의 값을 중복되지 않게 배열에 추가합니다.

$pop

배열을 스택이나 큐처럼 활용할 수 있습니다.




블로그 이미지

Tigercow.Door

Web Programming / Back-end / Database / AI / Algorithm / DeepLearning / etc

댓글을 달아 주세요