[정리] 기능별 개념 정리(105)
-
영속성 컨텍스트 정리
Hibernate 에서는 EntityManagerFactory = SessionFactory, EntityManager = Session 이라고 불렸다. 즉 EntityManager 의 역할은 세션, Transaction 의 관리다. 영속성 컨텍스트의 장점 1. 캐시 2. 쓰기 지연 3. 로딩 지연 (프록시로 구현 : 없는 시점에 가져오도록 되어있음) 4. 변경 감지 (update 메소드가 없어도 된다) 5. 동일성 보장 (영속성 컨텍스트의 data는 DB와 동일하다.)
2019.05.20 -
Orphan removal vs Cascade.remove
Orphan removal 는 OneToMany OneToOne 일 때 사용 가능하다. OneToOne : Orphan removal vs Cascade.remove Cascade.remove @Entity class Parent { @OneToMany(cascade=CascadeType.REMOVE) List children; } parentRepository.delete(parentA) 하면 children 들도 같이 제거가된다. parentA.setChildren(null) = 부모가 자식을 버리는 행위 -> 자식은 고아가 된다. -> 하지만 이를 save, flush 하지 않으면 DB에서 되지 않는다. Orphan removal @Entity class Parent { @OneToMany(orph..
2019.05.16 -
PSA (추상화 계층)
서블릿 어플리케이션을 만들고있음에도 불구하고 스프링을 사용하면서 서블릿을 직접적으로 사용하지 않는다. 서블릿 코드 샘플 public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOExcepti..
2019.05.01 -
스프링 부트의 Mock
MOCK 의 사전적 의미 : 모조품 Mocking 과 Spying 테스트할 때 원격 서버의 api 와 통신해봐야 할 수도 있다. 그런데 이렇게 되면 테스트 코드가 원격 서버에 의존적이다. 원격 서버와 통신해야하므로 테스트 코드의 성능도 문제가 된다. 또한 원격 서버가 다운되어 있을 때를 테스트하는 코드가 작성되야 할 수도 있다. 이런 경우 실제로 원격 서버를 다운시킬 수도 없는 노릇이다.이럴 때를 위해서 Spring boot 는 @MockBean과 @SpyBean을 제공한다. + MockRestServiceServer @MockBean @RunWith(SpringRunner.class) @SpringBootTest public class MyTests { @Autowired private MyServic..
2019.04.28 -
JPA 양방향 맵핑, Test 코드 작성시 유의사항
@Entity @Table(name="team") public class Team { @Id @Column(name="team_id") @GeneratedValue(strategy= GenerationType.IDENTITY) private long id; @OneToMany(mappedBy="team") private List members; } @Entity @Table(name="member") public class Member { @Id @Column(name="member_id") @GeneratedValue(strategy= GenerationType.IDENTITY) private long id; private String name; @ManyToOne @JoinColumn(name="te..
2019.04.25 -
JPA - Mapped By 의 필요성, '관계의 주인' 의미
Owner of relation != Owing side Owner of relation 이라는 표현은 어디에서 나온 것인가? 관계를 표현하는데 있어서 가장 중요한 것은 foreign key 가 바라보는 대상이 누구인지이다. 즉 foreign key 는 관계를 나타내는데 굉장히 중요한 단서이다. 그래서 'Foreign key' = '관계의 핵심' = '관계의 주인' 이라고 한다. Team ~ Member 사이의 일대다 관계가 있다고 생각해보자. @Entity @Table(name="team") public class Team { @Id @Column(name="team_id") private long id; @OneToMany(mappedBy="team") private List members; } @E..
2019.04.25