📌 Spring, Spring Boot, JPA의 정의와 차이점 정리
Spring과 Spring Boot, 그리고 JPA는 Java 기반의 백엔드 개발에서 매우 중요한 개념입니다.
이제 각각의 개념을 정의하고, 차이점을 명확하게 비교해보겠습니다. 🚀
1️⃣ Spring Framework란?
📌 Spring의 정의
"Spring은 Java 기반의 애플리케이션 개발을 위한 프레임워크"
"객체 지향 프로그래밍(OOP) 원칙을 바탕으로, 의존성 관리와 확장성이 뛰어난 프레임워크"
📌 Spring의 핵심 개념
- DI (Dependency Injection, 의존성 주입) → 객체 간의 의존성을 Spring이 관리
- AOP (Aspect-Oriented Programming, 관점 지향 프로그래밍) → 공통 기능(로깅, 보안) 분리 가능
- Spring MVC → 웹 애플리케이션 개발을 위한 구조 제공
- Spring Data → 데이터 접근 계층 관리 (JDBC, JPA 지원)
- Spring Security → 인증 및 인가 기능 제공
- Spring Transaction Management → 트랜잭션 처리 지원
📌 Spring의 특징
특징설명| 경량 프레임워크 | 최소한의 메모리와 설정으로 실행 가능 |
| DI 지원 | 객체 간 의존성을 자동 주입하여 결합도 낮춤 |
| AOP 지원 | 보안, 로깅, 트랜잭션을 모듈화 가능 |
| MVC 아키텍처 | 웹 개발을 위한 컨트롤러 제공 |
| 강력한 트랜잭션 관리 | 선언적 트랜잭션 지원 (AOP 활용) |
📌 Spring 코드 예제 (DI 활용)
@Component
public class UserService {
public String getUser() {
return "Spring Framework";
}
}
@Controller
public class UserController {
private final UserService userService;
@Autowired // 의존성 주입 (DI)
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/user")
public String getUser() {
return userService.getUser();
}
}
public class UserService {
public String getUser() {
return "Spring Framework";
}
}
@Controller
public class UserController {
private final UserService userService;
@Autowired // 의존성 주입 (DI)
public UserController(UserService userService) {
this.userService = userService;
}
@GetMapping("/user")
public String getUser() {
return userService.getUser();
}
}
2️⃣ Spring Boot란?
📌 Spring Boot의 정의
"Spring Boot는 Spring의 설정을 자동화하고, 개발 속도를 높이기 위한 프레임워크"
"기본 설정이 포함된 Spring 프로젝트를 손쉽게 실행할 수 있도록 도와줌"
📌 Spring Boot의 핵심 개념
- Spring의 모든 기능을 포함하면서 설정을 최소화한 프레임워크
- spring-boot-starter를 통해 의존성 자동 관리
- 내장 웹 서버(Tomcat, Jetty) 제공
- 설정 파일(application.yml, application.properties) 활용
- Spring Boot CLI 제공 (Command Line Interface 지원)
📌 Spring Boot의 특징
특징설명| 자동 설정 (Auto Configuration) | @SpringBootApplication 사용 시 자동 설정 적용 |
| 내장 웹 서버 제공 | Tomcat, Jetty, Undertow 내장 |
| 빠른 개발 환경 구축 | spring-boot-starter-* 사용 가능 |
| 설정 최소화 | XML 설정 없이 application.yml 활용 가능 |
| 독립 실행 가능 | java -jar 실행 가능 (내장 서버 포함) |
📌 Spring Boot 프로젝트 기본 코드
@SpringBootApplication // 자동 설정 활성화
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
📌 Spring Boot Controller 예제
@RestController
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
@RequestMapping("/api")
public class HelloController {
@GetMapping("/hello")
public String sayHello() {
return "Hello, Spring Boot!";
}
}
📌 Spring Boot 실행 방법
$ mvn spring-boot:run
$ java -jar target/spring-boot-demo-0.0.1-SNAPSHOT.jar
$ java -jar target/spring-boot-demo-0.0.1-SNAPSHOT.jar
3️⃣ JPA (Java Persistence API)란?
📌 JPA의 정의
"JPA는 Java 애플리케이션에서 데이터베이스를 객체로 매핑(ORM)하는 표준 API"
"SQL 대신 객체 중심으로 데이터 조작이 가능"
📌 JPA의 핵심 개념
- SQL을 직접 작성하지 않고, 객체(엔티티)와 테이블을 매핑하여 데이터 처리
- 객체(Entity) 기반으로 데이터 조작 가능
- 트랜잭션 및 영속성 컨텍스트 관리
- 쿼리를 자동 생성 (findById, save, delete)
- Spring Data JPA를 활용하면 더욱 편리한 개발 가능
📌 JPA의 특징
특징설명| 객체 중심 개발 | SQL 대신 객체를 사용하여 DB 처리 |
| 자동 매핑 지원 | 엔티티와 테이블 자동 매핑 (@Entity) |
| 트랜잭션 관리 | Spring과 함께 트랜잭션 관리 용이 |
| JPQL 지원 | SQL이 아닌 객체 중심 쿼리 (@Query) |
| 캐싱 및 성능 최적화 | 1차 캐시, 지연 로딩(Lazy Loading) |
📌 JPA 코드 예제
@Entity
@Table(name = "users")
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 기본 생성자 필수
public User() {}
public User(String name) { this.name = name; }
}
@Table(name = "users")
public class User {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// 기본 생성자 필수
public User() {}
public User(String name) { this.name = name; }
}
📌 Spring Data JPA 활용
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name); // 자동으로 쿼리 생성됨
}
List<User> findByName(String name); // 자동으로 쿼리 생성됨
}
📌 JPA 서비스 코드
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name); // 자동으로 쿼리 생성됨
}
List<User> findByName(String name); // 자동으로 쿼리 생성됨
}
5️⃣ 결론
✅ Spring → 강력한 웹 애플리케이션 개발 프레임워크
✅ Spring Boot → Spring의 설정을 자동화하여 빠르게 개발 가능
✅ JPA → SQL 없이 객체 중심으로 데이터베이스를 다루는 API
'개발 이론 > Spring' 카테고리의 다른 글
| SSR (0) | 2025.03.18 |
|---|---|
| Spring Security (0) | 2025.02.20 |
| Spring MVC (0) | 2025.02.20 |
| Spring Boot란? (0) | 2025.02.20 |