Notice
Recent Posts
Recent Comments
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
관리 메뉴

충분히 쌓여가는

ORM 본문

IT/Computer Science

ORM

빌드이너프 2023. 1. 17. 11:11

SQL(Structured Query Language)

  • 데이터베이스와 대화할 때 사용하는 언어
  • 정보를 얻고 싶거나 데이터베이스 작업할 때 사용
  • 이때 콘솔에 작성하는 것은 SQL statement라고 함
  • SQL database = relational databases
  • PostgreSQL = relational databases

 

예시(유저 찾기)

  • 부산에서 온 유저를 찾고 싶음
  • 해당 유저들이 가입한 순서대로 정렬하고 싶음
SELECT * FROM users WHERE country="busan" ORDER BY created_date
  • 이 정도까진 쉽지만, 나중엔 코드가 복잡해질 수 있음
  • 좋은 개발자가 되려면 한 프로젝트에 최대한 적은 수의 언어로 개발하는 것이 좋음
  • 본인이 엄청난 천재가 아닌 이상 여러 언어를 통달하는 것은 어려움,,
  • 이때 장고 ORM이 필요함

장고 ORM

  • 파이썬과 SQL 사이의 통역사

파이썬

User.objects.filter(country="busan").order_by('created_date')

 

장고 ORM

SELECT * FROM users WHERE country="busan" ORDER BY created_date
  • 장고는 위의 파이썬 코드를 아래의 SQL로 변환시켜 줌 -> DB(데이터베이스)는 SQL을 이해할 수 있음
  • 직접 바꿔주는 것이 아닌 자동으로 변환시켜주기 때문에 편함(SQL을 따로 공부할 필요가 없다는 의미이기도 함)
  • 즉, 파이썬으로 코드를 작성하고, 장고는 SQL로 번역을 해줌

Object Relational Mapping(ORM)

  • 객체와 관계형 데이터베이스를 매핑한다는 뜻(오브젝트를 DB에 연결하는 방법론)

  • 모델링: 추상적인 개념을 현실세계로 뽑아냄
  • 자바는 Team 테이블과 같은 데이터 Type를 가지지 않음 -> class를 통해 DB에 있는 Table을 모델링 해야함
  • 그런데 여기서 ORM은 객체를 통해 Relation을 매핑하는데 Table을 통해 매핑하지 않음, TRM이 아닌 ORM임

 

DB 세상에 있는 데이터를 Java 세상에 모델링함

Class Team {
	int id;
    String name;
    String year;
}
  • DB 세상에 있는 데이터를 Java 세상에 모델링하는 과정을 통해 DB를 자동생성할 수 있음

  • 1번을 먼저 만들고 1번을 통해 2번(DB)를 자동생성할 수 있음(이때 JPA가 가지고 있는 인터페이스 필요함)
  • 즉, 자바에서 클래스를 만들어 실행하면 DB에 Table가 자동생성되는 기법이 ORM

JPA(Java Persistence API)

  • ORM 기술
  • 반복적인 CURD 작업 생략
  • 영속성 컨텍스트 가짐
  • DB와 OOP(Object Oriented Programming)의 불일치성을 해결하기 위한 방법론 제공(DB 객체저장 불가능)
  • OOP(객체지향 프로그래밍)의 관점에서 모델링을 할 수 있게 해줌(상속, 컴포지션, 연관관계)
  • 방언 처리 용이(연결할 수 있는 DB의 종류가 다양하다는 뜻)하여 Migrations와 유지보수하기 좋음

  1. Java에서 DB에 connection 첫 번째 요청
  2. DB에서 신분 확인 후 세션 열어줌
  3. 자바에서 Connection 가짐
  4. 두 번째 요청시 쿼리 전송 가능
  5. 쿼리를 전송하면 DB는 쿼리를 통해 테이블에 있는 데이터를 만들어냄
  6. 만들어낸 데이터를 자바에 다시 응답
  • DB의 데이터 Type와 Java의 데이터 Type가 다르기 때문에 해당 데이터를 받아 Java Object로 변경해야함
  • (자바랑 파이썬이 Object를 교환할때 JSON 사용하는 것과 마찬가지)
  • JPA는  변경해야하는 것이 단순 반복작업이고 이를 줄일 수 있음
  • JPA는 이런 작업들을 함수로 제공해줌(CRUD 작업을 JPA가 단순하게 처리해줌)

 

 


참고자료

메타코딩, 스프링부트 개념정리 with JPA 5강 - ORM이란 무엇인가요?

SEOUL G-캠프, [T27] 장고(Django) 04강_데이터베이스(ORM)

노마드코더, Django ORM은 뭐고 SQL은 뭘까요?

'IT > Computer Science' 카테고리의 다른 글

네이티브 앱 / 웹앱 / 하이브리드 앱  (0) 2023.01.19
Process / Thread  (1) 2023.01.18
추상 클래스 / 인터페이스  (0) 2023.01.16
Git / GitHub  (1) 2023.01.13
Transaction 트랜잭션  (0) 2023.01.12