전체 글 110

[WIL] 항해 4주차

이번주차에 했던 것들 항해 LV3 ~ LV5. 추가사항 LV3 ~ LV5 git flow 지키며 레파지토리 관리 LV3 : 게시판 + 댓글 LV4 : security 적용 LV5 : 게시판, 댓글 좋아요 기능, 대댓글 JPA 연관관계 복습 김영한 JPA 기본편 구매후 학습중 드디어 한달이 지나갔다. 주특기 주차에 해야하는 가으이 및 숙제를 끝냈다. 이번주는 뭔가 후딱 지나가버렸다... 숙제하랴 강의 들으랴 바쁜거같은데 진도는 안나가고 이해는 못하고 스트레스는 받고 미치는 주차였다. 물론 지금도...ㅋㅋ 견뎌야지 뭐 방법 있나?ㅋ 이번주차에는 매니저님이 코드리뷰도 해주셨다 이것저것 코딩하는 방법등 알려주시고 했지만 그만큼 내가 많이 부족하다는 것도 알았다. 그만큼 공부해서 부족한 부분을 채워야지 이것도 뭐..

TIL 2023.07.09

[JPA] Entity의 상태

비영속 상태(Transient) Memo memo = new Memo(); // 비영속 상태 memo.setId(1L); memo.setUsername("Robbie"); memo.setContents("비영속과 영속 상태"); 쉽게 말하자면 new 연산자를 통해 인스턴스화 된 Entity 객체를 의미합니다. 아직 영속성 컨텍스트에 저장되지 않았기 때문에 JPA의 관리를 받지 않습니다. 영속(Managed) em.persist(memo); persist(entity) : 비영속 Entity를 EntityManager를 통해 영속성 컨텍스트에 저장하여 관리되고 있는 상태로 만듭니다. 준영속(Detached) 준영속 상태는 영속성 컨텍스트에 저장되어 관리되다가 분리된 상태를 의미합니다. 영속 -> 준영속 영..

JPA 2023.07.09

[JPA] 변경감지 (Dirty Checking)

JPA에는 수정과 관련된 메소드가 존재하지 않습니다. 당연히 JPA도 DB 데이터를 수정할 수 있습니다. 다만 수정 메소드가 존재하지 않을 뿐입니다. JPA를 사용하여 데이터를 수정하려면 Entity를 조회하여 조회된 Entity 데이터를 변경만 하면 데이터 베이스에 자동으로 반영이 되도록 하는 기능을 바로 Dirty Checking이라고 합니다. JPA는 영속성 컨텍스트에 Entity를 저장할 때 최초 상태(LoadedState)를 저장합니다. 트랜잭션이 commit되고 em.flush(); 가 호출되면 Entity의 현재 상태와 저장한 최초 상태를 비교합니다. 변경 내용이 있다면 Update SQL을 생성하여 쓰기 지연 저장소에 저장하고 모든 쓰기지연 저장소의 SQL을 DB에 요청합니다. 마지막으로 ..

JPA 2023.07.09

[JPA] 쓰기 지연 저장소

JPA는 트랜잭션 : DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다가 마지막에 영구적으로 변경을 반영하는 것 처럼 JPA에서도 영속성 컨텍스트로 관리하고 있는 변경이 발생한 객체들의 정보를 쓰기 지연 저장소에 전부 가지고 있다가 마지막에 SQL을 한번에 DB에 요청해 변경을 반영합니다. JPA는 이를 구현하기 위해 쓰기 지연 저장소를 만들어 SQL을 모아두고 있다가 트랜잭션 commit 후 한번에 DB에 반영합니다. flush() 트랜잭션 commit 후 쓰기 지연 저장소의 SQL들이 한번에 요청됨 사실 트랜잭션 commit 후 추가적인 동작이 있는데 바로 em.flush(); 메서드의 호출 flush 메서드는 영속성 컨텍스트의 변경 내용들을 DB에 반영하는 역할을 수행 즉, 쓰기 지연 저..

JPA 2023.07.09

[JPA] 1차 캐시

📌 영속성 컨텍스트는 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간입니다. 영속성 컨텍스트가 어떻게 Entity 객체를 효율적으로 관리하고 있는지 살펴보겠습니다. 1차 캐시 영속성 컨텍스트는 내부적으로 캐시 저장소를 가지고 있습니다. 우리가 저장하는 Entity 객체들이 1차 캐시 즉, 캐시 저장소에 저장된다고 생각하시면됩니다. 캐시 저장소는 Map 자료구조 형태로 되어있습니다. key에는 @Id로 매핑한 기본 키 즉, 식별자 값을 저장합니다. value에는 해당 Entity 클래스의 객체를 저장합니다. 영속성 컨텍스트는 캐시 저장소 Key에 저장한 식별자값을 사용하여 Entity 객체를 구분하고 관리합니다. 1차 캐시 장점 DB 조회 횟수를 줄임 '1차 캐시'를 사용해 DB row 1..

JPA 2023.07.09

[JPA] 트랜잭션

트랜잭션이란 트랜잭션은 DB 데이터들의 무결성과 정합성을 유지하기 위한 하나의 논리적 개념입니다. 쉽게 표현하자면 DB의 데이터들을 안전하게 관리하기 위해서 생겨난 개념입니다. 가장 큰 특징은 여러 개의 SQL이 하나의 트랜잭션에 포함될 수 있다는 점입니다. 이때, 모든 SQL이 성공적으로 수행이 되면 DB에 영구적으로 변경을 반영하지만 SQL 중 단 하나라도 실패한다면 모든 변경을 되돌립니다. JPA는 DB의 이러한 트랜잭션 개념을 사용하여 효율적으로 Entity를 관리하고 있습니다. JPA의 트랜잭션 영속성 컨텍스트에 Entity 객체들을 저장했다고 해서 DB에 바로 반영 되지는 않습니다. DB에서 하나의 트랜잭션에 여러 개의 SQL을 포함하고 있다가 마지막에 영구적으로 변경을 반영하는 것 처럼 JP..

JPA 2023.07.09

[JPA] 영속성 컨텍스트

[참조] Entity : https://pink-love-princess.tistory.com/95 JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑 영속성 컨텍스트 엔티티 매니저 팩토리와 엔티티 매니저 영속성 컨텍스트 Persistence를 한글로 번역하면 영속성, 지속성 이라는 뜻이 됩니다. Persistence를 객체의 관점으로 해석해 보자면 ‘객체가 생명(객체가 유지되는 시간)이나 공간(객체의 위치)을 자유롭게 유지하고 이동할수 있는 객체의 성질’을 의미합니다. 영속성 컨텍스트를 좀 더 쉽게 표현해 보자면 Entity 객체를 효율적으로 쉽게 관리하기 위해 만들어진 공간입니다. 개발자들은 이제 직접 SQL을 작성하지 않아도 JPA를 사용하여 DB에 데이터를 저장하거나 조회할 수 있으며 ..

JPA 2023.07.09

[JPA] Entity

Entity Entity란? JPA에서 관리되는 클래스 즉, 객체를 의미함. Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리됨 Entity 어노테이션 @Entity : JPA가 관리할 수 있는 Entity 클래스로 지정할 수 있다. @Entity(name = "Memo") : Entity 클래스 이름을 지정할 수 있다. (default: 클래스명) JPA가 Entity 클래스를 인스턴스화 할 때 기본 생성자를 사용하기 때문에 반드시 현재 Entity 클래스에서 기본 생성자가 생성되고 있는지 확인해야 한다. @Table : 매핑할 테이블을 지정해줍니다. @Table(name = "memo") : 매핑할 테이블의 이름을 지정할 수 있다. (default: Entity 명) @Column :..

JPA 2023.07.09

[JPA] JPA란?

[참고] https://pink-love-princess.tistory.com/90 ORM이란 💡 JPA: Java Persistence API 자바 ORM 기술에 대한 표준 명세 JPA 동작 JPA는 애플리케이션 서버와 JDBC 사이에서 동작된다. JPA를 사용하면 DB 연결 과정을 직접 개발하지 않아도 자도으로 처리해준다. 객체를 통해 간접적으로 DB데이터를 다룰 수 있기 때문에 매우 쉽게 DB 작업을 처리할 수 있다. 하이버네이트(Hibernate)란? JPA를 사용하기 위해서 JPA를 구현한 ORM 프레임워크 중 하나이다. ORM 프레임워크 중 가장 많이 사용되며, JPA 인터페이스의 실제 구현부를 담당한다. 장점 👉 객체 지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중할 수 있으..

JPA 2023.07.09

[WIL] 항해 3주차

이번주차에 했던 것들 항해 99 스프링 강의 입문, 숙련 주차 학습 강의 입문 주차 및 숙련 1주 차 복습 (블로그 정리 x) 스프링 과제 Lv1~Lv2 git flow 및 git 명령어 (협업을 위해서 공부) 스프링 과제 Lv3 ~ 진행 중 [블로그 복습] https://pink-love-princess.tistory.com/category/Spring 'Spring' 카테고리의 글 목록 우아하게 코딩하자해서 공주라 한거임 오해 x pink-love-princess.tistory.com 어려운 것 Spring security, JPA 연관관계 좋았던 거 스프링 Lv과제를 풀면서 협업에 관련된 블로그들을 보면서 git flow(깃을 이용한 프로젝트 흐름)을 사용해 나의 페어짝꿍이랑 최대한 협업 느낌으로 ..

TIL/2023 2023.07.02