본문 바로가기

분류 전체보기

(73)
Spring Security - LogoutFilter 란 - LogoutFilter 란- LogoutFilter란 로그아웃에 대한 처리를 담당하는 필터로 사용자가 로그아웃 요청을 했을 경우에만 적용되는 필터이다. LogoutFilter는 세션 무효화, 인증 토큰 삭제, SecurityContext에서 해당 토큰 삭제, 쿠키 삭제 및 로그인 페이지로 리다이렉트를 시켜주는 기능이 있다. LogoutFilter의 필터 기능이 구현된 코드를 보면 아래와 같다. private void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException { if (this.requiresLogout(request, res..
Spring Security - UsernamePasswordAuthenticationFilter 란 - UsernamePasswordAuthenticationFilter 란- UsernamePasswordAuthenticationFilter란 Form based Authentication 방식으로 인증을 진행할 때 아이디, 패스워드 데이터를 파싱하여 인증 요청을 위임하는 필터이다. 쉽게 설명하자면 유저가 로그인 창에서 Login을 시도할 때 보내지는 요청에서 아이디(username)와 패스워드(password) 데이터를 가져온 후 인증을 위한 토큰을 생성 후 인증을 다른 쪽에 위임하는 역할을 하는 필터이다. Spring Boot 기반의 HttpSecurity를 설정하는 코드에서 http.formLogin(); 을 사용하면 시큐리티에서는 기본적으로 UsernamePasswordAuthenticationF..
PRG 패턴 (Post-Redirect-Get) - 삽질중인 개발자 최근 발생한 이슈 중 중복 결제에 대한 이슈가 있어서 원인을 찾아보는 중에 브라우저에서 새로고침이나 뒤로 가기를 했을 경우 이전에 보내진 POST 요청이 다시 보내져 중복 결제가 일어나는 버그가 있다는 것을 발견했다. 이러한 새로고침 버그에 대해서 회피할 수 있는 방법을 찾아보는 중 PRG 패턴에 대해서 알게 되어 정리 차원에서 포스팅을 한다. PRG 패턴 (Post-Redirect-Get) 웹 개발 패턴 중 자주 쓰이는 패턴으로 HTTP POST 요청에 대한 응답이 또 다른 URL로의 GET 요청을 위한 리다이렉트(응답 코드가 3XX) 여야 한다는 것을 의미한다. 즉, 쉽게 설명하면 POST 방식으로 온 요청에 대해서 GET 방식의 웹페이지로 리다이렉트 시키는 패턴을 말한다. PRG 패턴을 사용하지 않..
@Transactional Rollback이 안되는 이유, @Transactional 사용시 주의 사항 - 삽질중인 개발자 개발을 하다 보니 예외(Exception)에 대해서 아무 생각 없이 사용하다가 심각한 버그를 발견하게 되어서 글을 정리한다. 아마 초보 개발자들이 가장 많이 하는 실수 중 하나 아닐까 싶다. 아래의 코드는 문자열을 넘겨주면 해당 문자열의 길이를 반환해주는 함수이다. public int getLength(String str) throws Exception{ if(str == null){ throw new Exception(); } return str.length(); } 그냥 봤을 때는 null일 때 유효성 검사도 되어 있고 유효성 검사에서 걸리면 Exception까지 던져주는 문제없어 보이는 코드처럼 보인다. 만약 위에 있는 함수를 사용해서 스프링에서 제공하는 @Transactional 어노테이션을 사용..
커넥션 풀(Connection pool)이란? 커넥션 풀(Connection Pool)이란? WAS(웹 컨테이너)가 실행 될 때 DB연결을 위해 미리 일정수의 connection 객체를 만들어 Pool에 담아 뒀다가 사용자의 요청이 발생하면 Pool에서 생성되어 있는 Connection 객체를 넘겨주고 사용자가 사용이 끝나면 Connection 객체를 다시 Pool에 반환하여 보관하는 기법이다. 커넥션 풀 동작 과정 1. 사용자가 DB를 사용하기 위하여 Connection을 요청한다. 2. Connection Pool에서 사용되지 않고 있는 Connection 객체를 제공한다. 3. 사용자가 Connection 객체를 사용 완료하면 pool로 반환한다. 웹 어플리케이션에서 커넥션 풀을 사용해서 얻는 이점 1. 서버의 부하를 줄여준다. 웹 어플리케이션..
Apache http2 적용 방법 (mod_http2)- 삽질중인 개발자 속도가 중요시되는 서비스에서 이제는 많은 기업이 HTTP2를 적용하고 있다. ( 구글 같은 경우에는 HTTP3을 적용 중이다. ) HTTP1.1과 HTTP2.0 의 차이는 대충 요약하자면 이것저것 도입해서 지연을 감소시켜 HTTP1.1 대비 속도를 증가시켰다. (httpwg.org/specs/rfc7540.html 이쪽에 자세하게 나와 있다.) mod_http2는 아파치 2.4.17 버전 이상에서 적용이 가능하다. (httpd.apache.org/docs/2.4/mod/mod_http2.html) 또한 http2를 적용하기 위해서는 ssl 이 적용되어 있어야 한다. ( mod_ssl ) 1. mod_http2 적용 방법 CentOS 7의 경우 yum install httpd를 하는 경우 아파치 2.4.6..
mod_jk를 이용한 아파치 로드밸런싱 ( 설치부터 적용까지 ) - 삽질중인 개발자 운영을 하다 보면 로드밸런싱을 적용해서 부하를 분산시켜야 하는 경우가 있는데 L4, L7 같은 장비를 사용하여 로드밸런싱을 하기에는 비용이 상당히 많이 들어 도입하기가 어려운 경우가 있다. 이런 경우에 아파치를 이용하여 톰캣(was)을 로드밸런싱을 할 수 있다. 우선 로드밸런싱 방법 중 몇가지 방법(mod_jk, proxy, 기타 등등)이 존재 하는데 proxy 방법은 httpd.apache.org/docs/2.4/mod/mod_proxy_balancer.html 해당 사이트의 examples of a balancer configuration 칸을 보고 따라 하면 바로 적용될 정도로 쉽기에 이 포스팅에서는 mod_jk를 이용해서 적용하는 방법을 포스팅한다. ( 각각의 방식에 장단점이 있다. ) 우선 mo..
java Error, Checked Exception, Unchecked Exception - 삽질중인 개발자 개발을 하다 보면 예외를 처리해야 하는 상황이 아주 많이 발생한다. 이때 예외에 대해서 정확히 알고 있어야 좋은 코드를 짤 수 있기에 예외에 대한 포스팅을 한다. 에러(Error) vs 예외(Exception) 우선 자바에서 예외는 크게 Error와 Exception으로 나뉜다. Error란 시스템 레벨에서 발생하는 심각한 수준의 오류를 뜻하며 개발자가 미리 예측하여 처리할 수 없기에 개발 시 예외 처리에 신경 쓰지 않아도 되는 부분이다. Exception이란 로직 상에서 발생하는 오류로 개발자 구현한 코드에서 발생하여 예외를 예측할 수 있으며 상황에 맞게 처리할 수 있다. 예외 클래스 구조 이러한 예외 클래스들은 최상위 클래스인 Object를 상속받은 Throwable이라는 클래스를 기반으로 Error..