1. 데이터 접근 기술
-> 데이터를 효과적으로 저장하기 위해 발전한 독립적인 기술
자바에서 관계형 데이터 베이스를 사용하기 위해서는 서로 다른 기술 패러다임 간의 인터페이스가 필요하게 되는데,
그게 바로 데이터 접근 기술이며, 그 중 가장 중요한 jdbc 와 sql mapper 그리고 orm 에 대해서 알아보자!
2. DB 에 접근하는 방법
DB Connection 얻기 | 커넥션 연결 |
SQL 전달 및 실행 | 서버는 DB에게 원하는 동작을 SQL로 표현하여 연결된 커넥션을 통해 DB 에 전달 |
DB Connection 닫기 | DB는 전달된 SQL 을 수행하고 그 결과를 응답한다. 서버는 응답 결과를 활용하고 커넥션을 닫는다. |
☞ 여기서 문제!
각 DB 마다 Connection 연결 방법, SQL 전달 방법, 응답 결과 받는 방법이 모두 다르다는 점이다.
- DB 를 다른 DB로 변경하게 되면 서버에 개발된 DB 코드도 모두 변경해야함.
- 개발자가 각각의 DB마다 커넥션 연결, SQL 전달, 결과 응답 방법을 새로 작성해야함.

흠 데이터 접근 방법이 통일된다면 내가 DB 를 mysql 사용하다가 oracle 로 변경해도, 다른 DB 를 추가해도 DB 연결을 수정하지 않아도 될텐데 말이에요.
3. 아하!그래서 JDBC (Java DataBase Connectivity) 가 등장했구나
데이터 저장기술을 DataSource 라는 '추상화된 인터페이스(하나의 규격)'를 통해서 접근할 수 있도록 한다.
자바를 이용해서 다양한 데이터 저장 기술에 '일관적'으로 접근할 수 있는 데이터 접근 기술 인 것이다.
<동작 과정>
1. DB Connection 얻기 | Connection con = null; try{ Class.forName("DB별 드라이버 네임") conn = DriverManager.getConnection(url,id,pw) } |
2. Statement 생성 | String sql = "Select * from users where userid = ?"; PreparedStatement ps = con.prepareStatement(sql) ps.setString(1,"test01") |
3. 쿼리 실행 | ps.executeQuery(); |
4. ResultSet 처리 | ResultSet rs = ps.exexuteQuery(); if ( rs.next() ) { String name = rs.getString("name") ; String age = rs.getString("age") ; String job = rs.getString("job") ; } |
5. Connection 닫기 | } finally { if( ps != null ) { ps.close(); } if ( con != null ) { con.close(); } |
+) 예외처리 | catch ( Exception e ) { return null ; } |
그렇지만... JDBC 너도 불편해!
1. 반복되는 데이터 접근 관련 코드
- 위 동작과정의 1번 ~ 5번까지의 일정한 작업이 반복된다.
2. 핵심/비핵심 관심사 미분리
- 핵심 관심사 는 DB가 수행할 동작을 표현한 SQL 이다. (CRUD)
- 위 동작과정과 같이 비핵심 관심사가 공존하게 된다.
3. JAVA Code 내 SQL 직접 전달 문제
- JDBC 가 사용하는 SQL 은 단순 문자열로 컴파일 체크가 불가능하다.
- 문법 오류 및 오타 발생 확률이 굉장히 높다.
- 또한 자바 어플리케이션 내 다른 언어인 SQL 을 포함되어 SQL 이 핵심 로직을 담당하는 주객전도 현상이 발생한다.
3. ORM (Object Relational Mapping) 그게 먼데?
Object Relational Mapping, 객체-관계 매핑
- 프로그래밍 언어의 객체와 관계형 데이터베이스의 데이터를 자동으로 매핑(연결)해주는 하나의 도구 또는 기법이다.
4. ORM 을 왜.. 사용하는거지 ?
- 객체지향 프로그래밍은 클래스를 사용하고, 관계형 데이터베이스는 테이블을 사용하는데 객체 모델과 관계형 모델 간의 불일치가 존재한다.(참고 https://coco-log.tistory.com/155 https://hibernate.org/orm/what-is-an-orm/ )
- ORM 을 사용해서 객체 간의 관계를 바탕으로 SQL 을 자동으로 생성하여 불일치를 해결한다.
- ORM 을 사용해서 데이터베이스 접근을 프로그래밍 언어 관점에서 맞출 수 있다!
> 비즈니스 로직에 좀 더 집중할 수 있고, SQL 의 절차적인 접근이 아닌 객체 지향적인 접근으로 인해 생산성이 증가된다.
- ORM 을 사용해서 SQL 자동 생성을 통해 엔티티를 객체로 표현할 수 있다.
- ORM 을 사용해서 객체를 통해 간접적으로 데이터베이스를 다룬다.
그렇다면 잘 사용하고 있다가 굳이 이런 새로운 개념이 나온걸까?
-> 그 배경에는 개발을 함에 있어서 "기본에 충실하자" 를 지키자는 것, 그 기본이 바로 객체지향적인 중심의 프로그래밍을 하자는데에 그 출발점이 있다.
예를 들어, 어떤 사이트의 사용자를 만든다고 하면 관련 정보를 사용자(User)라는 객체에 담아 보관한다.
해당 객체에는 이름,생년월일,직업,직급,소속 등 정보들이 저장될 것이다.
이렇게 생성한 사용자 라는 객체를 영구적으로 저장하기 위해 데이터베이스에 입력(insert)한다는 것은 객체와 그와 연결된 데이터베이스 테이블에 저장한다는 것을 의미한다.
이때, 여기서 문제가 발생하는데 바로 테이블과 입력한 객체 간의 이질성이 발생하게 되는 것이다. 즉 객체 모델과 관계형 모델 간의 불일치가 존재하는 것이다. ( 검색해보니까 이걸 '객체지향 모델과 관계형 모델의 패러다임 불일치' 라고 하고 있다. )
이 문제를 해결하기 근본적으로 ORM 기법을 사용하는 이유 중 하나인 것이다.
출처 : https://hanamon.kr/orm%EC%9D%B4%EB%9E%80-nodejs-lib-sequelize-%EC%86%8C%EA%B0%9C/
[데이터베이스] ORM이란? (Node.js ORM Lib Sequelize 소개) - 하나몬
⚡️ ORM (Object Relational Mapping) ❗️ORM 이란? ORM은 Object Relational Mapping(객체-관계-매핑)의 약자이다. ORM은 객체와 데이터베이스의 관계를 매핑해주는 도구이다. ORM은 프로그래밍 언어의 객체와 관
hanamon.kr
출처 : https://hello-bryan.tistory.com/318
ORM 이란
펌글입니다. : http://www.incodom.kr/ORM#h_702209f3f35878a32ee91352ddc6bbe7 ORM이란? ORM(Object-relational mapping)을 단순하게 표현하면 객체와 관계와의 설정이라 할 수 있다. ORM에서 말하는 객체(Obje..
hello-bryan.tistory.com
'웹개발 > Spring' 카테고리의 다른 글
[Mybatis] resultMap (0) | 2022.09.04 |
---|---|
[@InitBinder 어노테이션-WebDataBinder] (0) | 2022.08.05 |