Spring Boot/스프링 프레임워크 vs 스프링 부트, 의존성 관리

[Spring boot] 스프링 프레임워크 vs 스프링 부트

재윤 2025. 7. 21. 15:57
반응형

스프링 프레임워크 vs 스프링 부트

  • 하이버네이트(Hibernate) → 자바 객체 ↔ 관계형 데이터베이스 간의 매핑(ORM, Object-Relational Mapping) 을 도와주는 프레임워크
  • 즉, 자바 객체를 DB 테이블과 자동으로 매핑해주고, SQL문 없이도 DB에 접근하게 해줌

Spring에서는 JPA(Java Persistence API)라는 표준 인터페이스를 사용하고, 그 구현체 중 가장 유명한 것이 Hibernate

JDBC(Java Database Connectivity)란? (1990년대 후반~)

  • Java에서 DB 연결하는 가장 원시적이고 기본적인 방식
  • Java와 DB 사이를 연결해주는 가장 기본적인 방법이고 직접 SQL문 작성 필요
  • 반복적인 코드가 많고 생산성이 낮음
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "user", "password");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM member");

while (rs.next()) {
    System.out.println(rs.getString("name"));
}

 

 

DAO(Data Access Object)란? (2000년대 초반~)

  • JDBC를 직접 쓰면 코드가 너무 지저분하니까, DB 접근 로직을 전담하는 클래스를 따로 분리한 구조
  • 소프트웨어 설계 관점에서 좋은 방식 → "관심사 분리"
  • 하지만 여전히 SQL은 직접 작성해야 함

Service는 비즈니스 로직 담당, DAO는 데이터베이스 처리만 담당

public class MemberDao {

    public List<Member> findAll() {
        List<Member> members = new ArrayList<>();
        try (Connection conn = getConnection();
             PreparedStatement stmt = conn.prepareStatement("SELECT * FROM member");
             ResultSet rs = stmt.executeQuery()) {

            while (rs.next()) {
                Member m = new Member(rs.getLong("id"), rs.getString("name"));
                members.add(m);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return members;
    }
}

 

JPA (Java Persistence API) + Hibernate (2006년~)

  • 자바 표준 ORM(Object-Relational Mapping) 기술
  • SQL 거의 안 써도 되고, 객체만 다루면 자동으로 DB와 연동
  • 생산성, 유지보수성 모두 향상됨
  • Hibernate는 JPA의 가장 대표적인 구현체
@Entity
public class Member {
    @Id @GeneratedValue
    private Long id;
    private String name;
}
memberRepository.findById(1L); // SQL 직접 안 써도 됨

 

Spring Data JPA

  • JPA 위에 만들어진 Spring 전용 자동화 라이브러리
  • 인터페이스만 작성하면 CRUD 자동 생성해주는 편의 기능 제공
  • Spring Data JPA는 JPA + Hibernate 위에서 동작
  • Hibernate를 내부적으로 사용함 (→ 설정 안 바꾸면 디폴트로 Hibernate)
public interface MemberRepository extends JpaRepository<Member, Long> {
    List<Member> findByName(String name); // 구현 없어도 자동 동작!
}

 

시대 방식 특징

1990s~ JDBC 저수준 API, SQL 수동 작성
2000s~ DAO + JDBC 설계 개선 (관심사 분리), 여전히 SQL 직접
2006~ JPA + Hibernate ORM 등장, 객체 중심 개발, SQL 거의 없음
현대 Spring Data JPA Repository 인터페이스만 작성, CRUD 자동 구현

 

시대적 흐름

  • 시대적 흐름으로 본다면 다음과 같다

반응형