목차 Open API를 사용하다 보면 공식문서에 HttpURLConnection이나 RestTemplate가 항상 등장한다. 따라서 이 두 클래스에 대해 알아보고자 한다. HttpURLConnection과 RestTemplate HttpURLConnection과 RestTemplate은 자바 클래스로 HTTP 리퀘스트를 만들때 사용한다. HttpURLConnection HttpURLConnection 클래스는 URLConnection을 구현한 클래스이기 때문에 먼저 URLConnection 부터 알아보자 URLConnection - URLConnection은 웹을 통해 데이터를 주고 받는데 사용된다. (RFC 2616을 따름) - 사용자 인증이나 보안이 설정되어 있지 않은 웹서버에 접속하여 파일 등을 다..
File Upload 시나리오 클라이언트에게 Multipart-form/data 형식으로 파일을 전송 받는다. 이 때 파일의 데이터 타입은 MultipartFile이다. S3Uploader를 통해 파일을 S3에 업로드하고, 파일이 저장된 URL을 DB에 저장한다. 클라이언트가 파일을 요청 시 파일이 아닌 파일이 저장된 경로를 반환한다. 따라서 클라이언트로부터 데이터를 받을 때는 MultipartFile 데이터 타입으로 받지만, 반환할 땐 String 타입으로 반환한다. S3 버킷 생성과 IAM 사용자 생성이 이미 이루어져있다고 가정하고 시작한다. 의존성 추가 (gradle) #build.gradle implementation 'org.springframework.cloud:spring-cloud-star..
1. S3로 들어가서 버킷 만들기 클릭 2. 버킷이름을 입력하고 AWS 리전은 아시아 태평양 (서울)로 지정하자 3. 모든 사용자한테 액세스를 허용하기위해 모든 퍼블릭 액세스 차단 체크박스를 해제하고 맨 아래 체크박스에 체크를 해두고 버킷만들기 버튼을 눌러 버킷을 생성하자 4. 버킷을 생성하면 목록에 해당버킷이 나오는데 액세스에 '객체를 퍼블릭으로 설정할 수 있음' 이라고 나온다. 버킷의 정책을 수정해서 모든사람이 액세스할 수 있도록 수정해야한다. 버킷 상세페이지로 이동하자. 5. 상세페이지 상단 '권한' 탭을 누르면 하단에 위와 같은 목록을 볼 수 있다. '편집' 버튼을 누르자 버킷 ARN값을 복사하고 정책생성기 버튼을 누르면 다음과 같은 화면이 뜬다. 6. 이 부분의 할당값을 다음과 같이 설정한다 A..
앱을 기획할때 날씨 API를 넣고자 하였다. 그래서 기상청_단기예보 ((구)_동네예보) 조회서비스 를 이용하였다. 신청은 여기서 하면 된다. https://www.data.go.kr/tcs/dss/selectApiDataDetailView.do?publicDataPk=15084084 기상청_단기예보 ((구)_동네예보) 조회서비스 초단기실황, 초단기예보, 단기((구)동네)예보, 예보버전 정보를 조회하는 서비스입니다. 초단기실황정보는 예보 구역에 대한 대표 AWS 관측값을, 초단기예보는 예보시점부터 6시간까지의 예보를, www.data.go.kr 여러가지를 제공하는데 그 중에서 초단기예보 조회를 사용하고자했다. 초단기예보 조회는 매시간 30분에 생성되고 10분마다 최신 정보로 업데이트(기온, 습도, 바람)가..
테스트를 실행했더니 Command line is too long 이라는 에러가 발생했다. Shorten the command line and rerun 을 클릭하고 다시 테스트를 돌리면 다른 오류가 발생했다. 이미 test를 Intellij IDEA로 설정한 상태여서 Intellij IDEA로 설정하라는 문서는 소용이 없었다. 다른 문서들에서 다행히 해답을 찾을 수 있었다. 1. Edit Configuration에 들어간다. 2. 그러면 이 창이 나온다. Modify options를 눌러서 Shorten command line을 체크해주면 이를 설정할 수 있게 된다. Shorten command line을 JAR manifest로 바꿔준다. 그런데 설정해준 테스트들에 대해서만 정상적으로 실행되고, 다른 ..
Swagger Swagger란 서버로 요청되는 URL 리스트를 HTML화면으로 문서화 및 테스트 할 수 있는 라이브러리이다. 간단하게 설명하면 Swagger는 API Spec 문서이다. API를 엑셀이나 가이드 문서를 통해 관리하는 방법은 주기적인 업데이트가 필요하기 때문에 관리가 쉽지 않고 시간이 오래 걸린다. 그래서 Swagger를 사용해 API Spec 문서를 자동화해주어 간편하게 API문서를 관리하면서 테스트할 수 있다. 선발주자로 springfox가 시작이 되었고, 후발 주자로 springdoc-openapi가 나왔다. 그러나 springfox는 2020년 이후 업데이트를 수행하고 있지 않으며, springdoc-openapi는 현재까지 업데이트를 진행하고 있다. 따라서 본 문서는 springd..
회원가입과 로그인을 Spring Security와 JWT를 이용하여 구현할 예정이다. 따라서, 이와 관련하여 공부한 내용을 정리해 보았다. 스프링 시큐리티란? 스프링 기반의 애플리케이션의 보안(인증과 권한, 인가 등)을 담당하는 스프링 하위 프레임워크. 즉 인증(Authenticate, 누구인지?) 과 인가(Authorize, 어떤것을 할 수 있는지?)를 담당하는 프레임워크. 스프링 시큐리티에서는 주로 서블릿 필터(filter)와 이들로 구성된 필터체인으로의 구성된 위임모델을 사용한다. 그리고 보안과 관련해서 체계적으로 많은 옵션을 제공해주기 때문에 개발자 입장에서는 일일이 보안관련 로직을 작성하지 않아도 된다는 장점이 있다. 기본용어 접근 주체(Principal) : 보호된 리소스에 접근하는 대상 인증..
POST 요청시 GET 요청으로 인식되는 문제의 해결은 다음과 같다. /etc/nginx/sites-available/default 을 아래 그림처럼 301에서 308로 바꿔준다 301 Moved Permanetly GET 메소드는 바뀌지 않는다. GET이 아닌 다른 메소드들은 GET으로 바뀌어 리다이렉트 된다. 308 Permanent Redirect 전송할때 메소드와 바디는 바뀌지 않는다. 301번을 사용한다면 POST로 날아왔던 요청이 GET 메소드로 변경되면서 컨트롤러나 라우터에 매핑되는 URI가 없으면 오류가 나게된다. 따라서 301 대신 308을 사용하여 요청해야 한다. 참고문서 [NginX] 리다이렉션 시 POST가 GET으로 바뀌는 문제점
1. 404 Not Found 로컬에서 실행했을때는 잘 되었는데 AWS에 올린 뒤로 404 에러가 발생하는 때가 있다. 다음 두가지를 수행했더니 해결 되었다. sudo vi /etc/nginx/sites-available/default 1. 리버시 프록시 설정 추가 1번과 같이 proxy_pass를 설정해준다. 이 proxy_pass는 가장 핵심적이 부분이다. URL이 api로 시작하는 주소로 접근하면 localhost:8080으로 보내준다는 뜻이다. 사용자가 8080번 포트로 접근하지 않고 80번 포트로 접근하여도 api를 맨 앞에 포함한 경로로 접근하면 80번 포트로 접근한 것과 같은 상황이 발생하도록 한다. 2. 404 페이지 주석 처리 NGINX 서버로 요청이 들어왔을 때, 먼저 NGINX 웹서버..