목록전체 글 (146)
BE전문가 프로젝트
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cGKpAp/btsaSipo51o/6rFygu7HIxB9jjG9PoNqDk/img.png)
애드 혹 네트워크 - 재난 및 군사현장과 같이 별도의 고정된 유선망을 구축할 수 없는 장소에서 모바일 호스트만을 이용하여 구성한네트워크 - 망을 구성한 후 단기간 사용되는 경우에 적합 - 멀티 홉 라우팅 기능을 지원 릴리즈 노트 - 개발 과정에서 정리된 릴리즈 정보를 소프트웨어의 최종 사용자인 고객과 공유하기 위한 문서 - Header 정보에 소프트웨어 이름, 릴리즈 버전, 릴리즈 날짜, 릴리즈 노트 등의 정보가 포함됨 프로토콜 - 컴퓨터가 메시지를 전달하고 메시지가 제대로 도착했는지를 확인하며 도착하지 않은 경우 메시지를 재전송하는 일련의 방법을 '기술적 은어'를 뜻함 프로토콜의 기본 3요소 - 구문 의미 시간 OSPF(Open Shortest Path First Protocol) - RIP의 단점 보..
- 재고가 10개 미만인 모든 상품의 가격을 10% 상승하려면? - JPA 변경 감지 기능으로 실행하려면 너무 많은 SQL 실행 `1. 재고가 10개 미만인 상품을 리스트로 조회한다. 2. 상품 엔티티의 가격을 10% 증가한다. 3. 트랜잭션 커밋 시점에 변경감지가 동작한다. - 변경된 데이터가 100건이라면 100번의 Update SQL 실행 벌크 연산은 한번에 UPDATE, DELETE, INSERT(하이버네이트) 한 번에 여러가지 동작을 실행하는 것이다 벌크 연산 예제 쿼리 한 번으로 여러 테이블 로우 변경(엔티티) executeUpdate()의 결과는 영향을 받은 엔티티 수 반환 UPDATE, DELETE 지원 INSERT(insert into ... select. 하이버네이트 지원 Member ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c6ltq3/btrQV0OuV3x/lLLfEY4ekMrY6JigLf1Xe1/img.png)
Named쿼리 - 정적 쿼리 미리 정의해서 이름을 부여해두고 사용하는 JPQL 정적 쿼리 어노테이션, XML에 정의 애플리케이션 로딩 시점에 초기화 후 재사용 애플리케이션 로딩 시점에 쿼리를 검증 엔티티에 미리 선언해두는 쿼리 정적쿼리는 동적쿼리와 다르게 변하지 않는 다는 특징을 가지고 있다. 애플리케이션 로딩 시점에 sql로 파싱을 하여 캐싱을 한다. @Entity@Getter@Setter @NamedQuery(name = "Member.findByUsername", query = "select m from MemberQQQ m where m.username = :username") List result = em.createNamedQuery("Member.findByUsername", Member.c..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/2dhRK/btrQSFZWje8/T1hcYwTT3rHryhjNQ1Mam1/img.png)
엔티티 직접 사용 - 기본 키 값 - JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용(엔티티를 식별할 수 있는 것은 기본키 이 기 때문) JPQL select count(m.id) from Member m//엔티티의 아이디를 사용 select count(m) from Member m //엔티티를 직접 사용 SQL(JPQL 둘다 같은 다음 SQL 실행) select couunt(m.id) as cnt from Member m 위의 메소드 두개를 실행해보면 SQL쿼리가 같은 것이 나간다. 그 이유는 엔티티 자체를 식별 할 수 있는 것은 기본키 이기 때문이다. 엔티티 직접 사용 - 외래 키 값 엔티티를 직접 사용하게 되면 mappedBy 에 설정한 값을 넣어준다. 보통 id 값..
TYPE - 조회 대상을 특정 자식으로 한정 - 예) Item 중에 Book, Movie를 조회해라 [JPQL] select i from Iteam i where type(i)In (Book, Movie) [SQL] select i from i where i.DTYPE in ('B','M') TREAT 자바의 타입 캐스팅과 유사 상속 구조에서 부모 타입을 특정 자식 타입으로 다룰 때 사용 FROM, WHERE, SELECT 사용
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dwjCcO/btrQMtegGz2/a6w24h22kPyZo90VLIeq61/img.png)
페치 조인의 특징과 한계 - 페치 조인 대상에는 별칭을 줄 수 없다. 하이버네이트는 가능, 가급적 사용 X 페치 조인 대상에 별칭을 주어 where절에 사용이 불가능하다. 데이터중 몇개의 데이터만 따로 조작하는 것은 매우 위험함 - 둘 이상의 컬렉션은 페치 조인 할 수 없다. 일대다대다 관계가 나오기 때문에 데이터가 정말 예상하지 못하게 늘어나면서 문제가 생긴다. - 컬렉션을 페치 조인하면 페이징 API(setFirstResult, setMaxResults)를 사용할 수 없다. 일대일, 다대일 같은 단일 값 연관 필드들은 페치 조인해도 페이징 가능 하이버네이트는 경고 로그를 남기고 메모리에서 페이징(매우 위험) 페이징 해결법 일대다 관계를 뒤집어 다대일로 fetchJoin을 한다. fetchjoin을 해..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/CjsUk/btrQORdQCEs/yQTDF77TDZ7YMSJ8EyCtl0/img.png)
SQL 조인 종류X JPQL에서 성능 최적화를 위해 제공하는 기능 연관된 엔티티나 컬렉션을 SQL 한 번에 함께 조회하는 기능 join fetch 명령어 사용 페치ㅣ 조인 ::=[LEFT[OUTER] | INNER] JOIN FETCH 엔티티 페치 조인 회원을 조회하면서 연관된 팀도 함께 조회(SQL 한 번에) SQL을 보면 회원 뿐만 아니라 팀(T.*)도 함께 SELECT [JPQL] - select m from Member m join fetch m.team [SQL] - select M.*, T.* FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID = T.ID 즉시로딩과 같지만 쿼리로 원하는 데로 객체 그래프를 한번에 조회할 것이라는 것을 명시적으로 동적인 타이밍에 정..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/RP2ry/btrQGSFbZHE/GvUMYErY80Vj93VUMIKcEK/img.png)
.(점)을 찍어 객체 그래프를 탐색하는 것 String query = "select m.team from Member m"; 상태필드: 단순히 값을 저장하기 위한 필드 연관필드: 연관관계를 위한 필드 단일 값 연관 필드 @ManyToOne, @OneToOne, 대상이 엔티티(m.team) 컬렉션 값 연관 필드 @OneToMany, @ManyToMany, 대상이 컬렉션(m.orders) 경로 표현식 특징 상태 필드(state field): 경로 탐색의 끝, 탐색X 단일 값 연관 경로: 묵시적 내부 조인(inner join) 발생, 탐색O 컬렉션 값 연관 경로: 묵시적 내부 조인 발생, 탐색X - from절에서 명시적 조인을 통해 별칭을 얻으면 별칭을 통해 탐색 가능 상태필드 String query = "s..