전체 글

    CORS 이슈 해결

    CORS 이슈가 발생한 상황을 예제 코드를 통해서 확인하고 서버 사이드에서 해당 이슈를 어떻게 해결하는지 확인해도록 하자. 이전 포스팅은 CORS에 대한 개념에 대한 전반적인 내용 설명이었다면, 이번엔 예제 코드를 통해서 눈으로 직접 확인해보자. 참고로 웹 브라우저는 Firefox를 사용하였다. 그 이유는 Chrome에서는 기본적으로 Access-Control-Max-Age의 최소 값을 10분(600초)으로 설정해놔서 테스트를 하면서 계속 기다려야했기 때문이다. Chrome에서 Access-Control-Max-Age를 설정한 이유는 이전 포스팅에서도 언급하였지만, Preflight Request는 많은 리소스를 소비하기 때문이다. 예제 테스트는 UI서버와 API서버를 포트를 다르게 로컬에서 띄운 상태에..

    CORS 정책

    어드민의 GNB(Global Navigation Bar) 영역을 개발하면서 script 태그 내에서 Cross-Origin 으로 요청을 보내야하는 상황이 있었는데, 구글링을 통해서 해결책을 찾았지만 원하는 대로 되지 않아서 고생한 적이 있다. 앞으로 같은 상황일 때 삽질하는 시간을 줄일 수 있도록 포스팅을 한다. CORS은 Cross-Origin Resource Sharing 의 약자로 W3C에서 내놓은 정책이다. 의미를 해석을 해보면 Cross-Origin의 Resrouce를 공유하는 정책이라고 볼 수 있을 것 같다. 모질라에 있는 CORS의 정의를 빌려오자면 CORS는 특정 헤더를 통해서 브라우저에게 한 출처(origin) 에서 실행되고 있는 웹 애플리케이션이 다른 출처(cross-origin)에 원..

    [5편] 제네릭이란?

    Collectors에 선언된 제네릭 메소드들의 이해 java.util.Collections 에 선언된 변수 혹은 메소드를 보면 도무지 이해하기 힘든 부분들이 많다. 지금까지 1편부터 4편까지 제네릭에 대해서 공부를 해왔지만, 막상 java.util.Collections 에 선언된 메소드들을 보면 답답하다. 이번 포스팅을 통해서 어렵고 난해한 메소드에 대해 친숙해지는 기회가 되었으면 한다. 아래 java.util.Collections에 선언된 sort 메소드를 보자. 위 메소드를 보면 지금까지 공부했던 내용이 다 들어가 있다. 1편부터 4편까지의 내용을 조합해서 위 메소드를 해석하면 대충 어떠한 메소드인지 알 수 있을 것 같기도 하다. 하지만 제네릭 메소드 각각의 위치에 왜 하한 제한이 들어가고, 상한 제..

    [4편] 제네릭이란?

    제네릭은 Overloading 이 가능할까? Type Erasure에 대해서 알아보자. 한 번쯤은 제네릭 메소드를 Overloading 해서 메소드를 구현하고 싶은 생각을 해봤을 것이다.(물론, 아닐 수도 있다.) 제네릭은 Overloading 이 가능할까? 결론부터 말하면 제네릭 메소드는 Overloading 이 불가능하다. 이번 포스팅에서는 왜 Overloading 이 안되는지? 왜 제네릭과 와일드카드를 혼합해서 쓰는지? 를 알아보자. 아래와 같이 제네릭 오버로딩을 해보자 두 outBox 메소드의 매개변수 타입은 분명 서로 다른 것을 알 수 있다. 첫 번째 메소드는 Toy 타입을 상한 제한 하였으며, 두 번째 메소드는 Robot 타입을 상한 제한 하였다. 분명 두 메소드는 서로 다른 타입을 매개변수로..