Spring MVC 패턴기반의 애플리케이션에서는 관성적으로 Model & View & Controller 패키지를 만들고 시작하는 경우가 대부분이었다. 이번에 웹 애플리케이션을 새로 구성하면서 원래 흔히 알고있던 계층형 구조가 아닌 도메인구조가 있다는 것을 알게되어서 이번에 적용하면서 배워보는 글이다. 1. 계층형 구조 controller ⎿ ProductController ⎿ MemberController ⎿ CartController service ⎿ ProductService ⎿ MemberService ⎿ CartService dao ⎿ ProductDao ⎿ MemberDao ⎿ CartDao domain (model) ⎿ Product ⎿ Member ⎿ Cart 일반적으로 배우기도 그렇고 알..
데이터베이스의 규모 확장 저장할 데이터가 많아지면 데이터베이스에 대한 부하도 증가하게 된다. 그때가 오면 데이터베이스를 증설할 방법을 찾아야 한다. 데이터베이스의 규모를 확장하는 데는 두 가지 접근법이 있다. 📄 수직적 확장 Scale-up 이라고도 부르는 수직적 규모 확장법은 기존 서버에 더 많은, 또는 고성능의 자원(CPU, RAM, 디스크 등)을 증설하는 방법이다. 이러한 수직적 접근법에는 몇 가지 심각한 약점이 있다. 데이터베이스 서버 하드웨어에는 한계가 있으므로 CPU, RAM 등을 무한 증설할 수는 없다. 사용자가 계속 늘어나면 한대 서버로는 결국 감당하기 어렵게 될 것이다. SPOF(Single Point of Failure)로 인한 위험성이 크다. 비용이 많이 든다. 고성능 서버로 갈수록 ..
Scale-up VS Scale-out Scale-up은 수직적 규모 확장(vertical scaling)이라고 하며, 서버에 고사양 자원(더 좋은 성능의 CPU, 많은 RAM 등)을 추가하는 행위를 말한다. Scale-out은 수평적 규모 확장이라고 하며 더 많은 서버를 추가하여 성능을 개선하는 행위를 말한다. 서버로 유입되는 트래픽의 양이 적을 때는 수직적 확장이 좋은 선택이며, 이 방법의 가장 큰 장점은 "단순함"이다. 하지만 이 방법에는 몇 가지 단점이 존재한다. 수직적 규모 확장에는 한계가 있다. 한 대의 서버에 CPU나 RAM을 무한대로 증설할 방법이 없다. 장애에 대한 자동복구(failover) 방안이나 다중화(redundancy) 방안을 제시하지 않는다. 만약 서버에 장애가 발생한다면 웹/..