- SW_Desing Study Group -

Slides:



Advertisements
Similar presentations
SMART MANAGED INSTRUCTION WITH SNS 도지원 강동하 나지범 박창현 최병찬 SixSignal Capstone Design 2012.
Advertisements

JSP 정리 레퍼런스: JSP 2.1 웹 프로그래밍 (최범균, 가메출판사). 목차 1. Directive - 인코딩 - 오류처리 2. Implicit Object - 쿠키/세션 3. Action Tag 4. JDBC/DBCP 프로그래밍, 파일업로드 5. Expression.
D-Guard Security Suites 제품 소개서
Chapter 02. 웹에 대한 이해. Chapter 02. 웹에 대한 이해 웹의 역사 HTTP 웹 애플리케이션 기술.
Spring MVC ㅇ 스프링 MVC 구성요소 설명 DispatcherServlet 클라이언트의 요청을 컨트롤러에게 전달하고
MEAN Stack Front to Back (MEANAuthApp)
APPEON SOLUTION INTRODUCTION.
Ⅰ웹로그분석을 통한 쇼핑몰 운영전략 코리아 인터넷 마케팅센터 대표 김형택
Python Bottle Web Framework
12장. JSP에서 자바빈 활용 제12장.
JPetStore 분석자료 1.0 Spring framework 작성자 : 김태완.
Chapter 32 Analyzing Web Traffic
팀 명: Con Spirito 팀 원: 경주리 김다정 김소담 최은미
1. JSP(Java Server Pages) 소개
9 표준 액션.
Chapter 01 : Java EE 개요. chapter 01 : Java EE 개요.
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
7. JavaBeans 프로그래밍 JavaBeans JavaBeans 만들기 Bean을 이용한 회원가입 양식 작성하기
Chapter 04. 웹 보안 : 웹, 그 무한한 가능성과 함께 성장한 해킹
Web Server와 DB 연동.
16강. 자바 빈 빈 이란? 빈 만들기 빈 관련 액션 태그(useBean, getProperty, setProperty)
1장. JSP 및 Servlet을 활용한 동적 웹 프로그래밍 소개 제1장.
Web Servers (IIS & Apache)
1. JSP(Java Server Pages) 소개
메소드 호출과 힙 원격 메소드 호출 서블릿 엔터프라이즈 자바 빈즈
4 쿠키와 세션.
1강 01장. 웹과 자바.
Chapter 01 : Java EE 개요. chapter 01 : Java EE 개요.
ASP 정 보 보 호 학 과 양 계 탁.
NTAS 소개 (Network Transaction Application Server)
임베디드 프로그래밍 Lecture #
중 간 고 사 (웹프로그래밍)
AJAX 커머스아이 박준열.
(Network Transaction Application Server)
ASP.NET Mobile Controls
5. JSP의 내장객체1.
JSP와 자바 빈즈 JSP 빈즈 구조를 이해하고 활용한다. useBean 액션 활용법을 익힌다.
JSP 내장 객체 JSP에서 기본으로 사용할 수 있는 내장 객체 종류를 알아본다. 내장 객체별 주요 기능과 메서드를 이해한다.
웹 애플리케이션 개발 프레임워크와 스트러츠 웹 애플리케이션 기술 변천사를 이해한다
9강. JSP 본격적으로 살펴보기-I JSP 태그의 개념 이해 JSP 동작 원리 JSP 내부 객체
04장 웹 보안: 웹, 그 무한한 가능성과 함께 성장한 해킹
Cookie 와 Session.
Html(front end) & jsp(back end)
5장. JSP 페이지의 스크립트 요소 이 장에서 배울 내용 : JSP페이지를 구성하는 구성요소중 하나인 스크립트요소를 학습하는 장으로 JSP페이지의 스크립트의 3가지 요소인 선언문(Declaration), 스크립트릿(Scriptlet), 표현식(Expression)에 대해.
Network Security WireShark를 활용한 프로토콜 분석 II.
진상현 노현철 박주호 김민구 이보라 박종빈 Ajax.
Open API - Naver (Application Programming Interface )
사용자 정보 수집 및 교통정보 제공 시스템 블랙박스App을 이용한 웹 서비스 컴퓨팅 텀프로젝트 한국기술교육대학교 컴퓨터공학부
컴퓨터응용과학부 Java Enterprize(DB) 제 7 주
10장. 자바빈(JavaBean) 이 장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다. 하나의 JSP페이지 안에 디자인부와 로직부가 혼재하게 되면 프로그램의 협업과 유지보수가 어렵다. 자바빈은 로직을.
이장에서 배울 내용 : 화면에 표시를 담당하는 JSP페이지와 실제프로그램을 처리하는 로직을 분리하는 것에 대해서 학습한다
1강. 웹프로그래밍 웹프로그래밍이란? JAVA웹 웹프로그램의 동작 필요한 학습 Lecturer Kim Myoung-Ho
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
CGI (Common Gateway Interface)
JSP문법 JSP 기본 구조를 이해한다. 지시어, 스크립트릿 JSP 액션 태그 사용법을 익힌다. 한빛미디어(주)
NTAS 소개 (Network Transaction Application Server)
SpringFramework 중간고사 요약 REST by SpringFramework.
3장. 웹로직 서버에서의 서블릿과 JSP의 운용 3-1. 서블릿, JSP를 실행하기 전의 환경 설정
Chapter 08 : 서블릿 고급3. chapter 08 : 서블릿 고급3 학습목표 서블릿 속성과 Scope ServletContext HttpSession HttpServletRequest Filter API 요청 필터 응답 필터 url-pattern 8 가지.
Internet Computing KUT Youn-Hee Han
Spring Security 2015 Web Service Computing.
JSP 빈즈 1.JSP 빈즈? JSP와 연동을 위해 만들어진 컴포넌트 클래스를 말한다. JSP 빈즈는 컨테이너에 위치하며, 데이터 처리와 공용화된 기능을 제공하기 때문에 빈즈를 잘 활용하면 프로그램의 중복을 줄이고 좀더 원할한 유지보수가 가능한다. 물론 , 모든 JSP를.
JSP Programming with a Workbook
제 17 장 MVC 모델과 구현 학기 인터넷비즈니스과 강 환수 교수.
웹 스크래핑.
웹 프로그래밍 기술 요약 Yang-Sae Moon Department of Computer Science
스터디카페 예약시스템 조영현.
온라인강의 사이트 이용안내.
大鵬(대붕) 김 시 습 국어국문학과 이준석.
관리자 페이지에서 관리자 승인 1. 정기권 신규고객 1. 로그인 화면 2. 차량등록여부 확인 3. 개인정보 활용 동의
Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

제어코드 로직으로 너무 많이 추가되어 어려워짐 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

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

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

Q&A

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