사상 - 프로그래밍 이데올로기

아키텍처 기본 기법

인터페이스와 구현의 분리

  • 인터페이스 - 기능 정의 및 모듈 사용 방법 정의(?)
  • 구현 - 실제 기능을 실현하는 코드

클라이언트는 인터페이스만 알면 되서 기능이 바껴도 코드를 수정할일이 없다. ‘구현이 아닌 인터페이스에 맞춰 프로그래밍 하라’

참조의 단일성

모듈의 요소에 관한 선언과 정의는 1회로 제한한다.

참조투과성

  • 호출결과가 파라미터에만 종속된다.
  • 호출이 다른 기능의 동작에 영향을 주지 않는다.

나는 call by reference를 활용해 코딩한적이 많은데 고민을 해봐야 겠다.

분할정복

커다란 문제는 작게 나눈다.

  • 전체를 설계할때 독립해서 설계할수 있는 부분을 나눈다음 착수한다.
  • 책임과 책무라는 관점에서 모듈을 분할
  • 알고리즘을 설계할때 병합 정렬처럼 상향식으로 분할하고 나서 문제를 해결할 수 없는지 검토
  • 대량의 데이터를 처리하는 설계를 할때 MapReduce 처럼 계삭을 작은 단위로 분할 해서 분산 처리 할수없는지 검토해야됨

아키텍쳐의 비기능 요구사항

  • 변경 용이성
  • 상호 운영성
  • 효율성
  • 신뢰성
  • 테스트 용이성
  • 재사용성

비기능 요구사항은 배포후에 큰 영향 개발 초기 부터 고려되야 됨 아키텍쳐 설계시에 고려해야 하는 요소임 기능테스트와 마찬가지로 비기능 테스트도 중요함 품질 측정기준을 정한후 구체적으로 설정하여테스트 해야됨

보안 비기능 요구사항

정보 보안의 3대 요소

  • 기밀성 - 허가되지 않은 사람이 사용하지 못하게 하는것
  • 무결성 - 정보 조작이 되지 않도록 하는것
  • 가용성 - 중요 정보를 백업하거나 이중화해서 가용성을 확보한다.

참조