분류 전체보기

    [JPA] 즉시로딩과 지연로딩에 대해

    JPA 즉시로딩과 지연로딩에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. JPA는 즉시로딩과 지연로딩이 있다. 즉시 로딩: 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다. ex) em.find(Member.class, "member1") 를 호출할 때 Member 엔티티와 연관된 팀 엔티티도 함께 조회한다. @ManyToOne(fetch = FetchType.EAGER) 이렇게 EAGER를 이용해서 설정해준다. 지연 로딩: 연관된 엔티티를 실제 사용할 때 조회한다. ex) membet.getTeam().getName() 처럼 조회한 Team 엔티티를 실제 사용하는 시점에서 JPA가 SQL을 호출해서 팀 엔티티를 조회한다. @ManyToOne(fetch = FetchT..

    [JPA] 기본 키 매핑 전략에 대해

    JPA 기본 키 매핑 전략에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. @Id 에 대한 기본키 매핑 전략은 여러 방법이 있다. 크게는 직접할당하는 방법과 자동생성 방법이 있다. 직접할당 방법 @Id @Column(name = "id") private String id; 다음의 경우는 그냥 직접 할당하는 방법이다. 식별자 값을 반드시 넣고 저장을 해야한다. 자동할당 방법 IDENTITY 전략 이 전략은 기본 키 생성을 데이터베이스에 위임하는 전략이다. 주로 MySQL, PostgreSQL, SQL Server, DB2 에서 사용한다. 예로 들어 MySQL 의 AUTO_INCREMENT 기능은 데이터베이스가 기본 키를 자동으로 생성해준다. @Entity public cla..

    [JPA] 연관관계 매핑에 대해

    JPA 연관관계 매핑에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. 이 글은 기존에 JPA 연관관계 매핑에 대해 알고 있다는 가정하에 내용을 간단히 복기하기 위한 글입니다. 단방향 연관관계 @Entity public class Member { @Id @GeneratedValue private String id; @Column(name = "USERNAME") private String name; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; } Member..

    [JPA] 프록시와 연관관계에 대해

    JPA 프록시와 연관관계에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. Member findMember1 = em.find(Member.class, member.getId()); Member findMember2 = em.getReference(Member.class, member.getId()); System.out.println("findMember.id=" + findMember.getId()); System.out.println("findMember.username=" + findMember.getUsername()); 첫째 줄의 코드는 바로 query를 실행하는 반면, 두번째 줄의 코드는 실행을 하지않다가 print 에서 getId와 username을 만나고 나..

    [JPA] 필드와 컬럼 매핑에 대해

    JPA 필드와 컬럼 매핑에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. 필드와 컬림 패잉용 어노테이션은 다음과 같이 있다. @Column, @Enumerated, @Temporal, @Lob, @Transient, @Access 이것들을 간단히 살펴보자. @Column @Column은 가장 많이 사용되는 어노테이션이고 기능도 많다. 속성 중에 name, nullable이 주로 사용된다. 속성 기능 기본값 name 필드와 매핑할 테이블의 컬럼 이름 객체의 필드 이름 insertable 엔티티 저장 시 이 필드도 같이 저장한다. false로 설정하면 db에 저장하지 않는다. false 옵션은 읽기 전용일 때 사용한다. true updatable 엔티티 수정 시 이 필드도 같..

    [JPA] 영속성 컨텍스트에 대해

    영속성 컨텍스트에 대해 본 내용은 자바 ORM 표준 JPA 프로그래밍 책을 토대로 정리했습니다. 영속성 컨텍스트란 "엔티티를 영구 저장하는 환경"이라는 뜻이다. EntityManager.persist(entity) 이것은 entity를 영속성 컨텍스트에 저장한다는 뜻이다. 엔티티의 생명주기 비영속(new/transient) : 영속성 컨텍스트와 전혀 관계까 없는 새로운 상태 영속(managed) : 영속성 컨텍스트에 관리되는 상태 준영속(detached) : 영속성 컨텍스트에 저장되었다가 분리된 상태 삭제(removed) : 삭제된 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원 1");위의 상태는 비영속 상..

    웹 캐싱 기법

    웹 캐싱 기법 웹캐싱 캐싱 기법은 저장장치 계층 간의 속도 차이를 완충시켜주기 위해 컴퓨터 구조, 운영체제, 데이터베이스 등의 분야에서 각각 캐시 메모리, 페이징 기법, 버퍼링 기법 등으로 널리 연구되어왔다. 웹캐싱이란 웹 사용자에 의해 빈번히 요청되는 데이터를 사용자와 지리적으로 가까운 웹캐시 서버에 보관해 빠른 서비스를 가능하게 하는 기법을 말한다. 웹캐싱 기법은 웹서버 또는 웹 사용자 차원에서의 캐싱뿐 아니라 웹캐싱만을 전담하는 프록시서버에 의해 광범위하게 이루어지고 있다. 프록시서버는 통상적으로 일개 그룹의 웹 사용자에 대한 서비스 지연시간을 줄이기 위해 사용되며, 궁극적으로는 네트워크의 대역폭 절약과 함께 웹서버의 부하를 줄이는 역할도 담당하게 된다. 이와 반대로 웹서버 쪽에는 역방향 프록시캐시..

    디스크 관리

    디스크 관리 디스크는 컴퓨터 시스템의 대표적인 2차 저장장치이다. 디스크의 구조 디스크 외부에서는 디스크를 일정한 크기의 저장공간들로 이루어진 1차원 배열처럼 취급하게 된다. 이 일정한 크기의 저장공간을 논리블록이라고 하며, 디스크에 데이터가 저장될 때에는 논리블록 단위로 저장되고, 디스크 외부로 입출력이 일어날 때에도 논리블록 단위로 전송된다. 논리블록에 저장된 데이터를 접근하기 위해서는 배열을 접근하는 것처럼 해당 블록의 인덱스 번호를 디스크에 전달해야 한다. 그러면 디스크 컨트롤러는 해당 논리블록이 저장된 물리적 위치를 찾아 요청된 데이터에 대한 입출력 작업을 수행하게 된다. 이때 각 논리블록이 저장되는 디스크의 물리적인 위치를 섹터라고 부른다. 즉 논리블록 하나가 섹터 하나와 1대1로 매핑되어 저..