우선 내가 사용한 기술스택은 다음과 같다.
- 프레임워크 및 라이브러리 : React + SpringBoot - 언어 : Java8 - 빌드도구 : Gradle - Mapper : mybatis - DB : postgresql |
프레임워크는 리액트와 스프링부트를 사용했으며, 언어는 java8, 빌드도구는 gradle 기반, Mapper는 mybatis, DB는 postgresql을 선택했다.
1. ORM? SQL Mapper? DB? 선택
스프링부트에 java8, 요즘 많이 쓰는 gradle은 이미 선택해놓은 상태였고, 아직 뭐가 뭔지 모르는 상태에서 기본적인 개념부터 알고 시작해보려고 한다.
1) ORM이란?
ORM은 객체지향 프로그래밍의 객체와 관계형 데이터베이스의 데이터를 연결하는 기술을 의미하며 대표적인 프레임워크로는 아래의 것들이 있다고 한다. JAVA에서는 보통 JPA를 많이 쓰는 것 같다. 찾아보니 강의들도 다 JPA를 사용하더라..
- ORM 프레임워크 종류
- JAVA : JPA, Hibernate, EclipseLink, DataNucleus, Ebean 등
- C++ : ODB, QxOrm 등
- Python : Django, SQLAlchemy, Storm 등
- iOS : DatabaseObjects, Core Data 등
- .NET : NHibernate, DatabaseObject, Dapper 등
- PHP : Doctrine, Propel, RedBean 등
2) SQL Mapper란?
SQL Mapper는 객체와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술이라고 하는데 ORM처럼 객체와 테이블간의 관계를 매핑하는 것이 아니라 SQL문을 직접 작성하고 쿼리 수행결과를 어떤 객체에 매핑해줄지를 바인딩하는 방법이라고 한다. 대표적인 것으로 Mybatis가 있다고 하는데 나는 처음이라 이걸 사용했다. Mybatis를 사용할 경우, SQL문을 통해 내가 원하는 데이터를 가져오게 된다.
3) DB? RDBMS? NoSQL?
먼저 RDBMS는 관계형 데이터베이스 관리 시스템으로 속성과 값을 이용하여 데이터를 정의하고 저장 및 관리하는 개념이라고 한다. 그렇기 때문에 보면 table구조로 되어있는 것을 볼 수 있다. 반대로 NoSQL은 내가 프론트 작업을 하며 많이 사용했던 건데 쉽게 말하면 table 구조가 아니며 SQL문을 사용하지 않았던 것 같다. 대표적으로 firebase, mongoDB 등이 있을 것이다.
이번 프로젝트에서는 SQL DB를 사용하고자 여러가지를 찾아봤는데 그 중 가장 많이 들어본 mySQL을 쓸까하다가 다른 것은 뭐가 있는지를 찾아봤다. 그러다가 알게된 것이 postgreSQL!
3) PostgreSQL vs MySQL
- PostgreSQL은 MySQL에 비해 고급 기능이 많고, 큰 규모의 데이터베이스를 관리하고 복잡한 쿼리를 수행하는데 유용하다고 한다. 또한 표준을 준수하며, 확장성이 높고 GIS 데이터베이스 확장 등에 좋다고 한다. 하지만 MySQL이나 다른 RDBMS에 비해 느릴 수 있고 고급기능을 사용할 경우 리소스 요구량이 높아질 수 있는 단점이 존재한다.
- MySQL은 설치가 쉽고 일반적인 웹 애플리케이션에 대해 최적화된 성능을 제공한다고 한다. 또한 오랜시간 안정적으로 유지되었으며 Oracle에 의해 지원되고, 광범위한 커뮤니티 지원과 문서가 있다. 하지만 PostgreSQL에 비해 기능이 제한적일 수 있으며, 표준과 다른 몇가지의 특성을 가진다.
먼저 RDBMS는 다 비슷하겠지라는 생각으로 postgreSQL을 선택한거였는데 설치과정에서 에러를 만나 조금? 고생했다. MySQL이 더 쉽게 설치할 수 있다는건 나중에 알았는데 내 프로젝트 상황을 고려해 적합한 DB를 선택하면 좋을 것 같다. 솔직히 지금 당장은 MySQL이 나을 수 있겠지만 PostgreSQL을 사용해보면 MySQL도 잘 쓸 수 있지 않을까...