2023. 1. 4. 10:53ㆍ카테고리 없음
JSON (Javascript Objact Notation)
- Javascript 객체 문법으로 구조화된 데이터를 표현하기 위한 문자 기반의 표준 포맷
- 웹 어플리케이션에서 데이터를 전송할 때 일반적으로 사용됨
- JSON은 문자열 형태로 존재 (문자열 형태로 존재하기 때문에 네트워크 통신에 유용)
- .json 확장자를 가진 단순 텍스트 파일에 저장 가능
- MIME 타입은 application/json
JSON 구조
- string, number, array, boolean, object 데이터 타입을 가질 수 있음
- 다양한 형태의데이터 계층 구축이 가능
{
"name": "jingu",
"age": 35,
"skill": [
"java",
"typescript",
"rust"
],
"career": true,
"rectal": {
"name": "koreaitacademy",
"address": "busan"
}
}
JSON 통신 예시
Request
const body = {
name: "jihoon",
age: 24
}
json 으로 변환
{
"name": "jihoon",
"age": 24
}
server로 전송
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
Response
class User {
String name;
int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
}
json 으로 변환
{
"name": "jihoon",
"age": 24
}
client 로 전송
const body = {
name: "jihoon",
age: 24
}
Server
- Client에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 프로그램 또는 장치
서버는 4개
Web Server : Live Server, Node, Recat, Vue,. Angular, Html .등등등
- 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹페이지를 반환하는 컴퓨터 프로그램
- HTTP 혹은 HTTPS(http의 secure port:430)를 통해 웹 브라우저에서 요청하는 HTML(고정되어있다) 문서나 오브젝트(미디어 파일 등)를 전송하는 서비스 프로그램
- 정적 서버 콘텐츠를 수행 // 고정되어 있는 반환물을 내놓는다.
기능
- HTTP
- 통신 기록
- 인증
- 정적 콘텐츠 관리
- HTTPS 지원
WAS: Spring, Nest, Java servlet, Express, Tomcat
- 웹 어플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크
- 인터넷 상에서 HTTP을 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행 해 줌
- 동적 서버 콘텐츠를 수행 // 입력값에 다른 결과물을 내놓는 것.
- 대부분 자바 기반이지만 비 자바 계열도 존재
기능
- 프로그램 실행 환경과 데이터베이스 접속 기능
- 트랜잭션 관리 (작업의 한단위 : 트랜잭션)
- 비즈니스 로직 수행 (작업을 한 모든 작업을 비즈니스 로직)
Database Server : mySql, Oracle, maria, postgroSql, Mongo, MS SQL ....
- 다수의 사용자가 공유하여 사용할 목적으로 체계화하여 통합, 관리하는 데이터들의 집합소
특징
- 실시간 접근성
- 지속적인 변화
- 동시 공유
- 내용에 대한 참조
- 데이터 논리적 독립
Proxy Server
- 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램
- Proxy : 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것
목적
- 익명으로 컴퓨터 유지 (보안상의 이유)
- 캐시를 사용하여 리소스로의 접근을 빠르게 하기 위함 (캐시 저장소 역할)
- 네트워크 서비스나 콘텐츠로의 접근 정책을 적용하기 위함 (블랙리스트, 화이트리스트)
- 사용률을 기록하고 검사하기 위함 (접근 로그)
- 아웃바운드 콘텐츠를 검사하기 위함 (데이터 유출 보호)
Java Servlet Container (Engine)
Java Servlet
- 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양
- 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종
- JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, Servlet은 자바 코드 안에 HTML을 포함하고 있음
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import service.MainService;
@WebServlet(urlPatterns = {"/home", "/home/*"})
public class MainController extends HttpServlet {
private static final long serialVersionUID = 1L;
private MainService service;
public MainController() {
service = new MainService();
}
protected void doHandle(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// request, response character set 설정
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
// url path를 request에서 불러오기
String path = request.getPathInfo();
String url = null;
// requset에서 Session 객체 받아옴
HttpSession session = request.getSession();
// response에서 Writer 객체 받아옴
PrintWriter script = response.getWriter();
// url이 localhost:port/project/home 일 때
if(path == null) {
url = "/main/main.jsp";
}
// url이 localhost:port/project/home/ 일 때
else if(path.equals("/")) {
response.sendRedirect("../home");
return;
}
// url이 localhost:port/project/home/login 일 때
else if (path.equals("/login")) {
url = "/main/login.jsp";
}
// url이 localhost:port/project/home/join 일 때
else if (path.equals("/join")) {
url = "/main/join.jsp";
}
// url이 localhost:port/project/home/joinAction 일 때
else if (path.equals("/joinAction")) {
int rs = service.joinAction(request);
if(rs == 0) {
response.sendRedirect("./login");
return;
}
else if(rs == 1) {
script.println("<script>");
script.println("alert('모두 입력하세요.');");
script.println("history.back();");
script.println("</script>");
return;
}
else if(rs == 2) {
script.println("<script>");
script.println("alert('비밀번호가 서로 다릅니다.');");
script.println("history.back();");
script.println("</script>");
return;
}
else {
script.println("<script>");
script.println("alert('회원가입에 실패했습니다.');");
script.println("history.back();");
script.println("</script>");
return;
}
}
// url이 localhost:port/project/home/loginAction 일 때
else if(path.equals("/loginAction")) {
int rs = service.login(request);
if(rs == 0) {
session.setAttribute("user_id", request.getParameter("user_id"));
response.sendRedirect("../home");
return;
}
else if(rs == 1) {
script.println("<script>");
script.println("alert('로그인 정보가 일치하지 않습니다.');");
script.println("history.back();");
script.println("</script>");
return;
}
else if(rs == 2) {
script.println("<script>");
script.println("alert('모두 입력해주세요.');");
script.println("history.back();");
script.println("</script>");
return;
}
else if(rs == -1) {
script.println("<script>");
script.println("alert('데이터베이스 오류입니다.');");
script.println("history.back();");
script.println("</script>");
return;
}
}
// url이 localhost:port/project/home/logout 일 때
else if(path.equals("/logout")) {
session.invalidate();
response.sendRedirect("../home");
return;
}
// url이 localhost:port/project/home/idCheck 일 때
else if(path.equals("/idCheck")) {
int rs = service.idCheck(request);
response.getWriter().write(rs);
return;
}
RequestDispatcher rd = request.getRequestDispatcher(url);
rd.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doHandle(request, response);
}
}
Servlet Container
- Servlet 생명 주기를 관리하고 Request에 따른 Thread 생성
- HTTP Request 에 해당하는 Servlet을 실행시키고 결과를 Client에 Response 하는 기능을 가진 컴포넌트
선상님 曰 : 시간 없다.
Spring Framework, Apach Tomcat 바로 고고 이것저것 해봐야 신세계를 느끼는데 고마운줄 모르고.
Gateway 는 : 프로토스 질럿 뽑는데 그거
프록시 서버에서
inbound 와 outbound 를 지정하는 것
클라이언트가 데이터를 직접 조작할수 없게 해야 한다.
화이트리스트
M odel : Entity = class 엔터티를 가지고 하는 모든 행위를 모델이라고 한다.
V iew : 우린 눈에 보이는 거 : Front
C ontroller : 뷰와 모듈의 접점 // 프록시 서버가 하는 역할 //url:8080/api/*
엔터티(Entity)는 어트리뷰트(Attribute)의 집합
Entity = class
Controller : 접근 제어
문제에 해당하는것 Service : 연산 작업 (반복문 돌리기. 단순 더하기 빼기 아니다)
Repository : 데이터베이스에서 값을 받아서