서버를 운영하기 위해서는 서버 자원, 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 등등)에서 메일을 주고 받으며, 필요하면 언제든지 공간도 늘려서 서비스를 받을 수 있기 때문이다.
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의 폭이 고정된다.
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 메소드만 가진 클래스를 말한다.