콘텐츠로 이동

2021 08 02

2021-08-02

A record vs CNAME

  • 참고: https://coding-start.tistory.com/348
  • A record - 도메인에 IP 주소를 매핑하는 방법 - 도메인 하나에 여러가지 IP 주소를 매핑할 수 있음 (VIP) - 하나의 호스트에 여러 개의 IP를 할당하는 기술 - 로드 밸런싱을 위해 사용
  • CNAME - 하나의 도메인에 도메인 별칭을 부여 - 도메인의 또다른 도메인 이름 - IP가 변경되면 직접 영향받는 A record와 달리, CNAME은 IP 변경에 직접 영향 X

JPQL

  • 참고 1: https://ict-nroo.tistory.com/116
  • JPA의 다양한 쿼리 방법 - JPQL - QueryDSL - JPA Criteria - Native SQL - JDBC API 직접 사용, MyBatis/SpringJdbcTemplate
  • JPQL 필요성 - 가장 단순한 조회 방법 - EntityManager.find() 활용? - 객체 그래프 탐색하는 건 비용이 너무 커,,, .get().get().get()
  • JPQL - 엔티티 객체 중심의 개발 - 검색 쿼리가 문제! - 검색 할 때에도 테이블이 아닌 엔티티 객체를 대상으로 검색해야함! - DB를 모르고 자바 코드를 보고 이런 객체가 있구나 해야하 - 하지만 필요한 데이터만 DB에서 가져오려면 검색 조건이 필요한 SQL이 필요해! - JPA는 SQL을 추상화한 JPQL이란 객체 지향 쿼리 제공 - SQL과 문법이 유사 - JPQL은 엔티티 객체를 대상으로 쿼리를 질의하고, SQL은 데이터베이스 테이블 대상으로 쿼리를 질의 - 테이블이 아닌 객체를 대상으로 검색하는 객체지향 쿼리! - SQL을 추상화했기에 특정 DB 벤더에 의존 X
  • JPQL 문법
    select_문 ::=
        select_절
        from_절
        [where_절]
        [groupby_절]
        [having_절]
        [orderby_절]
    
    update_문 ::= update_절 [where_절]
    
    delete_문 ::= delete_절 [where_절]
    

    - from 절에 들어가는 것은 객체! - select m from Member m where m.age > 8 - 엔티티와 속성은 대소문자를 구분! - JPQL 키워드는 대소문자 구분 X - 엔티티 명을 사용해서 쿼리쓸것! (테이블 XXXX) - 별칭은 무조건 필수!

  • 반환값 - 멤버 조회 - SELECT m FROM Member m - 멤버 안의 팀 조회 - SELECT m.team FROM Member m - 단순 값 조회 - SELECT m.username, m.age FROM Member m - DTO new로 조회 - SELECT new UserDto(m.username, m.age) FROM Member m
  • FetchJoin - fetchType 모두 LAZY로 세팅 - "쿼리 튜닝할 때 한꺼번에 조회" 필요한 경우 사용 - 엔티티 객체 그래프를 한번에 조회하는 방법 - 별칭 사용 불가 - 멤버를 조회할 때 팀까지 같이 조회하기 - 마치 fetchType.EAGER 마냥! - select m from Member m join fetch m.team - LAZY로 범벅하면 반복문으로 정보 받아올 때 마다 쿼리 나감 (JPA N+1 문제)