# flush

12개의 포스트
post-thumbnail

✏️ Flush(플러시)

⭐️ Flush Flush는 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영하는 것이다. 보통 데이터베이스 트랜잭션이 커밋될 때 플러시가 일어난다. 플러시는 복잡한 것이 아닌 이전에 소개한 쓰기 지연 SQL 저장소 쌓아둔 Insert, Update 등의 SQL이 데이터베이스에 날아가는 것이다. >쉽게 얘기해서 영속성 컨텍스트의 현재 변경 사양과 그 데이터베이스를 맞추는 작업이 플러쉬다. >데이터베이스 트랜잭션이 커밋되면 플러시가 자동으로 발생한다. 📌 Flush 발생 플러시가 발생하면 무슨 일이 생길까? 1.먼저 변경 감지(Dirty Checking)가 일어난다. 2.그러면서 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록한다. 3.그리고 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송한다. 쓰기 지연 SQL 저장소에는 등록 쿼리, 수정 쿼리, 삭제 쿼리 등이 다 담겨 있다. 4.저장소에 있는 쿼리들을 데이터베이스에 모두

2일 전
·
0개의 댓글
·
post-thumbnail

[BOJ] 2557

Hello World 문제 내 풀이 다른 풀이 문법 >BufferedWriter / BufferedReader Buffer에 있는 IO 클래스인데 이 클래스들은 데이터를 하나씩 읽어오는 것이 아니라 임시 공간(버퍼)에 저장해두었다가 한 번에 출력 또는 데이터를 보내는 방식 1000개의 데이터를 1개씩 보내는게 아니라 임시로 한 공간에 담아둔 뒤 한 번에 보내는 방법이니 당연 성능면에서 우수 >flush() 와 close() flush() : FileWriter 내부 버퍼의 내용을 파일에 writer한다. flush()를 호출하지 않는다면 내용이 버퍼에만 남고 파일에는 쓰이지 않는 상황이 나올 수 있다. 즉, 메소드는 버퍼에 데이터가 가득 차 있건 아니건, 버퍼에

2023년 8월 30일
·
0개의 댓글
·
post-thumbnail

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

엔티티 생명주기 4가지 상태 비영속 (new/transient) - 영속성 컨텍스트와 전혀 관계가 없는 상태 예시 (객체를 생성한 상태) 영속 (managed) - 영속성 컨텍스트에 저장된 상태 예시 (객체를 저장한 상태) 준영속 (detached) - 영속성 컨텍스트에 저장되었다가 분리된 상태 예시 (회원 엔티티를 영속성 컨텍스트에서 분리한 상태) 삭제 (removed) - 삭제된 상태 예시 (객체를 삭제한 상태) 설명 사진 영속성 컨텍

2023년 5월 8일
·
0개의 댓글
·
post-thumbnail

Python CookBook - 1

📌 What Python? Python은 네덜란드계 소프트웨어 엔지니어인 귀도 반 로썸(Guido van Rossum)이 발표한 고급 언어입니다. Python은 다른 프로그램 언어들과 호환성이 뛰어나고, 다양한 라이브러리 사용이 가능합니다. 데이터 수집, 분석, 가공, 시각화 등에 용이하기 때문에 인공지능, 웹, 빅데이터 분석, 해킹 도구와 같은 분야에서 많이 사용되고 있습니다. 인터프리터(interpreter) Python은 소스 코드를 통으로 다른 언어로 번역하고 실행하는 컴파일러 방식의 언어(ex. C, C++)와 달리 소스 코드를 한 줄 한 줄 실시간으로 실행하는 인터프리터 방식의 언어입니다. 인터프리터(interpreter) ![

2023년 4월 4일
·
0개의 댓글
·

TIL 17일차

◎ JAVA ◆ 싱글 바이트 입/출력 목표 : 싱글 바이트 단위 데이터 입력(열기) 준비물 : 파일 객체(없으면 에러), 스트림 객체(입력용) try{} catch(){} 를 사용하기 싫으면 if 조건문을 입력해서 예외를 스킵해준다. 에러나는곳에 add throws를 클릭하면 예외처리가 자동 생성되어 에러가 사라진다. 파일의 크기는 long으로 설정한다. 입력 순서 : [프로그램] <- stream <- target <- [single.txt] 버퍼(buffer)을 사용한 대량 데이터를 복사할 수 있다. public class Test02 { public static void main(String[] args) throws IOException { File target = new File("temp", "single.txt"); if(!target.isFile()) { System.err.println("존재하지 않는 파

2023년 1월 19일
·
0개의 댓글
·
post-thumbnail

입출력(IO)

💁‍♀️ 입출력(IO)이란, Input과 Output의 약자로 컴퓨터 내부 또는 외부 장치와 프로그램 간의 데이터를 주고 받는 것 장치와 입출력을 위해서는 하드웨어 장치에 직접 접근이 필요한데 다양한 매체에 존재하는 데이터들을 사용하기 위해 입출력 데이터를 처리 할 공통적인 방법으로 스트림을 이용 > 💁‍♀️ 스트림(Stream)이란, 입출력 장치에서 데이터를 읽고 쓰기 위해서 자바에서 제공하는 클래스 모든 스트

2023년 1월 9일
·
0개의 댓글
·

플러시

1. 플러시란, 커밋 시 영속성 컨텍스트에 있는 내용을 변경감지한 후에 DB에 반영하는 것 동작하는 과정 : 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 -> 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송(등록, 수정, 삭제 쿼리) 2. 사용 em.flush() : 직접호출 COMMIT 전에 DB적용을 원할 시 사용 (근데 사용할 일 거의 없음) 트랜잭션 커밋 : 플러시 자동 호출 트랜잭션 커밋할 때 자동으로 flush 적용(보통의 사용) JPQL 쿼리 실행 : 플러시 자동 호출 JPQL은 직접 쿼리를 작성해서 넣기 때문에 실행될 때 쓰기 지연에 있는 내용이 모두 플러시 된다. em.setFlushMode(FlushModeType.COMMIT) flushmodetype.AUTO : 커밋, 쿼리를 실행할 때 플러시( 기본값이라 따로 설정할거 X) FlushMo

2022년 8월 29일
·
0개의 댓글
·
post-thumbnail

JPA - flush

플러시 영속성 컨텍스트의 변경 내용을 데이터베이스에 반영 플러시 발생 변경 감지 수정된 엔티티 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소의 쿼리를 데이터베이스에 전송, 반영 (등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 법 em.flush() ⭐ 직접 호출 트랜잭션 커밋 플러시 자동 호출 JPQL 쿼리 실행 플러시 자동 호출 플러시 특징 영속성 컨텍스트를 비우지 않는다. 영속성 컨텍스트의 변경내용을 데이터베이스에 동기화 트랜잭션이라는 작업 단위가 중요 → 커밋 직전에만 동기화 하면 된다. 플러시 모드 옵션 (기본값) em.setFlushMode(FlushModeType.COMMIT) 준영속 상태 영속 → 준영속 영속 상태의 엔티티가 영속성 컨텍스트에서 분리(detached) 영속성 컨텍스트가 제공하는 기

2022년 7월 2일
·
0개의 댓글
·

영속성 관리

자바 ORM 표준 JPA 프로그래밍 http://www.kyobobook.co.kr/product/detailViewKor.laf?mallGb=KOR&ejkGb=KOR&barcode=9788960777330 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저 팩토리는 생성시 비용이 크다. 엔티티 매너저를 만드는 공장이다. 여러 스레드가 동시에 접근해도 안전하여 공유해도 된다. 엔티티 매니저는 생성시 비용이 거의 들지 않는다. 여러 스레드가 동시에 접근하면 동시성 문제가 발생한다. 데이터베이스 연결이 꼭 필요한 시점까지 커넥션을 얻지 않는다. 보통 트랜잭션을 시작할 때 커넥션을 획득한다. 영속성 컨텍스트 엔티티를 영구 저장하는 환경이다. 엔티티 매니저로 엔티티를 저장하거나

2022년 5월 10일
·
0개의 댓글
·

sqlalchemy flush commit rollback

sqlalchemy는 python의 ORM(object-relational mapper)이다. DB table의 row를 python object에 매핑해서 python 문법으로 조작할 수 있다. 그러나 조작만 하고 DB에 반영하지 않는다면 무의미한 짓을 한 것일 수 있다. session은 in-memory에 존재하고 DB에 변경을 가하는 트랜잭션이라고 볼 수 있다. lifecycle : 객체가 row로부터 인스턴스화되고 변경되고 DB에 commit되거나 rollback된다 이런 작업들은 commit되기 전까지 DB에 유지되지 않는다. session 객체는 session.add()로 트랜잭션 작업을 등록하지만 session.flush()가 호출되기 전까지는 DB에 전달하지 않은 상태다. session.flush()는 DB의 트랜잭션 buffer에 일련의 작업(insert, update, delete)을 전달한다. DB가 현재 트랜잭션에 대한 commit(`sessi

2021년 4월 24일
·
1개의 댓글
·
post-thumbnail

print() 함수의 새로운 면모(sep, end, file, flush)

이 글은 "오래 알고 지낸 print... 너 이렇게 💰이 많은... 아니 매개변수가 많은 아이였어...?"라는 깨달음을 바탕으로 작성된 글입니다. 사건의 발단 2차원 배열을 출력하기 위해 print의 end를 쓰다가 문득 다른 키워드 인자들에는 어떤 것들이 있는지 궁금해졌다. 공식 문서에 숨어있던 (나만 몰랐던 네 모습) 공식 문서(📂)를 찾아보니 print()에는 생각보다 많은 기능이 있었다. >print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False) 오래 알고 지낸 print... 너 이렇게 💰이 많은... 아니 매개변수가 많은 아이였어...? 라는 감격도 잠시, 공식 문서의 설명을 읽어도 잘 이해가 안 되어 python console에서 help

2020년 11월 27일
·
3개의 댓글
·