일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Set
- Linux
- 방화벽
- AOP
- ansible
- Java
- IntelliJ
- JPA
- STREAM
- container
- 캐시서버
- Collection
- 액세스회선
- cloud
- Spring
- 라우터
- docker
- Pipeline
- map
- 허브
- post
- tomcat
- jdk
- LAN어댑터
- gradle
- DevOps
- 소켓
- mybatis
- sonarQube
- Jenkins
- Today
- Total
목록웹 개발/DB연동 (22)
거북이-https://velog.io/@violet_evgadn 이전완료
Spring Data JPA 먼저 Spring Data JPA를 활용하는 방식은 EntityManager의 활용 방식 차이이다. 이전에 배웠던 JPA의 Entity, @Id 등 Annotation에 대한 것은 완전히 동일하게 Spring Data JPA에서 활용할 수 있는 것이다. 그렇다면 Spring Data JPA는 일반 JPA와 어떤 점이 다르기에 그토록 사용을 추천하는 것일까? 우리는 이전에 일반 JPA에서는 EntityManager를 먼저 상속받은 이후 em.remove, em.find 등을 통해 활용함을 알 수 있었다. 하지만 JPA는 이 EntityManager를 상속받는 과정마저 없애버린 것이다. 실제로 MyBatis에서는 SqlSession을 활용하지만 이 SqlSession을 주입받는 ..
EntityListener ◎ EntityListener란? EntityListener란 특정 메서드에 어노테이션을 붙이면 어노테이션에서 명시된 시점에 해당 메서드가 호출되어 실행되는 것을 말한다. 예를 들어, 내가 View단에서 데이터를 보낼 때 [1,2,3,4] 같은 List 형식이 아닌 String 형식인 "1,2,3,4"로 데이터를 받았다고 가정하자. 그럴 경우 우리는 로직상 이 "1,2,3,4"를 List 형식인 [1,2,3,4]로 바꾸거나, 반대로 [1,2,3,4] List Data를 "1,2,3,4"로 변환하는 과정이 필요할 수도 있다. 그런데 이런 Case가 매번 실행되어야 한다면 같은 메서드를 계속해서 입력해줘야 한다는 것이고, 이는 객체지향적인 개발이 아닐 것이다. 따라서 EntityL..
지연 로딩 ◎ 지연 로딩이란? JPA 측에서 Entity가 실제로 사용되기 전까지 DB 조회를 지연하는 것을 말한다. 문제는 지연 로딩을 사용하기 위해서는 DB 조회를 하지는 않았지만 필요한 순간 바로 조회하여 저장할 "가짜 객체"가 필요하다는 점인데, 이 객체를 프록시 객체라고 한다. 프록시 객체는 처음 사용할 때 1번만 초기화되고, 프록시 객체를 통해서도 실제 Entity에 접근할 수 있다. 영속성 컨텍스트에 만약 찾는 Entity가 존재할 경우 em.getRefrence()를 통해 프록시 객체를 활용하더라도 실제 Entity가 저장된다는 특징이 있다. // 엔티티 직접 조회 - 영속성 컨텍스트에 없으면 DB 조회 Member member = em.find(Member.class, 100L); // ..
단방향 연관관계 ◎ 단방향 연관관계란? JPA를 활용해 연관 관계를 설정할 때는 "방향"을 지정해줄 수 있다. 예시로 팀과 선수를 생각해보자. 팀은 1개일 때 해당 팀에 소속된 선수는 다수 있을 것이므로 팀과 선수는 1:N 관계라고 생각할 수 있다. 여기에서 단방향을 설명하기 전에 양방향을 먼저 설명하자면, 사실 양방향은 따로 양방향이라는 개념이 존재하는 것이 아니라 "단방향 연관관계 2개를 설정한 것"이라고 생각하면 된다. 자 머리가 점점 아파온다. 이제 예시를 통해 조금씩 풀어보자. 먼저 나는 팀 데이터를 확인할 때는 선수를 보고 싶지만, 굳이 선수를 확인할 때는 해당 선수가 속한 팀 정보까지는 알고 싶지 않을 수도 있다. 내가 "최정"이라는 선수의 정보를 보고 싶은데, 굳이 SSG 팀의 연봉이나 승..
다양한 Mapping을 활용한 엔티티 클래스 @Entity @Table(name="MEMBER") public class Member { @Id @Column(name = "ID") private String id; @Column(name = "NAME", nullable = false, length = 10) private String username; private Integer age; @Enumerated(EnumType.STRING) private RoleType roleType; @Temporal(TemporalType.TIMESTAMP) private Date createdDate; @Temporal(TemporalType.TIMESTAMP) private Date lastModifiedDa..
persistence.xml 먼저 전체 완성된 persistence.xml 형식은 위와 같다. 그렇다면 한 부분씩 뜯어보면서 어떤 property가 어떤 역할을 하는지 알아보자. ◎ 설정 파일 명시 ~~~ 설정 파일임을 알리는 태그이다. ◎ 영속성 유닛(persistence-unit) ~~~ 영속성 유닛을 등록하는 방법으로 태그 안에 영속성 유닛(persistence-unit)에 대한 여러 가지 설정이 들어갈 수 있다. 영속성 유닛 1개는 여러 개의 Property를 가지고 있어 내가 원하는 EntityManagerFactory의 설정 값들을 넣어줄 수 있다. 일반적으로 연결할 DB 하나당 1개의 persistence-unit을 등록하는 경우가 많다. 예를 들어, name="mysql"인 영속성 유닛에는..
EntityManger 생성 방법 먼저 이론적인 방법을 설명하겠다. 이론적인 방법을 설명하는 이유는 Spring Boot 사용 여부에 따라 EntityManager 사용 방법이 완전히 다르기 때문이다. 지금 설명하는 방법은 Spring Boot를 사용하지 않을 경우 EntityManger를 생성하는 방법인데 Spring Boot를 활용하더라도 이런 개념이 바뀌는 것은 아니고 단순히 Spring Boot가 중간 과정을 담당해주기 때문에 더욱 편리하게 설정 및 EntityManager를 생성할 수 있게 되는 것이다. JPA도 큰 의미로 보자면 MyBatis의 동작 방식과 유사하다. MyBatis는 SqlSessionFactory라는 것이 Query가 필요할 때마다 SqlSession을 생성하여 Query를 ..
Entity 상태 ◎ 비영속(new/transient) 영속성 컨텍스트와 전화 관계 없는 객체 상태를 의미한다 영속성 컨텍스트가 JPA에서 DB와 통신하는 중간 다리 역할을 하기 때문에 결국 객체가 영속 컨텍스트에 의해 관리를 받고 있어야만 DB와 통신하며 데이터에 대한 처리가 가능해지는 것이다. 그렇다면 영속성 컨텍스트와 아예 관련이 없는 비영속 상태의 객체는 어떤 의미를 지닐까? 그냥 "순수한 객체 상태", 즉 DB와 연동할 수 없는 단순한 POJO 객체에 불과하다. 이런 비영속 상태의 객체를 persist() 명령을 통해 영속성 컨텍스트에 등록시켜 관리 상태로 바꿔줘야지만 객체를 통해 DBD 데이터를 처리할 수 있게 되는 것이다. ◎ 영속(managed) 영속성 컨텍스트에 저장된 Entity 상태를..
영속성 컨텍스트 ◎ 영속성 컨텍스트 JPA 개념 중에 가장 강조할 개념이 무엇인지 묻는다면 필자는 아무 고민하지 않고 영속성 컨텍스트라고 말할 것이다. 영속성 컨텍스트는 (개인적인 생각에) JPA의 꽃이라고도 할 수 있으며 동시에 JPA에서 제공하는 여러 편리한 기능을 활용할 수 있게 해주는 최고의 도우미이기도 하다. 동시에 Entity를 관리해주기도 하고 Update를 편리하게 할 수 있게 해주는 공간으로 영속성 컨텍스트에 대해 알지 못한다면 JPA 개념을 시작조차 할 수 없을 정도이다. 영속성 컨텍스트란 "Entity를 영구히 저장하는 환경"을 말한다. 조금 더 풀어보자면 JPA에서 Entity(객체)를 Transaction 과정에서 저장하여 재사용할 수 있게 해주는 공간이다. 이 영속성 컨텍스트라는..
JPA 등장 배경 ORM의 시초는 "EJB"이다. EJB는 Eneterprise Java Bean의 약자로써 기업환경의 시스템을 구현하기 위한 Server 측 Componenet Model이다. EJB에서는 DB 연동이 필요하지 않은 Session Bean과 DB의 데이터를 관리하는 Entity Bean이 존재한다. DB 관련 쿼리는 Entity Bean에서 자동으로 처리하여 개발자는 로직에 더욱 집중하며 코드를 짤 수 있게 되는 것이다. 일반적으로 Client가 Session Bean을 부르고, Session Bean이 Entity Bean을 호출하여 DB에 접근한다. 하지만 EJB는 코드가 지저분하고 Interface를 많이 구현해야 해서 복잡성이 높으며 속도가 느리다는 단점이 존재했다. 이런 문제를..