TIL - day16

정상화·2023년 3월 14일
0

TIL

목록 보기
12/46

Spring Boot

웹 개발을 위한 프레임 워크
틀에 맞춰 코드를 짜기만 하면 된다.

Controller

요청을 받아서 처리하는 객체
간단하게 @Controller 애노테이션을 클래스에 붙이는 것만으로도 스프링에 등록할 수 있다.

쿼리 스트링

url의 ?뒤에 붙는 파라미터들이다.
컨트롤러의 메서드 인자로서 참조가능하다.

@ResponseBody
public String getId(@RequestParam int id){
	return id;
}

인수 앞의 파라미터는 생략해도 동작 가능하나 쿼리 파라미터에 기본값을 지정하고 싶다면
@RequestParam(defaultValue = "0")
과 같이 명시해줘야 한다.

JSON 반환

컨트롤러의 메서드는 응답(반환값)으로 객체를 반환할 수도 있는데 이 경우 객체는 JSON 형태로 변환될 수 있다.

객체가 JSON 형태로 자동 변환 되어지기 위해선 객체에 getter가 최소 한 속성 이상에 대해 있어야 하고, getter 가 없는 속성은 JSON화 되어지지 않는다.

쿠키

HTTP 프로토콜에서 서버는 기본적으로 요청을 구분하지 않는다. 사용자A의 요청이든 사용자B의 요청이든 요청을 처리하는 방식은 일관된다.
이는 서버측에선 사용자의 상태정보를 기록하지 않기 때문이다.

각 요청에 대한 처리가 구분될 필요가 있는 경우 쿠키를 이용한다. 쿠키는 사용자가 서버에게 제출하는 자신의 정보이다.

쿠키는 놀이동산 입장권과 비슷하다. 놀이동산에서는 모든 이용객들이 현재 놀이동산에 있는지 잠시 밖에 나갔는지 기록하지 않는다.
이용객들이 티켓을 놀이동산에서 발급받아서 입장할 때마다 보여주는 식이다.

때문에 쿠키는 보안성에 매우 취약하다. 놀이동산 티켓을 정말 맘먹고 위조 티켓을 만든다고 생각하면 티켓을 발급받지 않고도 입장하는 것이 가능할 것이다.
쿠키 또한 사용자에 의한 변조가 손쉽게 일어날 수 있기 때문에 쿠키에는 중요정보를 담아 보내지는 않는다.

쿠키예시

@GetMapping("/cookies/increase")
   @ResponseBody
   public int cookieIncrease(HttpServletRequest req, HttpServletResponse res) {
       Cookie[] cookies = req.getCookies();
       if (cookies != null) {
           int count = Arrays
                   .stream(cookies)
                   .filter(cookie -> cookie.getName().equals("count"))
                   .map(Cookie::getValue)
                   .mapToInt(Integer::valueOf)
                   .findFirst()
                   .orElse(0);
           res.addCookie(new Cookie("count", String.valueOf(count + 1)));
           return count+1;
       }

       res.addCookie(new Cookie("count", String.valueOf(0)));
       return 0;
   }

사용자의 요청이 처음이라면 0을 응답하고, 아니라면 이전 응답+1을 응답한다.

profile
백엔드 희망

0개의 댓글