본문 바로가기

프로그래밍/Web Basic30

Apache 웹서버 정리 Apache 다양한 플랫폼에서 실행되는 것을 목표로 설계되었다. 모듈 기반의 기반으로 되어 있어 컴파일/런타임 시기에 원하는 모듈을 추가할 수 있다. 서버는 요청을 처리하고 네트워크 포트에 바인딩하는 MPM과 같이 제공된다. 오래된 소프트웨어와의 안전성을 생각한다면 prefork 방식을, 확장성을 고려한다면 worker나 event 방식을 선택할 수 있다. mpm_winnt 방식을 통해 윈도우 서버에서 네이티브 네트워킹 기능을 사용할 수 있다. (다른 OS에서도 적용됨) https://httpd.apache.org/docs/2.4/en/mpm.html prefork 방식 각 서버 프로세스는 들어오는 요청을 처리한다. 부모 프로세스는 서버풀의 사이즈를 관리한다. 쓰레드에 안전하지 않은 라이브러리와의 호환성.. 2023. 11. 12.
클라이언트와 DB 직접 연결하면 안 되는 이유 클라이언트와 DB를 연결하는 것은 어렵지 않다. 기술적으로 불가능한 것은 아니지만, 일반적인 어플리케이션을 개발할 때 사용하지 않는 방식이다. 클라이언트와 DB 연결의 종류 1. 클라이언트와 로컬 DB 2. 클라이언트와 DB 연결 3. 클라이언트와 서버 연결 주로 사용되는 형태는 1번과 3번이다. 서버와 통신하지 않는 앱을 만드는데 Database를 사용하고 싶다면 SQLite 같은 로컬 DB를 사용하면 된다. 이는 우리 앱이 단순히 자신의 정보를 저장하기 위한 목적으로 DB를 사용한다는 것을 의미한다. 나만의 Todo앱? 나만 사용하는 메모장? 같은 걸 만드는데 사용하면 된다. 만약 서버와 통신하고 싶다면 2번과 3번의 방식이 존재한다. 그렇다면 왜 3번의 방식을 주로 선택하는 것일까? 1. 보안상의 .. 2023. 11. 11.
HTTP, CSR, SSR + 자바 웹 기술 역사 HTTP API 다양한 시스템 연동 1. 주로 JSON 형태로 데이터 통신 2. UI 클라이언트 접점 - 앱 클라이언트(아이폰, 안드로이드, PC) - 웹 브라우저에서 자바스크립트를 통한 HTTP API 호출 - React, Vue.js 같은 웹 클라이언트 3. 서버 to 서버 - 주문 서버 => 결제 서버 - 기업간 데이터 통신 SSR - 서버 사이드 렌더링 - HTML 최종 결과를 서버에서 만들어서 웹 브라우저 전달 - 주로 정적인 화면에 사용 - 관련 기술: JSP, 타임리프 => 백엔드 개발자 CSR - 클라이언트 사이드 렌더링 - HTML 결과를 자바 스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용 - 주로 동적인 화면에 사용. 웹 환경을 마치 앱처럼 필요한 부분부분 변경한다. 예) 구.. 2023. 8. 1.
쓰레드 풀, 멀티 쓰레드 환경 쓰레드 1. 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드 2. 자바 메인 메서드를 처음 실행하면 main이라는 이름의 쓰레드가 실행 3. 쓰레드가 없다면 자바 어플리케이션 실행이 불가능 4. 쓰레드는 한번에 하나의 코드 라인만 수행 5. 동시 처리가 필요하면 쓰레드를 추가로 생성 요청 마다 쓰레드 생성 장점 - 동시 요청을 처리할 수 있다. - 리소스(CPU, 메모리)가 허용될 때 까지 처리 가능 - 하나의 쓰레드가 지연 되어도 나머지 쓰레드는 정상 작동한다. 단점 - 쓰레드 생성 비용은 매우 비싸다. (고객의 요청이 올 떄마다 쓰레드를 생성하면, 응답 속도가 늦어진다) - 쓰레드는 컨텍스트 스위칭 비용이 발생한다. - 쓰레드 생성에 제한이 없다. (고객 요청이 많이와서 CPU 할당량을 .. 2023. 8. 1.
웹 서버, 웹 어플리케이션 서버, 서블릿 웹 서버(Web Server) 1. HTTP 기반으로 동작 2. 정적 리소스 제공, 기타 부가기능 3. 정적 HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 어플리케이션 서버(WAS, Web Application Server) 1. HTTP 기반으로 동작 2. 웹 서버 기능 포함 (+ 정적 리소스 제공 가능) 3. 프로그램 코드를 실행하여 어플리케이션 로직 수행 - 동적 HTML, HTTP, API(JSON) - 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat), Jetty, Undertow 웹 서버, 웹 어플리케이션 서버(WAS 차이) 1. 웹 서버는 정적 리소스 파일, WAS는 어플리케이션 로직 2. 사실 둘의 용어도 경계도 모호함 - 웹 서버도 프로그램을 실행하는 .. 2023. 8. 1.
프록시 캐시, no-cache vs must-revalidate 프록시 캐시 Cache-Control 캐시 지시어 - 기타 1. Cache-Control: public 응답이 public 캐시에 저장되어도 된다. 2. Cache-Control: private 응답이 해당 사용자만을 위한 것이다. private 캐시에 저장해야 한다. (기본값) 3. Cache-Control: s-maxage 프록시 캐시에만 적용되는 max-age 4. Age: 60 (HTTP 헤더) 오리진 서버에서 응답 후 프록시 캐시 내에 머문 시간 캐시를 원서버에서 미리 적재를 해놓거나 누군가 자주 접근한 리소스인 경우 빠르게 접근이 가능하다. 캐시 무효화 1. Cache-Control: no-cache, no-store, must-revalidate 2. Pragma: no-cache HTTP .. 2023. 8. 1.
캐시 기본 동작, 조건부 요청 캐시 기본 동작 캐시가 없을 때 1. 데이터가 변경되지 않아도 계속 네트워크를 통해서 데이터를 다운로드 받아야 한다. 2. 인터넷 네트워크는 매우 느리고 비싸다. 3. 브라우저 로딩 속도가 느리다. 4. 느린 사용자 경험 캐시 적용 1. 캐시 덕분에 캐시 가능 시간 동안 네트워크를 사용하지 않아도 된다. 2. 비싼 네트워크 사용량을 줄일 수 있다. 3. 브라우저 로딩 속도가 매우 빠르다. 4. 빠른 사용자 경험 캐시 시간 초과 캐시 유효 시간이 초과하면, 서버를 통해 데이터를 다시 조회하고 캐시를 갱신한다. (네트워크 다운로드) 검증 헤더와 조건부 요청 캐시 유효 시간이 초과해서 서버에 다시 요청하는 상황은 다음과 같다. 1. 서버에서 기존 데이터를 변경함 2. 서버에서 기존 데이터를 변경하지 않음 검증.. 2023. 8. 1.
쿠키(Cookie) 쿠키 1. Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) 2. Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 쿠키 미사용시, 로그인 한 이후에도 사용자 정보가 저장이 안 되는 모습을 볼 수 있다. 모든 요청과 링크에 사용자 정보를 포함하면? 귀찮고 보안 이슈 발생, 브라우저 종료 후 다시 열면? 예) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure 1. 사용처 - 사용자 로그인 세션 관리 - 광고 정보 트래킹 2. 쿠키 정보는 항상 서버에 전송됨 - 네트워크 트래픽 추가 유발 - 최소한의 정보만 사용(세션 i.. 2023. 8. 1.
헤더 일반 정보, 특별 정보 헤더 일반 정보 1. From: 유저 에이전트의 이메일 정보 2. Referer: 이전 웹 페이지 주소 3. User-Agent: 유저 에이전트 애플리케이션 정보 4. Server: 요청을 처리하는 오리진 서버의 소프트웨어 정보 5. Date: 메시지가 생성된 날짜 From 유저 에이전트의 이메일 정보 1. 일반적으로 사용되지 않음 2. 검색 엔진 같은 곳에서 주로 사용 3. 요청에서 사용 Referer 이전 웹 페이지 주소 1. 현재 요청된 페이지의 이전 웹 페이지 주소 2. a => b로 이동하는 경우, b를 요청할 때 Referer: a를 포함해서 요청 3. Referer 정보를 통해 유입 경로 분석 가능 4. 요청에서 사용 User-Agent 유저 에이전트 애플리케이션 정보 예시)user-agen.. 2023. 8. 1.
Content Negotiation, 전송 방식 협상(콘텐츠 네고시에이션) 클라이언트가 선호하는 표현 요청 1. Accept: 클라이언트가 선호하는 미디어 타입 전달 2. Accept-Charset: 클라이언특 선호하는 문자 인코딩 3. Accept-Encoding: 클라이언트가 선호하는 압축 인코딩 4. Accept-Language: 클라이언트가 선호하는 자연언어 *협상 헤더는 요청시에만 사용한다. 전송 방식 설명 단순 전송 압축 전송 분할 전송 범위 전송 출처: HTTP 웹 기본 지식 강의(김영한) 2023. 8. 1.