다층구조 아키텍쳐는 일반적으로 클라이언트-서버 애플리케이션에서 사용된다. 웹 애플리케이션을 비롯한 대다수 애플리케이션에서 활용되는 기본적인 구조인 만큼 익혀두어야 하는 개념이라 생각한다.

layer

n-tier architecture를 구성하는 계층(layer)은 아래 3가지이다.

  • 프레젠테이션: 유저 인터페이스(UI)
  • 애플리케이션(또는 로직): 비즈니스 로직을 처리함
  • 데이터: 데이터베이스를 의미

여기서 주의해야 할 점이 층(tier)계층(layer)은 구분되는 개념이다. 층은 물리적으로 분리된 것을 의미하며 계층은 논리적으로 분리되는 개념이다.

2-tier vs 3-tier

2-tier vs 3-tier

2-tier

  • 자바 등을 통해서 구현된 클라이언트 프로그램
  • 직접 DB에 접속하여 가져온 데이터를 표현한다.

3-tier

  • 웹 애플리케이션이 대표적인 예시
  • DB에 직접 접속하지 않고 미들웨어에 접속

참고로 2-tier 구조는 꼭 클라이언트 프로그램이 아닌 웹 애플리케이션으로 구현될 수도 있다. 또한 반대로 클라이언트 프로그램도 3-tier로 구현하는 것도 가능하다.

구현 사례

내가 대학교 2학년 때 전공 프로젝트로 진행한 대학 수강신청 시스템은 다층구조를 설명하기 좋은 사례이다. 2학기에 걸쳐 구현한 이 프로그램은 1-tier 구조에서 시작해서 3-tier로 진화시켰다. 아래는 프로그램 버전별 특성을 간략하게 정리한 것이다.

  • v1.0
    • 1-tier Program
    • 로컬에서 실행되는 간단한 클라이언트 프로그램
    • 수강신청 관련 데이터 파일을 담아서 불러오게 함.
    • UI, 비즈니스 로직, 데이터 모두 한 곳에 있음
  • v2.0
    • 2-tier Program
    • 클라이언트 프로그램은 단순히 프레젠테이션 기능만 갖춤
    • 서버 프로그램을 만들어서 클라이언트 요청 처리
    • 클라이언트는 UI만을 표현, 서버에서 로직 및 데이터 처리
  • v2.1+
    • 3-tier Program
    • 데이터 파일을 MySQL DB로 마이그레이션
    • 해당 DB는 aws-rds에 deploy
    • 모든 기능이 물리적으로 분리된 구조

지금와서 되집어보니 작년에 프로젝트를 진행할 당시에는 해당 프로젝트가 가진 진가를 몰라봤었다고 생각한다. 교수님이 진행하는 수업에 따라 열심히 만들기는 했지만 그 안에 담긴 내용을 모두 이해하지는 못하고 있었다고나 할까? 1년 동안 진행한 프로젝트에 다층 구조의 진화과정이 있었다는 사실을 왜 진작에는 몰라봤을까..

마치며

이번 포스팅을 통해서 배움이라는 것이 꼭 새로운 것을 아는 것만이 아니라는 것을 알게되었다. 이전에 진행한 프로젝트를 되집어보는 리뷰 과정도 충분히 의미있는 시간이 될 수 있다. 물론 처음 배울 때 모든 것을 깨달을 수만 있다면 그게 최선이겠지만 아쉽게도 나는 아직 그러지는 못하는 것 같다. 군대에 있는 시간동안 블로그에 글을 쓰며 이전에 배운 개념을 정리하고, 앞으로 새로 배울 내용도 정리하고자 한다.