웹 애플리케이션은 우리가 매일 사용하는 웹사이트나 앱처럼 인터넷을 통해 사용하는 프로그램이에요. 이런 프로그램들은 여러 개의 층으로 이루어져 있는데, 마치 높은 건물처럼 각 층마다 맡은 일이 다르답니다.
각 층의 역할
- 컨트롤러 (Controller):
- 역할: 사용자의 요청을 받아서 어떤 일을 해야 할지 결정하는 역할을 해요. 마치 레스토랑의 웨이터 같아요. 손님(사용자)이 메뉴(요청)를 주문하면 주방(서비스)에 전달하는 거죠.
- 예시: 웹사이트에서 버튼을 누르면 컨트롤러가 그 버튼에 해당하는 기능을 실행하도록 서비스에 요청을 보내요.
- 서비스 (Service):
- 역할: 컨트롤러로부터 받은 요청을 처리하는 실제 작업을 수행해요. 레스토랑의 주방장과 같이 음식을 만드는 일을 하죠.
- 예시: 사용자가 상품을 주문하면 서비스는 상품 정보를 가져오고, 결제를 처리하고, 주문 내역을 저장하는 등의 일을 해요.
- 리포지토리 (Repository):
- 역할: 데이터를 저장하고 불러오는 역할을 해요. 레스토랑의 냉장고나 창고와 같이 재료(데이터)를 보관하는 곳이라고 생각하면 돼요.
- 예시: 사용자 정보, 상품 정보, 주문 정보 등을 데이터베이스에 저장하고, 필요할 때 다시 가져와서 사용해요.
- 데이터베이스 (Database):
- 역할: 리포지토리가 저장한 데이터를 실제로 저장하는 공간이에요. 마치 도서관의 책장처럼 많은 정보를 체계적으로 보관하는 곳이죠.
- 예시: 사용자의 이름, 주소, 비밀번호 등의 정보를 저장해요.
- 도메인 (Domain):
- 역할: 애플리케이션이 다루는 문제 영역을 정의하고, 그 영역에 대한 개념과 규칙을 나타내요. 마치 레스토랑의 메뉴판처럼 어떤 음식을 제공하는지 정의하는 거죠.
- 예시: 온라인 쇼핑몰의 도메인은 상품, 주문, 회원 등이 될 수 있어요.
간단한 예시
우리가 좋아하는 햄버거를 주문한다고 생각해볼까요?
- 컨트롤러: "햄버거 주문" 버튼을 누르면 컨트롤러가 이 요청을 받아요.
- 서비스: 컨트롤러는 서비스에게 "햄버거를 만들어 달라"고 요청해요.
- 리포지토리: 서비스는 리포지토리에게 "햄버거 재료가 있는지 확인해 달라"고 요청하고, 리포지토리는 데이터베이스에서 재료 정보를 가져와요.
- 데이터베이스: 데이터베이스는 햄버거 재료가 충분히 있다고 알려줘요.
- 서비스: 서비스는 햄버거를 만들고, 컨트롤러에게 완성된 햄버거를 전달해요.
- 컨트롤러: 컨트롤러는 우리에게 햄버거를 제공해요.
이처럼 웹 애플리케이션은 여러 층이 서로 협력하여 사용자의 요청을 처리하고, 원하는 결과를 제공하는 복잡한 시스템이에요.