티스토리 뷰

 

지금까지 교육을 들으면서, 프로젝트를 진행하면서, 혼자 공부 하면서 여러가지 SQL 쿼리문을 써보았다.

SQL문이 어렵게 들어가면 되게 복잡한데, 간단한 삽입,조회,삭제,수정 기능만 쓴다고 하면 그렇게 어려운 SQL문은 없다고 생각한다. 물론 내가 아직 회사에 들어가서 어려운 난이도의 프로젝트를 진행해보지 못하였기 때문에 이렇게 생각 하는 걸수도 있지만, 지금까지의 생각은 "어렵고 복잡한  SQL문을 쓸 필요가 있을까? " 라는 생각을 하고 개발을 한다. 정말 복잡한 SQL문이 필요할때만 검색을 통해 찾아보곤 한다. 그럼 내가 배운  SQL문 중에서도 내가 가장 자주 쓰는 기본적인 SQL 문을 정리해 보겠다.

 

- 쓰다보니깐 SQL이랑 Query문이랑 무슨 차이가 있는거지? 라는 생각이 들었다. 그래서 찾아보니...

* SQL : 데이터베이스에서 자료를 불러오고 처리하기 위한 언어. 

* Query : 데이터베이스로부터 정보를 요청하는 것.

 

언어와 같은 원리라고 보면 될거같다. 영어에서 알파벳과 단어 = SQL 이고, 그 알파벳과 단어를 문법으로 조합해서 문장을 만든것이 = Query문이라고 정리하자. 영어를 잘 하지는 못하지만 이런 느낌이 아닐까 싶다.

- give, me, milk = SQL언어(구조적 질의 언어)

- can i give me the milk? = Query문

 

 

 1. 지금내가 쓰는 DB는? 

그래도 SQL문을 정리하기전에 지금 내가 쓰는 DB은 어떤 것이고, 지금 가장 인기있는 DB는 무엇이지 조금은 알아보고 갈 필요가 있을거 같다. 개발에 입문한지 얼마 되지 않아 DB에 개념도 사실 잘 알지 못한다. 그래서 이번에 글을 쓸때 조금은 조사를 해보기로 하였다

 

정말 많은 database의 종류..

 

스택오버 플로우 통계치인데 PostgreSQL, MySQL, MongoDB, Microsoft SQL  정도가 현재 가장 많이 쓰이는 데이터베이스들이다. 정확하게 왜 많이 쓰이는지? 장점이 먼지? 알지는 못한다. 저 많은 데이터베이스를 다 써보는건 무리라고 생각하니 그 중에서 가장 많이 쓰는 DB는 무엇이고 왜 많이 쓰는지 알아보기로 했다.


 

1-1.  PostgreSQL 

그래프를 보면 지금 가장 인기있는 DB가 "PostgreSQL"이다. 2022년에만 해도 3~4위에 있었다고 들었는데, 2023년 통계에서는 1위를 차지했다. 아니 무엇이 좋길래? 어떻게 1위 자리를 차지하게 되었을까?

 

출저: https://bitnine.tistory.com/516

 

=>  현재 소프트웨어 업계는  오픈소스가 대세이다. 기존에 많이 사용되던 상용DBMS의 입지가 줄어들고 오픈소스 DBMS로 넘어가고 있는 추세다. 오픈소소의 대표 DBMS가 PostgareSQL이고, 상용 DBMS의 대표주자는 오라클 SQL이 있다.

 

 

 [오픈소스의 장점] 

 

일단 첫번째로 비용의 절감이다. 밑에 기사를 보면 알겠지만 사람들이 점점 오라클 SQL과 같은 상용DBMS에서 멀어지는 이유는 처음 구매할때 비용도 물론이지만, 83%가 유지보수 서비스 비용이 너무 과도하다고 하였다. 반면 오픈소스는 소스코드가 공개되어 소프트웨어의 개선 또는 수정할 수 있으며, 이에 따라 비용이 더 적게 들어간다. 또 무료 다운로드와 수정 및 재배포가 가능하여 초기 개발비용이 적게든다  

 

출저: http://www.bikorea.net/news/articleView.html?idxno=29407

 

빠르고 유연한 개발이 가능하다. 오픈소스 커뮤니티 사이에서 다양한 이용자들이 최신기술 정보와 문제, 해결책을 공유하면서 독점프로그램에 비해 기술에 발전 속도가 빠르다.

 

③  호환성과 유연성이 뛰어나다. 오픈소스는 주로 오픈포멧 또는 오픈 *프로토콜을 사용하기 때문에 서로 다른 소프트웨어간의 연동이 쉽다. 다른 플랫폼끼리도 연동이 가능하고, 특정기기 운영체제 애플리케이션에 종속되지 않고 자유롭게 변경이 가능하다.

 

*프로토콜 (protocol) : 컴퓨터나 네트워크가 서로 통신하기 위해 미리 정해 놓은 약속. 프로토콜은 원래 외교상의 언어로써 의례나 국가간에 약속을 의미하며, 통신에서는 어떤 시스템이 다른 시스템과 통신을 원할하게 수용해도록 해주는 통신 규약/약속을 말한다. 아무 규칙도 없이 자기 하고싶은 말만 하면 서로 이해하기 어려울 것이고, 만일 작업을 같이 한다고 하면 엄청 힘들것이다. 그래서 미리 규약, 즉 규칙과 약속을 정해서 데이타 통신을 원할하게 하는 것이다.(송수신 순서, 데이터 표현법등...)

 

신뢰성과 안정성이 뛰어나다. 전 세계의 수많은 개발자들과 전문가들이  오픈소스 개발에 참여하기 때문에  폐쇄적으로 개발되는 독점프로그램에 비해 안정적이다.

 

최다 SQL표준 지원(쿼리언어의 대부분 사용가능. 197개인가?)을 하고있다.

 

대량 데이터 처리에 적합하다. 사실 이부분은 무슨 기능때문인지는 모르겠는데... 여러 사이트에서 장점이라고 꼽고 있다.

 

⑦ 이 외에도 풍푸한 기능 세트, 확장성이 매우 탁월(*익스텐션, 후크) 등이있다.

 

*익스텐션(extention): 기존 소프트웨어에서 추가 개발을 통해 새로운 기능을 지원하는 것을 말함. 예를들면 구글에 지도,  번역기 같은 기능들이  새롭게 개발되어 추가 지원하는 익스텐션.

 

그럼에도 불구하고 우리나라에서는 아직까지 많이 쓰이지 않고있다. 이유는 일단 우리나라 DBMS시장의 대부분이 오라클을 사용한다. 그러니 인력수급이 쉽다는 점이 있고, 오류가 나도 관련된 데이터가 많다 보니 오류를 쉽게 잡을 수 있다. 따라서 자연스럽게 개발속도도 올라간다. 또 중요한 이유중 하나는 오라클의 "이중화 기능"인데 즉, 데이터의 안정성이 보장된다는 이유가 크다.  서버를 이중화 하는 방법에는 RAC구성과, HA솔루션이 있는데 서버를 두개 준비해서 데이터의 안전성을 보장하는 원리이다. 자세한 설명은 밑에 링크를 남겨 놓으려고 한다.

 

 

[Server] 서버 이중화 HA(High Availability), OPS(Oracle Parallel Server), RAC(Real Application Cluster) 비교

#HA와,OPS,RAC 모두 DB 서버의 구성에 관한 것이고, 고가용성을 위해 만들어진 구성이라는 것 HA(High Availability) -2개의 서버를 이용하여 하나는 Active 상태, 나머지 하나는 Standby 상태로 정해놓는다. -

spidyweb.tistory.com

 

오라클 RAC 구성과 HA 솔루션 비교

지난번 이중화방법에 이어, 오늘은 이중화방법 중 RAC와 HA솔루션을 비교해보도록 하겠습니다. 오라클...

blog.naver.com


 

1-2.  H2 Database 

 

그래서 지금 내가 쓰고있는 데이터베이스는 무엇인가 하면 "H2 Database" 를 쓰고있다. 일단은 강사님이 쓰시기에 따라 썼지만,.. 처음에는 따로 설치도 필요없이 브라우저서에  바로 사용이 가능하니깐 신기했다. 웬만한 SQL문도 다 실행 되는거 같고... 근데 먼가 이상하게 잘 안되는게 많았다. 또 작성한 SQL문이나 전날 만들어 놓았던 내용들이 자동으로 저장이 되지도 않고, 자동완성 기능도 뭔가 되다가 안되다가 하였다. 그래서 H2는 DB용으로만 이용하고 SQL문 작성은 오라클에서 작성한 쿼리문을 복사해서 가져오는 식으로 많이 했다. 그러면 H2 DB는 무엇이고 어떤 장단점이 있을까?

 

일단 그전에 H2는 로컬에서 테스트를 위해서 사용하는 In- memory DB중 하나이다. 그 중 가장 대표적인게 H2인데 어플리케이션이(프로그램)이 종료되면 데이터도 같이 삭제되는 메모리 모드(Embedded)와, 내용이 파일시스템으로 저장돼 서버를 재시작했을 때 내용이 저장되어 그대로 사용할 수 있는 서버모드가 있다.

 

 특징 

 

1. 따로 설치가 필요없고 용량이 적다

 

2. 스프링 부트가 지원하는 *인메모리 관계형 데이터베이스다. (인메모리란?)

 

*인메모리 DB(in-memory): 디스크가 아닌 주메모리에 데이터를 저장하는 방식으로 디스크 검색보다 자료접근이 훨씬 빠르다. 디스크에 저장된 데이터를 대상으로 쿼리를 실행하는게 아닌 메모리상에 색인(인덱스)을 넣어 필요한 데이터를 빠르게 검색한다.  디스크 간 병목이 없기 때문에 disk-based DB보다 훨씬 속도가 빠르다. 

 

장점은 "간편하고 빠르다" 라고 생각하면 되는데, 그럼 단점은 무엇이 있을까?

 

① 메모리 저방방식이라 "휘발성 DB"라는 것이다. 즉, in-memory DB는 기본적으로 영속성(persistence)을 보장하지 않는다. DB 서버 전원이 갑자기 꺼지거나, 에러가 나서 갑자기 프로세스가 종료되면 데이터가 모두 유실할 수 있는 위험이 있다. (그래서 보통은 로그인 세션 같은, 서버가 꺼져서 날아가도 상관 없는 임시 데이터에 주로 쓰인다.)

 

② 메모리에 데이터를 저장하기 때문에 저장공간이 한정되어있다. 외부장치에 추가하는 방식이 아니기 때문에 데이터가 꽉 차면 기존에 데이터를 지우고 새로운 데이터를 입력해야한다.

 

3. 브라우저 기반 콘솔프로그램이다. -> (따로 툴을 설치할 필요가 없다는 말)

 

4. ANSI 표준 SQL로 여러 호환성 모드를 지원한다.

 

5. Embeded Mode와 Sever Mode 를 지원한다.

 

 -  Embeded Mode는 Application 서버 실행 종료시 데이터를 모두 손실(휘발)하는데, 기본적인 테스트 코드 작성시 휘발성으로 작동시키는 경우라 많이 사용된다.

 - Server 데이터를 파일시스템에 저장시켜 다시 사용할 수 있다

 

6. 토이프로젝트에서는 가볍게 쓰일지 몰라도, 대형 프로젝트에서는 안전성과 성능이 부족하다.

 

7. 백업 ,복구 등의 기능이 부족하다.

 

이정도가 내가 이해할 수 있는 범위에서 정리해본 내용인데, 사실대로 말하면 50%정도만 이해했다. 휘발성이라는 것 정도는 알거 같은데, 어떤데서 H2를 써야하고 쓰면 안되는지 JDK, JRE, JVM, JDBC와 연관이 있는 것 같은데 저 4개의 용어와 역할에 대해서는 다음에 한번 공부해서 포스팅하려고 한다. 

 

 

[H2] H2 DB의 특징과 사용에 대한 고찰

H2 Database란? Java SQL Database 주요 기능 빠르고 오픈소스인 JDBC API In Memory DB(인 메모리 DB)* Embedded mode(내장모드) & Server mode(서버모드) 지원 브라우저 기반 콘솔 프로그램 2MB정도의 적은 용량으로 설

jamie95.tistory.com


 

1-3. DBeaver 

 

https://aws.amazon.com/marketplace/seller-profile?id=0ed7b11e-a954-4759-b706-255abb673d4c

 

 

지금 최종적으로 쓰고 있는 데이터베이스는 H2 DB이고, 접속을 할 때는 "DBeaver 툴" 을 써서 연결하고 있다. DBeaver? 이름을 들으면 다람쥐가 생각이 난다. 그리고 로고를 보면 또 다람쥐가 생각이 나고.. 설치되면 또 다람쥐 아이콘이 보인다.

 

 

지금의 나같은 경우는 보통 하나의 데이터베이스만으로 처리한다. 아직 규모가 작은 프로젝트여서 그렇지만, 대규모 프로젝트를 하게 되면 또는 특수한 경우에 데이터베이스를 2개 이상 써야하는 경우가 있을 수도 있다. 그러면 각각에 데이터베이스 툴을 설치하고 관리해야하는데.. 번거롭고 분산되는 느낌을 받을 수있다. 제대로 관리가 안 될 수도 있고 그래서 이런경우에 하나의 툴로 여러개의 데이터베스를 관리할 수 있는게 DBeaver툴이다.

 

 => MySQL, PostSQL, SQLite, Oracle, DB2, SQL Server, Sybase, MS access, Teradata, Firebird, Apach Hive, Phoenix, Presto... 등등 아마 거의 대부분 알고있는 모든 데이터 베이스에 연결하여 쿼릴를 보낼 수 있는 툴.

 

 

자 그럼 한번 설치해보자 ! 

 

1-4. DBeaver 설치 

 

1. 일단 DBeaver를 검색 해준다.

 

 

2. 운영체제에 맞는 파일을 다운로드 한다.(저 같은 경우는 윈도우)

 

 

3. 모를때는 따로 안건드리고 다음 > 다음 > 다음 을 누른다

 

 

4. 설치를 끝내고 아이콘을 클릭 -> 왼쪽에 새로연결 클릭 ->  원하는 데이터베이스를 선택한다.

 

 

5. host & url 주소로 데이터베이스를 연결만 해주면 끝!

 

 

DB별 jdbc URL을 찾아보면 양식이 나와있다. 이제 맞게 작성만 해주면된다.

 

오늘은 내가 지금 쓰고 있는 DB가 무엇이고, 어떤 DB가 인기 있는지를 알아보고, 어떤 툴을 써서 연결하는지 알아보았다. 다음글에서는 진짜 SQL문을 작성하면서 주요 SQL문을 정리해보도록 하겠다.