전체 글 148

[Spring Security] 스프링 시큐리티 내부 구조 5 -SecurityContextHolder에 대하여

📝 오늘 학습한 내용SecurityContextHolder의 내부 구조threadlocal 방식에 대하여SecurityContext의 생명 주기 💡 새롭게 배운 내용SecurityContextHolder의 내부 구조 SecurityFilterChain 내부에 존재한 각각의 필터에서,시큐리티와 관련한 작업 후상태에 대한 정보를 저장하는 저장소가 있어야 한다. 인가 필터가 작업을 하려면 유저의 ROLE 정보가 필요한데,앞단의 필터에서 유저에게 ROLE값을 부여한 결과를 인가 필터까지 공유해야 확인할 수 있다. 이걸 저장하는 곳이 바로 SecurityContextHolder의 Authentication 객체이다. Authentication 객체는 SecurityContext에 포함되어 관리되며 ..

[스프링] BaseException과 GlobalExceptionHandler 코드 뜯어보기

팀원의 코드를 리뷰하다가문득 BaseException과 GlobalExceptionHandler 코드를 그냥 복붙만 하고 있던 나를 발견했다.. 전체적인 흐름을 다시 다잡고자 정리하게 되었다!! BaseExceptionpackage com.tavemakers.surf.global.common.exception;import lombok.Getter;import org.springframework.http.HttpStatus;@Getterpublic abstract class BaseException extends RuntimeException { private final HttpStatus status; public BaseException(final HttpStatus status, fina..

[백준 1546] 평균 - Java

1. 문제 정보 문제 출처: 백준문제 번호: 1546난이도: 브론즈1문제 링크: https://www.acmicpc.net/problem/1546 2. 문제 요약 3. 풀이 상세과목 개수 N개를 입력 받는다각각의 점수를 문자열로 받고, " " 공백 기준으로 구분하여 저장문자열 형태로 받은 점수를 각각 int 형으로 치환하여 배열에 저장한다.반복문을 통해 최대값과 점수의 총합을 구한다.점수 총합 / 점수 최대값*100 / N을 float형으로 구한다출력 4. 코드첫번째 코드import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException {BufferedReade..

[Spring Security] 스프링 시큐리티 내부 구조 4 - SeurityFilterChain 구조

📝 오늘 학습한 내용SecurityFilterChain 로직 복습SecurityFilterChain에 등록된 필터 확인(어노테이션을 활용하여)스프링 시큐리티가 제공하는 기본적인 필터 간단하게 확인SecurityFilterChain에 필터 활성화 및 비활성화SecurityFilterChain에 커스텀 필터 등록 💡 새롭게 배운 내용SecurityFilterChain 하나의 SecurityFilterChain은 여러개의 필터를 가지고 있고,이는 각각 로그인, 로그아웃, 인가 등과 같은 하나의 로직 수행의 시작점이 된다. 좀 더 자세하게 설명하자면,이 필터들에서 로그인, 로그아웃과 같은 로직을 수행하는 것이 아닌시작점이 되어 시큐리티와 관련된 빈이 설정되어있는 로직단으로 요청을 보내게 된다. 하지만 어..

[Spring Security] 스프링 시큐리티 내부 구조 3 - SecurityFilterChain 등록

📝 오늘 학습한 내용SecurityConfig에 커스텀 SecurityFilterChain 등록멀티 SecurityFilterChain 경우 확인해야할 사항들특정 요청이 필터를 거치지 않도록 하는 방법 💡 새롭게 배운 내용SecurityConfig에 커스텀 SecurityFilterChain 등록기존 포스트에서 작성했던 것처럼클라이언트의 요청을 DelegatingFilterProxy가 가로채고, 이를 FilterChainProxy에 위임한다. FilterChainProxy은 해당 요청 경로를 보고 이에 알맞는 SecurityFilterChain에 배정해준다. 이때 SecurityFilterChain은 시큐리티 의존성을 추가하게 되면 기본적으로 하나의 인증/인가를 처리하는 체인 1개가 설정된다. 그..

[Spring Security] 스프링 시큐리티 내부 구조 2 - DelegatingFilterProxy와 FilterChainProxy 살펴보기

📝 오늘 학습한 내용DelegatingFilterProxy 코드 내부 살펴보기FilterChainProxy 코드 내부 살펴보기 💡 새롭게 배운 내용DelegatingFilterProxy 내부 코드 확인하기 해당 코드를 확인해보면 DelegatingFilterProxy가 생성되면서 targetBeanName으로 "springSecurityFilterChain"이 설정되어있는 것을 알 수 있다. Q. 어 근데 FilterChainProxy로 요청을 전달하는거 아니였나? 어디갔지?FilterChainProxy는 사라진 것이 아니라, "springSecurityFilterChain"이라는 이름으로 빈 등록이 되어 존재하고 있으며, DelegatingFilterProxy가 그 빈을 찾아 역할을 위임하고 ..

[Spring Security] 스프링 시큐리티 내부 구조 1 - 전체적인 흐름 파악

📝 오늘 학습한 내용시큐리티 의존성 여부에 따른 사용자 요청의 흐름 차이 💡 새롭게 배운 내용시큐리티 의존성이 없는 경우시큐리티 의존성이 추가 되지 않은 경우,클라이언트의 요청은 WAS의 필터들을 통과한 뒤 스프링 컨테이너의 컨트롤러에 도달한다. 시큐리티 의존성이 있는 경우WAS 필터들 사이에 DelegatingFilterProxy 라는 필터를 하나 추가한다.클라이언트 요청이 들어오면 WAS 필터들을 거치다가 DelegatingFilterProxy에서 요청을 가로채스프링 컨테이너 내부에 위치한 시큐리티 로직으로 보낸다. 시큐리티 로직을 마친 후 다시 WAS의 다음 필터로 복귀한다. DelegatingFilterProxy는 요청을 직접 처리하는 것이 아닌,요청을 스프링 컨테이너 내의 Filter..

[CS] WAS, Tomcat에 대하여

📝 오늘 학습한 내용WAS의 개념 학습Tomcat 개념 학습Tomcat 구성 요소 학습 💡 새롭게 배운 내용 WAS란?클라이언트의 요청에 따라 동적인 콘텐츠를 제공해주는 Application Server이다.웹컨테이너나 서블릿 컨테이너라고도 불린다. WAS의 개념을 학습하기 위해 많은 블로그를 찾아보았다. 근데 어느 곳에서는 WAS가 웹서버 + 웹 컨테이너라고 설명하는 곳이 있고,또 어떤 곳에서는 WAS와 웹서버가 별도로 분리되어있는 것으로 설명되어있어 헷갈렸다. Q. 그래서 WAS가 웹 컨테이너라는 건가? 아니면 웹 서버 + 웹 컨테이너를 합친거라는거야?A. WAS는 웹 서버 + 웹컨테이너를 합친 것이다. 그렇다면 왜 몇몇의 블로그에서는 웹서버를 WAS 앞에 그려서 설명하고 있을까?Q. 즉..

✏️ CS/Web 2025.08.29

2025 제2회 전국대학 소프트웨어 성과 공유포럼 후기 - InningLog 이닝로그 프로젝트 / 최우수상, 국회의원상(대상), 우수상 수상

3개월 넘게 애정을 쏟아부은 프로젝트, 이닝로그(Inning Log)를 가지고 전국대학 소프트웨어 성과 공유포럼 2회에 참가하여최우수상, 국회의원상(대상), 인기상을 수상하였습니다. 결과를 떠나, 실제 출시를 목표로 긴 호흡의 프로젝트를 진행하며 겪었던 성장통과 값진 경험들을 기록으로 남겨보고자 합니다. 이번 프로젝트에서 팀장을 맡아 4월 16일에 팀빌딩을 완료하였습니다.기획 1, 디자인 1, 프론트 1, 백엔드 1로 구성되어있으며,현재 제가 소속되어 있는 TAVE 동아리에서 팀원을 모집하였습니다! ⚾️ 모든 것은 '왜 내 직관 기록은 다 사라질까?'에서 시작됐다"작년에 야구장 몇 번 갔지?", "그때 그 자리 시야 좋았나?"야구를 좋아하는 분들이라면 누구나 한 번쯤 가져봤을 의문. 저희 역시 그랬습니..