공부기록/Spring

    Spring-Response 공통 포맷

    Response Value 리팩토링 전 @PostMapping("/member") public String addMember(@Validated @RequestBody SaveMemberRequest request) { memberService.saveMember(request); return "ok"; } @GetMapping("/members") public MemberInfoResponse getMemberList(){ return memberService.getMembers(); } Refactoring 후 코드 @PostMapping("/member") public ResponseData addMember(@Validated @RequestBody SaveMemberRequest request)..

    Spring-Rest Docs(3)

    Spring-Rest Docs(3)

    목차 Spring-Rest Docs(1) Spring-Rest Docs(2) Spring-Rest Docs(3) request.fields.snippet 커스텀 진행시에는 Mustache 문법을 사용해서 진행을 한다 제약조건과 optional 추가시 .{{title}} |=== |Path|Type|Description|Constraints|Optional {{#fields}} |{{path}} |{{type}} |{{description}} |{{constraints}} |{{optional}} {{/fields}} |=== ```

    Spring-Rest Docs(2)

    목차 Spring-Rest Docs(1) Spring-Rest Docs(2)

    Spring-Rest Docs(1)

    Spring-Rest Docs(1)

    목차 Spring-Rest Docs(1) IDE내에서도 static/docs 확인 가능 asccidoctor 작업 이후 생성된 HTML 파일을 static/docs 로 copy build 의 의존작업 명시 jar 빌드 전에 doc생성build 폴더 내에서만 확인 가능 (7,8,9 과정 실행시 굳이 안해도 됨) jar안에 static/docs directory로 doc copy Spring 공식 문서를 참조하여 설정했습니다 테스트코드 import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest; im..

    Spring boot CORS 설정

    Spring boot CORS 설정

    스프링 부트로 REST API 서버를 만들면 테스트 다돌려보고 마지막으로 postman에서까지 실행이 잘 되는데 프론트쪽에서 실행할 때 에러가 나는 경우가 있었다 이번에 처음 겪어본 에러였는데 SOP를 따르지 않아서 발생하는 문제였다 CORS(Cross-Origin Resource Sharing) 다른 출처의 자원들을 공유하는 것을 의미한다 따라서 CORS를 설정해주지 않거나 제대로 설정하지 않은 경우 원하는대로 자원을 공유하지 못하게 된다 처음에 다른 출처라는 것에 대해서 이해하는데 정확히 어떤 의미인지 어려운 감이 있었다 우선 다른 출처에 대해서 먼저 알고 넘어가겠다 출처(Origin) 출처는 URL의 Protocol Host Port로 구분된다 Protocol : Http, Https, FTP와 같..

    DTO관련 고민

    컨틀롤러와 서비스간 값을 전달할 때 어떤 형식으로 보내야 하는가 1. 고민시작 졸업작품 프로젝트를 진행을 끝내고 시간적 여유가 있는 다음달부터 코드 정리를 하기 위해서 기능적인 부분 수정이나 명칭 변경과 같이 TODO목록을 작성하던 도중 가장 코드가 많은 Service계층과 Controller계층 사이에 데이터 전달되는 형식이 어느것은 DTO를, 어느것은 Entity를 사용하면서 일관적이지 않은 것을 보고 정말 많은 고민이 시작되게 되고 방안들을 생각해 봤다. 선행 기준 방안을 생각하기에 앞서 무조건 선행된 기준은 있었다. Controller는 client로 부터 Entity가아닌 DTO로 값을 받고 DTO를 넘겨주게된다 DTO란 프로세스간 데이터를 전달하는 객체 마틴 파울러가 정의한 내용 첫번째 고민 ..

    Spring - 예외처리

    서블릿 예외처리 예외가 발생할 경우 ex) RuntimeException... response.sendError()로 예외를 전달 할 경우 --> 당장 예외가 발생하는 것이 아니라 서블릿 컨테이너에 전달, 응답전에 컨테이너가 확인 어플리케이션 내에서 예외처리가 되지 않을경우(try~catch) WAS까지 예외 전달 되어 예외페이지 출력된다 예외페이지 등록 예외페이지 등록 web.xml 404 /error-page/404.html java @Component public class WebServerCustomizer implements WebServerFactoryCustomizer { @Override public void customize(ConfigurableWebServerFactory factor..

    Spring-filter interceptor

    서블릿 필터 필터내에서 특정 조건을 만족하지 못한다면 해당 필터에서 끝을 내고 컨트롤러를 호출하지 않도록 제어하는 역할이다 체인 형식으로 여러개의 필터를 순차적으로 등록하여 사용할수 있다 로그인관련에서 사용 흐름 Http 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 호출 Interface Filter인터페이스를 상속받아서 구현을 한다 public class MyFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { //초기화시 호출 } @Override public void doFilter(ServletRequest request, ServletResponse..

    Spring - 로그인 처리 세션쿠키

    쿠키 쿠키 종류 영속 쿠키: 브라우저가 종료되어도 설정된 만료 날짜 까지 유지 세션쿠키: 브라우저 종료시 까지만 유지 사용되는 곳 주로 로그인처리와 같은 사용자 상태를 유지하는 곳에서 사용이 된다 Cookie idCookie = new Cookie("memberId", memberId); HttpServletResponse.addCookie(idCookie); 쿠키는 위와 같이 얻어서 웹 응답 값에 포함 시켜서 응답을 보낸다 웹브라우저는 그 후 모든 요청에 쿠키 정보를 자동으로 포함하여 보낸다 Cookie cookie = new Cookie(cookieName, null); cookie.setMaxAge(0); response.addCookie(cookie); 쿠키를 없애고 싶으면 동일한 이름을 가진 쿠..

    Spring-MVC4 에러검증2

    에러 검증 Bean Validation 이전에 사용했던 Validator를 상속받아 사용했던 특정 검증기와는 다르게 검증 어노테이션을 이용하여 검증을 하는 방식이다 설정 xml 설정방법 스프링 관련 설정 : @EnableWebMvc어노테이션을 사용하면 OptionalValidatorFactoryBean을 글로벌 validator로 등록 dependency 설정: maven javax.validation validation-api 2.0.1.Final org.hibernate hibernate-validator 7.0.2.Final dependency 설정: gradle implementation 'javax.validation:validation-api:2.0.1.Final' 참고 http..