본문 바로가기

전체 게시글376

[Java] HTTP 웹 서버 구현 / 로그인 구현 HTTP는 무상태 프로토콜이다. HTTP는 요청을 보내고 응답을 받으면 클라이언트와 서버 간의 연결을 끊는다. 각 요청 사이에 상태를 공유할 수 없다. 웹 애플리케이션에서 대표적인 기능 중의 로그인 기능을 보면, 클라이언트가 로그인을 완료하면 매 요청마다 로그인을 다시 하지 않는다. HTTP는 클라이언트가 한 행위를 기억할 수 없는데 이는 어떻게 가능한 걸까? 쿠키로(Cookie)로 클라이언트의 행위를 기억하자. 로그인과 같이 클라이언트의 행위를 기억하기 위한 목적으로 지원하는 것이 쿠키이다. 서버에서는 로그인 요청을 받으면 로그인 성공/실패 여부에 따라 응답 헤더에 Set-Cookie로 결과 값을 저장할 수 있다. 클라이언트는 응답 헤더에 Set-Cookie가 존재할 경우 Set-Cookie의 값을 읽.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / 302 status code 적용 302 status 적용해야하는 상황 "회원가입"을 완료하면 /index.html로 이동해야 한다. URI가 "/user/create"로 유지되는 상태로 읽어서 클라이언트에게 전달할 파일이 없다. 따라서 회원가입을 완료한 후 /index.html 페이지로 이동하면서 브라우저의 URL도 /user/create가 아니라 /index.html로 변경해야 한다. 두번의 요청과 응답 회원가입을 처리하는 /user/create 요청과 첫 화면(/index.html)을 보여주는 요청을 분리한 후 HTTP의 302 상태 코드를 활용해 해결한다. 즉, 서버측에서는 /user/create 요청을 받아 회원가입을 완료한 후 응답을 보낼 때 클라이언트에게 /index.html로 이동하도록 할 수 있다. 이때 사용하는 상태 코.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / POST 방식으로 회원가입 POST 방식에서의 HTTP Header와 Body POST /user/create HTTP/1.1 Host: localhost:8080 Connection: keep-alive Content-Type: application/x-www-form-urlencoded Accept: */* (공백) userId=tester1&password=test1&name=테스터 POST로 데이터를 전달할 경우 전달하는 데이터는 HTTP 본문에 담긴다. HTTP 본문은 HTTP 헤더 이후 빈 공백을 가지는 한 줄(line) 다음부터 시작한다. HTTP 본문에 전달되는 데이터는 GET 방식으로 데이터를 전달할 때의 키=value 형식과 같다. 요청 헤더에 본문 데이터에 대한 길이가 Content-Length라는 필드 이름으.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / GET 방식으로 회원가입 GET 방식으로 회원가입 사용자가 입력한 값을 파싱(문자열을 원하는 형태로 분리하거나 조작하는 것을 의미)해 model.User 클래스에 저장한다. 사용자 아이디 비밀번호 이름 이메일 회원가입 HTTP Header GET /user/create?userId=tester1&password=test1&name=테스터 HTTP/1.1 HTTP 요청의 첫 번째 라인에서 요청 URI을 추출 요청 URI에서 접근 경로와 key=value 형식으로 전달되는 데이터를 추출해서 Model 클래스에 담는다. GET 방식의 회원가입 GET /user/create?userId=tester1&password=test1&name=테스터 HTTP/1.1 위의 코드는 GET 방식으로 회원가입을 했을 때의 요청 라인이다. 사용자가 입.. 2023. 3. 17.
[Java] HTTP 웹 서버 구현 / index.html 요청에 대한 응답 index.html로 응답 클라이언트가 http://localhost:8080/index.html로 접속했을 때 서버는 webapp 디렉토리의 index.html 파일을 읽어 클라이언트에 응답한다. HTTP Header GET /index.html HTTP/1.1 Host: localhost:8080 Connection: keep-alive Accept: */* BufferedReader.readLine() 메서드를 활용해 라인별로 HTTP 요청 정보를 읽는다. HTTP 요청 정보 전체를 출력한다. 헤더 마지막은 br.readLine().equals("") 로 확인한다. HTTP 요청 정보의 첫 번째 라인에서 요청URI를 출력한다. String[] tokens = line.split(" ");과 같이 s.. 2023. 3. 17.
[CS] URI과 URL의 차이 URI 특정 리소스를 식별하는 통합 자원 식별자((Uniform Resource Identifier)를 의미하며, 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스다. URL 흔히 웹 주소라고도 하며, 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약이다. URI의 서브셋이다. 실제 네트워크상에서 URL와 URL을 예시는 아래와 같다. 두 주소는 모두 index.html을 가르키고 있다. 첫번째 주소는 웹 서버의 실제 파일 위치를 나타내는 주소이므로 URI이면서 URL이다. 두번째 주소는 index 라는 리소스가 웹 서버에 존재하지 않으므로 URL은 아니다. 하지먼 서버 내부에서 이를 처리하여 결국 index.html을 가르키기 때문에 URI라고 볼 수 있다... 2023. 3. 16.