PHP PHP에서 클린 아키텍처 적용하기
페이지 정보

영삼이
본문
✅ PHP에서 클린 아키텍처 적용하기
**클린 아키텍처(Clean Architecture)**는 의존성의 방향을 명확히 하고, 유지보수성과 테스트 용이성을 높이기 위한 소프트웨어 설계 원칙입니다. PHP에서도 충분히 적용 가능하며, 프레임워크에 종속되지 않는 구조를 만들 수 있습니다.
🧱 기본 계층 구조
Entities (도메인 모델, 비즈니스 규칙)
Use Cases (애플리케이션 규칙)
Interface Adapters (Controller, Presenter, Gateway)
Frameworks & Drivers (웹 프레임워크, DB, UI)
의존성 방향은 안쪽을 향해야만 합니다.
📁 디렉토리 예시
project/
├── src/
│ ├── Domain/ # Entity, Value Object
│ ├── Application/ # UseCase
│ ├── Infrastructure/ # DB, API 연동
│ └── Interface/ # Controller, View
🧩 예제: 사용자 등록 로직
Entity
[code=php]
namespace App\Domain;
class User {
public function __construct(
public string $email,
public string $name
) {}
}
[/code]
Use Case
[code=php]
namespace App\Application;
use App\Domain\User;
use App\Domain\UserRepository;
class RegisterUser {
public function __construct(private UserRepository $repo) {}
public function execute(string $email, string $name): void {
$user = new User($email, $name);
$this->repo->save($user);
}
}
[/code]
Interface (웹 요청 처리)
[code=php]
namespace App\Interface;
use App\Application\RegisterUser;
use App\Infrastructure\DbUserRepository;
$repo = new DbUserRepository();
$useCase = new RegisterUser($repo);
$useCase->execute($_POST['email'], $_POST['name']);
[/code]
Repository 인터페이스
[code=php]
namespace App\Domain;
interface UserRepository {
public function save(User $user): void;
}
[/code]
DB 구현체
[code=php]
namespace App\Infrastructure;
use App\Domain\User;
use App\Domain\UserRepository;
class DbUserRepository implements UserRepository {
public function save(User $user): void {
// DB 저장 로직
}
}
[/code]
💡 핵심 설계 포인트
-
도메인 계층은 어떤 외부 기술에도 의존하지 않음
-
UseCase는 도메인과 상호작용하며 외부 인프라에 의존하지 않음
-
인프라(DB, 프레임워크)는 가장 바깥에서 동작
🧠 요약
-
클린 아키텍처는 비즈니스 로직을 중심으로 계층을 나누는 설계 방식
-
PHP에서도 명확하게 계층 분리를 통해 테스트 가능한 구조 구현 가능
-
프레임워크에 덜 의존하고, 유연한 구조를 원할 때 매우 유용
- 이전글PHP로 CQRS 패턴 구현하기 25.03.28
- 다음글PHP 8의 match() 활용법과 실제 사례 25.03.28
댓글목록
등록된 댓글이 없습니다.