이번주에 진행할 주제는 값 타입이다. 이번장에서 가장 중요한 키워드는 '공유'라고 생각한다. 자바에는 수 많은 타입들이 존재한다. 기본형, 객체형 ..까지 다양한 타입들이 존재한다. 이들에 대해 자세하게 설명하고 싶지만 글이 길어질 수 도 있기 때문에 작성하지는 않을 예정이다. 아무튼 기본형 같은 경우는 공유가 되지 않는다. 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..
회사에서 여러 DB가 정상적으로 동작을 해야되는 테스트를 해야 되었다. 가장먼저 mssql을 사용하게 되었는데 사실은 이것을 사용하는 회사에서 약간의 문제가 발생하여 이러한 테스트를 진행하게 되었다. 아무튼 mssql (sql server) 2019, 2017를 도커로 만들고 실행해서 테스트하는 작업을 가졌다. 다행히 정상적으로 실행이 되었다. 그런데 문제는 2016부터 발생하였다. 알고보니 mssql은 2017부터 리눅스를 지원한다고 한것이였다. 나는 그것도 모르고 도커로 왜 다운이 안되나 고민했었다. 아무튼 이것을 연동하는 방법은 생각보다 간단했다. 바로 virtual box같은 vm ware을 사용하는 방법인데 나는 무료이면서 잘 이용되는? virtual box를 사용하였다. 솔직히 window를 ..
방향, 다중성, 연관관계 주인 JPA에는 단방향과 양방향이 존재한다. 양방향은 무조건 필요할까? 객체는 참조를 사용해서 연관관계를 탐색할 수 있는데 이것을 객체 그래프 탐색이라고 한다. 팀 -> 맴버 1. 팀에 맴버 한명을 추가한다. 2. 맴버가 어떠한 팀에 들어간다. @JoinColumn 외래키를 매핑할때 사용한다. name : 매핑할 외래 키 이름 referencedColumnName 외래 키가 참조하는 대상 테이블의 컬럼명 foreignKey(DDL) 외래 키 제약 조건을 직접 지정할 수 있다. 연관관계 사용 - 저장 JPA에서 엔티티를 저장할 때 연관된 모든 엔티티는 영속 상태여야 한다. - 조회 객체 그래프 탐색 : 연관된 엔티티를 조회하는 것 객체지향 쿼리 사용 JPQL - 수정 단순히 불러온..
create : 기존 테이블을 삭제하고 새로 생성한다. DROP + CRERE create-drop : create 속성에 추가로 애플리케이션을 종료할 때 생선한 DDL을 제거한다. - DROP + CRERE + DROP update : 데이터베이스 테이블과 엔티티 매핑 정보를 비교해서 변경 사항만 수정한다. validate : 데이터베이스 테이블과 엔티티 매핑정보를 비교해서 차이가 있으면 경고를 남기고 애플리케이션을 실행하지 않는다. 이 설정은 DDL을 수정하지 않는다. none : 아무것도 하지 않는다. WARN: Unrecognized hbm2ddl_auto value : cressssssate. Supported values include 'create', 'create-drop', 'update..
오랜만에 작성하는 것 같다. 요즘 공부하는 패턴들이 생각보다 쉽지 않아 계속 미루고 있었는데 이 패턴은 그 나마 설명할 수 있을 것 같다. 근데 중재자라고 하는데 뭐를 중재하는 걸까? 이건 현실 세계에 비교 하면서 생각하면 좋은데 비행기와 관제탑 배와 등대 라고 볼 수 있다. 이들에 대해서는 자세히는 설명하기는 어렵지만 관재탑과 등대 모두 비행기와 배를 위해 어떤 특정한 작업을 하는 느낌이다. 사실 중재자라는 이름 보다는 중간 체계?이런 이름이 더 어울리는 것 같은데 이것을 그림으로 그려보자. 이런 그림이 그려지는데 이것을 해석해보면 A 에서 B를 갈려면 X를 거쳐야 한다는 뭐 그런 것 같다. 요게 uml인데 첫번째꺼 말고 두 번째를 보면 c1이 c2에게 연락을 취하기 위해서는 mediator에 먼저 연..
이제 마지막이다.! 최근 부터 제목 짓는게 어려워서 그냥 목차를 사용하고 있다. 경로 표현식 이것을 이해 하기 위해 잠시 sql을 작성해보자. select * from A; 대충 이런 sql이 존재한다고 가정하자. 이것을 JPQL로 바꾼다면 select m from A m 이런식으로 수정할 수 있다. 여기서 m이 경로 표현식이다. m은 * 즉 와일드 카드로 대체가 되어진다. 그 말은 이것은 엔티티라는 뜻이 된다. 그럼 결국은 m다음에 나올 수 있는 값들이 어떤것이 있을까? 엔티티는 다음으로 준비하였다. @Id @GeneratedValue private Long id; private String server; private String name; @OneToMany(mappedBy = "school", f..
"한빛미디어 활동을 위해서 책을 제공받아 작성된 서평입니다." 지금 으로부터 약 9년전 나는 프로그래밍 보다 네트워크를 더 좋아했었다. 네트워크를 더 좋아했었던 이유는 프로그래밍이 마냥 어렵다고 느꼈고 또, 그 때 네트워크를 가르쳤던 교수님께서 정말 잘 가르쳐줬기 때문에 네트워크를 더 좋아했었다. 그 당시에 가장 유명했던(?) 네트워크 서적인 후니의 쉽게 쓴 시스코 네트워킹이라는 책을 재미있게 읽었던 기억이 아직도 생생하다. (지금 확인해보니 개정판이 4판이 나온것 같다. 이름도 바뀌고) 뭐 어쩌다 보니 네트워크보다는 프로그래밍을 더 좋아하게 되어서 네트워킹 공부를 깊게 하지 않았었는데 우연히 이 책을 리뷰를 하게 되어 영광으로 생각합니다. 약간은 지루할 수 도 있지만 1장에서는 네트워크에 대한 배경 지..