GitHub

https://github.com/Choidongjun0830

Java 43

[웹]웹 서버, 웹 애플리케이션 서버

웹 서버 HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 애플리케이션 서버(WAS) HTTP 기반으로 동작 웹 서버 기능 포함. 특히, 정적 리소스 제공 기능을 포 프로그램 코드를 실행해서 애플리케이션 로직 수행 사용자에 따라서 다른 화면을 보여줄 수 있게 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat), Jetty, Undertow 웹 서버, 웹 애플리케이션 서버의 차이 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 사실 둘의 용어도 경계도 모호함 웹 서버도프로그램을 실행하는 기능을 포함하기도 함 웹 애플리케이션 서버도 웹 서버의 기능을 제공함..

Java 2023.09.30

[웹] 검증 헤더와 조건부 요청

캐시 시간 초과로 서버에 다시 요청하면 두가지 상황이 나타난다. 첫번째는 서버에서 기존 데이터를 변경하는 것, 두번째는 서버에서 기존 데이터를 변경하지 않는 것이다. 만약에 두번째 상황이라면, 다시 다운받기 아깝다. 그래서 클라이언트의 데이터와 서버의 데이터가 같다는 사실을 확인할 수 있는 방법이 필요하다. 그것이 검증 헤더이다. Last-Modified 라는 검증 헤더를 통해 데이터가 마지막에 수정된 시간을 알 수 있다. 이것을 서버로 부터 받아서 데이터와 마지막 수정 날짜를 저장해둔다. 다음 요청에서 if-modified-since 라는 조건부 요청 헤더로 클라이언트에서 가지고 있는 데이터의 최종 수정일과 서버의 데이터 최종 수정일을 비교하고 수정이 안됐다면 서버에서 304 Modified를 보내어 ..

Java 2023.09.24

[웹]HTTP 상태 코드

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx (Informational): 요청이 수신되어 처리중 거의 사용X 2xx (Successful): 요청 정상 처리, 성공 200 OK - 요청 성공 201 Created - 요청이 성공해서 새로운 리소스가 생성됨 생성된 리소스는 응답의 Location 헤더 필드로 식별 202 Accepted - 요청이 접수되었으나 처리가 완료되지 않음 배치 처리 같은 곳에서 사용 예) 요청 접수 후 1시간 뒤에 배치 프로세스가 요청을 처리함 잘 사용하지 않음 204 No Content - 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없음 예) 웹 문서 편집기에서 save 버튼 save 버튼의 결과로 아무 내용이 없어도 된다...

Java 2023.09.17

[웹]HTTP API 설계 예시

HTTP API - 컬렉션 POST 기반 등록 클라이언트는 등록될 리소스의 URI를 모른다. 서버가 새롭게 등록될 리소스의 URI를 생성해줌. 컬렉션 (Collection) 서버가 관리하는 리소스 디렉토리 서버가 리소스의 URI를 생성하고 관리 여기서 컬렉션은 /members 예) 회원 관리 API 제공 회원 목록 /members → GET 회원 등록 /members → POST 회원 조회 /members/{id} → GET 회원 수정 /members/{id} → PATCH(부분 수정), PUT(전체 수정), POST 회원 삭제 /members/{id} → DELETE HTTP API - 스토어 PUT 기반 등록 예) 정적 컨텐츠 관리, 원격 파일 관리 파일 목록 /files → GET 파일 조회 /fi..

Java 2023.09.17

[웹]HTTP 메소드

HTTP 메소드는 클라이언트가 서버에게 요청을 보내는 방법이다. 종류로는 GET, POST, PUT, DELETE 등이 있으며, 각각의 역할은 다르다. GET: 리소스를 조회하기 위해 사용됩니다. 요청한 데이터는 URL에 쿼리 문자열로 전달됩니다. 서버에 전달하고 싶은 데이터는 query(쿼리 파라미터, 쿼리 스트링)를 통해서 전달 메시지 바디를 사용해서 데이터를 전달할 수 있지만, 지원하지 않는 곳이 많아서 권장하지 않는다. POST: 요청한 데이터를 처리한다. 주로 등록에 사용한다. 요청한 데이터는 HTTP 본문에 포함된다. 메시지 바디를 통해 서버로 요청 데이터 전달 서버는 요청 데이터를 처리 메시지 바디를 통해 들어온 데이터를 처리하는 모든 기능을 수행한다. 주로 전달된 데이터로 신규 리소스 등록..

Java 2023.09.15

[웹]HTTP 기본

HyperText Transfer Protocol HTTP 메시지에 모든 것을 담아서 전송 HTML, TEXT 이미지, 음성, 영상, 파일 json, xml(api) 거의 모든 형태의 데이터 전송 가능 서버 간에 데이터를 주고 받을 때도 대부분 http 사용 특징 클라이언트 서버 구조 Request, Response 구조 클라이언트는 서버에 요청을 보내고, 응답을 대기 서버가 요청에 대한 결과를 만들어서 응답 무상태 프로토콜(스테이트리스) 서버가 클라이언트의 상태를 보존하지 않음 장점: 서버 확장성 높음(스케일 아웃). 무상태는 기억할게 없으므로 응답 서버를 쉽게 바꿀 수 있음. → 그래서 요청할 때 애초에 모든 정보를 담아서 단점: 클라리언트가 추가 데이터 전송 실무 한계 로그인한 사용자의 경우 로그인..

Java 2023.09.14

[웹]URI와 웹 브라우저 요청 흐름

URI(Uniform Resource Identifier) URI는 로케이터(locator), 이름(name) 또는 둘 다 추가로 분류될 수 있다. Uniform: 리소스를 식별하는 통일된 방식 Resource: 자원, URI로 식별할 수 있는 모든 것(제한 없음) Identifier: 다른 항목과 구분하는데 필요한 정보 URI라는 가장 큰 개념. URL: 리소스의 위치를 지정. 거의 이것만 사용 URN: 리소스의 이름을 부여 위치는 변할 수 있지만, 이름은 변하지 않는다. URN 이름만으로 실제 리소스를 찾을 수 있는 방법이 보편화되지 않았다. URL 문법 scheme://[userinfo@]host[:port][/path][?query][#fragment] scheme는 보통 프로토콜 정보가 들어감 ..

Java 2023.09.13

[Java] 배열 안 정수 중에서 짝수인 가장 큰 수 구하기

import java.util.List; import java.util.Optional; public class FunctionalProgrammingMagic { public static int findMaxEvenNumber(List numbers) { // Write your code here if(numbers == null) { return 0; } Optional maxEven = numbers.stream() .filter(n -> n % 2 == 0) .max(Integer::compare); return maxEven.orElse(0); } } 'max(Integer.compare)'에서 Optional를 리턴한다. Optional은 배열이 비어있을 경우도 다루기 때문에 numbers에 ..

Java 2023.08.16
728x90