목록전체 글 (261)
당니의 개발자 스토리
준영속 상태이번에는 준영속 상태에 대해서 알아보겠습니다.준영속 상태라는 것은 사실 지금 배워도 크게 이해하기가 쉽지 않아요. 나중에 실전에서 웹 어플리케이션 만들 때 제가 좀 더 자세히 설명 드릴 거고요. 지금은 약간 이런 게 있다 정도만 하시면 됩니다.이제 영속에서 준영속으로 갈 수 있는 상태가 뭐가 있냐면, 일단em.persist 하면 영속상태가 되죠. 그리고 영속상태가 되는 케이스 하나가 더 있습니다. 뭐가 있냐면 내가 em.find를 해서 DB에서 가져왔단 말이에요. 근데 얘가 영속성 컨텍스트에 없어요.그러면 보세요.이 경우에 지금 member2번을 조회해야 되는데 만약에 1차 캐시가 없다고 해봐요. 그러면 DB에서 가져와서 1차 캐시에 올린다고 했죠. 이 1차 캐시에 올라간 상태가 바로 영속상태..
플러시자 그럼 플러시라는 게 뭐냐?플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 거예요. 보통 데이터베이스 트랜잭션이 딱 커밋될 때 플러시라는 게 일어나는데요. 그러니까 플러시라는 게 막 복잡한 게 아니라, 우리 아까 쌓아놨던 insert SQL이나, delete SQL이나, update SQL 같은 게 데이터베이스에 날라가는 거예요.그러니까 쉽게 얘기해서 영속성 컨텍스트의 현재 변경 사양과 그 데이터베이스를 딱 맞추는 작업이라고 보시면 돼요. 그래서 영속성 컨텍스트에 쿼리들을 DB에 쫙 날려주는 거에요.그럼 플러시가 발생하면 무슨 일들이 생기냐.아까 여러분께 말씀드렸던 데이터베이스 트랜잭션이 커밋되면 플러시가 자동으로 발생한다고 보시면 되구요.자 그럼 먼저 Dirty Checking, ..
영속성 컨텍스트 2여기부터 다시 해볼게요.영속성 컨텍스트는 내부에 1차 캐시라는 걸 들고 있습니다. 제가 예를 들어서 Member 객체를 생성을 합니다. 그리고 값을 세팅을 했죠. 지금 setUsername 까지는 비영속 상태입니다.자 그리고 지금 만든 Member 객체를 em.persist 해서 딱 집어 넣으면 무슨 일이 발생하냐면, 여기 영속성 컨텍스트 보이시죠.지금은 엔티티 매니저 자체가 영속성 컨텍스트로 이해를 하셔도 됩니다. 물론 약간 미묘한 차이는 있어요.일단 여기 내부에는 1차 캐시라는 게 있습니다. 사실 이 1차 캐시를 영속성 컨텍스트로 이해하셔도 되는데요.여기 보시면 @Id가 있고 Entity가 있죠. 그러니까 지금 맵이 있는데, 저희가 DB pk 로 맵핑한 걔가 key가 되구요. 값이 ..
영속성 컨텍스트 1이번 시간에는 JPA의 내부구조가 어떻게 동작하는지 약간의 이론적인 내용에 대해서 알아보겠습니다.제목은 영속성 관리구요.JPA를 이해하려면 영속성 컨텍스트라는 것을 이해해야 됩니다. 제가 정말 쉽게 설명해 드리겠습니다.JPA에서 가장 중요한 것 두가지, JPA를 공부하는데 가장 중요한 것 두가지를 뽑으려고 하면 객체랑 관계형 데이터베이스를 어떻게 맵핑할 거냐 하는 이 맵핑의 관점은 약간 정적인 거죠.DB를 어떻게 설계하고 객체를 어떻게 설계해서 이거를 중간에서 어떻게 JPA를 맵핑해서 쓸 거야? 하는 이 맵핑, 그러니까 약간 설계와 관련된 이 부분은 약간 정적인 거죠.그리고 또 하나 중요한 게 실제 JPA가 내부에서 도대체 어떻게 동작해? 라는 부분이 영속성 컨텍스트와 관련이 되어있는데..
Hello JPA - 애플리케이션 개발이제 실제 애플리케이션 개발로 넘어가 보겠습니다. 그럼 대체 JPA가 어떻게 동작하냐라는 건데요.먼저 JPA는 Persistence라는 클래스가 있어요. 일단 Persistence로 시작을 하거든요. 그리고 여기서 방금 우리가 한 Persistence.xml 라는 설정 정보를 읽어서 EntityManagerFactory 라는 클래스를 만듭니다.그리고 여기에서 뭔가 필요할 때마다 EntityManagerFactory 라는 공장에서 EntityManager라는 걸 찍어내서 돌리면 됩니다.이제 한번 실습을 해 볼게요.저는 JpaMain 이라는 클래스를 만들 거고 jpa가 실제 동작하는 걸 한번 보겠습니다.이렇게 패키지를 만들고 JpaMain 클래스를 만들었으니 시작을 해야..
Hello JPA - 프로젝트 생성이번 시간에는 jpa를 실제 프로젝트를 만들어 보고 마치 우리가 처음에 언어를 배우면 hello world로 하듯이, jpa에서의 hello world 프로젝트를 어떤 라이브러리를 받고 어떻게 세팅을 하는지 보여드리는 시간들을 가져 보겠습니다.여기 목차 보시면 이제 처음에 프로젝트를 생성을 하고 그 다음에 실제 테이블 하나라도 가지고 동작하는 애플리케이션을 간단하게 만들어 보겠습니다.먼저 프로젝트 생성하는 것을 해볼텐데요.우선 이걸 하려면 JPA는 어쨌든 데이터베이스가 있어야 돌아가는 거잖아요. 그러니까 관계형 DB에 ORM 맵핑을 해서 돌아가는 것이기 때문에 데이터베이스가 있어야 됩니다. MySQL도 쓸 수 있고 Oracle 등등 여러가지를 쓸 수 있지만 저는 연습할 ..
JPA 소개이번 시간에는 이제 JPA에 대해서 본격적으로 소개를 해드리겠습니다.JPA는 뭐냐면 Java Persistence API 라는 것의 줄임말인데요. 이게 Java 진영의 ORM 기술 표준입니다. 그러면 '어? ORM은 뭐지?'ORM은 Object Relational Mapping 입니다. 그러니까 객체 관계 맵핑 이라는 건데, R은 우리가 RDB 할 때, 그러니까 관계형 DB 할 때의 그 R입니다. 그러니까 이게 객체랑 관계형 데이터베이스랑 맵핑을 해준다는 뜻이에요. 그래서 이 맵핑이라는 건 중간에서 뭔가를 해준다는 거거든요. 그래서 우리가 ORM 이라는 걸 쓰게 되면 객체는 객체대로 설계를 해요. 그리고 관계형 데이터베이스 테이블은 또 관계형 데이터베이스로 쫙 설계를 해요. 그럼 중간에서 이 ..
SQL 중심적인 개발의 문제점이번 시간부터는 JPA에 대해서 소개를 해드리겠습니다.이번 강의를 통해서 '아 JPA가 이런 거구나' 하고 배워보시면 됩니다.제 소개는 앞에서 드렸구요.먼저 여기서 두 가지를 말씀드릴 거에요. 우리가 보통 애플리케이션을 개발할 때는 SQL을 굉장히 많이 작성을 하죠. 그래서 이런 SQL 중심적인 개발의 문제가 뭔지 먼저 말씀드릴 거고요. 그리고 그 대안으로 JPA가 어떤 일들을 해주는지 또 JPA에 대해서 소개를 해드리도록 하겠습니다.자 여러분 생각을 해보면 우리가 이 애플리케이션을 개발을 할 때는 보통 객체지향 언어로 개발을 합니다. Java, Scala, Kotlin, C# 등등 이런 객체지향 언어들로 개발을 하게 되겠죠.자 그런데 이 데이터베이스 세계는 보통 관계형 DB..