[R] R과 Database 연동
1 R에서 데이터를 동적이게 다루고 싶다!
R에서 데이터를 다루다 보면 대부분 file 형태로 다루게 됩니다. (csv, txt 등등)
이는 동적으로 데이터를 다루기에 적합하지 않습니다.
그래서 R에서 Database 와 연동하는 방법에 대해 다뤄보려고 합니다.
특히, 본 포스팅에서는 RDBMS인 mariaDB와 R의 연동 보여주려 합니다. (RDBMS는 관계형 DBMS를 의미합니다.)
2 R에서 DB 연동 방식
R에서 DB를 연동하는 방식은 크게 두가지가 있습니다. ODBC와 JDBC인데요.
각각의 장점과 단점이 있겠지만 ODBC 는 MS에서 시작된 접속 방식, JDBC는 Java를 활용한 접속 방식이라고 보시면 될 것 같습니다.
2.1 ODBC
ODBC 는 Open Database Connectivity 의 약자로 마이크로소프트 사에서 만든 DB접근 규격입니다.
이를 이용하면 사용자는 어떠한 DB시스템에서 관리하고 있는지 알필요 없이 사용이 가능해집니다.
하지만, ODBC방식으로 Oracle에 접속하기 위해선 Driver를 설치해야 합니다.
즉, ODBC에서 기본적으로 접속을 허용하는 DB외에는 별도의 Driver가 필요하다는 것이죠. 참고
2.2 JDBC
JDBC는 Java Database Connetivity의 약자로 Java 진영에서 사용하는 DB접근 방식입니다.
그렇다고 Java 가 있는 곳이면 다 사용이 가능한가? 아닙니다 ODBC와 마찬가지로 Java Driver가 마찬가지로 필요합니다.
2.3 어느 때 무얼 사용해야하는가? 결국엔 사용하기에 안정적인 것
우선, 접속 주체의 OS가 Window 냐 linux냐에 따라 선택의 폭이 달라질 수 있을 것 같습니다.
Window 환경에서는 아무래도 ODBC가 안정적일 것이라 보이고 (JDBC도 사용가능합니다.)
Linux 환경에서는 ODBC 보다는 JDBC를 사용하는 것이 수월할 것이라 봅니다. 물론 패키지가 잘 만들어져 있는 것을 사용하면 ODBC냐 JDBC냐 의 문제는 바로 벗어나게 됩니다.
어쨋든 ODBC나 JDBC 나 사실 Driver 를 요구하기 때문에 가벼운 DB 환경을 이용할 때는 큰 차이가 없을 것 같습니다.
분명한 것은 윈도우 환경에서 대용량의 DB작업을 할때는 되도록 ODBC를 사용할 것 같습니다. 아직까지 엄청나게 대용량의 작업을 해보지 않아 현재는 JDBC를 선호하는 편이긴 합니다.
3 RMariaDB 패키지를 이용한 DB연동 (Ubuntu에서 MariaDB 세팅 방법은 여기 )
ODBC, JDBC 방식이 있지만 이미 잘 만들어져 있는 RMariaDB 패키지가 있어서 이를 이용하겠습니다. 기본코드는 아래와 같습니다.
library(RMariaDB, verbose=F,quietly=T,warn.conflicts=F)
con<-dbConnect(drv = RMariaDB::MariaDB(), username = ‘user’, password = ‘11234’, host = NULL, port = 3306, database=‘mysql’ )
res <- dbSendQuery(con, “SELECT * FROM mysql.myTable”)
result<-dbFetch(res)
dbClearResult(res)
위와 같은 내용으로 MariaDB 와 연동이 가능합니다.(당연히 mariaDB세팅이 먼저겠죠?)
dbConnect()@package-RMariaDB를 이용해 connection을 따오고
dbSendQuery()@package-RMariaDB 함수를 이용해서 Query를 준비하고
dbFetch()@package-RMariaDB를 이용해서 최종 조회 결과를 Fetch해옵니다.
참고하실 것은 참고로 위 함수들은 DBI Package 에도 정의가 되어 있으며 둘의 차이가 있는지 여부는 정확히 모릅니다만
DBI 패키지도 DB 연동시 많이 쓰며 원하는 함수를 명확히 사용하기 위해서 RMariaDB::dbConnect() 처럼 패키지를 명시하여 사용하길 추천드립니다.
4 Data Scientist가 놓치기 쉬운 개념
4.1 AP & Wifi & Port Forwarding [필수]
이중 port Forwarding개념은 충분히 이해하시길 빕니다. 나의 PC를 서버화 하기 위해서 이해하야 하며 마찬가지로 PC에 DB를 설치하여 조회가 가능하게 하려면 포트포워딩 오픈이 필 수 입니다.
4.2 DB & RDBMS & NoSQL
당연하지만 본 포스팅에는 위의 개념이 너무 적게 적혀있습니다. 반드시 DB 환경울 구축하기 전에 개념을 명확히 하시길 바랍니다.
4.3 Parameterized SQL vs Literals SQL (속도와 보안)
보안과 속도 이슈 때문에 위의 차이는 분명히 이해하셔야 합니다.
Parameterized SQL (a.k.a. prepared statements)는 DB서버에서 Query를 항상 준비된 상태에서 받도록 하는 방식이라고 보시면 됩니다.
그래서 속도도 빠르며 string에 value가 명시되어있는 것을 회피함으로서 보안도 해결해줍니다. (SQL injection회비)
4.4 Tuning & Index & Hint
데이터 조회 속도를 올리기 위해선 Tuning을 해야합니다.
이때 같이 고민하는 것이 물리적인 방법으로는 index 논리적인 방법으로 hint가 있습니다.
index는 게임으로 치면 텔레포트 지점을 많이 찍어놓는 방식입니다. 물리적으로 접근하는 지점을 즐겨찾기 해놓고 저장하는 것이죠.
많으면 많을 수록 용량을 많이 잡아먹겠죠?
hint는 원하는 데이터 접근 순서나 방식을 다르게 하는 것입니다.
sort 알고리즘이 여러 개가 있듯 특정 데이터에 접근하는 방식은 여러 개고 hint는 이때 DB Optimizer의 동작을 임의로 조절하며 접근하토록 합니다.
4.5 BigData
위의 내용은 모두 BigData 환경이 아닐때도 존재했던 개념들입니다.
빅데이터 환경에서는 또 다른 새로운 개념들이 많습니다. 빅데이터라는 새로운 카테고리로 구분하여 공부하는 것이 좋습니다.
'정리 > Database' 카테고리의 다른 글
서브쿼리를 활용하여 조건을 주고 갱신하는 법 (1) | 2024.10.26 |
---|---|
SQL 구분자 기준으로 여러행으로 나누기 (0) | 2024.10.26 |
[Database] 기본 문법 Select , Delete ,Insert , Update (0) | 2023.11.14 |
Ubuntu서버에서 MariaDB 원격 접속하기 (0) | 2018.10.18 |