SQL ? NOSQL ?
관계형 데이터베이스의 정의와 특성🔗
관계형 데이터베이스(RDBMS) 는 엄격한 구조(테이블 형태)와 관계를 갖는 데이터 저장 방식을 말한다.
각 테이블은 열(column)과 행(row)을 사용해 데이터를 구성하며, SQL(Structured Query Language)을 통해 접근
RDBMS = Relational DataBase Management System
주요특성으로는
구조화된 데이터: 데이터는 명확하게 정의된 스키마에 따라 저장
테이블 간 관계: 키(주 키와 외래 키)를 통해 테이블 간의 관계를 정립
데이터 무결성: 강력한 데이터 무결성을 보장하기 위해 제약 조건을 사용
예시: Oracle, MySQL, PostgreSQL
비관계형 데이터베이스의 정의와 특성🕸️
비관계형 데이터베이스(NoSQL) 는 관계형 데이터베이스보다 느슨하고 다양한 데이터 저장 방식을 제공
주요특성으로는
유연한 스키마: 고정된 스키마 없이도 데이터를 저장할 수 있어, 다양한 형태의 데이터를 다룰 수 있다
확장성: 수평적 확장성을 지원하여, 데이터 양이 많아져도 성능을 유지할 수 있다
다양한 데이터 모델: 키-값 저장소, 문서 지향 데이터베이스,
와이드 컬럼 스토어, 그래프 데이터베이스 등 다양한 데이터 모델을 제공
효과적인 분산 처리: 대용량 데이터에 대한 분산 처리와 병렬 처리에 효과적
예시: MongoDB, Cassandra, Redis
JDBC (Java Database Connectivity)
쿼리 실행: 개발자는 SQL 쿼리를 직접 작성하고 실행합니다.
이는 높은 수준의 유연성을 제공하지만, SQL 구문에 대한 깊은 이해가 필요하다
결과 처리: SQL 쿼리의 결과를 자바 객체로 변환하는 작업은 개발자가 수동으로 처리해야 한다
public User findByID(int id) {
String sql = "SELECT * FROM users WHERE id = ?";
PreparedStatement preparedStatement = connection.prepareStatement(sql)) {
preparedStatement.setInt(1, id);
ResultSet resultSet = preparedStatement.executeQuery();
if (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt("id"));
user.setUsername(resultSet.getString("username"));
}
return user;
}
ORM (Object-Relational Mapping)
객체 중심의 접근 방식: ORM은 데이터베이스의 테이블을 자바 객체로 추상화한다.
이를 통해 데이터베이스 테이블과 자바 객체 간의 "매핑"을 정의하며,
데이터베이스 작업을 객체 지향적으로 수행할 수 있다
쿼리 언어: 대부분의 ORM 프레임워크는 SQL 대신 ORM 전용 쿼리 언어(예: JPA의 JPQL)를 제공한다.
이 언어는 데이터베이스 구조가 아닌 객체 모델을 기반으로 쿼리를 작성함
자동화된 결과 처리: ORM 프레임워크는 쿼리 결과를 자동으로 객체로 변환하고,
객체의 상태 변경을 데이터베이스에 자동으로 반영한다.
public User findByID(int id) {
return userRepository.findbyId(id);
}
ORM의 장점
개발 생산성: 객체 지향적으로 데이터베이스 작업을 수행할 수 있기 때문에
개발자는 데이터베이스 구조보다는 비즈니스 로직에 집중 가능
유지보수성: ORM을 사용하면 데이터베이스 구조 변경 시
객체의 매핑만 수정하면 되므로, 유지보수가 용이
데이터베이스 독립성: ORM은 데이터베이스에 대한 추상화를 제공하므로,
SQL 구문을 변경하지 않고도 다른 종류의 데이터베이스로의 이동이 가능
객체 지향적인 접근: ORM을 통해 객체 상속, 다형성, 연관성과
같은 객체 지향적인 개념을 데이터베이스 작업에 적용할 수 있다
코드 중복 감소: 데이터베이스의 각 필드를 수동으로 객체로 매핑하는 작업 없이,
ORM은 이 과정을 자동화함으로써 코드 중복을 줄여준다.
트랜잭션 관리 및 캐싱: 많은 ORM 프레임워크는 세련된 트랜잭션
관리 기능과 쿼리 결과의 캐싱을 제공하여 성능을 향상UP
ORM의 단점 =JDBC 장점
성능 : 간단한건 성능 차이가 나지 않지만 조금 복잡해진 SQL, N+1문제 , 복잡한 조인, 서브쿼리,
등등 데이터베이스의 기능을 사용해야 하는 경우 ORM으로 처리하기 어렵다
학습 곡선: ORM을 효과적으로 사용하기 위해서는 해당 ORM 프레임워크뿐만 아니라,
ORM의 내부 작동 방식과 객체-관계 매핑의 복잡성을 이해해야 한다
디버깅 어려움: ORM이 생성하는 쿼리는 성능에 최적화 되어있지 않기 때문에
문제를 파악하기 위해서는 쿼리를 직접 분석해야 할 수도 있다.
개발자 기준 ORM GOAT
'TIL' 카테고리의 다른 글
TIL - 2024/06/14 (0) | 2024.06.14 |
---|---|
TIL - 2024/06/13 (0) | 2024.06.13 |
TIL - 2024/06/11 (0) | 2024.06.11 |
TIL - 2024/06/10 (0) | 2024.06.10 |
TIL - 2024/06/07 (0) | 2024.06.07 |