본문 바로가기

백엔드 개발

세션(Session) 실습(2) 저번 시간에 했던 내용을 복기 해보겠다. 먼저 홈화면에서 게시판 화면으로 들어가려 했는데, 이때 클라이언트로 로그인 상태인지 아닌지 체크한다. 로그인 상태라면 바로 게시판 화면으로 넘어간다. 로그인 안 한 상태면, 로그인 창을 띄운다. 클라이언트가 로그인을 하면 다시 홈 화면으로 이동한다. 로직은 밑과 같다. 우리가 이번에 하려는 것은 로그인 성공하면 다시 자기가 갈려고 했던 페이지로 다시 클라이언트를 보내는 것이다. 난 무신사에서 옷을 살려고 했는데, 로그인 상태가 아닌 것을 까먹은 적이 있다. 로그인을 하니 다시 홈 화면으로 가서 내가 살려 했던 옷을 다시 찾아야 해 짜증 났던 적이 있다. 이번 웹페이지 에서는 그런 애로사항이 없도록 게시판에 들어가려 했던 사용자가 로그인 할 시 그대로 게시판 페이지.. 더보기
Session 이용 실습(1) 대다수의 웹페이지가 회원인지 아닌지에 따라 할 수 있는 행동들이 나뉜다. 우리가 만든 홈페이지에서는 클라이언트가 로그인 해야지만 게시판 페이지를 이용할 수 있다고 하자. 세션 객체 안에 id가 저장되어 있는지 아닌지를 통해 클라이언트가 로그인 했는지 안 했는지를 체크할 수 있다. 밑의 사진은 게시판에 들어가기 위한 로직을 나타낸 것이다. 1. BoardController와 boardList 만들기 우리는 지금까지 로그인 화면(loginForm.jsp)과 로그인 후 들어올 수 있는 홈 화면(index.jsp) 2가지를 만들었다. index.jsp를 살펴보면, fastcampus Home Board login Sign in This is HOME This is HOME This is HOME 위와 같이 li.. 더보기
Session- 이론 1. 세션이란? Session은 서로 관련된 HTTP 트렌젝션을 서버가 구별할 수 있도록 한데 묶어 놓는 것을 말한다. 하나의 브라우저에 대응하는 세션 객체(저장소)는 하나이다. (1대1 대응) (다른 PC에서 나온 브라우저, 한 PC에서도 서로 다른 브라우저라면 세션 ID가 서로 다르다.) (HTTP트렌젝션 - 요청과 응답 한 세트를 말함. 요청들은 서로 독립적이라, 세션이나 쿠키가 없으면 서버는 해당 요청이 같은 클라이언트에게서 온 것인지 아닌지 구별하지 못한다.) 세션은 서버에 객체로서 존재하고, 서로 연관된 요청들을 하나로 묶기 위해 쿠키를 이용한다. 2. 세션이 돌아가는 과정. (1) 세션의 생성 브라우저에서 첫 번째 요청이 오는 순간, 서버에서는 해당 요청에 대한 세션을 만든다. 그리고 요청에.. 더보기
쿠키란? 1. 쿠키가 하는 역할이 무엇일까? 특정 웹사이트에는 아이디 기억하기란 장치가 있다. 이는 한번 로그인 했으면 다음에 로그인 페이지를 재방문 했을 때, 해당 아이디가 미리 찍혀 있도록 하는 것이다. 개발자 도구를 통해 쿠키가 뭐 있나 확인해보면, id란 이름으로 쿠키가 들어있는 것을 알 수 있다. 앞에서 배웠다시피, HTTP는 상태 정보를 저장하지 않는다. 따라서 클라이언트는 연속적으로 온 두 요청이 같은 클라이언트에게서 온 것인지, 다른 클라이언트에게서 온 것인지 알 수 없다. 하지만 때때로 서버가 전 클라이언트의 행동을 기억해야만 처리할 수 있는 일이 있다. (ex - 로그인 후에만 할 수 있는 행동 등) 쿠키는 클라이언트를 식별하는 기술이다. 서버가 쿠키를 이용하면 클라이언트를 구별할 수 있다. 2.. 더보기
Redirect와 Forward에 대하여 1. 원리 (1) redirect a. 클라이언트가 특정 주소로 요청을 보냄. b. 근데 서버가 받아보니 해당 일은 해당 주소에서 처리할 수 없는 일임. c. 그래서 서버는 응답 메세지 Header에다가 상태코드 300(redirect 요청)과 함께 어디로 가야 이 일을 처리할 수 있는지 주소(location)를 같이 써서 다시 브라우저에게 보낸다. d. 브라우저가 자동으로 해당 주소로 재요청을 한다. (브라우저가 재요청 시 상단의 URL이 재요청된 주소로 바뀌어서 클라이언트도 재요청 하는 줄 알 수 있음.) e. 올바른 주소가 응답하여 클라이언트의 브라우저에 띄워진다. (이 때 이 자동요청은 오로지 GET 요청밖에 안된다. 따라서 클라이언트가 로그인 정보 쳐서 보냈다하더라도 redirect 되면 올바른.. 더보기
@RequestMapping More , 인코딩의 원리 1. @RequestingMapping more (1) RequestMethod가 다르면 같은 URL 주소를 가져도 된다. @RequestMapping만 하던 시절에는 매소드 간에 매핑 URL 주소가 같으면 에러가 났다. 하지만 @PostMapping과 @GetMapping은 서로 하는 작업이 다르기 때문에 URL 주소가 같아도 된다. @GET은 서버에서 정보를 얻어오는 거고, @Post는 정보를 서버의 데이터에 기록하는 것이다. (2)하나의 컨트롤 내 매소드 간에 동일한 주소는 @RequestMapping을 써 묶어줄 수 있다. @Contorller 밑, 클래스 이름 위에 @RequestMapping을 써서 중복되는 주소는 묶어줄 수 있다. 이러면 매소드 별로 매핑된 주소가 정말 적고, 무슨 일 하려는.. 더보기
@ 어노테이션 전문화, view Controller, Redirection 1. @ RequestMapping의 전문화 @RequestMapping으로 URL과 컨트롤러를 Mapping 해버리면 사용자는 GetMapping PostMapping 두 방법 다 사용하여 컨트롤러를 이용할 수 있다. 예를 들어 회원가입 시 GetMapping으로 스트링 쿼리에 회원 가입 내용을 다 적은 채 작성할 수도 있고, PostMapping으로 개인 정보는 전부 body에 넣어 기입 할 수 도 있다. 당연하지만, GetMapping으로 개인정보를 작성하면 브라우저에 노출되기 때문에 보안적으로 좋지 않다. 이와 같이 특정 상황에 대해 Getmapping 혹은 PostMapping으로만 컨트롤러와 브라우저가 Mapping 되게 하는 것이 가능하다. 이에 대해서 논해본다. (1) @ RequestMa.. 더보기
회원 가입 화면 작성하기 1. 회원 가입 화면 HTML 리뷰 Register 아이디 비밀번호 이름 이메일 생일 페이스북 카카오톡 인스타그램 회원 가입 하지만 해당 HTML에 값을 채워서 내보냈다고 해도 작동하지 않는다. 왜냐하면 해당 문서의 form 태그에 값을 보낼 목적지와 요청 API가 뭔지 하나도 안 썼기 때문이다. 이를 안 썼을 때 목적지의 default는 자기 자신이고 REST - API는 GET이 된다. 따라서 해당 내용을 써서 form 태그를 수정하다. 나는 요청 내용을 ch2의 registerinfo로 보낼 예정이다. 또한 GET 요청은 요청 내용이 스트링 쿼리로 브라우저에 적히는 게 싫다 따라서 바디가 있는 POST로 API 요청을 바꾸겠다. form 태그의 속성에는 onsumit이란 이벤트 등록 속성이 있다. .. 더보기