웹 애플리케이션 디자인에서 중요한 점은 각 레이어(presentation, business, data)를 두어 성능과 보안을 함께 고려한 설계가 되도록 해야한다는 것이다.
웹 에플리케이션 디자인시 고려할 사항
1. Partion your application logically : 애플리케이션을 논리적으로 분할해서 설계하라.
2. Use abstraction to implement loose coupling between layers : 각 레이어 간에는 추상화를 이용하여 loose coupling이 되도록 설계하라.
3. Understand how components will communicate with each other : 어떻게 컴포넌트들 사이에 커뮤니케이션 하는지 이해할 수 있도록 명확하게 하라.
4. Reduce round trip : 라운드 트립을 줄여라.
5. Consider using caching : 캐싱 이용을 고려하라.
6. Consider using logging and instrumentation : 로깅과 이를 지원하는 도구를 이용하는것을 고려하라.
7. Avoid blocking during long-running tasks. : 오랜 시간이 걸리는 작업에서 블로킹이 되는 것을 피하라.
8. Consider authenticating users across trust boundaries : 신뢰할 수 있는 영역에 인증된 이용자만이 들어오도록 고려하라.
9. Do not pass sensitive data in plain text across network. : 네트워크를 통해서 전달되는 평문에 민감한 데이터가 들어가지 않도록 하라.
10. Design to run your Web application using a least-privileage account : 최소한의 권한만을 이용할 수 있도록 웹 애플리케이션을 설계하라.
웹 에플리케이션 디자인시 고려할 사항
1. Partion your application logically : 애플리케이션을 논리적으로 분할해서 설계하라.
- 웹 설계시 presentation, business, data access 레이어를 나누어서 설계를 하도록 한다. 이렇게 나누어서 설계를 하게 되면 코드 관리가 쉬워지고, 각 분할된 레이어의 모니터링과 성능 최적화를 수행하기 쉽게 된다. 또한 논리적으로 명확하게 레이어를 나누게 되면, 애플리케이션 확장에 대해 선택의 폭이 넓어지게 된다.
2. Use abstraction to implement loose coupling between layers : 각 레이어 간에는 추상화를 이용하여 loose coupling이 되도록 설계하라.
- 인터페이스 설계를 수행하면, 동일한 형태로 각 레이어간 컴포넌트의 입력과 출력이 통일성을 갖게 된다. 이러한 인터페이스를 통해서 각 레이어는 독립적으로 존재하게 되며, 상호간 영향도 최소한으로 유지할 수 있다.
3. Understand how components will communicate with each other : 어떻게 컴포넌트들 사이에 커뮤니케이션 하는지 이해할 수 있도록 명확하게 하라.
- 이러한 요구는 애플리케이션 디플로이 시나리오에서 반드시 이해하고 있어야 하는 항목이다. 물리적인 영역들 사이에서 혹은 프로세스 사이에서 이러한 커뮤니케이션 사항을 반드시 정의해야하며, 이러한 처리는 동일하게 적용 되어야 한다.
4. Reduce round trip : 라운드 트립을 줄여라.
- 웹 애플리케이션에서는 캐싱과 출력 버퍼의 내용에 대해서 브라우저와 웹서버 사이 혹은 웹 서버와 다운스트림 서버 사이에 오가는 통신양을 줄여야 한다.
5. Consider using caching : 캐싱 이용을 고려하라.
- 좋게 디자인된 캐싱 전략은 설계때 고려해야할 성능 부분에 중요한 영향을 준다. ASP.NET 캐싱 기능에는 output caching, partial page caching과 cache API를 지원하고 있다.
6. Consider using logging and instrumentation : 로깅과 이를 지원하는 도구를 이용하는것을 고려하라.
- 각 레이어 사이에서 로그 상황을 받아 보고, 감사를 수행할 수 있도록 설계를 해야한다. 이러한 로그는 수상한 활동을 잡아내고, 시스템의 공격으로 부터 일찍 이러한 정보를 캐치할 수 있도록 한다.
7. Avoid blocking during long-running tasks. : 오랜 시간이 걸리는 작업에서 블로킹이 되는 것을 피하라.
- 오랜 시간이 걸리거나, 블로킹 오퍼레이션이 발생하는 작업이 있는 경우 들어오는 요청에 대해서 비동기적으로 처리하도록 한다.
8. Consider authenticating users across trust boundaries : 신뢰할 수 있는 영역에 인증된 이용자만이 들어오도록 고려하라.
- 신뢰하는 영역어세 인증된 사람만이 들어올 수 있도록 설계를 하라. 예를 들어 당신의 presentation layer에서 원격지의 비즈니스 레이어에 접근하려고 할때 이러한 상황이 된다.
9. Do not pass sensitive data in plain text across network. : 네트워크를 통해서 전달되는 평문에 민감한 데이터가 들어가지 않도록 하라.
- 네트워크를 통해서 비밀번호나 쿠키정보와 같은 민감한 정보가 돌아다니지 않도록 설계하라. 이러한 일을 하기 위해서 암호화를 이용하거나 인증된 데이터를 이용하고, SSL 이용을 고려해 보라.
10. Design to run your Web application using a least-privileage account : 최소한의 권한만을 이용할 수 있도록 웹 애플리케이션을 설계하라.
- 만약 공격자가 프로세스 관리 부분을 획득하려 한다면, 파일 시스템에 접근하는 것이나 다른 시스템 자원을 이용하여 시스템을 파괴하는 것을 막아야 한다.
'WEB_Programming' 카테고리의 다른 글
Log4J 설정 (0) | 2008.12.15 |
---|---|
익스플로러 클립보드 복사 (0) | 2008.12.10 |
브라우저 검색 (0) | 2008.11.28 |
원격지 사이트 로그인 및 로그아웃 처리 (0) | 2008.11.20 |
J2EE Tutorials > Getting Started with Web Applications (1) | 2008.11.10 |