데이터베이스

    [JPA] JPA의 필요성: 객체와 데이터베이스 간의 격차 해소하기

    객체 지향 프로그래밍의 도전 과제 객체 지향 프로그래밍의 영역에서는 추상화, 상속, 다형성이라는 3박자가 복잡한 시스템의 제어를 조율한다. 그러나 이러한 원칙을 데이터 저장으로 확장하면 수많은 과제가 발생한다. JDBC API 사용 시 불편한 점을 고려하여 그 복잡성을 자세히 살펴보자. 예를 들어 User객체를 조회해보자. // 저장 class UserJdbcTemplate { public User findUserByUsername(String username) { String sql = "SELECT * FROM users WHERE username = ?"; return jdbcTemplate.queryForObject(sql, new Object[]{username}, (resultSet, rowN..

    [DB] 테이블의 M:N 설계

    [DB] 테이블의 M:N 설계

    🔍 M:N 관계 두 개의 테이블에서 1 : M 관계가 양쪽에서 모두 나타날 때 이를 M : N 관계라고 한다. 이 관계는 선천적으로 테이블의 관계까 없으며, 비즈니스 로직 등으로 어떤 관계를 맺어줌으로써 관계가 형성된다. 🔍 M:N관계의 문제점 개념상으로 다음과 같이 M : N 관계를 표현하는 것이 가능하다. 하지만 이 관계를 풀어서 표현하면 다음과 같다. 즉, 학생, 과목 테이블의 PK 컬럼인 ID가 중복이 되어버린다. 따라서 M : N관계에서는 양쪽 테이블 모두에서 pk중복이 일어나기 때문에 이를 해결할 방법이 필요하다. 🔍 M:N관계 설계 이런 M:N 관계를 해결하기 위해 또 하나의 테이블을 도입할 수 있다. 위와 같은 모델에서 수강 테이블과 다른 테이블의 관계 테이블이 생성될 수 있다. 그러기 위..

    MyBatis, MySql, Spring Boot를 이용한 간단 예제

    MyBatis, MySql, Spring Boot를 이용한 간단 예제

    [도입] 자바에서는 데이터베이스를 이용하기 위해 JDBC API를 이용하는데, 개발자가 작성해야 하는 코드가 너무 많아 불편했다. 이런 JDBC를 사용하기 쉽게 SQL Mapper를 이용한 MyBatis의 간단 예제를 살펴보자. [MyBatis 동작 원리] 1. 애플리케이션이 시작되면 SqlSessionFactoryBuilder는 MyBatis 설정 파일을 참고해서 SqlSessionFactory를 생성한다. 2. 애플리케이션에서 Sql 요청이 들어오면 SqlSession을 생성한다. 3. 생성한 SqlSession는 수행하는 쿼리문이 담겨져 있는 mapper를 참고하여 DB작업을 수행한다. [Mapper Interface] MyBatis 3.0이전에는 xml파일에 쿼리 명령문을 작성했어야 했는데, 3...