230314 - 스프링부트(2)

ghltjd369·2023년 3월 15일
0

쿠키

쿠키를 만들고 가져오는 예제

@GetMapping("/home/cookie/increase")
@ResponseBody
public int showCookieIncrease(HttpServletRequest req, HttpServletResponse resp) throws IOException { // 리턴되는 int 값은 String 화 되어서 고객(브라우저)에게 전달된다.
    int countInCookie = 0;

    // 고객이 가져온 쿠폰에서 count 쿠폰을 찾고 그 쿠폰의 값을 가져온다.
    if (req.getCookies() != null) {
        countInCookie = Arrays.stream(req.getCookies())
                .filter(cookie -> cookie.getName().equals("count"))
                .map(Cookie::getValue)
                .mapToInt(Integer::parseInt)
                .findFirst()
                .orElse(0);
    }

    int newCountInCookie = countInCookie + 1;

    // 고객이 가져온 count 쿠폰값에 1을 더한 쿠폰을 만들어서 고객에게 보낸다.
    // 쉽게 말하면 브라우저(고객)에 저장되어 있는 count 쿠폰의 값을 1 증가시킨다.
    // 이렇게 브라우저의 쿠키값을 변경하면 재방문시에 스프링부트가 다시 그 값을 받게 되어 있다.
    resp.addCookie(new Cookie("count", newCountInCookie + ""));

    // 응답 본문
    return newCountInCookie;
}

이 부분이 쿠키를 만들고 추가하는 부분
"count"라는 이름의 쿠키를 만들고 newCountInCookie를 값으로 넣는다.

resp.addCookie(new Cookie("count", newCountInCookie + ""));

쿠키를 가져올 때는 getCookies()
이것저것 실험해 본 결과 꼭 하나의 클래스 또는 메서드에서 만들 필요 없음.
다른 곳에서 만들고 다른 곳에서 가져와 쓸 수 있음.

@Autowired

여러 클래스에서 동시에 어떤 클래스를 사용해야 할 때, 매번 만드는 것은 낭비임.
이 때 사용하는 것이 @Autowired

사용할 클래스 위에 @Service 또는 @Repository 이런 식으로 써주고
사용할 때 @Autowired를 쓰고 사용하면 된다.

예시 1. HomeController와 MemberController에서 MemberService를 사용하는 상황

@Service
public class MemberService {
    // ...
}

//필드 주입 방식
public class HomeController {
    private int count;
    private final List<Person> people;
    @Autowired
    private MemberService memberService;

    public HomeController() {
        count = -1;
        people = new ArrayList<>();
    }
}

//생성자 주입 방식 (이걸 주로 사용함)
public class MemberController {
    private int count;
    private final List<Person> people;
    private final MemberService memberService;

    @Autowired
    public MemberController(MemberService memberService) {
        count = -1;
        people = new ArrayList<>();
        this.memberService = memberService;
    }
}

0개의 댓글