웹 서버(Web Server)?
- HTTP 기반으로 동작
- 정적 리소스 제공 (html, css, js, image 등)
- 기타 부가기능
- 클라이언트의 요청을 WAS에 전달, WAS의 처리 결과를 클라이언트에게 전달
- Apache, Nginx
Continue reading
스프링 데이터 JPA?
- 스프링 프레임워크에서 JPA를 편하게 사용할 수 있도록 지원하는 프로젝트
- 데이터 접근 계층(repository)를 인터페이스만 작성해도 런타임 시에 스프링 데이터 JPA가 구현 객체를 주입해줌
- 즉, 구현 클래스를 직접 작성하지 않고 인터페이스만 작성해도 CRUD를 할 수 있음
Continue reading
JPQL 조인
- 내부 조인 (INNERT JOIN)
String teamName = "teamA";
String query = "SELECT m FROM Member m INNER JOIN m.team t "
+ "WHERE t.name = :teamName";
List<Member> members = em.createQuery(query, Member.class)
.setParameter("teamName", teamName)
.getResultList();
- JPQL은 조인을 할때도 연관관계 필드를 사용함
String SQL = "SELECT M.ID, M.AGE ... FROM MEMBER M
INNER JOIN TEAM T ON M.TEAM_ID = T.TEAM_ID
WHERE T.NAME = ?
"
String JPQL = "select m FROM Member m INNER JOIN m.team t
WHERE t.name = ?"
Continue reading
JPQL
- JPQL은 객체지향 쿼리 언어
- JPQL은 SQL을 추상화해서 특정 데이터베이스에 의존하지 않음
- JPQL은 결국 SQL로 변환됨
Continue reading
1. 객체지향 쿼리
- JPA에서 엔티티를 조회하는 방법?
- EntityManager.find() 메소드
- 조건부 탐색을 하고싶을 땐? (e.g. 나이가 18세 이상인 회원을 조회)
- 모든 엔티티를 조회 후에 조건을 적용해야 함
- 데이터베이스 조회 시 필요한 내용을 최대한 거를 필요가 있음
- JPQL(Java Persistence Query Language)
- 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리
- SQL을 추상화 해서 특정 데이터베이스 SQL에 의존하지 않음
Continue reading
JPA의 데이터 타입
- 엔티티 타입
- 값 타입
- 기본값 타입(basic value type)
- 임베디드 타입(embedded type, 복합 값 타입)
- 컬렉션 값 타입(collection value type)
Continue reading
프록시란?
- JPA의 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데, 이것을 프록시 객체라고 함
- JPA의 지연 로딩 : 엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연시키는 방법(실제 데이터를 사용할 때 조회)
- JPA의 표준 명세는 지연 로딩의 구현 방법을 JPA 구현체에 위임함
- 하이버네이트 기준으로 아래 내용 작성
- 하이버네이트가 지연 로딩을 지원하는 방법
- 프록시
- 바이트코드 수정 : 복잡해서 다루지 않음
Continue reading
고급 매핑
- 상속 관계 매핑
- 객체의 상속 관계를 데이터베이스에 어떻게 매핑하는지
- @MappedSuperclass
- 등록일, 수정일 같이 여러 엔티티에서 공통으로 사용하는 매핑 정보만 상속받고 싶을 때 사용
- 복합 키와 식별 관계 매핑
- 데이터베이스의 식별자가 하나 이상일 때 매핑하는 방법
- 데이터베이스 설계에서 이야기하는 식별, 비식별 관계에 대해서
- 조인 테이블
- 테이블을 외래키 하나로 연관관계 맺는 것이 아닌 연결 테이블을 이용해서 매핑하는 방법
- 엔티티 하나에 여러 테이블 매핑하기
Continue reading