모듈화 : 시스템을 독립적으로 분리된 모듈로 설계. 각 모듈은 특정 기능이나 책임을 가지고 다른 모듈과는 잘 정의된 인터페이스를 통해 상호작용 (시스템의 복잡성을 낮추고, 개발과 테스트 용이하게함)
캡슐화 : 모듈 내부의 데이터와 구현 세부사항을 외부로부터 숨기고 잘 정의된 인터페이스를 통해서만 모듈과 상호작용 할 수 있도록 제안 (모듈간의 결합도을 낮추고, 시스템를 쉽게 유지보수 할 수 있게함)
재사용성 : 시스템의 구성요소를 재사용할 수 있도록 설계. 다른 시스템이나 모듈에서 활용할 수 있게함 (개발 효율성을 높이고 시스템의 일관성을 높임)
확장성 : 시스템이 향후 요구사항에 유연하게 대응할 수 있도록 설계. 새로운 기능을 쉽게 추가하거나 기존 기능을 수정할 수 있는 구조를 만듦 (유지보수를 쉽게 해서 비용절감에 도움됨)
응집도와 결합도 : 응집도 → 모듈 내부의 요소들이 얼마나 관련성이 있는지 / 결합도 → 모듈 간의 상호 의존성 나타냄. 높은 응집도를 가진 모듈은 이해하기 쉽고 재사용성이 좋고 유지보수가 좋음. 낮은 결합도를 가진 시스템은 모듈의 독립성을 높이고 변경의 파급효과를 줄임
단순성 : 복잡성을 최소화하고 간결하고 이해하기 쉽게 설계 (문제해결과 디버그를 쉽게해 전체적인 시스템의 안정성을 향상 시킴)
소프트웨어 아키텍처
클라이언트 서버 아키텍처
MVC(ModelViewControl) 패턴→ 웹서비스에 많이 사용됨
모놀리식(Monolithic) 아키텍처→ 웹서비스에 많이 사용됨
마이크로서비스(Microservice) 아키텍처→ 웹서비스에 많이 사용됨
MVC 아키텍처
어플리케이션을 모델, 뷰, 컨트롤러라고 하는 서로 다른 역할을 하는 3가지 구성요소로 분리해 개발하는 방법
뷰와 모델은 서로 직접적으로 데이터를 주고 받지 않고 항상 컨트롤러를 통해 상호작용함
스프링 mvc, django, ruby 등 웹프레임워크가 사용함
모델 : 어플리케이션의 데이터와 비즈니스 로직을 처리하는 역할을함. 데이터베이스에서 데이터를 가져와 컨트롤러에 전달. 데이터와 관련된 로직만 처리.
뷰 : 사용자에게 정보를 보여주기 위한 역할을 함. 컨트롤러에게 받은 데이터를 받아 웹페이지 생성
컨트롤러 : 사용자에게 받은 요청을 처리하고, 모델과 뷰 사이를 중재하는 역할을 함. 사용자의 요청에 따라서 필요한 모델과 상호작용을 하고 데이터를 처리한 후에 처리된 데이터를 뷰에 전달함.
mvc 패턴을 사용하면 각 구성요소가 역할별로 나눠져 있기 때문에 각각를 독립적으로 수정할 수 있고, 유지보수하기 쉽고, 재사용하기 쉽고, 각 구성 요소를 독립적으로 확장할 수 있음
모놀리식 vs 마이크로서비스 스크린샷
모놀리식 아키텍처 : 어플리케이션의 모든 구성요소가 하나의 큰 단위로 개발되고 배포되는 방식.
어플리케이션의 모든 기능과 모듈들이 하나의 코드 베이스에 통합되어 있으며, 모든 기능이 같은 기술 스택으로 개발됨
장점
간단한 개발 및 배포
손쉬운 디버깅
용이한 테스트
단점
개발 속도 저하 (어플리케이션의 크기가 커질수록 코드베이스의 크기가 커짐)
배포의 어려움 (모든 기능을 한꺼번에 배포해야해서 자주 배포하기 어려움)
확장성 제한 (서버의 CPU나 메모리가 증가해서)
신뢰성 (하나가 문제 생기면 전체에 영향 줄 수 있음)
기술 채택의 장벽 (언어나 프레임워크를 변경하면 많은 비용이 듦)
마이크로서비스 아키텍처 : 어플리케이션을 작고 독립적인 서비스의 집합으로 구성하는 접근 방식.
각 마이크로서비스는 특정 기능을 수행하며 각각 독립적으로 개발, 배포 운영 될 수 있음
팀별로 각자 담당하는 마이크로 서비스만 개발하고 배포할 수 있음
장점
높은 안정성
유연한 확장
배포 용이성
기술적 유연성
단점
복잡성 증가 (서비스간의 통신관리나 데이터 일관성이 어려울 수 있음, 서비스 중 하나의 오류가 발생하거나 지연이 될 경우 방어코드 작성 필요함)
네트워크 오버 헤드 (서비스 간의 통신이 네트워크를 통해 이뤄지기 때문에 오버헤드 발생할 수 있음)
디버깅과 모니터링의 어려움 (서비스가 많아지면 디버깅과 모니터링이 많아져 문제의 원인을 찾기 어려움)
배포 복잡성 (각 서비스를 따로 배포하고 관리해야하므로 전체적인 배포 프로세스가 복잡해질 수 있음)
안녕하세요! 개발자 준비하시는 분이나 현업에 종사하고 계신 분들만 할 수 있는 시급 25달러~51달러 LLM 평가 부업 공유합니다~ 제 블로그에 자세하게 써놓았으니 관심있으시면 한 번 읽어봐주세요 :)