서버리스 프론트
- 웹서버

웹 서버란 클라이언트가 웹 브라우저에서 어떠한 페이지를 요청하면 웹 서버에서 그 요청을 받아 (정적 콘텐츠)* 제공해주는 서버
→ 대표적으로 웹 서버라고 하면 Apache 생각하면 된다.
But 웹 서버가 정적인 콘텐츠 제공할까?
→ 그렇지 않다, 웹 서버가 동적 콘텐츠를 요청 받으면 (WAS)* 에게 해당 요청을 넘겨주고.WAS에서 처리한 결과를 클라이언트에게 전달해주는 역할도 한다.

그림과 같이 정적인 페이지를 처리할 때 Static, GET,read,STATUS,file contents 이용하여 데이터 처리
동적인 페이지의 경우 Dynamic, STATUS, Servelt 통해서 response 전달한다.
→
- tatic Pages
- Web Server는 파일 경로 이름을 받아 경로와 일치하는 file contents를 반환한다.
- 항상 동일한 페이지를 반환한다.
- Ex) image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들
- Dynamic Pages
- 인자의 내용에 맞게 동적인 contents를 반환한다.
- 즉, 웹 서버에 의해서 실행되는 프로그램을 통해서 만들어진 결과물 * Servlet: WAS 위에서 돌아가는 Java Program
- 개발자는 Servlet에 doGet()을 구현한다.
-
WAS?
→ 웹 서버와 (웹 컨테이너)* 가 합쳐진 형태로, 웹 서버 단독으로 처리할 수 없는 데이터베이스의 조회나 다양한 logic 처리가 필요한 동적 콘텐츠를 제공
→ 대표적인 WAS는 Tomcat
-
정적 콘텐츠?
→ 단순 HTML 문서, CSS, JS, 이미지, 파일 등 즉시 응답 가능한 콘텐츠를 의미함
-
웹 컨테이너?
→ 웹 서버가 보낸 JSP, PHP등의 파일을 수행한 결과를 다시 웹 서버로 보내주는 역할
-
HTTPS
- 사전적 의미:
HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS, HTTP over SSL, HTTP Secure 등으로 불리는 HTTPS는 HTTP에 데이터 암호화가 추가된 프로토콜이다
-
사용하는 이유:
HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제 3자가 정보를 볼 수 없도록 (공개키)* 암호화를 지원한다.

-
공개키?
→ 모두에게 공개가 가능한 키를 의미한다.
→ 공개키 암호화: 공개키로 암호화를 하면 오로지 개인키로만 복호화 할 수 있다.
(개인키는 나만 가지고 있으므로, 나만 볼 수 있다)
-
개인키?
→ 나만 가지고 알고 있어야 하는 키를 의미한다.
→ 개인키 암호화: 개인키로 암호화하면 오로지 공개키로만 복호화 할 수 잇다.
→ 공개키는 모두에게 공개되어 있으므로, 내가 인증한 정보임을 알려 신뢰성을 보장 할 수 있다.
-
Nameserve
1.사전적 의미:
디렉터리 서비스 프로토콜을 실행하는 프로그램이나 서버를 통칭한다. 일반적으로, 인터넷에서 도메인 이름 서비스를 제공하는 서버를 말한다.
→ 특정 사이트에 접속하기 위해서는 특정 사이트의 “주소”를 이용하여 “방문”이 가능한데
특정 사이트의 주소인 IP는 외우기 복잡하기도 하고 순서, 규칙이 없어 번거롭다
이를 편하게 하기 위해 URL이라는 주소를 사용하는데, 이 주소를 사용하기 위해 URL주소를 IP 주소로 변환하는 과정이 필요한데, 이 과정을 네임서버가 당담한다.

-
사용하는 이유:
앞서 설명하듯, 번거로운 IP주소들을 직관적으로 URL으로 사용하기 위해 변환하는 과정이 필요한데 각자의 IP 즉 집에는 고유한 ip라는 주소가 존재하는데 이 주소를 도로명 주소로 표현하듯 URL 으로 DNS로 변경해주는 과정이 필요하기 때문에 사용한다.
신기하게도 네트워크에 미치는 영향은 적다.
-
Cloud front
→ 흔히 CDN이라고 표현한다.
-
사전적 의미:
CloudFront는 AWS에서 제공하는 CDN 서비스 입니다. 캐싱을 통해 사용자에게 좀 더 빠른 전송 속도를 제공함을 목적으로 합니다.
-
사용하는 이유:
전 세계 이곳 저곳에 Edge Server(Location)을 두고 Client와 가장 가까운 Edge를 찾아 Latency를 최소화 시켜 빠른 데이터를 제공하기 떄문에 사용한다.

CDN을 구성하는 요소들
- Origin Server :
원본 데이터를 가지고 있는 서버입니다. 보통 AWS에서의 Origin Server는 S3, Ec2 instance입니다.
- Edge Server = Edge Location :
AWS에서 실질적으로 제공하는 전 세계에 퍼져있는 서버입니다. Edge Server에는 요청받은 데이터에 대해서 같은 요청에 대해서 빠르게 응답해주기 위해 Cache 기능을 제공합니다.
데이터 전송이 발생하는 과정
- 클라이언트로부터 Edge Server로의 요청이 발생한다.
- Edge Server는 요청이 발생한 데이터에 대하여 캐싱 여부를 확인한다.
- 사용자의 근거리에 위치한 Edge Server중 캐싱 데이터가 존재한다면 사용자의 요청에 맞는 데이터에 응답한다
→ 만약 없다면 Origin Server로 요청이 포워딩된다.
- 요청받은 데이터에 대해 Origin Sever 에서 획득한 후 Edge server에 캐싱 데이터를 생성하고, 클라이언트로 응답이 발생한다.
스프링 정리하기
-
”@” java에서 제공하고 프레임 워크에서 사용하는 “@”
프레임워크의 레이어
- Controller
- 클라이언트의 요청을 받고
- 요청을 Service로 전달
- 클라이언트에게 Service로 부터 처리되어 나온 데이터를 클라이언트에게 Response
- Service
- 비지니스 로직을 처리하고
- DB정보가 필요한 경우는 Repositot에게 전달
- Repository
- DB를 관리(연결, 해제,자원 관리)
- Dto / Dao
- DAO(Data Access Object)
- 실제로 DB에 접근하는 객체이다.
- Persistence Layer(DB에 data를 CRUD하는 계층)이다.
- Service와 DB를 연결하는 고리의 역할을 한다.
-
SQL를 사용(개발자가 직접 코딩)하여 DB에 접근한 후 적절한 CRUD API를 제공한다. JPA 대부분의 기본적인 CRUD method를 제공하고 있다.
public interface QuestionRepository extends CrudRepository<Question, Long> { } 이렇게 접근한다.
- DTO(Data Transfer Object)
- 계층 간 데이터를 교환하기 위한 객체(Java Beans)*이다
- DB에서 데이터를 얻어 Service나 Controller 등으로부터 사용하는 객체를 말한다.
- DB의 데이터가 Presentation Logi Tier 로 넘어오게 될 때는 DTO의 모습으로 바껴서 오고간다.
- 로직을 갖고 있지 않은 순수한 데이터 객체이며, Getter/Setter 메서드만을 갖는다.
- 하지만 DB에서 꺼낸 값을 임의로 변경할 필요가 없기 떄문에 DTO클래스에는 setter가 없다.(But, 생성자에서 값을 할당한다.)
- VO(Value Object)
- VO는 DTO와 동일한 개념이지만 read only 속성을 갖는다.
- VO는 특정한 비지니스 값을 담는 객체이지만 DTO는 Layer간의 통신용도로 오고가는 객체를 말한다.

- DAO(Data Access Object)
java Beans :
- JavaBeans란 자바로 작성된 소프트웨어 컴포넌트를 지칭
- 자바 관련 소프트웨어 개발에 있어 재사용이 가능한 표준 컴포넌트 모델
스프링?
→ 아무런 세팅이 존재하지 않은 상태의 프레임워크
스프링부트?
→ 세팅이 다 되어 있는 이미 boot되어 있는 스프링으로 제작된 프레임워크
boot가 아닌 spring을 한다면 tomcat을 기용해야 파일을 돌린다
WAS가 필요한 존재