JDBC(Java DataBase Connectivity) JDBC란 자바에서 데이터베이스를 다루기 위한 API 입니다. Spring을 이용하게되면 JDBC를 직접 다루는 일은 없으나, SpringJDBC, MyBatis, JPA 등등 데이터베이스와 관련한 API는 JDBC를 기본으로 하여 동작하게 됩니다. 예제는 직접적인 코드 설명을 주로 하고, MAVEN과 mariaDB를 이용해서 진행했습니다. 1) SQL에 맞는 의존성을 MAVEN에 넣는다. (참고로 DBMS 버젼과 maven에 주입할 client의 버젼은 다른 것입니다.) org.mariadb.jdbc mariadb-java-client 2.3.0 2) 리플렉션을 이용하여, SQL에 맞는 드라이버를 등록한다. Class.forName("org.m..
셀프조인 (self join) 일반적으로 JOIN은 연관된 두 개의 테이블을 연결하기 위해서 사용되지만, 자신의 테이블을 참조하는 셀프조인도 가능합니다.예제로 사용될 테이블은 사원의 정보를 담고 있는 테이블로 아래와 같습니다. SELECT * FROM employee; +----+-----------+-------------+ | id | name | superior_id | +----+-----------+-------------+ | 1 | 김사장 | NULL | | 2 | 정과장 | 1 | | 3 | 최대리 | 2 | | 4 | 이대리 | 2 | | 5 | 박고문 | NULL | +----+-----------+-------------+ 사원의 id와 이름 그리고 직속상관(superior)의 id를..
1. Entitiy간의 연관관계(방향)이란? 데이터베이스상에서는 관계를 맺어주기만 하면 자동으로 서로간의 양방향 참조가 가능합니다. 하지만 객체지향의 (Entity) 클래스간에는 '참조 방향'을 지정해주어야 하는데, 어떤 '방향성'을 고려해야하는지는 굉장히 중요합니다. (처음에는 Entity간의 양방향성을 남발했지만, 공부를 지속하면서 양방향성의 위험성을 알게 되었습니다.) 2. 단뱡향vs양방향 방향을 가져야 하는 경우는 어떤 경우인지 부터 보겠습니다. 먼저 객체지향적인 관점에서 생각해보면 A클래스와 B클래스가 연관관계일때, A클래스는 B클래스를 사용하게 되고 이런 경우에 방향성을 갖습니다. 반대로 B클래스가 A클래스를 사용하게 되면 역시 방향성을 갖습니다. 그러나 방향성을 남발하게 되면 성능상의 큰 문..
다대다(M:N) 관계 두 개의 테이블이 서로의 행에 대해서 여러개로 연관 되어 있는 상태를 다대다(M:N)관계라고 합니다. 예를 들어 보겠습니다. 한명의 학생이 여러 수업을 수강하고, 한 수업은 여러 학생을 수용합니다. 이를 ERD로 표현하면 아래와 같습니다. 학생테이블과 수업테이블이 다대다 관계로 연관되어 있다. 다대다(M:N) 구현하기 논리적으로 다대다관계의 표현은 가능하지만, 2개의 테이블만으로 구현하는 것은 불가능 합니다. 다대다관계를 실제로 구현하기 위해선 각 테이블의 PrimaryKey를 외래키(FK)로 참조 하고 있는 연결테이블(매핑테이블)을 사용해야 합니다. 이를 ERD로 표현하면 아래와 같습니다. '학생테이블'과 '학생_수업테이블'이 일대다 관계로 연관되어 있고, '학생_수업테이블'과 '..
JPA란? JPA는 Java Persistence API의 약자입니다. Persistence라는 단어는 Java DTO(Data Transfer Object)에게 '없어지지 않고 오랫동안 지속'되는 '영속성(persistence)'을 부여해준다는 의미입니다. 즉, 데이터를 DB상에 영구적으로 저장해주는 API라고 생각하면 됩니다. 기존 JDBC만을 이용하는 경우 반복적이며 비슷한 SQL문을 많이 만들어야하고, 데이터베이스의 테이블과 자바 객체간의 매핑하는 소모적인 작업을 지속해야 합니다. JPA를 사용하게 되면 SQL문을 개발자가 만들지 않기 때문에 객체 중심적인 개발로 생산성과 유지보수의 능률이 크게 오르고, 특정 DBMS 문법에 종속적이지 않은 개발이 가능합니다. 또한 JPA의 영속성 컨텍스트는 효율..
롬복 플러그인의 설치&설정방법은 이전 포스팅을 참고 한다. ☞ 인텔리제이(intelliJ)에서 롬복(Lombok) 설치&설정하기롬복(Lombok) 롬복(Lombok)은 Java에서 반복적으로 작성되는 getters/setters나 equals, hashCode, toString 또는 생성자 관련 코드들을 간결하게 만들어주는 라이브러리다. 사실 자바를 지원하는 웬만한 IDE가 이런 코드들의 자동 생성을 지원하고 있어서 필요성을 못 느낄수도 있으나, 롬복(Lombok)은 유지 보수시에 큰 도움이 된다. 유지보수시에 클래스의 필드의 갯수와 비례해서 길어지는 getters/setters가 없으니 코드가독성이 올라가고, 필드값을 추가삭제 할 때도 getters/setters에 대한 신경을 쓰지 않아도 된다. @G..
롬복(Lombok)이란?롬복(Lombok)은 Java에서 반복적으로 작성되는 getters/setters나 equals, hashCode, toString 또는 생성자 관련 코드들을 간결하게 만들어주는 라이브러리다. 사실 자바를 지원하는 웬만한 IDE가 이런 코드들의 자동 생성을 지원하고 있어서 필요성을 못 느낄수도 있으나, 롬복(Lombok)은 유지 보수시에 큰 도움이 된다. 유지보수시에 클래스의 필드의 갯수와 비례해서 길어지는 getters/setters가 없으니 코드가독성이 올라가고, 필드값을 추가삭제 할 때도 getters/setters에 대한 신경을 쓰지 않아도 된다. Lombok 플러그인 설치하기 File - Settings - Plugins - Browse repositories . . . ..