MVC pattern 이란?

: model, view, controller 의 약자로 이 세가지의 역할 군으로 분리하여 웹을 개발하는 방식을 말한다.

- model

쉽게 말해 객체이다. C에서의 구조체, c++에서의 클래스(member와 memberFunction)같은 것이다. 각각의 데이터에 대해서 각각의 DAO를 만든 것을 말한다.

 

- controller

model을 가지고 어떻게 프로그램을 실행시켜 나갈 것인가에 대한 부분이다. 비즈니스 로직과 model-view간의 중재 역할을 담당한다.

 

- view

말 그대로 사용자에게 보여지는 화면(html, jsp page 등). 시대에 따라 요즈음에는 view의 중요도가 올라갔다. 예전에는 text의 개념에서 현제 window의 개념으로 바뀌게 되었다.

 

 

 

MVC패턴의 흐름 정리

 

 

1. 웹 브라우저에서 클라이언트가 url을 통해 request를 보낸다.

2. 이를 request 받은 DispatcherServlet이 handlerMapping을 통해 요청 url에 해당하는 컨트롤러를 찾고 해당 컨트롤러에게 요청을 보낸다.

3. 요청을 받은 controller는 해당 요청에 해당하는 데이터를 추출하고 해당 데이터에 대한 view이름을 지정한다. 데이터를 추출할 때 model 및 DB에 접근하여 데이터를 추출하는 과정을 거치게 된다.

4. 요청 처리 후 controller는 다시 DispatcherServlet에게 처리된 데이터와 뷰에 관한 정보를 전달한다.

5. DispatcherServlet는 어떤 view를 요청하는지 알아내기 위해 controller에게 받은 정보를 View Resolver에게 보낸다.

6. View Resolver는 받은 정보를 통해 controller가 처리한 데이터에 해당하는 view를 찾고 DispatcherServlet는에 반환한다.

7. DispatcherServlet은 해당하는 view에 mapping 시켜준다.

8. mapping 되어 데이터를 받은 view에서는 데이터를 가공한 페이지를 다시 DispatcherServlet에게 보낸다.

9. 최종적으로 DispatcherServlet은 요청받은 페이지를 사용자에게 response 한다.

 

 

◆ heroku deploy

 

maven install 을 통해 war파일을 생성한다. 이때 생성된 war파일 통해서 heroku에 올려서 deploy하게 된다.

 

 

 

성공적으로 warfile이 생성되었다면 BUILD SUCDESS가 나타난다.

 

war file은 해당 프로젝트의 target 폴더 안에 만들어지게 된다.

 

 

heroku CLI commands

 

1) 설치 확인

heroku --version

 

2) ★ java plug-in 설치

heroku plugins:install java

java war file을 올릴 수 있는 plugin을 설치해야 한ㄷ.

 

3) 로그인

heroku login

 

4) deploy

heroku war:deploy [war파일명] --app [앱이름]

 

 

 

 

- IaaS(Infrastructure as a Service)

서버를 운영하기 위해서는 서버 자원, IP, Network, Storage, 전력 등 인프라를 구축하기 위한 여러가지 것들이 필요하다. IaaS는 컴퓨팅, 네트워킹, 스토리지 및 기타 인프라스트럭처를 사용하기 위한 서비스이며 가상의 환경에서 이런 것들을 쉽고 편하게 이용할 수 있도록 서비스를 제공한다. 기존 서버 호스팅보다 H/W 확장성이 좋고 탄력적이며 빠른 제공을 할 수 있는 가상화 기술을 이용한다. Iass는 Pass, Saas의 기반이 되는 기술이다.

 

- PasS(Platform as a Service)

서비스를 개발 할 수 있는 안정적인 환경(Platform)과 그 환경을 이용하는 응용 프로그램을 개발 할 수 있는 형태이다. 클라우드 플랫폼 서비스는 주로 응용 프로그램을 개발할 때 사용되며, 미들웨어를 설치하지 않고도 미들웨어에서 제공하는 API를 사용하여 소프트웨어를 개발할 수 있다.

PaaS에서 정해준 OS, 버전, 어플리케이션 등이 있으므로 개발자는 완성된 소스를 올리기만 하면 된다. 개발자의 선택권이 줄어들었지만 그만큼 플랫폼에게 권한을 위임함으로써 복잡한 서버, 환경구성에 신경쓰지 않아도 된다.

 

- SaaS(Software as a Service)

간략하게 서비스를 이용할 수 있는 소프트웨어를 말한다. 주문형 소프트웨어(on-demand software, 온디맨드 소프트웨어)라고도 한다. Cloud환경에서 동작하는 응용프로그램을 서비스 형태로 제공하며, 메일 서비스를 예로 들 수 있다. 사용자는 이 시스템이 무엇으로 이루어져 있고 어떻게 동작 하고 있는지 그리고 메일을 백업을 어떻게 하는지 알 필요가 없다. 그저 서비스 형태로 원하는 단말기(PC, Tablet, SmartPhone 등등)에서 메일을 주고 받으며, 필요하면 언제든지 공간도 늘려서 서비스를 받을 수 있기 때문이다.

 

 

◆ service 에 따른 제공 범위

 

 

 

- Spring에서 jsp를 통해 db를 연동하여 CRUD프로젝트를 만드는 과정

 

 

1. Db4free에서 테이블생성 및 sample data 추가

 

CRUD 쿼리문

1) table생성쿼리

create table BOARD (

seq int AUTO_INCREMENT,

title varchar(100),

writer varchar(20),

content varchar(1000),

regdate timestamp default current_timestamp,

cnt int default 0,

primary key(seq)

);

 

 

2) 데이터 추가 insert into BOARD (title,writer,content) values ('제목','홍길동','내용');

3) 데이터 수정 update BOARD set title='제목2', content='내용' where seq=10

4) 데이터 삭제 delete from BOARD where seq=10

5) 데이터 목록

select * from BOARD order by regdate desc

select * from BOARD where seq=10

select title, content from BOARD where seq=10

 

 

query를 통한 4개의 데이터 insert 예시

 

SQL 창에서 쿼리를 입력한 후 실행을 눌러 insert한다.

 

 

보기를 통해 적용된 것을 확인할 수 있다.

 

 

 

2. Dynamic Web project 생성

1) Convert to Maven project

2) <dependencies> 삽입 – mysql-connect and jstl library

3) JDBUtil class 생성

DB를 사용할때 마다 connection과 환경설정을 일일이 만드는 것을 방지하기 위해 JDBUtil이라는 class를 만들어 그 설정을 해주는 함수를 구축하고 다른 클래스에서 편하게 쓰도록 한다.

4) BoardVO class 생성(VO - Value Object)

DTO(Date Transfer Object)라고도 하는 VO는 계층간 데이터 교환을 위한 자바빈즈를 말한다. 계층간 데이터 교환을 위한 객체를 DTO 또는 VO라고 부른다.

5) BoardDAO class 생성(DAO - Date Access Object)

DAO는 DB로의 접근을 위한 로직을 담당하여 데이터를 조작하는 기능을 전담하도록 만든 오브젝트이다.

 

DAO 클래스의 기본 흐름

(1) DB와 연결할 Connection을 가져온다.

(2) 어떤 DB를 사용할 것이며, 어떤 드라이브와 로그인 정보를 사용할 것인가.

(3)작업이 끝나면 사용한 리소스를 시스템에 돌려준다.

 

 

3.WebContent 제작

 

제작된 jsp page를 통해 데이터베이스에서 insert한 4개의 data를 확인할 수 있다.

Add data

 

 

 

Delete data

 

 

 

 

 

 

 

 

Update Date

 

 

 

 

 

웹 페이지는 여러 사용자가 pc, 태블릿, 휴대폰 등 다양한 장치를 통해 접근한다.

이때 사용자가 접근하는 장치에 따라 그 내용을 보기 좋기 조정하는 것이 필요하다.

 

Responsive Web Design(RWD)은 CSS와 HTML을 통해 콘텐츠의 크기를 조정, 축소, 확대 , 이동하여 모든 기기에서 보기 좋도록 만든다.

 

 

<meta> viewport

viewport는 기기에서 사용자가 화면을 볼 수 있는 범위를 말한다. 따라서 viewport는 기기마다 다르다. html문서가 동일한 viewprot에 대해 작성되어있으면 모바일이나 태블릿으로 접속할 경우 페이지 접근시 시각적으로 불편함을 겪게 될 것이다.

이떄 <meta> viewport를 사용하면 이 문제를 해결할 수 있다.

 

viewport속성

- width=device-width;

width를 다바이스의 가로크기로 설정하여 각 기기에 맞춰 가로폭이 자동으로 설정되도록 한다.

- initial-scale=1.0;

initial-scale은 페이지 로드시 확대 / 축소의 비율을 의미한다.

viewport사용과 함께 CSS 미디어 쿼리를 사용하여 접근 기기별로 다른 스타일을 적용하여 사용자가 페이지를 더욱 보기 좋도록 할 수 있다.

 

@media : media query

@media를 이용하여 특정 조건을 만족할때의 css스타일 설정 및 html 내용을 변경할 수 있다.

 

다음예제는 600px 768px를 기준으로 3가지 영역에서의 background-color변화를 준 media query 예제이다.

max-width와 min-width를 설정하여 브라우저의 width에 따른 조건을 걸어주었다.

@media only screen and (max-width: 600px) {

.example {background: red;}

}

@media only screen and (min-width: 600px) {

.example {background: green;}

}

@media only screen and (min-width: 768px) {

.example {background: blue;}

}



<p class="example">Resize the browser window to see how the background color of 
this paragraph changes on different screen sizes.</p>

example class에 해당하는 p태그는 페이지 창의 크기에 따라서 배경색이 바뀌게 된다.

 

 

box-sizing

기본적으로 한 요소의 너비와 높이는 다음과 같이 계산된다.

너비 + 패딩 + 테두리 = 요소의 실제 너비

높이 + 패딩 + 테두리 = 요소의 실제 높이

대표사진 삭제

사진 설명을 입력하세요.

하지만 이럴경우 위 사진처럼 padding과 테두리 두깨의 크기에 따라 element의 높이와 너비가 불규칙정으로 정해질 수 있기때문에 디자인적인 측면에서의 비효율 적일 수 있다.

 

이러한 문제를 커버하기 위한 개념으로 box-sizing이 있다

box-sizing:border-box; 를 사용하면 element가 실제로 차지하는 너비와 높이가 태두리의 영역으로 고정되어 이러한 부분을 해결할 수 있다.

-> 일관적인 디자인이 가능하다.

 

max-width /min-width

max-width

max-width를 통해 element의 width를 지정할 경우 페이지의 크기가 정해둔 max-width보다 작아질경우 그에 맞게 width가 줄어드는 것을 확인 할 수 있다.

반면 width를 통해 폭을 지정한 경우 아예 해당하는 width의 크기로 element의 폭이 고정된다.

 

min-width

element의 width 속성값이 min-width보다 작아지는 것을 방지할 수 있다.

 

Form value 접근방법 2가지

form name = myForm

1. ID로 접근.

var Storename = document.getElementById("Storename");

2. name으로 접근.

var Storename = document.myForm.Storename;

 

 

 

 

javascript style 변경방법

 

var Storename = document.myForm.Storename;

이런식으로 변수를 가져온다음.

 

Storename.style.color = "red";

이런식으로 설정해준다.

.style로 접근한다.

 

'개발 > Web' 카테고리의 다른 글

JSP CRUD project(Spring, db4free)  (0) 2021.06.18
[Web] Responsive Web / Box-sizing  (0) 2021.06.17
[web] Spring 개념정리(mvc model, Dao, Ioc, POJO, DI 등)  (0) 2021.06.17
[web] JSP Expression language  (0) 2021.06.17
[web] JSP action tags  (0) 2021.06.17

 

 

Model1

view+controller, model를 view와 Controller를 한 곳에서 처리한다.

 

특징

1. 자바 코드와 JSP 페이지 코드가 섞여서 복잡한 코드가 됩니다.

2. 구조가 단순하여 간단한 페이지를 구성할 때 빠르게 개발 할 수 있습니다.

3. 백엔드와 프론트 엔드가 하나의 페이지에 있어서 분업이 어렵다

 

Model2

view, Controller, model을 분리해서 처리

 

특징

1. 보여주는 view(JSP페이지), 처리 하는 model(빈,클랙스), 제어하는 controller(서블릿)로 확실하게 나뉜다.

2. 백엔드와 프론트 엔드가 나뉘어져 분업이 편리하다.

 

 

 

Spring MVC pattern

 


Spring framework /Spring boot

 

Spring framework

과거 버전 - EJB에 비해서 많은 부분 발전한 버전이다.

하지만 설정하는 것에 어려움이 많다.

그럼에도 spring은 아래와 같은 강력을 토대로 대표적인 java framework로 자리 잡았다.

 

경량 컨테이너

IoC(Invertion of Control: 제어 역행)

Di(Dependency Injection: 의존성 주입)

AOP(Aspect-Oriented Programming: 관점지향 프로그래밍)

 

Spring Boot

이와 같은 스프링의 단점을 해결하고자 나온것이 바로 Spring Boot이다. spring boot는 환경 설정을 최소화한다. (사용자가 해야 할 부분을 대부분 spring boot가 해준다) 따라서 생산성을 크게 향상했다

 


POJO

Plain old Java Object의 약자이다.

말 그대로 해석을 하면 오래된 방식의 간단한 자바 오브젝트라는 말이다

POJO란 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트를 말한다.

 


IoC

IoC란 Inversion of Control의 약자이다.

해석하자면 제어의 역전이다.

어떤 객체가 사용할 객체(의존관계인 객체)를 직접 선언하여 사용하는 것이 아니라, 어떤 방법을 사용하여(ex. 생성자)사용하여 주입 받아 사용하는 것이다.

 

/* 일반적인 제어권: 자기가 사용할 의존성은 자기가 만들어서 사용 */

public class CarService {

private CarRepository carRepository = new CarRepository();

}

 

vs

 

Ioc

다른 누군가가 의존성을 밖에서 준다.(제어권의 역전)

CarRepository를 사용은 하지만 만들지는 않는다.

생성자를 통해서 받아온다. 따라서 의존성을 관리하는 일은 CarService가 하는 일이아니다.

누군가 밖에서 해주는 것이다.

public class CarService {

private CarRepository carRepository;

public CarService(CarRepository carRepository){

this.carRepository = carRepository;

}

}

 


DI

Dependency Injection의 약자이다.

말그대로 "의존성 주입" 을 말한다.

Spring 의 Container 들은 Bean 객체들을 관리하는 데 있어서 DI 를 이용하며 이를 통해 Life Cycle 을 용이하게 관리할 수 있으며 이 것이 스프링 프레임워크의 핵심적인 동작이라고 할 수 있다.

 

 

- Dependency Injection 을 통해 얻을 수 있는 장점 -

(1) Dependency Reduction : 객체 상호 간 의존성 관계를 줄여준다.

(2) Reusable Structure : 코드의 재사용과 조합이 용이하다.

(3) Readability : 코드들이 분리되다보니 가독성이 뛰어나진다.

(4) Loose Coupling & Easy to change : 구조는 변화에 민감하지 않을 수 있다.

 

public class Sample {



@Autowired

private Example example;



}



public class Sample {

private Example example;



@Autowired

public void setExample(Example example) {

this.example = example;

}

}

 


AOP

Aspect-Oriented Programming

AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것이다.

AOP라고 해서 전에 없던 새로운 개념이 등장한것이 아닙니다. 결국은 공통된 기능을 재사용하는 기법이다.

 

 

 


DAO 정의

Data Access Object의 약자이다. 간단히 Database의 data에 접근을 위한 객체.

Database에 접근을 하기위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다.

즉 DB를 사용해 데이터를 조화하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

 

DTO(=VO)

DTO(Data Transfer Object)는 VO(Value Object)로 바꿔 말할 수 있다.

DTO는 로직을 갖고 있지 않는 순수한 데이터 객체이며 속성과 그 속성에 접근하기 위한 getter, setter 메소드만 가진 클래스를 말한다.

 

DTO 클래스 예제

public class TestDto {
private String name;
private int value;
private String data;
public String getName() {
return name;
}
public void setName(String name) { 
this.name = name;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}

 

 

'개발 > Web' 카테고리의 다른 글

[Web] Responsive Web / Box-sizing  (0) 2021.06.17
[web] Javascript Form value 접근방법 2가지, style변경  (0) 2021.06.17
[web] JSP Expression language  (0) 2021.06.17
[web] JSP action tags  (0) 2021.06.17
[web] JSP directives  (0) 2021.06.17

 

Java Bean 구성 요소 및 요청, 세션, 응용 프로그램 등과 같은 기타 오브젝트에 저장된 데이터의 액세스 가능성을 단순화한다.

 

Syntax for Expression Language (EL)

${expression}

 

 

Implicit Objects pageScope : 주어진 속성 이름을 페이지 범위에 설정된 값으로 맵핑한다.

requestScope : 주어진 속성 이름을 요청 범위에 설정된 값으로 맵핑한다.

sessionScope : 주어진 속성 이름을 세션 범위에 설정된 값으로 맵핑한다.

applicationScope : 주어진 속성 이름을 응용 프로그램 범위에 설정된 값으로 맵핑한다.

param : 요청 매개 변수를 단일 값에 맵핑한다.

paramValues : 요청 매개 변수를 값의 배열에 맵핑한다.

header : 요청 헤더 이름을 단일 값에 맵핑한다.

headerValues : 요청 해더 이름을 값 배열에 맵핑한다.

cookie : 주어진 쿠키 이름을 쿠키 값에 매핑한다.

initParam : 초기화 매개 변수를 맵핑한다.

pageContex : 많은 객체 요청, 세션 등에 대한 엑세스를 제공한다.

 

+ Recent posts