전체 글 51

Spring Security 인증 절차 & 핵심 인터페이스

개요 이 포스팅을 통해 스프링 시큐리티 인증 처리의 핵심 인터페이스와 메서드들을 살펴보고, 메서드 호출 순서를 따라가면서 인증 처리의 동작 순서를 살펴보고자 합니다. 각 인터페이스의 핵심 메서드와 수행 로직을 표로 추출해 보았습니다. Spring Security 기본 제공 로그인 흐름AbstractAuthenticationProcessingFilter의 attemptAuthentication 메서드가 호출된다.폼에 입력된 username과 password를 각각 UsernamePasswordAuthenticationToken의 principal과 credential에 담아 생성한다. (인증처리 전의 토큰이라고 하겠다.)AuthenticationManager의 authenticate 메서드를..

개발/Spring 2024.03.23

[Github] Pull Request 템플릿 만들기

PR 템플릿 생성하기 PR 템플릿은 반드시 default 브랜치에 생성해야 합니다. 다른 브랜치에 생성할 경우 사용할 수 없습니다. 파일 저장 경로는 다음 세가지 중 하나로 설정하면 되며, 파일 명은 대소문자를 구분하지 않습니다. docs/pull_request_template.md .github/pull_request_template.md pull_request_template.md (루트) PR에 들어가면 좋은 내용 이슈 넘버: 어떤 이슈에 대한 PR인지 PR 유형: 기능 추가, 버그 수정, 빌드 파일 관련, 질문 등 주요 변경 사항: 변경 사항에 대한 간단한 브리핑 리뷰 시 유의 사항: 팀원들이 코드리뷰할 때 주의 깊게 봐야할 포인트 다음은 참고하기 좋은 PR 예시입니다. https://axolo...

개발/Git 2024.03.19

S3와 CloudFront로 정적 웹사이트 HTTPS로 호스팅하기

개요 이력서를 하나의 웹사이트로 만들어보고 싶다는 생각이 들어 AWS S3와 CloudFront로 HTTPS 호스팅 해보았습니다. 목차 S3 버킷 생성 Route53으로 도메인 등록 및 HTTPS 적용 CloudFront 배포 생성, S3 버킷 정책 편집 Route53에서 A 레코드 설정으로 CloudFront와 도메인 연결 추가 설정 1. S3 버킷 생성 S3 버킷은 다음 두가지를 체크했습니다. 퍼블릭 액세스를 비허용, 그리고 CloudFront로 부터의 접근을 허용하는 버킷 정책. 퍼블릭 액세스 차단은 생성할 때 설정하고, CloudFront 접근 허용은 배포 생성 후 설정했습니다. 버킷을 생성할 때 주의할 사항은 정적 웹 호스팅 비허용입니다. CloudFront를 통해 S3리소스에 접근하는 이 구성..

카테고리 없음 2024.03.17

[프로젝트] 순수 자바로 웹 애플리케이션 서버(WAS) 구현하기

1. 개요 프로젝트 진행 동기 저는 여느 때와 다름없이 스프링을 학습하고 있었습니다. 그런데 문득 의문이 들었습니다. 어째서 아무 설정을 건드리지 않고도 프로젝트가 기본적으로 TCP/IP 계층의 8080 port를 사용하고 있는 것인지 Application 계층의 HTTP 메시지를 스펙을 따라 직접 파싱 하지 않고도 개발을 편리하게 할 수 있는지 위 궁금증을 해결하기 위해 구글링을 하던 중 Servlet 이라는 기술을 알게 되었습니다. 서블릿은 HTTP 요청 메시지를 읽어 들여 스펙에 맞게 파싱 하고, 응답을 내려줄 때도 스펙에 맞게 알아서 HTTP 응답 메시지를 작성해 준다는 것이었습니다. 그래서 서블릿 없이 순수한 자바로 WAS를 구현해보려 합니다. 프로젝트 달성 목표 개발한 웹 어플리케이션 서버(W..

개발/프로젝트 2024.02.20

[이슈 해결] Exception in thread "main" java.net.BindException: Address already in use: bind

1. 발생 이슈 자바 프로그램을 개발하다 실행하려 했더니 갑자기 java.net.BindException이 발생했다. 2. 문제 원인 예외 발생의 원인은 바로 이미 java 프로세스가 실행 중이었는데 추가로 실행하려 했기 때문이었다. 작업관리자에서 OpenJDK Platform binary 프로세스를 종료 후 다시 실행하니 제대로 동작했다.

백준 2164 카드2 - Java 자바 문제 풀이

문제 해설 맨 위의 카드를 제거하고, 새로운 맨 위의 카드를 맨 아래로 삽입하면 됩니다. 카드의 제거가 위쪽, 카드의 삽입이 아래쪽에서 이뤄지므로 큐 자료구조를 활용할 수 있습니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 q Queue 큐 N int 카드 갯수 해결 로직 N을 입력 받는다. queue에 차례대로 1부터 N까지 삽입한다. queue 사이즈가 1이 될 때 까지 다음을 반복한다. 맨 위의 카드를 제거한다. 맨 위의 카드를 제거하고 다시 맨 아래에 삽입한다. 마지막으로 남은 숫자를 출력한다. 풀이 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import ja..

백준 10845 큐 - Java 자바 문제 풀이

문제 해설 큐 자료구조를 직접 구현하면 되는 문제입니다. 자바 기본 제공 큐를 사용해도 됩니다. 이 글에서는 배열로 직접 큐를 구현하였습니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 N int 명령어 수 command String 명령어 queue int[] 큐 배열 front int 0 큐의 머리를 가리키는 포인터 back int 0 큐의 끝을 가리키는 포인터 해결 로직 N을 입력받는다. N번 동안 명령어를 입력받는다. 명령어에 따라 기능을 분기처리 한다. 풀이 코드 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; im..

백준 2493 탑 - Java 자바 문제 풀이

문제 해설 n개의 탑이 일직선으로 세워져 있습니다. 이 탑들의 꼭대기에서는 무조건 왼쪽 방향으로 레이저 빔이 나가는데, 그 신호를 수신하는 건 가장 먼저 레이저를 맞는 단 하나의 탑입니다. 각 탑에서 쏘는 레이저를 몇 번째 탑이 맞는지 구하는 문제입니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 N int 탑의 개수 stack Stack Tower 객체를 저장하는 스택 X Tower { int height; int index; } Tower 클래스, 각 탑의 높이와 인덱스(순서)를 갖는다. 해결 로직 주어진 탑의 개수 N의 범위가 1 이상 500000 이하인데 1.5초 시간제한을 가지므로, O(n) 시간 안으로 해결해야 합니다. (1억 번 연산 ≒ 1초) 따라서 각 탑의 높이를 배열에 저장하고..

백준 1874 스택 수열 - Java 자바 문제 풀이

문제 해설 1부터 n까지의 수를 차례로 스택에 넣었다가 뺌으로써 문제에서 주는 임의의 수열을 만들 수 있다면, 스택에 숫자를 넣고 빼는 순서를, 아니라면 NO를 출력하는 문제입니다. 수를 오름차순으로 차례로 넣고 있기 때문에 스택의 가장 윗부분 숫자 보다 크거나 같은 숫자는 뺄 수 있지만, 작은 숫자는 빼낼 수 없습니다. 따라서 NO를 출력해야 합니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 n int 첫째 줄에 주어지는 정수 num int n번에 걸쳐 입력 받을 숫자(수열의 숫자) cur int 1 1부터 스택에 들어갈 오름차순 숫자 arr int[] 부른 숫자를 저장할 배열 pos int 0 배열(스택)의 마지막 인덱스를 가리키는 변수 해결 로직 n을 입력 받는다. 수열의 숫자 num을 ..

백준 10773 제로 - Java 자바 문제풀이

문제 해설 문제에서 주어지는 정수들을 모두 더한 합을 구하는 문제입니다. 단, 0이 입력 될 때 마다 가장 마지막에 불렀던 숫자를 합계에서 빼야 합니다. 문제 풀이 계획 필요 변수 변수명 타입 초기값 설명 K int 첫째 줄에 주어지는 정수 sum int 0 부른 숫자를 모두 더한 합 (문제에서 수의 합이 2^31-1 보다 작다고 했으므로 int 형을 사용해도 된다.) arr int[] 부른 숫자를 저장할 배열 pos int 0 배열의 마지막 인덱스를 가리키는 변수 해결 로직 K를 입력 받는다. K 번 만큼 숫자를 입력 받는다. 0이라면 arr[--pos] (배열의 가장 마지막 인덱스 원소)를 sum에서 뺀다. 0이 아니라면 arr[pos]에 숫자를 삽입하고 sum에 더한다. sum을 출력한다. 풀이 코..