Loading...

[Spring] JPA의 플러시(flush)

JPA를 사용할 때, 객체를 생성하고 이를 영속성 컨텍스트에 영속시켜 커밋하는 과정까지를 알아봤습니다. 그런데, JPA의 commit()을 호출할 때 항상 발생하는 flush()는 어떤 역할을 하는 녀석일까요? flush() 커밋 메소드를 호출하게 되면 JPA 영속성 컨텍스트에 있는 객체들이 DB로 반영되게 됩니다. 그런데 실제로 commit() 메소드를 호출했을 때 이것이 진행되는 것일까요? 사실은 commit() 메소드가 호출될 때 flush() 메소드가 호출되어지고, 실제로는 flush() 메소드에 의해서 DB에 반영되어집니다. 즉, flush는 영속성 컨텍스트의 내용을 DB에 반영하는 역할을 하는 메소드이며, 쓰기 지연 SQL 저장소에 있는 SQL 쿼리가 DB 서버로 보내지기 때문에 영속성 컨텍스..

2020. 6. 24. 20:04

[Spring] JPA 영속성 컨텍스트 구조로 보는 이점

지난 포스트에서 JPA의 영속성 컨텍스트와 생명 주기에 대해 알아봤습니다. 간단하게 영속성 컨텍스트의 생명 주기의 관계를 통해서 Java로 구현된 객체가 어떻게 DB로 적재되고 삭제되는지를 알 수 있었습니다. 그런데, 영속성 컨텍스트를 왜 사용하는 것일까요? 처음에 저는 이렇게 생각했습니다. JDBC를 사용하려면 어차피 Connection이 생성되어야 하고, 그에 따른 Statement가 만들어져야 하는데, 서버 애플리케이션 특성상 다양한 사용자의 요청을 한 번에 처리해야 하므로, Connection이 여러개 생기게 됩니다. 이 때문에 Connection Pool이라는 것이 있고, 대표적으로 HikariCP가 사용되고 있죠. 그 다음에는 쿼리문을 작성해야 하는데, 이 부분과 함께 커밋까지 해주는 녀석이 ..

2020. 6. 23. 16:23

[Spring] JPA의 영속성 컨텍스트와 생명주기

Spring Framework를 이용하여 웹 애플리케이션이나 서버 애플리케이션을 개발할 때 사용하는 DB 라이브러리가 있습니다. 보통 JDBC 드라이버를 이용하여 DB Connection을 수행하고, 여러 개의 커넥션이 연결하고 끊어지기를 반복하기 위해 재사용할 수 있도록 하는 Connection Pool(DBCP, HikariCP), 그리고 각 도메인에 대한 CRUD를 객체 지향적인 방법으로 프로그래밍 할 수 있도록 하는 ORM이 있습니다. JPA는 여기서 Java 언어의 표준 ORM에 속합니다. Spring boot를 사용하고 있는 요즘에는 Spring 프레임워크에 맞춰져 있는 Spring Data JPA를 사용하는데요. 그런데, Spring Data JPA를 사용하면서 객체에 있는 데이터들이 스스로..

2020. 5. 23. 22:58

[Spring boot] Hibernate, JPA 그리고 Spring Data JPA

지난 포스트에서 다뤄 본 JDBC와 Spring JDBC는 자바와 데이터베이스를 연결하기 위한 최초 인터페이스였고, 이들 코드를 개선하기 위해 리팩토링하는 작업들, 연결 세션, 그리고 관심점의 분리 등 다양한 발전된 모습을 보였는데요. 이번 포스트에서는 그에 이어서 Hibernate, JPA, Spring Data JPA에 대해서 알아보도록 하겠습니다. JPA JPA는 Java Persistence API의 약자로 자바에서 관계형 데이터베이스를 사용하기 위한 양식을 정의한 인터페이스입니다. 말그대로 인터페이스이기 때문에 어떤 코드가 구현되어 있는 것은 아닙니다. 단지, Java 라는 객체 지향 프로그래밍 언어에서 관계형 데이터베이스를 객체 지향적으로 설계하기 위한 Best Practice를 JPA라고 하..

2020. 5. 19. 21:47

[Spring boot] MVC 패턴을 이용한 REST API 개발

지난 포스트에서 REST API가 무엇인지, 어떻게 설계를 해야하는지에 대해서 다뤄봤습니다. REST API는 HTTP Method를 이용하여 행위를 정하고, URI를 이용해서 리소스를 정하는 방식으로 동작하는 서버였는데요. 이번 포스트에서는 MVC 패턴 + Spring boot 2.x 조합을 이용하여 간단한 REST API 서버를 개발해보도록 하겠습니다. What is MVC ? MVC 패턴에 대해서는 아래의 글에서 다뤄 본적이 있는데요. 혹시 MVC 패턴에 대해 다시 복습해보시거나, 잘 모르신다면, 아래의 글을 보시기 바랍니다. 2016/12/29 - [Programming/JavaFX] - MVC Pattern에 기반한 GUI 라이브러리 JavaFX MVC Pattern에 기반한 GUI 라이브러리 ..

[GP] Spring boot에서 DBMS를 연동하는 방법 JPA 고급편

이 글은 N.K Dev Lab에서 작성된 글입니다. 안녕하세요. Spring 관련 글을 정말 안쓴지가 너무 오래되었네요…ㅠㅠ 요즘 데이터 분야에서 일하다보니 R을 다루면서 백엔드에 대한 포스팅이 많이 밀려있네요.. 앞으로는 Spring을 이용한 오픈 프로젝트에 참여 중이니 다시 재건을 위해서라도 천천히 하나씩 글을 작성해보도록 하겠습니다.이번에는 지난 글에 이어서 JPA 고급편에 대해 작성해보도록 하겠습니다. 워낙 오래됐음에도 불구하고 고급편에 무엇을 적어야할지 명시가 되어 있네요. 오늘은 그 부분을 다뤄보겠습니다. SQL과 HQLSQL은 Structed Query Language의 약자로 DBMS의 데이터를 조작/제어하는 쿼리 언어 중에 하나입니다. SQL Server에서는 T-SQL을 사용하는 것처럼..

[GP] Spring boot에서 DBMS를 연동하는 방법 JPA 고급편

이 글은 N.K Dev Lab에서 작성된 글입니다. 안녕하세요. Spring 관련 글을 정말 안쓴지가 너무 오래되었네요…ㅠㅠ 요즘 데이터 분야에서 일하다보니 R을 다루면서 백엔드에 대한 포스팅이 많이 밀려있네요.. 앞으로는 Spring을 이용한 오픈 프로젝트에 참여 중이니 다시 재건을 위해서라도 천천히 하나씩 글을 작성해보도록 하겠습니다. 이번에는 지난 글에 이어서 JPA 고급편에 대해 작성해보도록 하겠습니다. 워낙 오래됐음에도 불구하고 고급편에 무엇을 적어야할지 명시가 되어 있네요. 오늘은 그 부분을 다뤄보겠습니다.SQL과 HQLSQL은 Structed Query Language의 약자로 DBMS의 데이터를 조작/제어하는 쿼리 언어 중에 하나입니다. SQL Server에서는 T-SQL을 사용하는 것처럼..

[GP] Spring boot에서 DBMS를 연동하는 방법 - JPA 기본편

이 글은 N.K Dev Lab에서 작성된 글입니다. 지난 포스트에서 간단한 REST API 개발에 대해서 알 수 있었습니다. 아주 쉽게 GET 메소드에 대한 것만 정의하였고 나머지에 대한 메소드는 다루지 않았는데요. 오늘은 모든 REST API를 사용해보면서 테스트 또한 진행할 것입니다. 그러면 DBMS 연동에 대한 이야기 시작하도록 하겠습니다. DBMS Spring boot PHP, Node.js 등에서 DBMS를 연동하기 위해서는 PDO를 사용하거나 mongoose 등의 라이브러리를 사용하는 방법이 존재합니다. 여기서 mongoose는 Node.js에서 MongoDB를 사용하기 위한 라이브러리이고, PDO는 PHP에서 MySQL 등의 DBMS를 연동하기 위한 객체입니다. Spring boot에서는 S..