본문 바로가기
반응형

내가 공부하려고 올리는100

프로젝트 RESTful하게 API 수정하기 ✅ REST API 프로젝트를 리뷰하면서 작성한 많은 API가 RESTful하지 않다는 생각이 들었습니다. 우선 REST API의 구성요소에서 제일 핵심은 다음 두 가지입니다. 1. 자원(Resource) 2. 행위(Resource Methods) URI는 정보의 자원을 표현하고 그 자원에 대한 행위는 HTTP Methods(GET, POST, PUT, DELETE)로 표현하는 것이죠. 실제 제가 만든 API입니다. @RequestMapping("/board") public class BoardController { @DeleteMapping("/delete/{study_id}") public ResponseEntity deleteStudy(@PathVariable("study_id") Integer s.. 2022. 7. 15.
Nginx client_max_body_size 수정하기 프로젝트를 Nginx와 스프링 부트를 연동해서 배포 중이었는데 로컬 환경에서 없었던 오류가 발생했다. 프로필 사진을 변경하는 기능을 테스트 중이었는데 다음과 같은 오류 메시지가 발생했다. Failed to load resource: the server responded with a status of 413 (Request Entity Too Large) 객체의 크기가 크다는 것 같은데 해당 객체의 크기는 실제 그렇게 큰 파일이 아니었고 나는 스프링에서 업로드 용량을 10MB로 제한해놨는데 파일 용량은 그것보다 작았다. #업로드 파일 사이즈 제한 spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.s.. 2022. 7. 15.
Github Actions로 properties 파일 만들어서 배포하기 ✅ 들어가기 앞서 프로젝트를 무중단 배포할 때의 일입니다. properties 파일에 저장한 설정 정보는 대부분 보안과 관련된 정보가 들어있습니다. 그래서 이런 properties 파일의 경우 보안 관련 정보가 있는 경우 깃허브에 업로드해서는 안됩니다. 하지만 properties가 업로드되지 않은 상태에서 빌드하고 배포하는 경우 오류가 발생합니다. jdbc 관련 설정과 같이 프로젝트 최초 실행 시 불러와야 하는 설정 정보가 없어서 애플리케이션이 실행되지 않기 때문입니다. 이 문제를 해결하기 위해 제가 사용한 해결 방식을 오늘 소개해보려고 합니다. ✅ Github Actions로 properties 파일 만들기 우선 제 프로젝트의 CI/CD 흐름도입니다. 사용자가 로컬 환경에서 Github에 push 합니.. 2022. 7. 15.
스프링 시큐리티(Spring Security) CSRF 설정(AJAX, POST FORM) ✅ CSRF란? CSRF는 'Cross-Site Request Forgery)'의 약자로 '사이트 간 요청 위조'를 뜻합니다. 웹 사이트의 취약점을 이용하는 공격의 하나로, 사용자가 자신도 모르게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격을 말합니다. 이런 공격 방식은 특정 사용자가 사이트를 신뢰하는 상태를 노리는 공격 방식으로 쿠키 기반 서버의 세션 정보를 획득할 수 있는 상태에서 이뤄집니다. OAuth나 JWT 토큰 등을 이용해 API 기반 로그인을 진행하는 사이트의 경우 세션을 이용하지 않기 때문에 CSRF 방어 전략을 세우지 않기도 합니다. 하지만 제가 진행하고 있는 프로젝트의 경우 세션 기반 로그인 기능을 구현했기 때문에 이러한 CSRF 공격에 취약할 수 있습니다. 오늘은 이런.. 2022. 7. 15.
OAuth2.0으로 네이버/카카오 로그인 구현하기 OAuth는 'Open Authorization'의 줄임말로 '인가(Authorization)'를 위한 개방형 표준 프로토콜입니다. 이 OAuth 프로토콜을 이용하여 네이버나 카카오 또는 구글, 페이스북 등 Third-Party 프로그램의 사용 권한을 얻을 수 있습니다. ✅ OAuth 2.0 프로토콜 구성하는 4가지 역할 OAuth 프로그램은 4가지 역할을 다음과 같습니다. ☝ Authorization Server 인증 및 인가가 성공적으로 끝난 Client에게 액세스 토큰(Access Token)을 발급합니다. ☝ Resource Server 보호된 리소스를 호스팅 하는 서버입니다. 액세스 토큰(Access Token)을 사용하여 보호된 리소스 요청에 응답합니다. ☝ Client Resource Own.. 2022. 7. 14.
스프링 인터셉터(Interceptor) 스프링 프로젝트를 진행하면서 '회원 인증' 로직을 구현해야 했습니다. '회원 인증' 로직을 구현하는 것은 어렵지 않았으나 회원 인증이 필요한 모든 페이지에 회원 인증 로직을 작성하는 것은 비효율적이고 중복이 발생하는 부분이었습니다. 이 부분을 해결하기 위해 저는 스프링 인터셉터를 활용했습니다. 스프링 인터셉터 말고도 필터(Filter)나 스프링의 AOP로도 해당 문제를 해결할 수 있습니다. 저는 인터셉터가 스프링 MVC가 제공하는 기술이고 이런 공통 관심 사항을 효과적으로 해결할 수 있기 때문에 선택했습니다. ✅ 스프링 인터셉터 흐름 스프링 인터셉터 흐름은 다음과 같습니다. HTTP 요청 👇 WAS 👇 디스패처 서블릿 👇 스프링 인터셉터 👇 컨트롤러 요청에 대해 스프링 인터셉터가 실행되는 시점은 컨트롤러.. 2022. 7. 13.
반응형