분류 전체보기 954

11. DB 스키마 자동 생성

JPA는 매핑 정보만 봐도 어떤 테이블인지, 열은 뭔지, 어떤 쿼리를 만들어야 하는지 까지도 알기 때문에, 테이블도 자동으로 생성할 수 있다. 당연히 운영단계에서 사용하는 것은 아니고, 개발에서 테스트 할 때나 로컬PC에서 작업할 때 도움이 된다. 자동생성 된 것이므로, 약간 의도되지 않은 면 들이 있음. 근데 개발할때만 쓸거라 상관은 없음. 이걸 사용하려면 우리가 JPA에게 DB정보를 정의해 뒀던 persistence.xml에 속성을 추가 해 줘야 함. ddl auto를 create로 하겠다. 이렇게 하면은, 자동으로 테이블을 생성함. Hibernate: drop table if exists Member cascade Hibernate: create table Member ( id bigint not ..

JPA/JPA 기본 2023.10.21

10. 객체와 테이블의 매핑

영속성 컨텍스트 개념과 더불어 중요함. 매핑 순서? 매핑할 때 해야 할 것들은 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn 연관관계 매핑은 관계형DB에서의 1대다, 다대다 등의 관계를 JPA에서는 어떻게 매핑할 것인가. 하는 것. @Entity 이게 붙은 클래스는 JPA가 관리하는 클래스이다. JPA를 사용하여 테이블과 매핑할 클래스는 이것이 필수이다. 그리고, JPA가 다루는 클래스는 기본생성자(파라미터 없는 생성자를 public이나 protect로)가 꼭 있어야 하며, final, enum, interface, inner 클래스를 사용하면 안된다. 저장하고 싶은 필드에 fi..

JPA/JPA 기본 2023.10.21

9. 준영속 상태

영속 상태는 영속성 컨텍스트 안에 있는 상태 준영속 상태는 엔티티가 영속성 컨텍스트에서 분리된 상태. 영속상태는 persist 하거나 find 해서 DB에서 찾아왔을 때 영속성 컨텍스트의 1차 캐시에 넣어지면서 이렇게 영속성 컨텍스트 안에서 관리되게 되는 것 들을 영속 상태 라고 함. 준영속은 영속성 컨텍스트에서 벗어난 거니 영속성 컨텍스트가 관리해주는 대상에 포함되지 않음. 더티체킹 등. 준영속으로 만드는 방법은 em.detach(member); //특정 엔티티를 준영속 상태로 만듦. em.clear(); //영속성 컨텍스트를 완전히 clear 함 em.close(); //아예 영속성 컨텍스트를 닫아버림. detach()를 쓰면 member와 관련된 모든 것들이 영속성 컨텍스트에서 빠져나감. 뭐 스냅샷..

JPA/JPA 기본 2023.10.20

8. 플러시

플러시란, 영속성 컨텍스트의 변경 내용을 DB에 반영하는 것, 즉 쿼리를 날리는 것 일듯. 플러시가 발생하면 일어나는 일 변경 감지 엔티티의 변경된 사항을 SQL로 번역하여 쓰기 지연 SQL 저장소에 등록 쓰기 지연 SQL 저장소에 있는 쿼리들을 DB에 날림. 아마 긴 문장으로 같이 전송하지 않을까..? 플러시 직접 쓸 일은 없는데 테스트 등 알아는 놔야 한다고 함. em.flush() 이게 플러스 직접 호출 나머지 자동 호출임. 트랜잭션 commit 시점에. JPQL 했을때도 자동호출이라는데 지금은 그냥 알아두기만 하라고 함.. 플러시의 행동은, 위에 말했던 게 다임. 짧게 얘기하면, 그냥 변경감지 하고 변경된거 있으면 쓰기 지연 SQL 저장소에 들어가고, 쓰기 지연 SQL 저장소에 있는 쿼리들을 DB..

JPA/JPA 기본 2023.10.20

7. 영속성 컨텍스트 2

Member member= new Member(); member.serId("member1"); member.setUsername("회원1"); em.persist(member); 저렇게 EntityManager 내부에 있는 영속 컨텍스트에 EntityManager를 통해 persist로 영속화 시키면, 저렇게 키가 id, Entity가 그 객체가 된 상태로 영속 컨텏트에 저장된다. 이것이 캐싱이다. 이렇게 하면 이점이, Member findedMember = em.find(Member.class, 1L); 이렇게 조회 시에, 먼저 캐싱된 거에 있는지 id로 조회해본다. 그럼 DB를 안거치기 때문에 성능이점이 있다. 없으면 DB에서 조회해 온 다음, 또 그걸 영속성 컨텍스트에 저장시켜 캐싱한다. (참고로..

JPA/JPA 기본 2023.10.20

6. 영속성 컨텍스트

JPA에서 가장 중요한 2가지 객체와 RDB 매핑 영속성 컨텍스트 앞서, EntityManagerFactory와 EntityManager EntityManagerFactory에서 앞서 우리가 명시한 persistence,xml대로 EntityManagerFactory가 만들어 지고, 거기서 이름을 지정하여 EntityManager를 생성할 수 있다. 그럼 이 EntityManager는 내부적으로 커넥션을 사용하여 DB와 소통한다. 영속성 컨텍스트란 엔티티를 영구 저장하는 환경. 우리가 EntityManager.persist(entity); 하면 entity를 DB에 저장한다, 이렇게 배웠는데, 더 정확하게 말하면, 영속성 컨텍스트를 통해서 저 엔티티를 영속화 한다는 뜻이다. 즉, 저 순간 DB에 쿼리를 ..

JPA/JPA 기본 2023.10.20

4. 웹소켓으로 클라이언트와 서버 간 메시지 주고받기

사실 이제 그냥, 이벤트가 일어났을 때 어떻게 할지만 추가시켜주면 되는 부분이다. wss.on("connection", (socket)=>{ console.log("Connected to Client"); socket.send("hello!"); }); 서버쪽은 그냥 연결이 되었을 떄, 소켓을 통해 hello라는 메시지를 보내도록 했다. 소켓은 연결에 관한 정보, 연결된 상대, 연결을 통해 할수 있는 일 들을 모아놓은 객체이다. const socket = new WebSocket("ws://localhost:3000"); socket.addEventListener("message", (m)=>{ console.log(m.data); }); socket.addEventListener("open", ()=>..

3. 웹소켓 이벤트

먼저, 프론트엔드와 백엔드 사이의 연결을 만들 것이다. 메시지를 주고 받도록 할 것이다. 먼저 웹 소켓은, html 요소 이벤트 추가 하듯이, ("이벤트명", fuction) 할 수 있다. 웹소켓은 const wss = new WebSocketServer({server}); wss.on("connection", handleConnection) 이렇게 웹소켓서버의 on이라는 메소드로 이벤트를 추가할 수 있다. (handleConnection은 콜백함수) 추가할 수 있는 이벤트 종류는, connection, close, error, headers, listening이 있다. 또, 안에 콜백 함수로 넣어주는 인자는 소켓서버 그 자체와, 소켓과, request 요청 총 3가지 소켓이란 연결된 사람에 대한 정보 ..