전체 글 97

[SpringBoot] 스프링 시큐리티 활용하기 2편 - 세션 관리와 권한별 접근 제어

지난 글에서 스프링 시큐리티의 기본 개념과 설정을 다뤘다면, 이번엔 세션을 어떻게 관리하는지와 사용자 권한(Role)에 따라 접근을 제어하는 방법을 코드와 함께 정리했습니다.이번 글에서 다룰 것지난 글에서는 스프링 시큐리티가 필터 체인 위에서 인증을 처리한다는 것과, 가장 기본적인 로그인 설정을 살펴봤습니다. 이번에는 조금 더 실무에 가까운 두 가지, 세션 관리와 권한별 접근 제어를 다뤄보겠습니다.1. 세션 관리스프링 시큐리티는 서블릿 컨테이너(톰캣 등)가 제공하는 HttpSession을 그대로 가져다가, 그 안에 인증 정보를 저장해두는 방식으로 동작합니다. 이 세션을 어떻게 쓸지는 sessionManagement()로 설정합니다. javahttp.sessionManagement(session -> se..

DEV/SpringBoot 2026.09.09

[Spring Boot] 스프링 시큐리티(Spring Security) 개념과 기본 사용법

스프링 시큐리티가 무엇이고 어떤 흐름으로 동작하는지, 핵심 개념과 가장 기본적인 설정 코드를 간단히 정리했습니다.스프링 시큐리티란Spring Security는 인증(Authentication, 너는 누구냐)과 인가(Authorization, 너는 이걸 할 수 있냐)를 처리해주는 스프링 진영의 보안 프레임워크입니다. 로그인 처리, 세션 관리, 권한별 접근 제어 같은 걸 직접 다 구현하지 않고, 필터 체인 구조 위에 필요한 설정만 얹어서 쓸 수 있게 해줍니다.핵심 개념 3가지SecurityFilterChain: 요청이 컨트롤러에 도달하기 전에 거쳐가는 필터들의 묶음입니다. "어떤 URL은 로그인 없이 허용, 어떤 URL은 인증 필요" 같은 규칙이 여기서 정해집니다.AuthenticationManager: 아..

DEV/SpringBoot 2026.09.08

[SSO 프로젝트] JWT 토큰 생성기 직접 만들어보기 - JwtTokenProvider

JWT 기반 SSO(통합 로그인) 프로젝트를 진행하면서 토큰 발급/검증 로직을 직접 구현해봤습니다. jjwt 라이브러리로 만든 JwtTokenProvider 클래스를 간단히 정리했습니다.* Single Sign-On(싱글 사인온)JWT란JWT(JSON Web Token)는 헤더, 페이로드, 서명을 점(.)으로 이어붙인 문자열입니다. 서버가 로그인 성공 시 Access Token을 발급하면, 클라이언트는 이후 요청마다 이 토큰을 전송하고, 서버는 토큰의 서명을 검증하여 토큰의 유효성을 확인하고 사용자를 식별합니다.코드 javapublic class JwtTokenProvider { private final SecretKey secretKey; private final long validityMs..

DEV/SpringBoot 2026.09.07

[프로그래머스 MySQL] 연도별 대장균 크기의 편차 구하기 - SUM, MAX, MIN

프로그래머스 SQL 고득점 Kit "연도별 대장균 크기의 편차 구하기" 문제 풀이입니다. 서브쿼리로 연도별 최댓값을 먼저 구하고 원본 테이블과 JOIN해서 편차를 계산하는 방법과, 다중 정렬(ORDER BY)까지 정리했습니다.문제 설명대장균 배양 정보를 담은 ECOLI_DATA 테이블에서, 분화된 연도별 대장균 크기의 편차를 구하는 문제입니다. 편차는 "해당 연도에 분화된 대장균 중 가장 큰 크기 - 각 대장균의 크기"로 정의됩니다.출력해야 하는 항목은 분화된 연도(YEAR), 연도별 편차(YEAR_DEV), 대장균 ID(ID)이고, 결과는 연도 오름차순으로 정렬하되 연도가 같으면 편차 오름차순으로 정렬해야 합니다.테이블 구조ECOLI_DATA: ID(개체 ID), PARENT_ID(부모 개체 ID, 최..

[프로그래머스 MySQL] 조건에 부합하는 중고거래 댓글 조회하기 - SELECT

프로그래머스 SQL 고득점 Kit "조건에 부합하는 중고거래 댓글 조회하기" 문제 풀이입니다. USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블을 JOIN해서 특정 연월에 작성된 게시글의 댓글을 조회하고, 다중 정렬 기준(ORDER BY)까지 적용하는 방법을 정리했습니다.포스트 본문문제 설명중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과 댓글 정보를 담은 USED_GOODS_REPLY 테이블에서, 2022년 10월에 작성된 게시글에 달린 댓글 내역을 조회하는 문제입니다.출력해야 하는 항목은 게시글 제목(TITLE), 게시글 ID(BOARD_ID), 댓글 ID(REPLY_ID), 댓글 작성자 ID(WRITER_ID), 댓글 내용(CONTENTS), 댓글 작성일(CRE..

[프로그래머스 MySQL] 취소되지 않은 진료 예약 조회하기

프로그래머스 SQL 고득점 Kit "취소되지 않은 진료 예약 조회하기" 문제 풀이입니다. PATIENT, DOCTOR, APPOINTMENT 세 테이블을 JOIN해서 특정 날짜·특정 진료과의 취소되지 않은 예약만 조회하는 문제로, TIMESTAMP에서 날짜만 비교하는 방법과 정렬까지 정리했습니다.문제 설명환자 정보를 담은 PATIENT 테이블, 의사 정보를 담은 DOCTOR 테이블, 진료 예약목록을 담은 APPOINTMENT 테이블에서 2022년 4월 13일에 취소되지 않은 흉부외과(CS) 진료 예약 내역을 조회하는 문제입니다.출력해야 하는 항목은 진료예약번호(APNT_NO), 환자이름(PT_NAME), 환자번호(PT_NO), 진료과코드(MCDP_CD), 의사이름(DR_NAME), 진료예약일시(APNT_..

[프로그래머스 코딩 기초 트레이닝] 문자 개수 세기 - Java 풀이

프로그래머스 코딩 기초 트레이닝 "문자 개수 세기" 문제를 Java로 풀어봤습니다. 문자열에 등장하는 알파벳 A~Z, a~z 각각의 개수를 길이 52짜리 배열로 반환하는 문제로, char와 아스키코드를 이용한 인덱스 계산법을 정리했습니다.포스트 본문문제 설명알파벳 대소문자로만 이루어진 문자열 my_string이 주어질 때, my_string에서 'A'의 개수, 'B'의 개수, ..., 'Z'의 개수, 그리고 'a'의 개수, 'b'의 개수, ..., 'z'의 개수를 순서대로 담은 길이 52의 정수 배열을 반환하는 문제입니다.제한사항1 ≤ my_string의 길이 ≤ 1,000입출력 예my_string result"Programmers"[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ..

[Spring Boot] ZXing으로 QR 코드 생성 API 만들기

개발 환경항목버전Java17Spring Boot4.1.1Spring Framework7.0.9Gradle9.7.1QR 라이브러리ZXing 3.5.3이번 포스팅은 Spring Boot로 QR 코드를 생성해서 이미지로 응답해주는 간단한 API를 만들어본 기록입니다. 텍스트나 URL을 입력하면 QR 코드 이미지(PNG)를 생성해서 돌려주는 구조입니다.1. build.gradle 의존성dependencies { // QR 코드 라이브러리 implementation 'com.google.zxing:core:3.5.3' implementation 'com.google.zxing:javase:3.5.3'}QR 코드 생성을 위해 필요한 의존성은 zxing의 core, javase 두 개입니다.core:..

DEV/SpringBoot 2026.08.31

[프로그래머스 코딩테스트 입문] 등수 매기기 - Java 풀이

프로그래머스 코딩테스트 입문 "등수 매기기" 문제를 Java로 풀어봤습니다. 영어·수학 점수의 평균으로 학생들의 등수를 매기는 문제로, 이중 반복문을 이용한 직관적인 풀이로 정리했습니다. 문제 설명영어 점수와 수학 점수의 평균 점수를 기준으로 학생들의 등수를 매기는 문제입니다. 영어 점수와 수학 점수를 담은 2차원 정수 배열 score가 주어질 때, 평균 점수를 기준으로 매긴 등수를 배열로 반환하면 됩니다.제한사항0 ≤ score[0], score[1] ≤ 1001 ≤ score의 길이 ≤ 10score의 원소 길이는 2score는 중복된 원소를 갖지 않음입출력 예scoreresult[[80, 70], [90, 50], [40, 70], [50, 80]][1, 2, 4, 3][[80, 70], [70, ..

[기타] 티스토리 사이드바에 듀오링고 스트릭 위젯 추가하기

티스토리 사이드바에 듀오링고 스트릭 위젯 추가하기블로그 사이드바에 깃허브 잔디처럼 실시간으로 갱신되는 정보를 띄워두면 은근히 재미있습니다. 이번엔 듀오링고 스트릭을 티스토리 사이드바에 박아 넣어봤는데, 생각보다 간단해서 방법을 공유합니다.준비물: Duolingo Stats Card듀오링고는 공식적으로 웹 임베드용 위젯을 제공하지 않습니다 (앱 홈 화면 위젯만 지원). 대신 커뮤니티에서 만든 오픈소스 서비스인 Duolingo Stats Card를 사용하면 사용자명만으로 실시간 스트릭 카드를 SVG 이미지로 받아올 수 있습니다.기본 사용법은 이미지 태그 하나면 끝입니다. html테마도 15가지 중 골라서 붙일 수 있습니다 (light, dark, dracula, tokyonight, mint 등). html..

일상 2026.08.29