프록시 2

[JPA] 프록시(Proxy) 기초 (2)

저번 글에 이어서 프록시에 대해서 더 알아보겠습니다. JPA에서 식별자로 엔티티를 조회할 때는 EntityManager.find() 를 사용합니다. 그런데 이렇게 조회하면 조회한 엔티티를 사용하든 사용하지 않든 데이터베이스를 조회하게 됩니다. 그런데 저번에 봤듯이 항상 연관된 객체들이 모두 필요한 것은 아니죠. EntityManager.getReference() 를 사용하면 JPA 는 데이터베이스를 조회하지 않고 실제 엔티티 객체도 생성하지 않습니다. 바로 프록시 객체를 반환하죠. 위의 그림처럼 프록시 객체를 리턴해줍니다. 본격적으로 프록시 객체가 어떤건지 알아보겠습니다. 전에 작성한 글에서 프록시 서버, 리버스 프록시 와 같은 이야기도 했는데요, 여기서 다룰 프록시는 프록시 패턴에 관련되어 있습니다. ..

BackEnd/JPA 2022.05.18

[JPA] 프록시(Proxy) 기초 (1)

연관관계를 마무리하고 프록시로 넘어가려고 합니다. 상속이나 고급매핑 등을 더 다루려고 했으나, 제 경험상으로는 JPA를 사용하면서 연관관계를 너무 복잡하게 맺으면 유지보수나 개발 측면에서 어려움이 있었습니다. OOP를 염두해두고 개발을 하다보면 안그래도 객체간의 관계에 집중을 하게되고, 어떻게 캡슐화를 시킬지 은닉할지 메시지를 주고받게 할지 많은 고민을 하게됩니다. 그런데 연관관계가 너무 복잡하면 OOP의 난이도도 너무 많이 올라간다고 생각합니다. 적당한 선에서 코드 품질을 유지하고, 꼭 필요한 매핑이 있다면 저도 그때그때 찾아가면서 개발을 하는 편입니다. 그러면 이번부터는 프록시에 대해서 알아보겠습니다. Proxy proxy 는 사전적 의미로 다른 사람을 대신 할 권한이 있는 대리인, 다른 사람을 위해..

BackEnd/JPA 2022.05.17