목록프로그래밍 (409)
쌓고 쌓다
서블릿 필터의 필요성 상품 관리 페이지가 있다고 하자. 이 페이지는 로그인 회원만 이용이 가능하다. 상품 관리와 관련된 컨트롤러의 모든 로직에 로그인 여부를 체크할 수 있지만 모든 등록, 수정, 삭제, 조회 등등 공통으로 로그인 여부를 확인하는 로직이 필요하며, 추후에 로그인 로직과 관련된 수정 사항이 있을때 작성한 코드를 또 모두 수정해야한다. 위의 예처럼 애플리케이션 여러 로직에서 공통으로 필요한 부분을 "공통 관심사"라고 한다. 공통 관심사 문제는 서블릿 필터나 스프링 인터셉터를 사용하여 해결할 수 있다. 서블릿 필터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 WAS(Web Application Server)로 tomcat이 있다. 필터의 흐름에 있는 서블릿은 Dispat..
기존의 유효성 검사를 위한 코드들을 보자. 컨트롤러에서 유효성 검사를 위한 로직이 차지하는 부분이 크다. 이런 경우는 별도의 클래스로 분리하는 것이 좋다고한다.! Validator 등록 스프링에서 제공하는 Validator 인터페이스를 살펴보자. public interface Validator { boolean supports(Class clazz); void validate(Object target, Errors errors); } supports : 해당 검증기를 지원하는가 여부 결정 validate : 검증 대상 target을 통해 유효성 검사 로직을 통해 errors에 담음 PosterValidation package com.example.board.validation; import com.exa..
애플리케이션 추가와 REST API 키를 얻는 방법은 정말 간단하기에 생략한다. 아래의 공식 문서를 따라 애플리케이션을 추가하자. https://developers.kakao.com/docs/latest/ko/getting-started/app Kakao Developers 카카오 API를 활용하여 다양한 어플리케이션을 개발해보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다. developers.kakao.com 사용자가 모든 필수 동의 항목에 동의하고 [동의하고 계속하기] 버튼을 누른 경우 =>redirect_uri로 인가 코드를 담은 쿼리 스트링 전달 사용자가 동의 화면에서 [취소] 버튼을 눌러 로그인을 취소한 경우 =>redirect_uri로 에러 정보를 담은 ..
문제의 코드를 보자. @GetMapping("...") public String kakaoOauth(HttpServletResponse response) { Cookie idCookie = new Cookie("memberId", String.valueOf(member.getId())); response.addCookie(idCookie); /* 출력 찍어보기 */ System.out.println("idCookie.getMaxAge() = " + idCookie.getMaxAge()); System.out.println("idCookie = " + idCookie.getPath()); } 쿠키의 Key와 Value를 설정하고 응답에 쿠키를 넣었다. 응답으로 쿠키가 잘 설정되었지만... 쿠키가 저장이 되..
카카오 로그인 API를 다루며 서버에서 JSON 형태의 데이터를 요청하여 받아 사용할 일이 생겼다. JSONObject 설정 JSONObject를 사용하기 위해서 https://mvnrepository.com/open-source/json-libraries 위의 링크를 타고 들어가 아래의 JSON In Java를 클릭하자. 버전을 선택하고 나는 Gradle이라 위의 내용을 Gradle에 추가해주었다. 다룰 JSON String 데이터 { "kakao_account" : { "email" : "test@google.com", { "profile" : { "nickname" : "LSM" } } } } 위의 형태로 JSON을 받았다고 하자. 보기 좋게 최대한 타이핑 해봤는데 그냥 아래의 블럭을 보자. kak..
서버에서 외부 api를 사용할 일이 있어서 restTemplate라는걸 사용해보는데... 아래의 에러가 발생.! 문제의 코드 RestTemplate restTemplate = new RestTemplate(); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED); Map map = new HashMap(); map.put("grant_type", grantType); map.put("client_id", clientId); map.put("redirect_uri", redirectUri); map.put("code", ingaCode); HttpEntity r..
MessageCodesResolver 메시지 생성 규칙 MessageCodesResolver는 에러 코드를 가지고 에러 메시지 코드들을 생성해준다. 규칙은 아래와 같다. ObjectError 1. code.object name 2. code FieldError 1. code.object name.field 2. code.field 3. code.field type 4. code rejectValue()와 reject()는 MessgeCodesResolver를 이용한다. rejectValue, reject가 FieldError, ObjectError를 생성해주는데 FieldError, ObjectError는 에러 코드들을 여러개 가질 수 있다. 그래서 MessageCodesResolver를 통해 생성된 오..
어쩌다 직면한 이 에러에 오늘 하루 다 보냈다...ㅎㅎ 먼저 상황을 보자. 에러 발생 상황 컨트롤러에 작성된 @InitBinder, @Validated를 통해 유효성 검사를 실시한다. public class ValidationItemControllerV2 { private final ItemValidator itemValidator; @InitBinder public void init(WebDataBinder dataBinder) { dataBinder.addValidators(itemValidator); } @PostMapping("/add") public String addItemV5(@Validated @ModelAttribute Item item, BindingResult bindingResult..