Develop

33일차_Spring Boot, Thymeleaf, JPA, JPQL 본문

백엔드/KDT_Programmers

33일차_Spring Boot, Thymeleaf, JPA, JPQL

230801 2025. 4. 21. 02:43

안녕하세요 .ᐟ

 

오늘은 데브코스 33일차 4/17(목) 입니다.

(정처기 시험 준비여파로 늦게쓰는 점 양해 부탁 드립니다.ㅋㅋ)

 

오늘은 기존에 배웠던 것들과 어떤차이점이 있는지 위주로 작성해보겠습니다.

  • 스프링과 스프링부트
  • JSP와 Thymeleaf
  • 마이바티스와 JPA
  • SQL, JPQL, Query Dsl

Spring 과 Spring Boot

  • 스프링 부트를 사용하면 스프링 기반의 어플리케이션을 쉽게 만들 수 있다.
  • 스프링을 이용한 개발에 필요한 복잡한 설정은 스프링 부트가 해준다.

 

1. 내장 서버

  • 스프링
    • WAS 설치
    • 웹 어플리케이션 코드 WAR로 빌드
    • WAR를 WAS에 넣고 WAS를 실행
  • 스프링 부트
    • 톰캣을 라이브러리로 포함 내장 톰캣 기능 제공
    • WAR 가 아닌 JAR 파일로 패키징 (즉, main 메소드로 바로 실행 가능)

 

2. 의존성 & 버전 관리

웹 어플리케이션을 개발한다고 했을때의 차이

  • 스프링
    • 필요한 라이브러리 추가(spring-webmvc, tomcat, jackson, logback,slf4j 등)
    • 라이브러리의 버전 설정
      • 라이브러리 버전끼리 호환이 안되는 경우가 발생 -> 번거로움
  • 스프링 부트
    • 라이브러리 자동 버전관리 플러그인 (io.spring.dependency-managemet) 사용 시 버전 생략 가능
    • 기본 라이브러리 묶음 제공
      • spring-boot-starter-web (spring mvc, 내장 톰캣 등)
      • spring-boot-starter-jdbc (JDBC, HikariCP 커넥션 풀 등)

 

3. 자동 설정

  • 일반적으로 사용하는 빈을 자동으로 등록해줌 (JdbcTemplate, DataSource, TransactionManger 등)
    • 등록된 빈 확인 : External Libraries의 spring-boot-autoconfigure 모듈에서 확인 가능

  • 스프링 부트의 빈 자동 등록 과정 (@SpringBootApplication)
    • 스프링부트의 자동구성 활성화 (@EnableAutoConfiguration)
    • 자동 설정에 대한 동적 import 실행 (@AutoConfigurationImportSelector) : 모든 라이브러리 확인 후 설정 정보 세팅
    • 해당 파일의 설정 정보가 스프링 컨테이너에 자동으로 등록됨

 

출처 : https://youtu.be/YdE4krx0dsM?si=RuEWQACW-N2F_bRp

[10분 테코톡] 오잉의 Spring vs Spring Boot

 

 


 

JSP와 Thymeleaf

1. 문법 & 사용성

  • JSP : <% %> 태그 사용
    • ex) <%= user.getName() %>
    • 자바 코드와 HTML이 섞여 있음 (가독성 떨어짐)
  • Thymeleaf : HTML 태그 안에서 서버 데이터를 바인딩해서 화면을 그리는 템플릿 엔진
    • ex) <span th:text="${user.name}"></span>
    • HTML 친화적 문법
    • th:text, th:if, th:each 등은 모두 th: 접두사를 붙여야 함

 

2. 확장성 & 유지보수

  • JSP : HTML과 자바 코드가 섞여 있어 유지보수가 어려움
  • Thymeleaf : 구조가 깔끔하고 HTML과 분리되어 유지보수 용이

 

3. 호환성

  • JSP : 서블릿 컨테이너에 종속
  • Thymeleaf :  독립적이고 스프링 MVC와 호환이 뛰어남

 


 

MyBatis와 JPA

둘 다 DB 접근을 위한 ORM 또는 매퍼 도구

 

1. 쿼리 작성 방식

  • MyBatis : 복잡한 쿼리 컨트롤이 쉬움
    • ex) SELECT * FROM user WHERE id = #{id}
    • SQL을 직접 작성 (단순한 구조)
    • ORM 아님
  • JPA : 생산성↑, 추상화↑
    • ex) userRepository.findById(id)
    • 쿼리를 직접 작성하지 않아도 됨 (CRUD 자동 처리)
    • ORM 임
    • 러닝커브 있음 (엔티티 생명주기, 캐시 등)

 

2. 매핑 방식

  • MyBatis: 수동 매핑 (XML 또는 어노테이션)
  • JPA: 객체 중심 매핑 (Entity, 어노테이션 기반)

 

 


 

 

QL, JPQL, QueryDSL

모두 데이터를 조회하기 위한 언어지만 추상화 정도가 다름

 

1. SQL

  • 데이터베이스 전용 쿼리
    • ex) SELECT * FROM user WHERE id = 1

 

2. JPQL

  • JPA용 객체지향 쿼리
  • 테이블이 아니라 Entity 기준으로 조회
    • ex) SELECT u FROM User u WHERE u.id = :id

 

3. QueryDSL

  • 자바 코드로 작성하는 쿼리
  • 타입 안정성 + IDE 자동완성
    • ex) QUser.user.id.eq(1L)

 

 

오늘도 수고하셨습니다 .ᐟ