SQLD문제를 풀다가 문제가 생각보다 쉽지 않아 블로그에 올려서 공부할려구 한다. SQLD 특성상 sql쿼리를 보고 결과를 유추할 수 있어야 한다. FULL OUTER JOIN같은 경우도 이론은 알고 있는데 막상 문제로 보니 쉽지 않았다. 그래서 그림으로 그려서 이해시킬려구 한다. 다음과 같은 데이터가 준비되었다. INSERT INTO TB_DEPT_52 (DEPT_NO, DEPT_NM) VALUES ('D101','데이터개발팀'); INSERT INTO TB_DEPT_52 (DEPT_NO, DEPT_NM) VALUES ('D102','파이개발팀'); INSERT INTO TB_DEPT_52 (DEPT_NO, DEPT_NM) VALUES (NULL,'자바개발팀'); INSERT into tb_emp_52..
이번주에 진행할 주제는 값 타입이다. 이번장에서 가장 중요한 키워드는 '공유'라고 생각한다. 자바에는 수 많은 타입들이 존재한다. 기본형, 객체형 ..까지 다양한 타입들이 존재한다. 이들에 대해 자세하게 설명하고 싶지만 글이 길어질 수 도 있기 때문에 작성하지는 않을 예정이다. 아무튼 기본형 같은 경우는 공유가 되지 않는다. int a = 10이고 int b = 20일때 b =a // a = 30를 했을 경우에는 어떻게 될까? 바로 b = 10이 되버린다. 이는 공유가 된것이 아니라 값 자체가 복사가 되서 발생한 결과다. 그러니까 b의 입장에서는 20이라는 값이 의미가 없어지고 a의 값이 복사가 되서 그 값을 이용한다. 다른 타입들은 어떨까? 이거는 약간의 실습이 필요 하다. Box boxA = new ..
생각보다 시간이 빨리 지나갔다. 내가 스터디를 진행하면 가장 정상적인? 스터디라 생각이 든다. 이번에 공부한 주제는 [프록시와 연관관계 관리] 부분이다. 프록시 프록시는 과연 무엇을 말하는 것일까? 프록시는 대리자라는 뜻을 가지고 있다. 그렇다면 프록시 서버, 프록시 클래스 등등 이런 용어를 해석해보면, 대리 서버, 대리 클래스 뭐 이런식으로 해석이 가능하다. 더 깊게 공부를 하면 이것 보다 더 복잡하겟지만, 알다시피 프록시를 공부하는 시간이 아니라 JPA를 공부하는 시간이기 때문에 언급만 하고 넘어갈 예정이다. 그러면 JPA에서는 프록시라는 걸 어디에서 이용을 하게 될까? 바로 지연로딩 (FetchType.LAZY)이곳에서 사용된다. 근데 이름이 지연 로딩일까? 이건 어쩔 수 없이 프록시라는 것을 다시..
ERD를 표기하는데 자주 사용하는 표기법으로 IE표기 법과 Barker표기법이 있다고 한다. 엔티티, 속성, 관계(카니널리티), 관계(옵셔널리티) 엔티티 db라는게 현실에 존재한 것을 데이터화 시키는걸 말하는 걸로 봐서 엔티티라는건 그 데이터들의 조합을 뜻하는 것 같다는 느낌이다. 이것으로 보고 이 엔티티는 어떤 속성을 속성을 가졌는지, 어떤 값을 가졌는지 알 수 있다. IE는 식별자와 일반속성이 구분되있는걸로 봐서 Barker같은 경우는 식별자와 일반 속성이 구분이 전혀 되지 않는다. 다만, #,*,o같은 문자로 어떤 값인지 대략적으로 알 수 있다. * : 필수 o : 선택이라고 생각하면 된다. 즉, * 붙은 것은 notnull이 붙어있다고 한다. 관계 관계에는 1:1이냐 1:N 이냐 라는 관계가 존재..
1. 조인 테이블 전략 : 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략 장점 : - 테이블이 정규화된다. - 외래 키 참조 무결성 제약조건을 활용할 수 있다. - 저장공간을 효율적으로 사용한다. 단점 : - 조인할 때 조인이 많이 사용되므로 성능이 저하 될 수 있다. - 조회 쿼리가 복잡하다. - 데이터를 등록할 INSERT SQL을 두번 실행한다. 특징: 구분 칼럼 @DiscriminatorColumn(name = "DTYPE") /** * (Optional) The name of column to be used for the discriminator. */ String name() default "DTYPE"; /** * (Optional) The type of object/..
설날 마지막 우리집은 시골로 안내려가기 때문에 집에만 계속 있었다. 푹 쉰것 같고 열심히 한것 같은데 잘모르겠다. 계속 모르는것 투성이다. 자바도 다시 공부해야 되는데 뭘 공부를 해야 할지 모르겠다. 오라클도 뒤지고 했는데 막상 공부할려구 하니 두려움이 앞선다. 내가 아는걸까? 아님 모르는걸까? 공부할려구 하는 거 보니 모르는게 확실한데 이 애매하게 안다는 느낌은 너무 별로인것 같다. 모르는건 아닌데 그렇다고 확실하게 아는게 아닌 뭐 그런것 같다. 게다가 문제는 단순히 자바를 공부하기에는 시간이 부족한것 같구 지금 현재 JPA를 공부중에 있다. 게다가 2월 중순 부터는 SQLD 공부에 착수해야 된다. 그렇기 때문에 순수하게 자바에만 투자하기에는 시간이 없을 것 같다. 근데 뭐 이런건 핑계지 할려구 하면 ..
크게 JPA에서 연관관계는 3가지로 구분이 되어진다. 다대일 // 다 : 1 일대다 // 1 : 다 다대다 // 다 : 다 여기서 다대다는 사용을 금지하고 있다. 그러니까 굳이 사용하지 않아도 된다는 뜻이다. 애초에 다대다라는게 다대일과 일대다를 하나로 묶는 방법이라 다대다로 만든다고 한들 결과는 같기 때문이다. 그러면 어째서 다대다를 사용하지 말고 일대다 + 다대일을 합쳐서 사용해야 하는 것일까? 이건 내 생각인데 다대다로 묶게 되면 내가 생성하지 않는 테이블이 만들어진다. 그 테이블은 내가 관리할 수 없다. 그렇기 때문인가 아닐까 라는 조심스런 추측을 해본다. @Entity public class Team { @Id @GeneratedValue private Integer teamIdx; privat..