혜야의 코딩스토리

[JSP] JSP(Java Server Pages)의 내장 객체/ MVC패턴 / 프레임 워크(Framework) 본문

꿈 : 멋진 개발자 🧸/Java

[JSP] JSP(Java Server Pages)의 내장 객체/ MVC패턴 / 프레임 워크(Framework)

hyeya_ 2022. 7. 17. 23:43

✏️JSP의 내장 객체

  • request : 사용자의 요청을 처리
  • response : 서버의 응답
  • session : 사용자의 인증 정보(로그인~로그아웃) 저장
  • out : 웹 브라우저에 출력 처리
  • application : 서버의 정보 저장
  • exception : 에러 처리
  • config : jsp의 환경 정보
  • page : 현재 페이지

✏️JSP 내장변수의 사용 범위

  • pageContext : 현재 페이지
  • request : 요청+응답 페이지 (2페이지 => form요청 페이지1, 응답 페이지1)
  • session : 사용자 변수 (로그인~로그아웃 할 때까지 참조)

✏️JSP의 개발 방식

🎈Model1 방식 : JSP page 안에 자바 코드 작성 ( 요즘 사용 X)

🎈Model2 (MVC 패턴) 방식 : jsp page 와 java code 분리

Model : 데이터 처리 클래스 (DAO, DTO) // back end단
             DAO(Data Access Object) : 실제적인 비즈니스 로직을 처리
             DTO(Data Transfer Object) : 프로세스 사이에서 데이터를 자징. 전송하는 객체
                                                           //VO(Vectior Object)이라고도 불림.
View : 화면 처리(jsp) // front end단
Controller : 프로그램의 흐름을 제어(servlet class)
객체 설명
DAO
(Data Access Object) 
특정 타입의 데이터베이스나 다른 지속적인 메커니즘에 추상 인터페이스를 제공하는 객체이다. 애플리케이션 호출을 데이터 저장 부분에 매핑함으로써 DAO는 데이터베이스의 세부 내용을 노출하지 않고 특정 데이터 조작 기능을 제공한다.
DTO
(Data Transfer Object)
DTO는 프로세스 사이에서 데이터를 전송하는 객체를 의미한다.
많은 프로세스 간의 커뮤니케이션이 원격 인터페이스(예: 웹 서비스)에 의해 이루어지기 때문에 전송될 데이터를 모으는 DTO를 이용해서 한 번만 호출하게 하는 것이다.
DTO는 스스로의 데이터를 저장 및 회수하는 기능을 제외하고 아무 기능도 가지고 있지 않다는 것이 DAO와의 차이이다.
VO(Vectior Object) VO는 간단한 독립체(Entity)를 의미하는 작은 객체를 의미한다.
가변 클래스인 DTO와 다르게 getter기능만 제공하는 불변 클래스를 만들어서 사용한다.


🎈MVC(Model-View-Controller) 모델은 4 개의 계층으로 구성된다.

1) Presentation Layer (UI Layer)

- 사용자에게 보여지는 화면으로 Event-Driven 방식으로 사용자의 요청을 받는다.

 

2) Control Layer (Application Layer or Service Layer)

- Presentation에서 받은 요청을 Business Layer에 전달하는 부분이다.

- 비즈니스 로직과 UI(Presentation)을 분리하기 위한 계층

- 사용자의 요청(request)에 해당하는 비즈니스 로직을 결정(controller)하고, 적절한 응답(response)을 사용자에 전달하는 역할을 한다.


3) Business Layer (Domain Layer)

- 핵심적인 로직이 구현되며, Persistence Layer에 데이터를 요청하여 받아서 로직을 수행한다.

 

4) Persistence Layer

- 데이터베이스에서 데이터를 빼내어(Read) 객체화하거나, 데이터베이스에 데이터를 저장(Create), 수정(Update), 삭제(Delete)하는 역할


✏️Model 1의 장점

- 빠른 개발 속도

- 배우기 쉽다.

 

✏️Model 1의 단점

- JSP페이지에서 프리젠테이션 로직과 비즈니스 로직을 모두 포함하기 때문에 JSP 페이지가 너무 복잡해진다.

- 프리젠테이션 로직과 비즈니스 로직이 혼재되어 있기 때문에 개발자와 디자이너의 분리된 작업이 어려워진다.

- JSP페이지의 코드가 복잡해짐으로 인해 유지보수가 어려워진다.

 

✏️Model 2의 장점

- Web Application 이 복잡해지고, 사용자들의 요구가 증가함에 따라 새로운 방식의 개발방식에 대한 요구가 증대되었다.

- 대규모 프로젝트의 경우 개발시의 개발 비용보다는 유지보수를 쉽게 할 수 있는 개발 방식을 요구하는 경우가 많아졌다.

 

✏️Model 2의 단점

- Model 2 개발방식은 Model 1보다 어렵고 복잡하다.

- Model 1으로 개발하는 것보다 개발시간이 더 요구된다.


✏️프레임워크(Framework)

🎈특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다.
🎈컴포넌트의 재사용이 가능하다.
🎈좀 더 높은 수준에서 패턴들을 조직화한다.
🎈Framework의 종류 : Struts, Spring(전자정부 표준) 등

소프트웨어 프레임워크의 정의

  • 효율적인 정보 시스템 개발을 위한 코드 라이브러리, 애플리케이션 인터페이스, 설정 정보 등의 집합으로서 재사용이 가능하도록 소프트웨어 구성에 필요한 기본 뼈대를 제공한다.
  • 광의적으로 정보 시스템의 개발 및 운영을 지원하는 도구 및 가이드 등을 포함한다.

프레임워크의 특징

항목 설명
모듈화
(modularity)
프레임워크는 인터페이스에 의한 캡슐화를 통해서 모듈화를 강화하고 설계와 구현의 변경에 따르는 영향을 극소화하여 소프트웨어의 품질을 향상시킨다.
재사용성
(reusablity)
프레임워크가 제공하는 인터페이스는 반복적으로 사용할 수 있는 컴포넌트르 정의할 수 있게 하여 재사용성을 높여 준다. 프레임워크 컴포넌트를 재사용하는 것은 소프트웨어의 품질을 향상시킬 뿐만 아니라 개발자의 생산성도 높여준다.
확장성
(extensiblity)
프레임워크는 다형성을 통해 애플리케이션이 프레임워크의 인터페이스를 확장할 수 있게 한다.
프레임워크 확장성은 애플리케이션 서비스와 특성을 변경하고 프레임워크를 애플리케이션의 가변성으로부터 분리함으로써 재사용성의 이점을 얻게 한다.
제어의 역흐름
(inversion of control)
프레임워크 코드가 전체 애플리케이션의 처리 흐름을 제어하여 특정한 이벤트가 발생할 때 다형성을 통해 애플리케이션이 확장한 메소드를 호출함으로써 제어가 프레임워크로부터 애플리케이션으로 거꾸로 흐르게 한다.

✏️소프트웨어(SW) 개발 보안

SW개발 과정에서 개발자의 실수, 논리적 오류 등으로 인해 SW에 내포될 수 있는 보안 취약점의 원인, 즉 보안 취약점을 최소화하고, 사이버 보안 위협에 대응할 수 있는 안전한 SW를 개발하기 위한 일련의 보안 활동이다.

소프트웨어 개발 보안 가이드의 구성

<Java 시큐어 코딩 가이드>

유형 설명
입력 데이터 검증 및 표현 프로그램 입력값에 대한 검증 누락 또는 부적절한 검증, 데이터의 잘못된 형식 지정으로 인해 발생할 수 있는 보안 약점
//SQL 삽입, 자원 삽입, 크로스 사이트 스크립트(XSS) 등 26개
보안 기능 보안 기능(인증, 접근 제어, 기밀성, 암호화, 권한 관리 등)을 적절하지 않게 구현 시 발생할 수 있는 보안 약점
//부적절한 인가, 중요 정보 평문 저장(또는 전송) 등 24개
시간 및 상태  동시 또는 거의 동시 수행을 지원하는 병렬 시스템, 하나 이상의 프로세스가 동작하는 환경에서 시간 및 상태를 부적절하게 관리하여 발생할 수 있는 보안 약점
//경쟁 조건, 제어문을 사용하지 않는 재귀 함수 등 7개
에러 처리 에러를 처리하지 않거나, 불충분하게 처리하여 에러 정보에 중요 정보(시스템 등)가 포함될 때 발생할 수 있는 보안 약점
//취약한 패스워드 요구 조건, 오류 메시지를 통한 정보 노출 등 4대
코드 오류 타입 변환 오류, 자원(메모리 등)의 부적절한 반환 등과 같이 개발자가 범할 수 있는 코딩 오류로 인해  유발되는 보안 약점
//널 포인트 역참조, 부적절한 자원 해제 등 7개
캡슐화 중요한 데이터 또는 기능성을 불충분하게 캡슐화하였을 때 인가되지 않는 사용자에게 데이터 누출이 가능해지는 보안 약점
//제거되지 않고 남은 디버그 코드, 시스템 데이터 정보 노출 등 8개
API 오용 의도된 사용에 반하는 방법으로 API를 사용하거나, 보안에 취약한 API를 사용하여 발생할 수 있는 보안 약점
//DNS Lookup에 의존한 보안 결정, 널 매개 변수 미조사 등 7개