반응형

분류 전체보기 294

8. HttpServletRequest 개요

HttpServletRequest 역할 HTTP 요청 메시지를 개발자가 직접 파싱해서 사용해도 되지만, 매우 불편할 것이다. 서블릿은 개발자가 HTTP 요청 메시지를 편리하게 사용할 수 있도록 개발자 대신에 HTTP 요청 메시지를 파싱한다. 그리고 그 결과를 HttpServletRequest 객체에 담아서 제공한다. HttpServletRequest를 사용하면 다음과 같은 HTTP 요청 메시지를 편리하게 조회할 수 있다. HTTP 요청 메시지 POST /save HTTP/1.1 Host: localhost:8080 Content-Type: application/x-www-form-urlencoded username=kim&age=20 START LINE HTTP 메소드 URL 쿼리 스트링 스키마, 프로토..

7. 서블릿 환경구성

스프링 부트 환경에서 서블릿 등록하고 사용해보자 참고 서블릿은 톰캣 같은 웹 애플리케이션 서버를 직접 설치하고, 그 위에 서블릿 코드를 클래스 파일로 빌드해서 올린 다음, 톰캣 서버를 실행하면 된다. 하지만 이 과정은 매우 번거롭다. 스프링부트는 톰캣 서버를 내장하고 있음으로, 톰캣 서버 설치 없이 편리하게 서블릿 코드를 실행할 수 있다. 스프링 부트 서블릿 환경 구성 @ServletComponentScan 스프링이 자동으로 어노테이션이 주입된 패키지와 하위 패키지까지 다 뒤져서 나오는 서블릿을 자동으로 서블릿에 등록해서 실행할 수 있게 도와준다. package hello.servlet.basic; import javax.servlet.ServletException; import javax.servlet..

5. 자바 백엔드 웹 기술 역사

자바 백엔드 웹 기술 역사 - 과거 기술 서블릿 - 1997년 개발자들이 TCP/IP 연결하고 멀티쓰레드 고민 이런걸 어떻게 매번 하냐 해서 나온게 서블릿이란 기술이 나옴 단점 : 자바 코드로 짜야해서 HTML 동적으로 생성하는게 굉장히 어려움 이런 문제를 해결하고자 JSP가 나옴 JSP - 1999 HTML 생성은 편리하고 자바 코드도 여기서 짤 수 있지만, 비즈니스 로직까지 너무 많은 역할 담당 JSP 파일 하나에 코드가 천줄이 넘어가는등 유지보수 헬파티가 시작됨 그래서 나온게 MVC 패턴 서블릿, JSP 조합 MVC 패턴 사용 모델, 뷰 컨트롤러 역할을 나눠서 개발한다 핵심은 비즈니스 로직 부분, 화면 렌더링 부분으로 나눈거다. 그러다가 MVC를 이용한 프레임워크를 만들기 시작한다. 이때 MVC 프..

4. HTML, HTTP API, CSR, SSR

정적리소스 고정된 HTML 파일, CSS, JS, 이미지 영상들을 제공한다 주로 웹 브라우저들에서 요청한다 HTML 페이지 동적으로 필요한 HTML 파일을 생성해서 전달합니다. (예 : JSP, 타임리프) 그러면 웹 브라우저는 HTML을 받아서 해석 후 고객에게 동적으로 변환해서 사용자에게 보여줍니다 HTTP API 주로 HTML이 아니라 JSON 데이터를 전달합니다 다양한 시스템에서 호출 가능합니다 API는 주로 3가지 상황에서 사용됩니다 데이터만 주고받고 UI 화면이 필요하면 클라이언트가 별도 처리 할때 웹브라우저에서 자바스크립트가 Ajax API를 통해서 API를 호출할때, 이런걸 웹 클라이언트라고 한다. 서버 to 서버 끼리 데이터 주고 받을때, 이럴때도 HTML이 필요없어서 API를 사용합니다...

3. 동시 요청 - 멀티 쓰레드 (쓰레드 풀)

백엔드 개발자는 이게 진짜 중요하다. 이거에 대한 개념을 정의 못하면 트래픽이 많을때 어떻게 해결해야할지 해맨다. 쓰레드에 대한 기본 개념을 잡아보자. 클라이언트가 서버에 요청을하면 TCP/IP 커넥션이 연결이 되면서 WAS가 Servlet을 호출해준다. 그런데 이때 서블릿 객체를 누가 호출할까? 이게 중요하다. 바로 쓰레드가 서블릿 객체를 호출한다. 쓰레드 애플리케이션 코드를 하나하나 순차적으로 실행하는것을 쓰레드라 한다. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행한다. 쓰레드가 없다면 자바 애플리케이션 실행이 불가능하다. 쓰레드는 한번에 하나의 코드 라인만 수행한다. 그래서 동시 처리가 필요하면 쓰레드를 추가로 생성해야한다. 쓰레드가 하나만 있다고 가정해보자. 그러다 요청이..

2. 서블릿 (HTTP 요청, 응답 메시지 파싱, 생성 대신 해줌)

이런 HTML폼이 있다 생각하자. 이름, 나이를 넣고 전송하면 회원가입이 되는 form이다. 전송 버튼을 누르면 웹 브라우저가 요청 HTTP 메시지를 만든다. 이렇게 서버로 전송했을때 만약 개발자가 웹 애플리케이션 서버를 직접 처음부터 끝까지 구현 해야한다면...? 이 과정들을 다 구현해야한다. 이 과정중에서 의미있는 로직은 초록색 선 그어놓은것 뿐이다. 회원 이름, 나이만 데이터 베이스에 저장하는게 끝인 로직인데, 그 전 단계가 너무많고 그 후 단계가 너무 많다. 전 세계 개발자가 전, 후 단계를 똑같이 계속 개발하는건 너무 비효율적이다. 그래서 서블릿이 나왔다. 서블릿은 초록칸을 제외한 모든 일을 다 지원해준다. 서블릿을 지원하는 WAS들이 이걸 다 자동으로 해준다. 서블릿은 이렇게 생겼다. 클래스만..

1. 웹 서버, 웹 애플리케이션 서버

웹이라는건 다 HTTP를 기반으로 통신을 한다. 인터넷을 통해서 서버에 접속하고 서버에서는 HTML을 만들어서 클라이언트에 내려준다 클라이언트에서 서버로 데이터를 전송, 응답 할때 HTTP라는 프로토콜을 통해서 데이터를 전송, 응답 받는다. 심지어 서버간에 데이터를 주고받을때도 HTTP를 주로 사용한다. 웹서버는 HTTP를 기반으로 동작하는 서버다. 정적 리소스, 기타 부가기능을 전송한다 정적리소스 : HTML, CSS, JS, 이미지, 영상 대표적으로 NGINX랑 APACHE라는 웹 서버가 있다. 웹 애플리케이션 서버는 보통 WAS라 한다 얘도 HTTP를 기반으로 동작한다. 큰 차이는 프로그램 코드를 실행해서 애플리케이션 로직을 실행할 수 있단것이다. 동적인 HTML, HTTP API(JSON)도 다 ..

35. 캐시 무효화

Cache-Control 확실한 캐시 무효화 응답 • Cache-Control: no-cache, no-store, must-revalidate • Pragma: no-cache • HTTP 1.0 하위 호환 이렇게 넣어주면 확실하게 대응된다. 이렇게 복잡한 이유는 과거부터 오다보니 과거 코드까지 지원해야해서.. Cache-Control 캐시 지시어(directives) - 확실한 캐시 무효화 • Cache-Control: no-cache • 데이터는 캐시해도 되지만, 항상 원 서버에 검증하고 사용(이름에 주의!) • Cache-Control: no-store • 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) • Cache-Control: must-revalida..

34. 프록시 캐시

원서버에서 이미지를 다운받으려면 사람들이 0.5초씩 다 기다려야한다. 그래서 프록시 캐시 서버란걸 도입했다. 이건 한국어딘가에 프록시 캐시 서버를 넣어놓고 요청이 오면 웹브라우저가 프록시 서버를 걸쳐서 들어온다. 그럼 한국에 있으니 응답 속도가 빠르다. 0.5초 걸리던게 0.1초만에 응답한다. 예 ) 유튜브, 사람들이 많이보는 영상 보면 로딩속도 엄청 빠름 (한국 프록시 서버에 넣어놔서) Private 캐시 : 내 컴퓨터 캐시 Public 캐시 : 프록시 서버 캐시 Cache-Control 캐시 지시어(directives) - 기타 • Cache-Control: public • 응답이 public 캐시에 저장되어도 됨 • Cache-Control: private • 응답이 해당 사용자만을 위한 것임, p..

반응형