도림.로그

Tags

Series

About

[Spring 공부] 김영한님의 입문 강의 - 4

2022. 02. 18.

Spring Study

▶ Expand post list

    Spring Boot를 처음 공부하는 사람이 공부한 내용을 정리해서 작성한 포스트입니다. 오개념 및 오류가 있을 수 있으니, 발견하신다면 가감없이 댓글을 통해서 알려주세요! 확인하는 대로 정확한 정보를 확인해서 고치도록 하겠습니다.

    개요

    이번 Spring Boot 스터디는 배달의 민족의 김영한님께서 인프런에 올려주시는 자바 스프링 완전 정복 시리즈를 기반으로 진행한다. 그 시리즈의 가장 첫 강의인 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술을 들어보고 간단히 정리해보고자 한다.

    해당 강의는 내가 느끼기에 크게 다음의 컨텐츠를 가지고 있었다.

    • Spring 기초 기능 써보기
    • Spring Bean과 의존 관계
    • 회원 관리 예제 구현하기
      • Controller - Service - Repository 패턴 적용
      • Spring MVC 적용
    • 위의 예제에 다양한 DB 접근 기술 적용
      • JDBC
      • JDBC Template
      • JPA
      • Spring Data JPA
    • 위의 예제에 간단한 AOP 적용

    이 포스트에서는 회원 관리 예제에 다양한 DB 접근 기술을 적용하는 것에 대해서 간략히 정리해보도록 하겠다. 코드에 대한 부분은 약간 배제하고, 개념적인 내용과 느낀 점을 중심으로 적어보려 한다.

    다양한 DB 접근 기술

    순수 JDBC

    JDBC는 자바에서 DB에 접속할 수 있도록 하는 자바 API이다. 쉽게 이야기해보자면, DBMS 콘솔 상에서 쿼리를 던져서 결과를 확인하던 것을 자바 코드 상에서 가능하게 해주는 기술 정도로 생각하면 된다.

    JDBC로 Repository 코드를 작성하면 각 메소드마다 대략 다음의 과정으로 작업을 수행하게 된다.

    1. 쿼리 설정
    2. 커넥션 받아오기
    3. 쿼리 실행 준비
    4. 쿼리 실행
    5. 커넥션 닫기

    그리고 이것들을 개발자가 직접 다 구현해야한다. 그래서 코드가 길고, 로직을 파악하기가 어렵다.

    사실상 최근에는 쓰지 않는 기술이라고 보면 된다.

    Spring JdbcTemplate

    JDBC로만 구현을 하면 위의 단계별로 코드를 다 구현해야 한다고 했다. 하지만 JdbcTemplate를 사용하면 이런 반복되는 코드를 대폭 줄일 수 있다. 하지만 쿼리는 기존과 같이 작성을 해주어야 한다.

    순수 JDBC에서 try ... catch ... 로 도배되어 있던 부분들을 많이 없앨 수 있고, 커넥션과 관련해서 신경을 덜 쓸 수 있게 해준다. 그 덕분에 코드 상에서 로직이 분명하게 보이게 된다.

    최근에도 실무에서 사용하는 곳이 있다고 한다.

    JPA

    JPA는 반복되는 코드를 없애줄 뿐 아니라, 그냥 쿼리를 작성하지 않고 자바 코드로 데이터베이스에 접근할 수 있게 도와준다. 또한 개발에 있어서 관점의 변화를 가져오는데, SQL과 데이터를 중심으로 설계하고 개발하는 것이 아니라 객체를 중심으로 설계하고 개발할 수 있게 도와준다.

    SQL 쿼리를 작성하지 않고 전체 프로젝트를 객체 중심으로 그리고 오직 자바 코드로 작성할 수 있게 되니 생산성이 크게 높아진다.

    JDBC 류와 다르게 Entity라는 개념을 사용하는데, 본 강의에서는 일단 기존에 사용하던 도메인 객체에 @Entity 어노테이션을 붙여서 간단히 구현하였다. Entity는 간단히 설명하자면 실제 DB의 테이블에 매칭이 되는 클래스라고 보면 된다. Entity 클래스 내부의 필드들이 DB 테이블의 Column이 된다.

    그리고 JPA를 통한 모든 데이터 변경은 트랜잭션 안에서 실행되어야 하기 때문에, JPA를 사용할 경우 Service 클래스에 @Transactional 어노테이션을 추가하여 각 메소드가 실행될 때마다 트랜잭션을 시작하게 해주어야 한다.

    Spring Data JPA

    개인적으로 어떠한 방법(라이브러리나 프레임워크 등)을 통해서 문제를 해결할 수만 있다면, 내부 구현에는 크게 신경쓰지 않고 일단 사용하는 편인데, 이 Spring Data JPA는 정말 공부를 해서 동작 원리에 대해 조금이라도 깨닫지 못한다면 쓰기가 두려울 정도로 너무 간편하게 되어있다.

    Repository에 구현 클래스가 없이 그냥 인터페이스만 넣어두면 개발이 끝난다. 이게 맞는건지 의문이 들 정도의 편의성이다. 언어와 프레임워크를 막론하고 DB를 백엔드에 물릴 때 필수적으로 작성하게 되는 CRUD 코드도 그냥 Spring Data JPA가 알아서 다 짜준다는 의미이다.

    실무에서는 JPA와 Spring Data JPA를 기본으로 사용하고, 쿼리가 복잡한 동적 쿼리는 Querydsl이라는 라이브러리를 사용한다고 한다. 이렇게 해도 해결하기 어려운 쿼리는 JPA가 제공하는 네이티브 쿼리를 사용하거나, JdbcTemplate를 사용하면 된다고 한다.

    Spring Data JPA의 예제 코드를 보고, 이번 Spring Boot 스터디를 하고 나서는 무조건 JPA 강의도 수강해야겠다는 생각을 가지게 되었다.

    다음은

    다음으로 AOP에 대해서 정리하면 좋을 것 같지만, 아직 정리하기에는 너무 와닿질 않아서 조금 더 개념적으로 이해한 후에 별도로 정리해보도록 하겠다. 이제 스프링 핵심 원리 강의를 공부해야겠다.

    끝.

    #java#spring#inflearn#spring boot

    © 2024, Built with Gatsby