전체 글 126

[JAVA] JPA 준영속 상태

준영속 상태 란? 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached) 된 것 영속성 컨텍스트가 제공하는 기능을 사용하지 못한다. 준영속 상태로 만드는 방법 em.detach(entity) : 특정 엔티티만 준영속 상태 전환 em.clear() : 영속성 컨텍스트를 완전히 초기화 em.close() : 영속성 컨텍스트를 종료함 Member member = em.find(Member.class, 150L); member.setName("AAAAAAAAAA"); // 원래 같으면 find 에서 select후 setName에서 update쿼리가 생성되야하는데 // detach 선언으로 준영속상태가 되어 영속성 컨텍스트 기능을 상실 // 따라서 update는 실행되지 않는다. em.detach(mem..

JAVA 2021.11.09

[JAVA] JPA 플러시(flush)

플러시 발생 변경감지 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송( 등록, 수정, 삭제 쿼리 ) 보통 transaction.commit과 동시에 쿼리를 DB에 날리는데 내가 쿼리를 미리 보고싶거나, DB에 먼저 넣고 싶을때 사용! 아래 예시를 보면 commit이 실행되기 전에 insert문이 먼저 실행된다. Member member = new Member(200L, "member200"); em.persist(member); em.flush(); System.out.println("======================="); tx.commit(); // commit을 실행하면서 쿼리를 DB에 날림 ★ JPQL 쿼리 실행 시에는 플러시가 자동으로 실행된다..

JAVA 2021.11.09

[JAVA] JPA 영속성 관리

영속성 컨텍스트란? JPA를 이해하는데 가장 중요하다. 엔티티를 연구 저장하는 환경이라는 뜻이다. 영속성 컨텐스트는 눈에 보이는 것이 아니므로 EntityManager를 통해 접근한다. // DB에 저장하는게 아닌 엔티티를 영속성 컨텍스트라는 곳에 저장하는것 EntityManager.persist(entity); 1. 비영속 상태 : JPA와 관련없음(EntityManager와 상관없음 + 사용하지않음) // 비영속 상태 Member member = new Member(); member.setId(100L); member.setName("HelloJPA"); 2. 영속 상태 : EntityManager 사용 시점부터 영속 상태에 들어감 → 영속성 컨텍스트에 들어감 // 영속 상태 em.persist(me..

JAVA 2021.11.09

[JAVA] JPA 애플리케이션 개발

JPA의 구동방식을 아래 이미지로 보고 시작하자! 1. EntityManagerFactory 데이터베이스당 하나만 생성하여 전체에서 공유하여 사용해야 한다. 여기에 들어가는 name은 persistence.xml의 unit name 이다. 2. EntityManager EntityManager는 다른 쓰레드들과 공유하면 안된다. ( Connection과 같다고 보면됨 / conn도 쓰고 close로 버리는것 처럼 얘도 close가 필수다! ) 모든 DB 접근은 Manager를 거쳐야한다. 3. EntityTransaction DB에 삽입, 수정 등 이용할 때 트랜잭션 받아와서 사용하는게 필수! JPA의 모든 데이터 변경은 트랙잭션 안에서 수행한다. ( 조회-select 는 예외 일 수 있음 ) 4. JP..

JAVA 2021.11.02

[JAVA] JPA 프로젝트 생성(Maven) + 기본설정

※ 오늘부터 인프런에서 강의를 진행중이신 김영한 강사님의 JPA 기본편을 들으면서 하나씩 정리하려고 한다. Java version : 11 DB : H2 (1.4.199) 프로젝트를 생성하기에 앞서 하나만 짚고 넘어가자! JPA는 특정 데이터베이스에 종속되어 있지 않다. 이말인 즉슨 만약 DB를 Mysql 에서 Oracle로 변경하면 기존에 관계형 데이터베이스에서는 수정해야할 부분이 많았지만 JPA는 이러한 부분에서 알아서 변형해서 사용한다!! 이 점을 참고하여 아래 persistence.xml 설정 중 Dialect를 참고하자! 1. 프로젝트 생성 intellij > File > New > Project > Maven 선택 + 이름 설정 후 Finish! 2. pom.xml에 dependencies 추..

JAVA 2021.11.02

[JAVA] JPA란?

JPA를 알아보기 전에 ORM을 먼저 집고 넘어가자! 1. ORM 이란? : 객체와 관계형 DB(RDBMS)를 매핑 해주는 것을 의미한다. : 객체는 ORM을 이용하여 DB에 접근 한다.( 적절한 SQL을 생성하여 DB에 객체를 저장해준다. ) 2. JPA 란? : ORM 기술을 구현한 프레임 워크에 대한 표준화 혹은 기준을 의미한다 ORM 기술을 구현하기 위해 여러가지 프레임워크들이 등장하였는데 각각의 프레임 워크들(Hibernate, CoCobase 등) 은 같은 기능을 해도 각각 필드와 메소드들이 다를 수 있으므로 이러한 것들을 기준을 정해 하나로 통합해주는 것이 JPA 이다. 예를들어, 같은 기능을 정의 하는 메소드가 Hibernate에서는 function dog() , CoCoBase에서는 fu..

JAVA 2021.09.09

[react] Fetching data( async, await )

Data를 가져와서 사용할때 쓰인다. async : 무언가 실행이 완료 되길 기다렸다 다음 코드를 진행 하고 싶을때 사용한다 : 얘는 기다려야만 하는 함수! 뭘 기다려? await를! await는 axios가 끝나기를 기다렸다가 그 뒤에 코드를 진행한다. 아래 예시와같은 경우 영화 데이터를 get 해올때까지 기다린다. import React from "react"; import axios from "axios"; import Movie from "./Movie"; class App extends React.Component { state = { isLoading: true, movies: [] }; // async : 비동기 -> 너는 기다려야만 하는 함수 ( 기다려야 해! ) getMovies = as..

React 2021.09.02

[react] state + component life style

state란? component에서 변하는 데이터를 저장하는 Object( 바꿀수 있는 데이터 ) import React from "react" import PropTypes from "prop-types" /* class는 function이 아니기 때문에 return 값이 존재하지 않음 대신 React.Component가 포함하고 있는 render 사용 */ class App extends React.Component { //react는 자동적으로 모든 class의 render를 실행한다. //component가 render 되기 전에 호출되는 함수 : Mounting -> constructor() //component가 render 된 후 호출되는 함수 : Mounting -> componentDid..

React 2021.09.02

[Python] pool_recycle + wait_timeout

Daemon 이 서버의 뒷편에서 계속 돌아가는 경우 SQLAlchemy에서는 쿼리요청이 없더라도 일정주기로 쿼리문을 날려줘서 갱신을 해줘야 connection이 끊기지 않는다. 1. db.py 파일 작성 # pool_recycle은 해당 시간 이후에 connection을 재사용하겠다는 뜻 pool_recycle = 60 * 60 * 2 # 7200초 이후에 connection 재사용 # DB connection이 끊기지 않게 쿼리문 날림 (아래 보기) session.execute('SELECT now()').scalar() ※ 주의할점 : 서버 배포후에 확인 해봐야 할것 : 서버쪽의 vi /etc/my.cnf의 wait_timeout 의 초(seconds)가 pool_recycle 보다 작으면 'Lost..

Python & Django 2021.09.01