본문 바로가기
  • Where there is a will there is a way.

분류 전체보기124

JPA 기초 프록시란 무엇인가 프록시란? JPA 구현체들은 연관된 객체들 처음부터 데이터베이스에서 조회하는 것이 아니라, 실제 사용하는 시점에 데이터베이스에서 조회할 수 있다. 이와 관련 된 기술이 프록시 인데, 이 프록시를 통해서 즉시로딩 ( EAGER ) 과 지연로딩 ( LAZY ) 을 할 수 있다. JPA 표준 명세는 지연 로딩 구현방법을 JPA 구현체에 위임했다. 하이버네이트는 지연 로딩을 지원하기 위해 프록시를 사용하는 방법과 바이트코드를 수정하는 두 가지 방법을 제공하는데 바이트코드를 수정하는 방법은 복잡하다. 프록시의 기초 JPA 에서 식별자로 엔티티를 하나 조회할 때 EntityManger.find(); or repository -> findById(); 이 메소드는 영속성 컨텍스트에 엔티티가 없으면 데이터베이스를 조회.. 2020. 4. 12.
SQL group by 와 기본적인 문법 이해 코딩인터뷰 완전분석에 나온 글을 인용했습니다. 조건 table Courses : courseID ( primaryKey ) , courseName , TeacherID Teachers : TeacherID ( primaryKey ) , TeacherName Student : StudenetID ( primaryKey ), StudentName StudentCourses : CourseID ( primaryKey ) , Student ( primaryKey ) group by 예제 1. 모든 학생의 목록을 뽑고 각 학생이 얼마나 많은 강의를 수강하고 있는지 확인하라 이 문제를 보게되면 우리는 다음과 같은 sql 을 작성할 수 있겠다. select Student.studentName , count(*) fr.. 2020. 3. 29.
객체 지향 설계 5단계 무엇을 개발해야 하는지 명확하게 이해하지 못한 상태에서 코딩부터 시작하는 개발자는 회사의 입장에서 시간과 돈을 낭비하게 만들며 더 심각한 문제를 만들 수 있다. 1단계 모호성의 해소 ( 비즈니스 파악 ) 객체 지향 설계는 우선 누가 그것을 사용할 것이며 어떻게 사용할 것인지 파악하는 것이 중요하다. 2단계 핵심 객체의 설계 ( 모델 설계 ) 핵심 객체가 무엇인지 생각해봐야 한다. 예를 들어, 식당을 객체 지향적으로 설계한다고 하면 Table, Guest, Party, Order, Meal, Employee, Server, Host 등이 있을 수 있겠다. 3단계 관계 분석 ( 모델 관계 설정 ) 어떤 객체에 속해 있는가? 다른 객체로부터 상속 받아야 하는 객체는 있나? 다대다 인가 일대다 인가? 4단계 행.. 2020. 3. 26.
Java Collection 프레임워크 자바 collection 프레임워크 배열은 크기가 고정되어 있고 객체를 삭제했을 대 해당 인덱스가 비고 새로운 객체를 저장할 때 어디가 비는지 확인해야하는 과정들을 거쳐야 하는 경우가 있다. 자바는 이러한 문제점을 해결하기 위해서 우리가 알고있는 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 java.util 패키지에 컬렉션과 관련된 인터페이스와 클래스들을 포함시켜 놓았다. 이들을 총칭해서 컬렉션 프레임워크라고 한다. List 컬렉션 ArrayList 배열은 생성할 때 크기가 고정되고 사용 중에 크기를 변경할 수 없지만, ArrayList 는 저장용량을 초과한 객체들이 들어오면 자동적으로 저장 용량이 늘어난다. 기본 생성자로 객체를 생성하면 내부에 10개의 객체를 저장할 수 있는.. 2020. 3. 22.
heap 메모리와 Garbage Collector 개발을 하면서 대용량 데이터를 인메모리에 저장해서 DB 의 부하를 최소화 하고 속도를 개선하는 작업을 한적이 있다 인메모리에 저장하는 데이터는 대용량 데이터로 주기적으로 스케줄링을 통해서 업데이트 되었다. 여기서 레디스를 사용하여 2가지의 개선점을 두었는데 1. 블루그린 배포시에 인메모리에 데이터를 채우는데 시간이 소모되므로 레디스 캐시를 이용하여 데이터를 불러온다. 2. 스케줄링을 돌릴때 모든 aws 인스턴스에서 ( java project 가 인스턴스당 1개 ) 모두 돌아가면 n 만큼 db에 부하가 걸린다. 따라서 레디스에 시간차 키를 두어서 선별적인 스케줄링을 실행하게 한다. 여기서 문제가 발생하였다. 인메모리에 데이터를 최신화 하는 과정에서 레디스를 사용했는데 레디스 스트림 객체가 heap 메모리를.. 2020. 3. 21.
JPA 연관관계 연관관계 연관관계 중에선 다대일 단방향 관계를 가장 먼저 이해해야 한다. 우리가 흔히 디비에서 데이터를 연관시키려면 외래키를 사용한다. 외래키를 사용하여 정보를 제공하게 되면 자연스럽게 양방향으로 연관관계가 맺어진다. 하지만 객체의 경우엔 주소를 참조로 단방향으로 연관관계가 맺어진다. 만약에 양방향으로 걸고싶으면 서로 참조를 해야한다. 즉, 객체의 경우엔 참조를 통하여 양방향 관계가 아니라 서로 다른방향 관계 2개다. 테이블은 왜래 키로 양방향 연관관계를 맺는다. ( 조인 사용 ) 연관관계 사용 저장 JPA 에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. JPA 는 참조한 엔티티의 식별자를 외래 키로 사용해서 적절한 등록 쿼리를 생성한다. ( 여기서 연관관계 주인에 대한 개념이 나오는.. 2020. 3. 16.