본문 바로가기
반응형

내가 공부하려고 올리는/스프링19

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.
PathVariable, RequestParam, RequestBody(스프링에서 파라미터 받기) 스프링 컨트롤러에서 파라미터를 전달받을 때 사용하는 객체로는 PathVariable, RequestParam, RequestBody가 있습니다. 이번 글에서는 각각의 쓰임을 간단히 알아보겠습니다. ✅ @PathVariable PathVariable로 파라미터를 받을 경우의 간단한 URI 예시를 보겠습니다. http://localhost:8080/order/10 해당 URL 요청을 @PathVariable을 사용해 처리하려면 다음과 같은 컨트롤러가 필요합니다. @PostMapping("/order/{number}") public String(@PathVariable Integer number) { //... 중략 } 위와 같이 URI를 구성할 때 '리소스'만으로 요청 정보를 다 넘겨줄 수 없을 때 @Pat.. 2022. 7. 12.
세션 저장소로 데이터베이스 사용하기(MySQL) 현재 프로젝트에서 로그인 방식으로 세션을 사용하고 있습니다. 쿠키의 경우 클라이언트의 리소스를 사용하기 때문에 서버의 부하가 적으나 웹 브라우저마다 지원 형태도 다르고 보안에 취약해서 사용하지 않았습니다. 세션을 사용하여 로컬 환경에서 프로젝트를 진행할 때, 수정사항이 생겨 애플리케이션을 재시작해야 하는 경우 세션이 만료되어 다시 로그인을 했어야 했습니다. 이는 세션이 기본적으로 톰캣 세션을 사용하기 때문입니다. ✅ 세션 저장소 세션은 쿠키와 다르게 서버의 리소스를 사용합니다. 때문에 세션을 만들면 서버에서 관리되는 것이죠. 이런 세션을 저장하는 저장소로 보통 3가지 방식이 사용됩니다. ☝ 톰캣 세션 따로 설정을 하지 않은 경우 기본적으로 톰캣에 세션이 저장됩니다. 앞서 말했듯이, 애플리케이션을 재구동 .. 2022. 7. 12.
반응형