어느 날 한 고객사에서 다급하게 연락이 왔다... 연락 온 사유는 갑자기 /tmp 경로에 처음보는 파일이 생겼는데 용량이 40G가 넘어가서 지금 디스크 용량이 부족해 서비스가 중단될 것 같다.. 라는.... 말과 함께 아래의 사진을 보내왔다. 일단 보내준 사진만 봤을때는 확실히 문제가 있어보였는데 나도 처음 경험하는 내용이라 관련해서 찾아보니 요약하면 아래 3줄로 딱 정리할 수 있다. 1. MariaDB는 스토리지 엔진(ex InnoDB..)으로부터 받아온 레코드를 order by, group by, alter table 등의 쿼리를 수행할 때 명령어 수행을 위해 임시 테이블을 사용한다. 2. 이 임시 테이블은 처음에 메모리에 할당 돼서 생성이 되지만 설정해둔 값을 넘어가게 되면 메모리에서 디스크로 옮겨..
Spring Security는 기본적으로 DefaultLogoutPageGeneratingFilter를 통해 로그아웃 페이지를 제공하며 GET /logout으로 접근이 가능하다. 로그아웃 실행은 기본적으로 POST /logout으로만 가능하며 csrf 기능을 비활성화 할 경우 또는 RequestMatcher 를 사용할 경우 GET, PUT, DELETE 모두 가능하다. 로그아웃 필터를 거치지 않고 MVC에서 커스텀으로 구현할 수 있으며, 로그인 페이지를 커스텀으로 구현했을 경우 로그아웃 또한 커스텀으로 구현해야 한다. 아래는 logout config 설정들이다. @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) th..
Spring Security에서는 익명 인증이라는 개념이 존재하는데, 익명 인증이란 인증 받지 않은 사용자를 의미한다. 이게 말이 좀 헷갈릴수 있지만 우리는 흔히 인증받은 사용자, 인증받지 않은 사용자 이렇게 구분해서 생각하지만 Spring Security는 인증받은 사용자, 익명으로 인증받은 사용자(=인증받지 않은 사용자) 로 구분한다. 그 이유는 SecurityContextHolder가 항상 Authentication 객체를 포함하고 null을 포함하지 않는다는 규칙을 세우면 클래스를 더 견고하게 작성할 수 있기 때문인데, 특정 자원에 요청을 보내면 이 요청이 인증된 사용자의 요청인지 익명으로 인증된 사용자의 요청인지 객체로 구분을 할 수 있다는 의미이다.anonymous config 설정은 대부분 ..
Spring Security에서 제공하는 기능 중 RememberMe 라는 기능이 있다. 이름에서부터 알수 있듯이 처음 인증에 성공하면 일정 시간동안 이 토큰이 있을 경우 자동 로그인 처리를 해주는 기능이다. 전체적인 흐름은 아래와 같다.최초 로그인을 했을 때 인증에 성공할 경우 RememberMe가 체크되어있는지 확인RememberMe가 설정 되어있을 경우 쿠키를 만들어서 클라이언트로 전달이후 클라이언트는 이 쿠키를 가지고 서버로 요청을 보낸다아래는 SecurityConfig에서 RemeberMe 관련 설정들이다.@EnableWebSecurity@Configurationpublic class SecurityConfig { @Bean public SecurityFilterChain securi..
스프링 시큐리티는 HttpServletRequest에서 사용자의 아이디와 패스워드를 읽어서 인증을 하는 메커니즘은 크게 Form 방식, Basic 방식 두 가지가 존재한다. 이번 포스트에서는 Form 방식을 다룰 예정이다.위의 이미지는 인증받지 않은 사용자의 요청에 대해서 spring security에서 어떻게 인증 페이지로 리다이렉트 하는지에 대한 메커니즘이다. 위의 매커니즘을 간단하게 설명하면 아래와 같다.클라이언트는 서버로 /private로 GET 요청을 보낸다.spring security는 이 요청을 가로채 인증 확인을 한다.인증되지 않은 사용자인 경우 AccessDeniedException을 발생시킨다.ExceptionTranslationFilter에서 이 예외를 받아서 처리해 설정되어있는 lo..
이번 포스트는 sprint security 의존성을 추가한 뒤 설정하는 기본적인 config 설정과 그에 대한 실습이다. 일단 나는 Spring Boot 3.2.5, Spring Security 6x, Java 17을 사용하고 빌드는 gradle로 진행했다. spring security 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-security' 단지 의존성만 추가했을 뿐인데 Spring Security는 아래 4가지 설정을 지원한다.기본적으로 모든 요청에 대하여 인증 여부를 검증하고 인증이 승인되어야 자원에 접근이 가능인증 방식은 formLogin 방식과 httpBasic 방식을 제공인증을 시도할 수 있는 로그인 페이지가 자동..
이번엔 리눅스에 DNS서버를 구축하여 레코드 질의시 정상적인 응답을 받는 간단한 실습을 진행하려고 한다. 1. 패키지 설치DNS 서버 구축을 위해 bind 패키지를 설치한다.[root@localhost ~]# yum install -y bindLoaded plugins: fastestmirrorDetermining fastest mirrorsbase: [mirror.kakao.com]()extras: [mirror.kakao.com]()updates: [mirror.kakao.com]()base | 3.6 kB 00:00:00extras | 2.9 kB 00:00:00updates | 2.9 kB 00:00:00(1/2): extras/7/x86_64/primary_db | 250 kB 00:00:00(..
리눅스에서 umask 명령어로 생성하는 파일이나 디렉토리의 권한을 조정할 수가 있는데 현재 설정되어있는 umask값은 umask명령어로 아래와 같이 확인이 가능하다.[root@localhost /]# umask0022 0022이면 앞에있는 0을 제거하여 022로 보면 되는데 리눅스에서 파일의 기본 권한은 666 디렉토리의 기본 권한은 777이다. umsk는 위의 기본 권한에서 빼는 역활을 한다.파일 : 666 - 022 = 644디렉토리 : 777 - 022 = 755 그래서 umask가 022로 되어있는 상태에서 파일이나 디렉토리를 생성하면 아래와 같이 권한이 부여된 상태에서 생성된다.[root@localhost jeygeon]# ls -trl합계 0-rw-r--r--. 1 root root 0 4월..
문제 : https://www.acmicpc.net/problem/24511 문제 풀이 : https://github.com/jeygeon/baekjoon/blob/master/src/DataStructures/_24511/Main.java 일단 이 문제는 문제를 이해하는 것 부터가 어려웠다... 도저히 문제만 읽었을 때는 이해가 안가서 질문 게시판을 보니 어떤 한 분이 문제 해석을 정리해주셨는데 보니까 바로 이해가 됬다. 아래 링크 참고. https://www.acmicpc.net/board/view/137617 문제를 알고나니 그렇게 코드를 작성하는데 있어서 크게 어려운 부분은 없었다.. 하지만 답은 맞았지만 계속 나오는 시간 초과... 계속 수정을 하면서 제출을 했지만 중간에 잘못 제출해서 컴파일 ..
문제 : https://www.acmicpc.net/problem/2775 문제 풀이 : https://github.com/jeygeon/baekjoon/blob/master/src/DataStructures/_2775/Main.java 이번 문제는 아파트의 특정 호수에 살고있는 사람들의 수를 구하는 문제이다. 문제를 요약하면 위와 같이 설명이 되고 이 아파트는 0층부터 존재한다. 2층의 3호에 살고 있는 사람들의 수를 구하기 위해서는 1층의 1, 2, 3호에 살고 있는 사람들의 수를 모두 더하면 된다. 그래서 나는 처음 이 문제를 보고 저렇게 배치도를 그려보니 그냥 자연스럽게 배열이 생각났고, 먼저 0층의 배열을 생성한 뒤 구하고자 하는 층의 호수까지 for문을 돌려서 사람들의 수를 계속 더해나가는 방..