Presentation is loading. Please wait.

Presentation is loading. Please wait.

- SW_Desing Study Group -

Similar presentations


Presentation on theme: "- SW_Desing Study Group -"— Presentation transcript:

1 - SW_Desing Study Group -
2. 프레젠테이션 티어에서 디자인 고려사항과 위험사례 - SW_Desing Study Group - 2009년 1월 18일 이진서

2 1. 코어 J2EE 패턴을 접하면서 프로젝트 개요 기술을 학습하는 것과 설계를 학습하는 것은 다릅니다.
기존의 많은 책들이 API 명세서와 같이 세부 기술을 설명하는데 있어서는 매우 훌륭했지만, "그 기술을 적용하는 통찰"을 주지는 못했습니다. 디자인을 배우는 것은 경험에서 부터 나오며, 추천 지침(Best Practice) 및 위험 사례(Bad Practice)에 대한 지식을 공유하는 데에서 나옵니다…. 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 애플리케이션 분할, 재사용성, 유지보수성을 향상시킨다. 2 2 2 2

3 Table of Contents 프리젠테이션 티어에서 디자인 고려사항 프리젠테이션 티어에서 위험 사례 Q&A

4 2.1 Presentation Pattern을 적용할 경우 설계시 고려할 문제
프로젝트 개요 Model-View-Controller 개별 부분을 쉽게 수정할 수 있도록 웹 응용 프로그램의 사용자 인터페이스 기능을 어떻게 모듈화할 수 있습니까? Page controller 중복을 피하면서 재사용성 및 유연성을 얻을 수 있도록 적정 수준으로 복잡한 웹 응용 프로그램에 대한 컨트롤러를 어떻게 가장 잘 구성할 수 있습니까? Front controller 코드 중복을 피하면서 재사용성 및 유연성을 얻을 수 있도록 매우 복잡한 웹 응용 프로그램에 대한 컨트롤러를 어떻게 가장 잘 구성할 수 있습니까? Intercepter filter 웹 페이지 요청 전후에 일반적인 사전 및 사후 처리 단계를 어떻게 구현할 수 있습니까? * 반드시 고려해야 하는 4가지 요소 보안 (Security) 데이터 무결성(data integrity) 관리 용이성(manageability) 확장성(scalability) 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 4 4

5 1-1 세션 관리 프로젝트 개요 User session이란?
Client와 Server 사이에 여러 Request들이 오가는 지속적인 대화 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 5 5 5 5

6 1-1 세션 관리 프로젝트 개요 Client에 저장되는 세션 상대적으로 구현 쉽다 저장할 정보가 작은 경우(크면 성능저하)
HTTP 쿠키 POST방식(HTML hidden field) – HTML안에 text로 노출 GET방식(URL에 직접포함) – URL 노출 Client에 session 상태가 노출되는 보안문제 – 암호화 필요성 Server에 저장되는 세션 세션상태를 서버에 저장 요청시 특정 사용자를 동일서버로 보내도록 처리(Resonate – traffic management) 세션상태를 Bussiness Tier에 저장 - EJB 세션상태를 Resource Tier에 저장 – RDBMS(관계형데이터베이스) Session ID를 이용하여 세션 상태 저장 Session Timeout 초과 Invalidate(무효화) 해당 Session 삭제 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 6 6 6 6

7 1-2 클라이언트 접근 제어 프로젝트 개요 특정 클라이언트가 app 리소스에 접근하지 못하게 통제하는 이유?
첫번째는 클라이언트 접근을 제한하거나 통제하는 시나리오 Delegation point – All-or-nothing 특정부분 숨기기 설정에 의한 감시 단순하며 일반적인 설정을 사용한 리소스 감시 두번째는 사용자의 진행을 제어하는 시나리오 Synchroniser token 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 7 7 7 7

8 1-3 유효성 검사 프로젝트 개요 Client와 Server 양쪽에서 모두 수행하는 것이 바람직합니다.
필수적으로 재사용성(reuse) 와 모듈화(modularity)라는 문제를 반드시 고민 Client에서 유효성 검사 JavaScript와 같은 내장 스크립트 Server에서 유효성 검사 폼 중심의 유효성검사(form-centric validation) 추상 타입 기반 유효성검사(validation based on abstract types) 장점:유연성,재사용성,유지보수용이성 단점:일반화로 인해 효율성과 성능이 저하 (이해하기 어려워 유지보수 힘들어짐) function validate(){ var thisYear = document.myform.thisYear.value; if (CheckStr(thisYear, " ", "")==0 || CheckStr(thisYear, " ", "")==0) { alert("연도를 입력해 주세요"); return false; } Public Vector validate(){ Vector errorCollection = new Vector(); If(firstname == null) || (firstname.trim().length() < 1) errorCollection.addElement(“error!”); } 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 Validator.getInstance().validate(firstNameString, formFieldName) 8 8 8 8

9 1-4 헬퍼 프로퍼티 – 무결성 및 일관성 프로젝트 개요
자바빈 헬퍼 클래스는 클라이언트 요청과 함께 넘길때 중간에서 상태를 저장하는 역활 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 9 9 9 9

10 Table of Contents 프리젠테이션 티어에서 디자인 고려사항 프리젠테이션 티어에서 위험 사례 Q&A

11 2-1 제어 코드가 여러 뷰에 존재하는 사례 프로젝트 개요 문제 개요 페이지 접근권한 로직을 수정하라.
1000…개의 JSP 안에 접근제어 로직이 포함되어있음. 언제 다바꾸지? ㅜㅜ JSP페이지 접근제어로직 JSP페이지 접근제어로직 JSP페이지 접근제어로직 JSP페이지 접근제어로직 JSP페이지 접근제어로직 JSP페이지 접근제어로직 JSP페이지 접근제어로직 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 11 11 11 11

12 2-1 제어 코드가 여러 뷰에 존재하는 사례 프로젝트 개요 해법 참고 컨트롤러 도입 각기 다른 로직을 지역화하기
Front Controller패턴에서 Command and Controller전략 View Helper패턴 뷰감시 컨트롤에서 판단해서 JSP로 forward Fat Controller 위험 JSP페이지 Controller 컨트롤Logic 컨트롤 Logic 포멧Logic 1.Helper 클래스에 위임하기 Helper Controller JSP페이지 포멧 Logic 컨트롤Logic 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 JSP페이지 포멧 Logic 12 12 12 12

13 1.로직을 뒤로보내기(Factor Back): Helper로 작업위임하기
2-1 제어 코드가 여러 뷰에 존재하는 사례 프로젝트 개요 해법 참고 컨트롤러 도입 각기 다른 로직을 지역화하기 Front Controller패턴에서 Command and Controller전략 View Helper패턴 뷰감시 JSP페이지 1.로직을 뒤로보내기(Factor Back): Helper로 작업위임하기 Helper AClass jsp 비즈니스로직A 비즈니스 로직 비즈니스로직B Helper BClass 비즈니스로직C Helper CClass 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 13 13 13 13

14 1.로직을 앞으로보내기(Factor Forward): 컨트롤러 도입
2-1 제어 코드가 여러 뷰에 존재하는 사례 프로젝트 개요 해법 참고 컨트롤러 도입 각기 다른 로직을 지역화하기 Front Controller패턴에서 Command and Controller전략 View Helper패턴 뷰감시 JSP페이지 1.로직을 앞으로보내기(Factor Forward): 컨트롤러 도입 Helper AClass Controller Helper BClass 비즈니스 로직 비즈니스로직A 비즈니스로직B Helper CClass 컨트롤Logic 비즈니스로직C 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 jsp 14 14 14 14

15 2-1 제어 코드가 여러 뷰에 존재하는 사례 프로젝트 개요 해법 참고 컨트롤러 도입 각기 다른 로직을 지역화하기
Front Controller패턴에서 Command and Controller전략 View Helper패턴 뷰감시 1단계.View 준비 :요청이 오면 로직처리,데어터획득후 뷰로 dispatch 과정 2단계. View 생성 : 해당뷰에 필요한 데이터로 화면구성을 함 JavaBean Helper controller jsp 최종 화면구성 jsp Request Data access Page dispatch Custom Tag Helper 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 JSTL Tag File Helper 15 15 15 15

16 1.뷰에 all-or-nothing 감시자 넣기
2-1 제어 코드가 여러 뷰에 존재하는 사례 프로젝트 개요 해법 참고 컨트롤러 도입 각기 다른 로직을 지역화하기 Front Controller패턴에서 Command and Controller전략 View Helper패턴 뷰감시 1.뷰에 all-or-nothing 감시자 넣기 2. 사용자의 역할에 따라 뷰의 특정부분 숨기기 jsp jsp tablib uri=“WEB-INF/corj2eetaglibrary.tld” prefix=“corePatterns’ %> <HTML> <corePatterns:guard role=‘manager’> <b> 매지저만 볼수있어요</b> </corePatterns:guard> </HTML> tablib uri=“WEB-INF/corj2eetaglibrary.tld” prefix=“corePatterns’ %> <corePatterns:guard/> <HTML> </HTML> 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 16 16 16 16

17 2-2 프리젠테이션 티어 데이터 구조가 비즈니스 티어에 노출되는 사례
프로젝트 개요 문제개요 프리젠테이션 티어 데이터 구조를 비즈니스 티어 혹은 그밖에 다른 티어와 공유하면, 티어 사이에 결합도를 심화시킬 뿐만 아니라 해당 서비스의 재사용성을 심각하게 감소시킵니다. 1.노출된 사례 2.노출을 막고 숨기기 프리젠테이션컴포넌트 Start()에 인자 추가시! 프리젠테이션컴포넌트 <HTML> <% Customer c = new Customer(); User u = new User(); u.setId(“aa”); u.setPw(“bb”); c.start(u); %> </HTML> <HTML> <% Customer c = new Customer(); c.start(id , pw); %> </HTML> 일반적 데이터 구조로 복사후 사용 결합도 낮춤 Tight coupling 유지보수 저하 비즈니스 컴포넌트 비즈니스 컴포넌트 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 Public Customer(){ Public start(String a,String b){ // 로직수행 } Public Customer(){ Public start( User a){ // 로직수행 } 17 17 17 17

18 2-3 프리젠테이션 티어 데이터 구조가 도메인 객체에 노출되는 사례
프로젝트 개요 문제개요 Request 핸들링 데이터 구조를 도메인 객체와 공유하면, 애플리케이션의 각기 다른 두 측면 사이의 결합도를 불필요하게 증가시킨다. 해법참고 매개 변수를 넘기듯이 httpservletrequest 객체를 바로 넘기지 말고, request객체로부터 필요 정보를 좀더 일반화된 데이터 구조로 만들어 복사 Domain Object와 httpservletrequest간의 강한 결합도 Domain Object와 httpservletrequest객체 사이의 분리 결합도 증가 재사용성 저하 Public class Customer{ String a; String b; public Customer(HttpServletRequest request){ a = request.getParameter(“id”); b = request.getParameter(“pw”); } Public class Customer{ String a; String b; public Customer(String id,String pw){ a = id; b = pw; } 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 18 18 18 18

19 2.Hidden filed에 token key값 저장
2-4 같은 폼을 중복해서 전송하는 사례 프로젝트 개요 문제개요 reSubmit(중복전송): 폼의 재전송하는 상황 발생 (쇼핑몰 결제후 중복전송 오류) 해법참고 동기화 토큰 도입 클라이언트 접근 제어 데자뷰 토큰 Controller JSP페이지 0. Token 생성 1.Session에 Key 저장 2.Hidden filed에 token key값 저장 4.Token비교 동일하면 로직수행 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 3.Submit 5.비즈니스 로직수행 Token이 다르면 에러발생 19 19 19 19

20 2-6 <jsp:setProperty>가 자바빈 프로퍼티를 재설정할 것으로 잘못 추정하는 사례
프로젝트 개요 문제개요 요청 매개변수의 값이 비었을때, setProperty 스펙에 아무 동작 안하도록 되어있음. 해법참고 여러 요청에 의해 재사용되기 때문에,자바빈 프로퍼티를 사용하기 전에 항상 초기화해야 합니다. request1 Hepler Bean First=Dan Last=Mark First=Dan Last=Mark request2 값이 안 변함 Hepler Bean 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 First= Last=Bill First=Dan Last=Bill 20 20 20 20

21 제어코드 로직으로 너무 많이 추가되어 어려워짐 Command 객체에 헬퍼에 요청을 위임한다.
2-7 팻 컨트롤러를 구현하는 사례 프로젝트 개요 문제개요 하나의 컨트롤러에 너무 많은 제어코드를 추가하게 되면, 나중에는 컨트롤러가 너무 무거워져 해당 컨트롤러를 유지보수,테스트,디버깅하기가 매우 까다로운 상태가 됩니다. 해법참고 다른 컨트롤 클래스에 작업을 위임하는 지점이기도 합니다. 컨트롤러는 command객체를 사용하여 제어 코드를 캡슐화합니다. 단위 테스트보다 훨씬 용이합니다. 제어코드 로직으로 너무 많이 추가되어 어려워짐 Command 객체에 헬퍼에 요청을 위임한다. Try{ 제어코드로직A …… 제어코드로직B 제어코드로직C 제어코드로직D 제어코드로직E Try{ RequestHelper helper = new RequestHelper(request); Command command = helper.getCommand(); resultPage = command.execute(request, response); }catch(Exception e){ } 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 너무 많은 제어코드 추가 21 21 21 21

22 2-9 헬퍼를 스크립틀릿처럼 작성하는 사례 프로젝트 개요 문제개요
헬퍼를 사용하면 뷰안에 넣은 자바 스크립트 코드의 양을 줄일수 있습니다. 자바코드와 동일한 추상화 수준으로 작성한다면, 헬퍼의 원래 목적과 는 달리 스크립트릿을 구현하는 것이나 다름없게 된다. 해법참고 Custom tag를 사용 (가독성, 추상화 수준을 제공) Jsp2.0이상 태그파일 헬퍼 사용(JSTL 같이 사용가능) 요구사항: 신용 불량 위험 고객을 리스트 하라… * Java 스크립틀릿으로 작성한 코드 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 22 22 22 22

23 2-9 헬퍼를 스크립틀릿처럼 작성하는 사례 프로젝트 개요
JSTL로 작성한 코드 장점: 단점: 이렇게사용하지마라! 커스텀 태그로 작성한 코드 장점: 간소화,재사용 단점: 코드이해필요 태그파일 헬퍼로 작성한 코드 장점:간소화,재사용 단점:코드이해필요,JSP2.0이상 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 23 23 23 23

24 Q&A

25 굿바이, 게으름 프로젝트 개요 게으름에서 벗어나 나를 찾는 10가지 열쇠 ‘하면된다’가 아니라 ‘왜 해야 하는가’를 발견하라.
마음의 상태를 파악하는 또 하나의 마음을 키워라. 자신 안에 더 큰 존재가 있음을 믿어라. 긍정적이고 구체적인 질문을 하라. 자신의 강점과 재능에 기초하여 큰그림을 그려라. 운동과 휴식은 천연의 보약임을 명심하라. 매일 마음을 모을 수 있는 자기 의식을 행하라. 중요한 일을 우선적으로 하라. 계획과 일을 소화 능력에 맞게 나눠라. 매일 할가지씩 능동적 선택을 하라. 더이상 IT 환경은 비즈니스 환경과 무관하게 계획되고, 구축되며, 운영될 수 없다 25 25 25 25


Download ppt "- SW_Desing Study Group -"

Similar presentations


Ads by Google