경로 표현식 .(점)을 찍어 객체 그래프 탐색 상태 필드: 단순히 값을 저장하기 위한 필드 예: m.username 연관 필드: 연관관계를 위한 필드 단일 값 연관 필드: 대상이 엔티티, @ManyToOne, @OneToOne 예: m.team 컬렉션 값 연관 필드: 대상이 컬렉션, @OneToMany, @ManyToMany 예: m.orders 특징 상태 필드: 경로 탐색의 끝, 더 이상 탐색 불가 예: select m.username, m.age from Member m 단일 값 연관 경로: 묵시적 내부 조인 발생, 더 탐색 가능 예: select o.member from Order o 탐색 시 자바로는 .(점)만 찍으면 되기 때문에 편하지만 db에서는 조인이 일어나므로 사용 지양 컬렉션 값 연관 경..
JPQL SQL을 추상화한 객체 지향 쿼리 언어 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 엔티티 객체를 대상으로 쿼리 특정 DB SQL에 의존하지 않음 결국에는 SQL로 변환된다 오타에 취약하고, 동적 쿼리 생성에 어려움이 있다 (그냥 String이기 때문) Criteria(JPA 공식 기술): JPQL 빌더 (실무 사용 X) -> QueryDSL 사용 권장 em.createQuery("쿼리문", 반환 객체) QueryDSL(오픈 소스) 문자가 아닌 자바코드로 JPQL 작성 (JPQL 빌더 역할) 컴파일 시점에 문법 오류 발견 가능 동적 쿼리 작성 편리 공식 사이트에 친절하게 정리되어 있음 네이티브 SQL JPA가 제공하는 SQL을 직접 사용 JPQL로 해결할 ..
JAVA 진영에서의 ORM 표준 기술인 JPA의 필요성은 여러 자료를 통해 머리로는 대충 알고 있었지만, 영한님 설명을 통해 좀 더 와닿게 되었다 1. 상속 Item 객체를 상속받은 Album 객체를 RDB에 저장할 때 앨범을 필드단위로 분해하여 우측의 ITEM, ALBUM 테이블에 각각 적절하게 저장해주기 위해 INSERT SQL문도 각각 작성하여 두번 날려야 한다 DB에서 ALBUM 객체를 조회할 때는 우측의 ITEM, ALBUM 테이블을 JOIN SQL문으로 묶어주고 그것을 다시 객체로 매핑해준 후 반환한다 이렇게 SQL 의존적이고 복잡한 과정을 피하기 위해 DB에 저장할 객체에는 상속관계를 사용하지 않게 된다고 한다 2. 연관관계 객체 지향적으로 모델링하는 경우에 저장할 때는 크게 문제가 없다 대..
가장 에러를 많이 만났던 주차였다. 스스로의 힘으로 리팩토링에 성공해서 원하는 결과물을 만들어냈고, 금요일부터는 새로운 팀원들과 팀플 및 개인공부를 진행중이다. 다음 주차부터는 지금까지 배운 것들을 토대로 실제 서비스와 같은 것들을 만들어 나갈텐데, 지금 내 수준 정도로 괜찮은건가? 싶기는 하지만 앞으로 계속 배워나가면 된다라며 스스로를 다독이고 있는 것 같다. 1. ORM(Object Relational Mapping) 애플리케이션의 객체와 RDB(relational database)를 연결(mapping)하는 것이다 자바는 객체로 구성하여 프로그래밍하고, RDB는 테이블로 이루어져 있으며, 애초에 이 둘은 호환을 염두에 두고 만들어진 것이 아니기 때문에 객체와 테이블을 매핑하는 것에 문제가 생길 수 ..
커서: 프로그래밍 언어에서 작업 중인 투플의 위치를 가리키는 역할 fetch loop으로 검색 select title만 했으므로 into 다음에 속성이 title 하나만 있음 where current of: 커서가 현재 가리키는 투플 이렇게 독립적으로 update 문을 사용할 수도 있고, 위의 fetch loop에서 돌면서 수정할 수도 있음 SQLCODE에는 가장 최근에 DBMS에 요청한 쿼리가 잘 작동되었는지 여부가 들어있음 데이터베이스 설계와 ER모델 개념적 설계: 엔티티 정의, 엔티티 간의 관계 정의 + 프로세스 설계, 제약 논리적 데이터 모델: 관계 데이터 모델(사실상 표준), 계층 데이터 모델, 네트워크 데이터 모델 물리적 설계: 인덱스 만들기가 대표적 클라이언트의 요구사항을 잘 조사해야 애초부..
예) Table A의 data: val1, val1, val2, val3, val4, val5 Table B의 data: val1, val2, val2, val3 SQL 1: SELECT data FROM Table A EXCEPT SELECT data FROM Table B val4, val5 SQL 2: SELECT data FROM Table A EXCEPT ALL SELECT data FROM Table B val1, val4, val5 subquery끼리의 연산 결과로 나오는 새로운 릴레이션 select한 속성 앞에 릴레이션 이름이 없는 이유는 EMPNAME과 DEPTNAME이 각각의 릴레이션에 고유한 속성이기 때문 정렬 우선순위: DEPNAME(오름차순) -> SALARY(내림차순) 일반적으로..
연구된 SQL 이론에 비해 실용화 된 것은 극히 적다 update, delete, insert는 한 릴레이션 대상, select는 여러 릴레이션 대상이며 새로운 릴레이션 생성 alter는 보통 릴레이션에 attribute 추가 할 때 restrict: 제거할 스키마에 파일이 있다면 삭제 불가, cascade: 무조건 삭제 릴레이션 이름 정의, 그 밑에 각 attribute의 이름과 특성(도메인: 데이터 타입과 길이) 정의 primary key는 unique, 인덱스 부여하기도 함 foreign key(외래키) 그것이 참조하는 부분을 명시함 -> 참조 무결성 보장 자주 사용하는 attribute에 인덱스 부여해 쿼리 프로세스를 더 빠르게 함 -> self maintenance 기능 check 이후 내용을 ..
1. db 설치 확인: 크롬 창에 localhost:27017 It looks like you are trying to access MongoDB over HTTP on the native driver port. 2. robo 3T mongoDB가 저장하는 데이터는 그래픽인터페이스(GUI)를 제공하지 않아 우리 눈으로 확인 불가능 robo 3T로 mongoDB 내부를 살펴볼 수 있음 3. database 개괄 RDBMS(SQL): 행/열의 생김새가 정해진 엑셀에 데이터를 저장하는 것과 유사 중간에 새로운 요소 추가하여 데이터를 만들기 불편 정형화 되어있기에, 일관적이고 데이터 분석에 용이 NoSQL: 딕셔너리 형태로 데이터 저장 데이터 개별적으로 다른 정보들을 저장 자유로운 데이터 적재, 일관성 부족할 ..