본문 바로가기

SpringBoot from Laravel

데이터베이스 변환: Laravel Eloquent → Spring Boot JPA (Hibernate)

반응형

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)“을 다룰 예정

 

반응형