1. 서론
Laravel의 Eloquent ORM은 PHP 기반의 Active Record 패턴을 사용하지만, Spring Boot는 JPA(Java Persistence API)와 Hibernate를 기반으로 한 Repository 패턴을 사용합니다.
Eloquent에서 JPA로 마이그레이션할 때 고려해야 할 핵심 사항은 다음과 같습니다.
✅ 데이터 모델 변환 – Laravel의 Eloquent 모델을 Spring Boot의 JPA 엔티티로 변환
✅ 쿼리 변환 – Laravel에서 사용하던 Eloquent 쿼리를 JPA로 변경
✅ 데이터베이스 연결 설정 – .env에서 application.properties로 전환
✅ 마이그레이션 전략 – 기존 데이터 유지 및 자동 마이그레이션 설정
이번 글에서는 Laravel의 Eloquent ORM을 Spring Boot의 JPA(Hibernate)로 변환하는 과정을 상세히 설명합니다.
2. 데이터 모델 변환 (Eloquent 모델 → JPA 엔티티 변환)
🔹 Laravel의 Eloquent 모델 (User.php)
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model {
protected $fillable = ['name', 'email', 'password'];
// One-to-Many 관계 설정
public function posts() {
return $this->hasMany(Post::class);
}
}
🔹 Spring Boot의 JPA 엔티티 (User.java)
import jakarta.persistence.*;
import java.util.List;
@Entity
@Table(name = "users")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private String password;
// One-to-Many 관계 설정
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Post> posts;
}
✅ 변환 전략
• protected $fillable = [...] → JPA의 엔티티 필드로 변환
• hasMany() 관계 설정 → @OneToMany 어노테이션 적용
3. 데이터베이스 연결 설정 (MySQL 기준)
Laravel에서는 .env 파일을 사용하여 데이터베이스 설정을 합니다.
🔹 Laravel의 .env 설정
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=secret
Spring Boot에서는 application.properties 또는 application.yml을 사용합니다.
🔹 Spring Boot의 application.properties 설정
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/laravel_db
spring.datasource.username=root
spring.datasource.password=secret
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
✅ 변환 전략
• .env의 DB 설정을 application.properties에 맞게 변환
• spring.jpa.hibernate.ddl-auto=update를 설정하여 기존 데이터 유지
4. Eloquent ORM 쿼리 변환 (쿼리 빌더 → JPA)
🔹 Laravel의 Eloquent 쿼리
// 모든 사용자 조회
$users = User::all();
// 특정 ID의 사용자 조회
$user = User::find(1);
// 특정 조건 검색
$users = User::where('email', 'like', '%example.com')->get();
// 새로운 사용자 추가
User::create([
'name' => 'John Doe',
'email' => 'john@example.com',
'password' => bcrypt('password')
]);
🔹 Spring Boot JPA 변환 코드
// 모든 사용자 조회
List<User> users = userRepository.findAll();
// 특정 ID의 사용자 조회
User user = userRepository.findById(1L).orElse(null);
// 특정 조건 검색
List<User> users = userRepository.findByEmailContaining("example.com");
// 새로운 사용자 추가
User newUser = new User();
newUser.setName("John Doe");
newUser.setEmail("john@example.com");
newUser.setPassword(passwordEncoder.encode("password"));
userRepository.save(newUser);
✅ 변환 전략
• User::all() → findAll()
• User::find(1) → findById(1L).orElse(null)
• User::where() → findByEmailContaining()
• User::create() → save()
5. JPA Repository 설정 (Eloquent Model → Repository 패턴 적용)
🔹 Laravel의 Eloquent 모델 방식
Laravel에서는 모델 자체에서 데이터베이스 연산을 처리합니다.
$users = User::all();
Spring Boot에서는 Repository 패턴을 사용하여 데이터베이스 연산을 분리합니다.
🔹 Spring Boot의 JPA Repository 설정
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByEmailContaining(String email);
}
🔹 Spring Boot에서 Repository 사용 예제
@Autowired
private UserRepository userRepository;
public List<User> getUsers() {
return userRepository.findAll();
}
✅ 변환 전략
• Eloquent 모델 내 쿼리 처리 → JPA Repository 패턴 적용
• 쿼리 메서드(findByEmailContaining) 활용하여 가독성 향상
6. 관계형 데이터 처리 (Eloquent 관계 → JPA 관계 설정)
Laravel에서는 hasOne(), hasMany(), belongsTo()를 사용하여 데이터베이스 관계를 정의합니다.
🔹 Laravel의 One-to-Many 관계 (User → Post)
class User extends Model {
public function posts() {
return $this->hasMany(Post::class);
}
}
🔹 Spring Boot JPA 변환 (User → Post 관계 설정)
@Entity
public class User {
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<Post> posts;
}
✅ 변환 전략
• hasMany() → @OneToMany(mappedBy = "user")
• belongsTo() → @ManyToOne
7. 데이터 마이그레이션 전략
Laravel에서 Spring Boot로 이전할 때 기존 데이터를 유지하려면, 두 가지 방법이 있습니다.
✅ 1️⃣ Spring Boot에서 기존 데이터베이스 그대로 사용
• spring.jpa.hibernate.ddl-auto=update 설정 후 기존 Laravel DB 사용
✅ 2️⃣ 데이터 백업 후 Spring Boot에서 새로운 스키마 적용
• Laravel에서 MySQL 백업 (mysqldump)
• Spring Boot에서 새 테이블 생성 후 데이터 마이그레이션
8. 결론
✅ Laravel의 Eloquent ORM을 Spring Boot의 JPA & Hibernate로 변환하는 방법을 정리
✅ 데이터 모델, 관계형 데이터, 쿼리 변환, Repository 패턴 적용 방법 설명
✅ 다음 글에서는 “라우팅 & 컨트롤러 변환 (routes/web.php → @RestController)“을 다룰 예정
'SpringBoot from Laravel' 카테고리의 다른 글
Spring Boot에서 API 보안 강화: Laravel과 비교한 JWT + OAuth2 적용 (0) | 2025.02.13 |
---|---|
Spring Boot 성능 최적화: Laravel 대비 성능 향상 방법 (0) | 2025.02.13 |
Spring Boot에서 API 개발 최적화: Laravel API → Spring Boot REST API (0) | 2025.02.12 |
Spring Boot에서 사용자 권한(Role) 관리: Laravel의 Gates & Policies vs Spring Security (0) | 2025.02.08 |
Spring Boot에서 인증 적용: Laravel Auth → Spring Security & JWT (0) | 2025.02.07 |
라우팅 & 컨트롤러 변환: Laravel → Spring Boot (0) | 2025.02.07 |
Laravel > Spring Boot 전환 전체 프로세스 (0) | 2025.02.07 |
왜 Laravel에서 Spring Boot로 전환하는가? (0) | 2025.02.07 |