생산성을 향상시키는 스프링부트 기반의 API 템플릿 프로젝트 구현
8일만
24%
₩28,880
₩38,500
초급 / Spring Boot, JPA, Web API
4.7
(27)
프로젝트 시작을 위한 전반적인 설정을 구현하고 템플릿 프로젝트로 등록하여 생산성을 극대화할 수 있습니다.
초급
Spring Boot, JPA, Web API
질문&답변
이 흐름이 맞을까요??
안녕하세요! 이해한 내용이 맞습니다! 먼저 카카오로부터 카카오서비스를 이용하기 위한 토큰을 발급 후 카카오에 등록된 회원 정보를 이용하여 우리 서비스에 회원 가입도하고, 이미 가입된 경우라면 회원 가입 절차 없이 JWT를 발급합니다.JWT에는 인증 정보가 담겨져있기 때문에 Authorizaion Header에 넣어서 전송하면 인증이 필요한 API의 경우 토큰을 검사하여 정상적인 토큰이라면 요청한 API를 수행합니다.
질문&답변
OpenFeign을 어떤 상황에서 어떻게 사용하는지 감이 안옵니다...
안녕하세요! 실제 서비스를 만들다보면 외부 API를 사용하는 경우가 많습니다. 예를 들어서 뒤에서 구현하는 소셜 로그인의 경우도 카카오 API를 호출해야하기 때문에 feign client를 통해서 API를 요청하고 응답을 받아서 활용합니다. 실무에서는 타회사와 협업을하게 된다면 타 회사가 제공하는 API를 호출해야하는 케이스도 빈번하구요! 규모가 어느정도 되는 회사라면 단일 어플리케이션이 아니라 도메인별로 서버도 분리되어 있는 경우가 많은데 그럴 경우 내부 서버간 통신에도 활용합니다.
질문&답변
5:23분 테스트 결과 관련 문의드립니다.
스프링부트 버전이 올라가면서 없는 API를 호출할 경우 NoResoucrFoundException 예외를 발생시키도록 바뀐거 같습니다. NoResoucrFoundException을 따로 ExceptionHandler로 처리 해주고 있지 않아서 Exception을 처리하는곳에서 처리가 됐습니다. GlobalExceptionHanlder에 아래 예외를 추가해주면 404로 오류를 반환할 것 입니다.@ExceptionHandler(NoResourceFoundException.class) protected ResponseEntity handleNoResourceFoundException(NoResourceFoundException e) { log.error("NoResourceFoundException", e); ErrorResponse errorResponse = ErrorResponse.of(NOT_FOUND.toString(), "Requested resource not found."); return ResponseEntity.status(NOT_FOUND).body(errorResponse); } 그리고 ExceptionHandler가 먼저 수행되는건 서버 자기 자신한테 요청하기 때문에 자신한테 없는 API이기 때문에 GlobalExceptionHandler에서 먼저 처리를 하고, FeignClientExceptionErrorDecoder 에서는 에러 응답을 받은 후 처리하기 때문에 2번째로 처리가 됐습니다. 8081 서버를 하나 더 띄우고 (사진)8081 서버로 /api/health2 를 요청한다면 8080서버에서는 ExceptionHandler에서 오류 처리를 안하고, FeignClientExceptionErrorDecoder에서만 에러를 처리합니다. 8081 서버는 GlobalExceptionHandler에서 오류 로그를 남기고 반환할 오류 응답을 만들 것 입니다.(사진)
질문&답변
5:23분 테스트 결과 관련 문의드립니다.
안녕하세요 지수님! 강의 잘 듣고 계시 감사합니다!혹시 깃허브링크를 남겨주실 수 있으실까요?
질문&답변
도메인형 패키지 구조 질문
안녕하세요! 도메인 주도 개발이라고해서 꼭 특정 패키지 구조로만 해야 도메인 주도 개발인 것은 아니긴해서 말하기 조심 스러운 부분이 있긴하네요! 단순히 controller / service/ dto 기반으로 화면단위로 개발하는것보다는 도메인 주도 개발쪽에 가깝다고는 생각합니다.
질문&답변
oauth 회원가입 시 필수 추가 정보는 어떤 식으로 받으시나요?
안녕하세요! 인프런 AI인턴이 이미 답을해주었네요! 리소스서버에서 받아오지 않는 정보들은 따로 추가페이지를 만들고 해당 정보들을 다 입력하도록하여 회원가입을 완료하면됩니다.
질문&답변
Xss 에서 WebConfig 오류 발생됩니다.
안녕하세요. 해당 내용을 확인해보았는데 스프링부트3부터 javax에서 jakarta로 변경되면서 구현해야할 Filter가 수정이 되었습니다 ㅠㅠlucy-xss-filter는 최근에 업데이트가 안되고 있어서 github에 이슈로 등록도 다른분이 해두셨더라구요.lucy-xss-filter 버전이 업데이트 되지 않으면 사용이 안될것으로 보입니다. lucy-xss-filter버전 대응이 되면 추후에 사용할 수 있을 것으로 보이네요https://github.com/naver/lucy-xss-servlet-filter/issues/50
질문&답변
리프레시 토큰 사용 관련 문의 건
안녕하세요 저도 보안에 대해서 자세히 아는건 아니지만 제가 아는선에서 답변드리겠습니다.https로 전송 시 값 자체를 암호화해서 보내기 때문에 중간에 탈취되더라도 토큰 값 자체를 볼 수는 없을 것 2. 입니다. 카카오 API도 그렇고 다른 it기업들의 API문서를 보더라도 Response Body에 토큰 값을 담아서 반환하고 있습니다.3. Client에 토큰을 저장 시 어디에 저장할지가 사실 더 중요하다고 생각합니다. 참고할만한 블로그들을 첨부드립니다!https://www.google.com/search?q=%ED%86%A0%ED%81%B0+%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8+%EC%A0%80%EC%9E%A5&sourceid=chrome&ie=UTF-8https://blogeon.tistory.com/entry/JWT%EC%9D%98-Refresh-Token%EA%B3%BC-Access-Token%EC%9D%80-%EC%96%B4%EB%94%94%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%B4%EC%95%BC-%ED%95%A0%EA%B9%8C
질문&답변
applycation.yml 의 readTimeout 이 적용이 안됩니다.
안녕하세요! 최근 문서를 보니 다음과 같이 변경이 되었네요!https://docs.spring.io/spring-cloud-openfeign/docs/4.0.6/reference/html/spring: cloud: openfeign: client: config: default: connectTimeout: 5000 readTimeout: 5000(사진)FeignClientExceptionErrorDecoder에서 오류가나는건은 RetryableException 생성자의 다섯번째 생성자retryAfter가 Date 1개만 존재하였는데 Long을 파라미터로 받는 파라미터가 추가되었습니다. 앞에 타입을 (Long)을 지정해주시면 정상적으로 수행될 것 입니다.@Slf4j public class FeignClientExceptionErrorDecoder implements ErrorDecoder { private ErrorDecoder errorDecoder = new Default(); @Override public Exception decode(String methodKey, Response response) { log.error("{} 요청 실패, status : {}, reason : {}", methodKey, response.status(), response.reason()); FeignException exception = FeignException.errorStatus(methodKey, response); HttpStatus httpStatus = HttpStatus.valueOf(response.status()); if(httpStatus.is5xxServerError()) { return new RetryableException( response.status(), exception.getMessage(), response.request().httpMethod(), exception, (Long) null, response.request() ); } return errorDecoder.decode(methodKey, response); } }
질문&답변
applycation.yml 의 readTimeout 이 적용이 안됩니다.
안녕하세요!! 스프링부트 버전과 호환이 안되서 정상적으로 동작하지 않는것으로 보이네요버전을 한번 아래처럼 바꿔보시겠어요?set('springCloudVersion', "2023.0.0")(사진)