Layered Architecture
레이어드 아키텍처
응용 프로그램을 독립적인 레이어로 구성
각각의 특정 책임을 부여하는 소프트웨어 디자인 패턴
느슨한 결합, 모듈성 및 관심사의 분리를 촉진
주요 레이어
레이어드 아키텍처를 가져갔을 때 어떤것들을 레이러드로 나눌것인지 정의하는것이 필요
프레젠테이션
비즈니스 로직
데이터 엑세스(퍼시스턴스)
데이터베이스
프레젠테이션 레이어
사용자 상호작용을 처리
사용자 인터페이스를 표시하는 역할
사용자 인터페이스, 컨트롤러 및 뷰와 같은 구성요소가 포함됨
비즈니스 로직 레이어
상호작용 요청이 들어왔을 때 처리하는 레이어
응용 프로그램의 핵심 기능이 포함됨
비즈니스 규칙을 구현하고 데이터를 처리
"서비스 레이어"
응용 프로그램이 의도한 대로 작동하고 필요한 작업을 수행하는지 보장
데이터 액세스 레이어
비즈니스 레이어에서 핵심 로직을 처리하기 위해서는 데이터가 필요하다.
데이터를 저장하고 조회하고 조작하는 레이어가 필요
데이터베이스나 외부 API와 같은 데이터 저장 시스템과 상호 작용 담당
데이터 액세스 및 조작 로직을 캡슐화
기반 데이터 저장소에 대한 추상화를 제공
유연성과 유지 보수성을 높힘
레이어 아키텍처의 장점
각 레이어를 독립적으로 개발, 테스트 및 유지관리
코드의 재사용성, 확장성 및 유지 보수의 용이성을 촉진
레이어 간의 인터페이스 일관성을 유지하면 변경된 내용이 다른 레이어에 영향을 주지 않게됨
소프트웨어 개발에 구조적이고 조직적인 접근 방식을 제공
코드 구조화, 관심사의 분리 및 유지보수성을 개선
Sample
// Presentation Layer
class UserController {
private UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
public void registerUser(String username, String password) {
// Presentation Layer에서 받은 요청을 비즈니스 로직 레이어로 전달
userService.registerUser(username, password);
}
}
// Business Logic Layer
class UserService {
private UserRepository userRepository;
public UserService(UserRepository userRepository){
this.userRepository = userRepository;
}
public void registerUser(String username, String password) {
// 비즈니스 로직 수행
if (isValidUser(username)) {
userRepository.saveUser(username, password)
} else {
System.out.println('invalid username');
}
}
private boolean isValidUser(String username) {
// 실제 유효성 검사 로직은 여기 구현
return username !== null && !username.isEmpty()
}
}
// Data Access Layer
class UserRepository {
public void saveUser(String username, String password) {
// 데이터베이스에 사용자 정보 저장
System.out.println('saving user to the db');
}
}
// client code
public class LayeredArchitectureExample {
public static void main(String[] args) {
// 각 레이어의 인스턴스 생성
UserRepository userRepository = new UserRepository();
UserService userService = new UserService(userRepository);
UserController userController = new UserController(userService);
// 사용자 등록 요청
userController.registerUser("john_doe", "password");
}
}
Last updated