반응형

계층형 아키텍처 패턴

소프트웨어 설계에서 Layered Architecture (계층형 아키텍처) 패턴은 소프트웨어를 서로 독립적인 계층으로 나누어 설계하는 구조입니다. 이 글에서는 Layered 아키텍처의 개념, 필요성, 그리고 자바에서의 구현 방법을 예제를 통해 설명하겠습니다.


Layered 아키텍처 패턴이란?

Layered 아키텍처 패턴은 애플리케이션을 역할에 따라 계층으로 나누고, 각 계층이 특정한 책임만을 가지도록 설계하는 패턴입니다. 일반적으로 다음 네 가지 주요 계층으로 구성됩니다:

  1. Presentation Layer (표현 계층):
    • 사용자 인터페이스와 상호작용을 담당합니다.
    • 사용자 입력을 처리하고 응답을 표시합니다.
    • ex) UserController.java
  2. Application Layer (애플리케이션 계층):
    • 비즈니스 로직을 실행하고 데이터를 조합하여 처리합니다.
    • 비즈니스 규칙과 워크플로우를 정의합니다.
    • ex) UserService.java
  3. Domain Layer (도메인 계층):
    • 핵심 도메인 로직과 비즈니스 엔터티를 관리합니다.
    • 데이터의 상태와 관련된 규칙을 처리합니다.
    • ex) User.java
  4. Data Access Layer (데이터 접근 계층):
    • 데이터베이스와 상호작용하여 데이터를 읽고 씁니다.
    • 저장소 또는 외부 시스템과의 통신을 담당합니다.
    • ex) UserDao.java

Layered 아키텍처의 필요성

  1. 모듈화:
    • 각 계층이 독립적으로 개발 및 유지보수될 수 있습니다.
  2. 가독성:
    • 계층 간 역할이 명확히 구분되어 코드 이해가 쉽습니다.
  3. 재사용성:
    • 특정 계층을 다른 프로젝트에서 재사용할 수 있습니다.
  4. 테스트 용이성:
    • 계층별로 개별적인 테스트가 가능하여 품질이 향상됩니다.
  5. 확장성:
    • 새로운 기능 추가 시 기존 계층에 최소한의 영향을 줍니다.

자바에서 Layered 아키텍처 구현 예제

사용자 정보를 관리하는 간단한 애플리케이션을 Layered 아키텍처로 구현해 보겠습니다.

1. Presentation Layer (표현 계층)

public class UserController {
	private final UserService userService;

    public UserController(UserService userService) {
	    this.userService = userService;
    }

    public void createUser(String name, String email) {
    	userService.addUser(name, email);
    	System.out.println("User created successfully.");
    }

    public void displayUsers() {
    	userService.getAllUsers().forEach(user ->
    	System.out.println("Name: " + user.getName() + ", Email: " + user.getEmail()));
    }
}

2. Application Layer (애플리케이션 계층)

import java.util.List;

public class UserService {
    private final UserRepository userRepository;

    public UserService(UserRepository userRepository) {
	    this.userRepository = userRepository;
    }

    public void addUser(String name, String email) {
    	User user = new User(name, email);
    	userRepository.save(user);
    }

    public List<User> getAllUsers() {
    	return userRepository.findAll();
    }
}

3. Domain Layer (도메인 계층)

public class User {
    private String name;
    private String email;

    public User(String name, String email) {
        this.name = name;
        this.email = email;
    }

    public String getName() {
	    return name;
    }

    public void setName(String name) {
    	this.name = name;
    }

    public String getEmail() {
    	return email;
    }

    public void setEmail(String email) {
    	this.email = email;
    }
}

4. Data Access Layer (데이터 접근 계층)

import java.util.ArrayList;
import java.util.List;

public class UserRepository {
    private final List<User> users = new ArrayList<>();

    public void save(User user) {
	    users.add(user);
    }

    public List<User> findAll() {
    	return new ArrayList<>(users);
    }
}

5. Main 클래스

public class LayeredArchitectureDemo {
    public static void main(String[] args) {
        UserRepository userRepository = new UserRepository();
        UserService userService = new UserService(userRepository);
        UserController userController = new UserController(userService);

        // 사용자 생성
        userController.createUser("Alice", "alice@example.com");
        userController.createUser("Bob", "bob@example.com");

        // 사용자 목록 표시
        userController.displayUsers();
    }
}
출력 결과:
 
User created successfully.
User created successfully.
Name: Alice, Email: alice@example.com
Name: Bob, Email: bob@example.com

Layered 아키텍처의 활용 예시

  1. 기업 애플리케이션:
    • Spring Framework를 활용한 계층형 구조의 웹 애플리케이션.
  2. 마이크로서비스:
    • 서비스 간 역할을 명확히 나누어 각 서비스의 계층을 독립적으로 관리.
  3. 모바일 백엔드:
    • 데이터베이스와의 통신, 비즈니스 로직 처리, API 응답 구성을 분리하여 효율적인 유지보수.

마치며

Layered 아키텍처 패턴은 애플리케이션을 명확하게 구조화하여 유지보수성과 확장성을 크게 향상시킵니다. 자바에서 이를 구현하여 더 나은 소프트웨어를 개발해 보세요!

 

반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] SQL Injection  (1) 2025.01.10
[Java] 서블릿(Servlet)  (0) 2025.01.08
[Java] MVC 패턴  (1) 2025.01.07
[Java] SOLID 원칙  (0) 2025.01.07
[Java] JDBC (Java Database Connectivity)  (0) 2025.01.07

+ Recent posts