본문 바로가기

SpringBoot from Laravel

라우팅 & 컨트롤러 변환: Laravel → Spring Boot

반응형

1. 서론

 

Laravel에서 Spring Boot로 전환할 때 가장 큰 변화 중 하나는 라우팅(경로 설정)과 컨트롤러 구조입니다.

 

Laravel에서는 routes/web.php 또는 routes/api.php를 사용해 라우트를 정의하지만, Spring Boot에서는 @RestController@RequestMapping을 활용해 컨트롤러를 구성합니다.

 

이번 글에서는 Laravel의 라우팅 및 컨트롤러를 Spring Boot로 변환하는 방법을 단계별로 살펴보겠습니다.

 

라우팅 파일 변환 (routes/web.php → @RequestMapping)

컨트롤러 변환 (Http/Controllers/ → @RestController)

GET, POST, PUT, DELETE 요청 변환

미들웨어(Auth, JWT) 적용 방법

2. Laravel과 Spring Boot의 라우팅 구조 비교

비교 항목Laravel (PHP)Spring Boot (Java)

라우팅 파일 routes/web.php, routes/api.php 컨트롤러 내부 @RequestMapping
기본 컨트롤러 app/Http/Controllers/ 디렉토리 controller/ 패키지
라우트 정의 방식 Route::get('/users', [UserController::class, 'index']); @GetMapping("/users")
미들웨어 적용 Route::middleware(['auth']) @PreAuthorize("hasRole('USER')")

변환 전략

Laravel의 routes/web.php에서 정의된 경로를 Spring Boot의 @RequestMapping으로 변환

Laravel의 컨트롤러를 Spring Boot의 @RestController로 변환

미들웨어 및 인증 로직 적용 방식 변경

3. GET 요청 변환 (기본 데이터 조회)

 

🔹 Laravel의 GET 요청 (routes/web.php + 컨트롤러)

// routes/web.php
Route::get('/users', [UserController::class, 'index']);
// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;
use App\Models\User;

class UserController extends Controller {
    public function index() {
        return User::all();
    }
}

🔹 Spring Boot의 GET 요청 변환 (@GetMapping)

// UserController.java
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }
}

변환 전략

Route::get('/users', ...)@GetMapping("/users")

Laravel의 Eloquent ORM → Spring Boot의 UserService 및 JPA 활용

4. POST 요청 변환 (데이터 생성)

 

🔹 Laravel의 POST 요청 (routes/web.php + 컨트롤러)

Route::post('/users', [UserController::class, 'store']);
public function store(Request $request) {
    $user = User::create($request->all());
    return response()->json($user, 201);
}

🔹 Spring Boot의 POST 요청 변환 (@PostMapping)

@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
    User savedUser = userService.saveUser(user);
    return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}

변환 전략

Route::post('/users', ...)@PostMapping("/users")

$request->all()@RequestBody User user

response()->json(..., 201)ResponseEntity.status(HttpStatus.CREATED).body(...)

5. PUT 요청 변환 (데이터 수정)

 

🔹 Laravel의 PUT 요청 (routes/web.php + 컨트롤러)

Route::put('/users/{id}', [UserController::class, 'update']);
public function update(Request $request, $id) {
    $user = User::findOrFail($id);
    $user->update($request->all());
    return response()->json($user);
}

🔹 Spring Boot의 PUT 요청 변환 (@PutMapping)

@PutMapping("/{id}")
public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User userDetails) {
    User updatedUser = userService.updateUser(id, userDetails);
    return ResponseEntity.ok(updatedUser);
}

변환 전략

Route::put('/users/{id}', ...)@PutMapping("/{id}")

findOrFail($id)userService.updateUser(id, userDetails)

$user->update($request->all())userService.updateUser(id, userDetails)

6. DELETE 요청 변환 (데이터 삭제)

 

🔹 Laravel의 DELETE 요청 (routes/web.php + 컨트롤러)

Route::delete('/users/{id}', [UserController::class, 'destroy']);
public function destroy($id) {
    User::destroy($id);
    return response()->json(null, 204);
}

🔹 Spring Boot의 DELETE 요청 변환 (@DeleteMapping)

@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
    userService.deleteUser(id);
    return ResponseEntity.noContent().build();
}

변환 전략

Route::delete('/users/{id}', ...)@DeleteMapping("/{id}")

User::destroy($id)userService.deleteUser(id)

response()->json(null, 204)ResponseEntity.noContent().build()

7. 미들웨어 변환 (Auth, JWT 적용)

 

Laravel에서는 미들웨어를 사용하여 인증을 처리합니다.

Spring Boot에서는 Spring Security + JWT를 활용하여 인증을 적용합니다.

 

🔹 Laravel의 미들웨어 적용 방식

Route::middleware(['auth'])->get('/users', [UserController::class, 'index']);

🔹 Spring Boot의 Security 적용 (@PreAuthorize)

@PreAuthorize("hasRole('USER')")
@GetMapping
public List<User> getAllUsers() {
    return userService.getAllUsers();
}

변환 전략

Laravel의 Route::middleware(['auth']) → Spring Boot의 @PreAuthorize 적용

Spring Security 설정 추가 필요

8. 결론

 

✅ Laravel의 routes/web.php를 Spring Boot의 @RestController@RequestMapping으로 변환하는 방법 설명

✅ GET, POST, PUT, DELETE 요청 처리 방식 비교 및 변환 예제 제공

다음 글에서는 “Spring Security를 활용한 인증 & JWT 적용”을 다룰 예정!

반응형