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