오늘도 뭔가 많은 걸 하진 않았다. 과제도 딱히 진도가 나간 것도 없고 강의도 진도가 나간 거는 거이 없다. 그래도 오늘 배운것에 대해서 간략하게 적어보겠다. 배운 것은 JPA에 관해서 였는데 ORM은 무엇인지 영속성 컨텍스트정도이다.
ORM은 무엇일까? Object Relational Mapping으로 객체지향 프로그래밍 언어를 사용하면서 이와 호환 되지 않는 시스템 간에 데이터를 변환하는 것이고 이 중 하나가 JPA(Java Persistence API)가 되겠다. 그럼 왜 JPA가 등장했을까? 스프링을 이용하면서 데이터를 유지하려고(영속성을 부여하려고) RDB(Relational Dababase)을 이용하게 됐다. RDB는 SQL(Structured Query Language)라는 문법이 따로 존재하기 때문에 프로그램에 SQL쿼리문이 증가하면서 SQL중심의 개발을 하게 되었다. 그래서 ORM인 JPA가 등장했다.
그러면 SQL 중심으로 개발하면 안되는 걸까? 개발을 하면 안 된다기 보단 아래와 같은 이유로 지양하게 된 것 같다.
1. 반복적인 CRUD(Create Read Update Delete) 코드에 비슷한 구조의 SQL문이 반복적으로 사용된다.
2. SQL 쿼리문이 문자열로 작성되어서 컴파일 시점에 에러를 잡을 수가 없음
3. RDB에 변경사항(컬럼 추가, 속성 변경 등)이 있다면 기존에 작성한 SQL 쿼리문의 수정이 필요함
4. RDB와 OOP(Object Oriented Programing)의 패러다임으로 인해서 문제가 발생하고 이를 위한 Mapping 코드가 증가함
RDB와 OOP의 패러다임의 차이는 무엇일까? RDB는 데이터를 잘 저장하는 것이고 OOP는 객체끼리 서로 협력하자는 것이다. 따라서 상속, 동일성 보장, 연관관계 등의 문제점이 있다.
상속의 차이는 객체에서는 데이터를 다른 객체에 물려줄 수 있지만 DB에서는 테이블끼리 서로 상속을 해서 데이터를 물려줄 수 없다.
동일성 보장은 객체지향 프로그래밍에서는 동일한 테이터가 있는 객체라고 해도 객체를 생성(인스턴스화)를 할 때 서로 다른 주소값을 가져서 안에 있는 데이터가 같더라도 서로 다른 데이터이다. 하지만 DB에서는 데이터는 테이블에 존재하는 것이고 몇번 조회해도 같은 데이터를 갖는다. 따라서 db에서 여러번 조회할 때 객체에서는 다른 상태가 될 수 있게된다.
객체지향 프로그래밍에서는 객체끼리 연관관계가 있다. 따라서 A객체가 B를 바라볼 수 있지만 DB에서는 방향이 존재하지 않고 외래키로써 테이블끼리 JOIN할 뿐 방향이 없다.
영속성 컨텍스트는 무엇일까? 나도 정확하게 이해하지 못해서 간략하게 정의하면 다음과 같다. JPA가 실행될 때 엔티티 매니저가 갖는 비밀 공간이라고 생각하면 될 거 같다. 그럼 이 비밀 공간에서는 무엇을 하나? 엔티티의 영속성을 관리하고 조금 더 효율적인 작업( 1차 캐시, 쓰기지연 등)을 할 수 있게 끔 도와준다.
영속성 컨텍스트에 대해서는 나중에 좀 더 필요해지면 따로 정리를 해보겠다.
오늘 튜터님에게 영속성 컨텍스트에 대해서 질문하면서 들은 얘기가 있다. 일단 공부는 필요하지만 너무 자세하게 알아야만 그 기술을 쓸 수 있는 것도 아니고 기초 개념정도만 안다면 기술을 쓸 수 있기 때문에 아직 배우는 단계에서는 좀 더 다양한 필요한 기술들을 배우면서 확장하고 필요할 때마다 좀 더 자세하게 보는 것이 효율이 좋을 거라고 했다. 확실히 지금껏 개념에 대해 자세하게는 몰라도 일단 사용하고 있었기 때문에 지금처럼 기술을 사용하면서 지식을 확장하고 부족한 부분이 있을 때 조금 더 심도 있게 개념을 공부할 필요가 있을 거 같다.
'개발관련 > TIL' 카테고리의 다른 글
내배캠 11주 5일 차 (0) | 2024.06.29 |
---|---|
내배캠 11주 4일 차 (0) | 2024.06.27 |
내배캠 11주 2일 차 (0) | 2024.06.25 |
내배캠 11주 1일 차 (0) | 2024.06.24 |
내배캠 10주 5일 차 (0) | 2024.06.21 |