분류 전체보기

    JPA 플러시(flush())란?

    플러시(flush())란? 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것 변경 감지(dirty checking)하여 수정된 엔티티에 대한 수정 쿼리를 쓰기 지연 SQL 저장소에 등록한다. 그 후 쓰기 지연 SQL 저장소의 쿼리를 DB에 전송한다.(등록, 수정, 삭제 쿼리) 영속성 컨텍스트를 플러시하는 방법 em.flush() - 직접 호출 엔티티 매니저의 flush() 메서드로 영속성 컨텍스트를 강제로 플러시한다. 트랜잭션 커밋 - 플러시 자동 호출 트랜잭션만 커밋하면 DB에 반영되지 않는다. 따라서 트랜잭션을 커밋하기 전에 꼭 플러시를 호출해서 영속성 컨텍스트의 변경 내용을 DB에 반영해야 한다. JPA는 이런 문제를 예방하기 위해 트랜잭션을 커밋할 때 플러시를 자동으로 호출한다. JPQL 쿼리 실..

    Nginx란?

    Nginx란?

    2022.02.21 게시글 등록 2022.10.03 수정 및 추가 - 오타 수정 - Q&A 추가 - 기존글 수정 및 추가 올해 캡스톤 프로젝트에서 NGINX를 사용하게 됐는데 어떤 것인지 잘 몰라서 공부하기로 했다. 🧐 Nginx란? 트래픽이 많은 웹사이트의 서버(WAS)를 도와주는 비동기 이벤트 기반구조의 웹 서버 프로그램이다. 공식문서에서는 "NGINX는 고성능, 확장성, 고가용성 웹서버, 역방향 프록시 서버 및 웹 가속기(HTTP 로드밸런서, 콘텐츠 캐시 등의 기능 결합)이다." 라고 소개하고 있다. Web Server : 단순히 정적 파일 응답 WAS(Web Application Server) : 클라이언트 요청에 대해 동적 처리가 이뤄진 후 응답 📝 Nginx가 만들어진 배경 1995년 유닉스 ..

    영속성 컨텍스트(Persistence Context) #2

    영속성 컨텍스트(Persistence Context) #2

    🧐 영속성 컨텍스트의 특징 영속성 컨텍스트는 엔티티를 식별자 값으로 구분한다. 따라서 영속 상태는 식별자 값이 반드시 있어야 한다. (@Id로 테이블의 기본키와 매핑한 값) 영속성 컨텍스트에 엔티티를 저장하고 트랜잭션을 커밋하는 순간에 DB에 반영하는데 이것을 플러시(flush)라 한다. 1. 엔티티 조회 영속성 컨텍스트 내부에는 1차 캐시를 가지고 있다. 영속 상태 엔티티는 모두 이곳에 저장된다. // 엔티티 생성 (비영속) Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); // 엔티티를 영속 em.persist(member); 이렇게 코드를 작성했을때 다음 사진처럼 1차 캐시에 저장되게 된다. 이 상태에서..

    영속성 컨텍스트(Persistence Context) #1

    영속성 컨텍스트(Persistence Context) #1

    영속성 컨텍스트(Persistence Context)란? JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); 이 코드는 DB에 저장하는게 아니라 영속성 컨텍스트라는 곳에 저장하게된다. 즉, persist() 메서드는 엔티티 매니저로 entity를 영속성 컨텍스트에 저장한다는 의미이다. 이 영속성 컨텍스트는 엔티티 매니저를 생성할 때 만들어진다. (여러 엔티티 매니저가 같은 영속성 컨텍스트에 접근 가능) JPA는 기본적으로 트랜잭션 단위로 영속성 컨텍스트가 부여되어 사용된다. (트랜잭션을 선언하지 않았을 때, 스프링 데이터 JPA를 사용한다면 JPA repository 코드 내부에서 트랜잭션을 별도로 사용한다.) 위 처럼 J..

    EntityManagerFactory와 EntityManager

    EntityManagerFactory와 EntityManager

    엔티티 매니저 팩토리(Entity Manager Factory)는 말 그대로 엔티티 매니저(Entity Manager)를 만드는 공장이다. 이 공장을 만드는 비용은 아주 많이 든다. 그래서 1개만 만들어서 애플리케이션 전체에 공유하여 쓰도록 설계되어 있다. 하지만 공장에서 엔티티 매니저를 생성하는 비용은 거의 들지 않는다. 엔티티 매니저 팩토리는 여러 쓰레드가 동시에 접근해도 안전하여 서로 다른 스레드 간 공유해도 문제가 없다. 엔티티 매니저는 여러 쓰레드가 동시 접근하면 동시성 문제가 발생하기에 쓰레드간 공유를 하면 안된다. 위 그림은 요청이 생길 때 엔티티 매니저 팩토리에서 엔티티 매니저를 생성하여 동작하게 된다. 엔티티 매니저는 DB 연결이 필요한 시점까지 커넥션(conn)을 얻지 않는다. 그래서 ..

    H2 데이터베이스 설치

    H2 데이터베이스 설치

    스프링부트를 시작하면서 DB까지 테스트할 때 오라클이나 MySQL을 사용해도 되지만 없는 사람들은 번거롭다. 그래서 가벼운 H2 데이터베이스를 추천한다. JPA같은 경우 데이터베이스를 변경하기 쉽기 때문에 처음에 무엇을 쓰던 상관없다. H2 데이터베이스는 JVM 메모리 안에서 실행되는 임베디드 모드와 별도 서버를 띄워서 동작하는 서버모드가 있다. 그래서 자바가 설치되어 있어야 한다. 1. H2 데이터베이스 설치 http://www.h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open sour..

    Java 줄바꿈문자 \n 이란?

    Java 줄바꿈문자 \n 이란?

    *23.03.31 수정 자바를 쓰다보면 System.out.print("\n"); 을 쓸 때가 있다. 이러면 줄바꿈이 되어 한 줄 밑으로가서 새로운 라인을 추가하게 된다. 즉, "\n"은 개행문자(줄바꿈 문자)인 것이다. 우리가 흔히 쓰는 Enter키처럼 줄을 바꿔주는 문자라고 생각하면 편하다. 실제로 Enter키와 "\n"이 어떤 값으로 쓰이는지 살펴보자. 🚀 '\n' 과 Enter키의 인코딩 값 이렇게 실행하고 콘솔에 Enter키를 입력하면 10이라는 인코딩값이 나온다. 'a'는 97이라는 인코딩 값이 나온다. 왜 '\n'와 Enter키는 10이 나오고, 'a'는 97이 나올까? 이것은 해당 문자를 표현하기 위한 인코딩 값이다. 인코딩값은 대부분 1~127까지 똑같으니 아스키코드표를 살펴보자. 빨간색..

    [백준] 1157번 - Java(자바)

    [백준] 1157번 - Java(자바)

    백준 1157번 자바 https://www.acmicpc.net/problem/1157 1157번: 단어 공부 알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다. www.acmicpc.net 문제내용은 아래 더보기를 누르면 나온다. 더보기 알고리즘 알파벳 대소문자로 된 단어가 주어진다. ( 대소문자 구분하지 않는다!!! ) 단어에서 가장 많이 사용된 알파벳을 출력한다. ( 출력은 대문자 ) 동일하게 나오면 "?" 를 출력한다. 푸는 방법은 알파벳 숫자 26개만큼 배열을 만들어서 해당하는 배열값을 1+씩 해줘서 제일 높은 값 찾아야겠다. 1. int[26] 인 arr을 만든다. 2. 단어 str 을..