전체 글 257

[Spring Security] UserDetailsService

로그인 ~ 세션 생성 회원가입을 하고 유저의 정보를 DB에 저장하고 스프링 시큐리티를 통해 로그인을 했을 때어떤 방식으로 DB에서 유저 정보를 조회하고 활용할까?  1. 로그인 요청사용자가 로그인 폼에 사용자 이름과 암호를 입력하고 제출 2. UserDetailsService 호출SpringSecurity는 UserDetailsService의 loadUserByUsername 메서드를 호출하여 사용자 이름을 기반으로 사용자의 UserDetails 객체를 조회한다. public interface UserDetailsService { UserDetails loadUserByUsername(String username) throws UsernameNotFoundException;}@Beanpublic User..

[Spring Security] Spring Session JDBC

Spring Session JDBC란?Spring Session JDBC는 Spring 애플리케이션에서 세션 관리를 데이터베이스를 이용해 수행할 수 있도록 지원하는 라이브러리이다. 기본적으로 HTTP 세션은 서버의 메모리에 저장되지만, Spring Session JDBC를 사용하면 세션을 데이터베이스에 저장하여 여러 가지 이점을 얻을 수 있다.  Spring Session JDBC 의존성 추가 // 스프링 Session JDBCimplementation 'org.springframework.session:spring-session-jdbc' Spring Session 동작 확인 현재 나는 application.yaml 설정 파일에 h2 데이터베이스 관련 설정을 해두었다.  이렇게 세션 관련 테이블이 자동..

[Spring Security] 시큐리티 폼 로그인 커스텀 설정

PasswordEncorder@Beanpublic PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder();} 비밀번호 암호화에 사용할 PasswordEncorder 빈 정의 PasswordEncorder 인터페이스는 14개의 구현체를 제공한다. BCryptPasswordEncorder는 BCrypt 알고리즘을 사용한다. 예전에 스프링 시큐리티 비밀번호 암호화 모듈인 Crypto와 그중에서 ScyptEncorder를 정리했는데 참고하면 좋다. https://20240228.tistory.com/160 비밀번호 암호화 적용하기(Spring Security Crypto)https://20240228.tistory.com/153 비밀번호..

MSA 개념 정리

Scale-up & Scale-out인프라를 업그레이드 하는 방법 2가지 스케일 업(Scale-up), 스케일 아웃(Scale-out) 스케일 업(Scale-up)기존의 서버를 보다 높은 사양으로 업그레이드하는 것을 의미 하드웨어: 성능, 용량 증강을 목적으로 디스크 추가나 CPU, 메모리를 업그레이드시키는 것을 말한다. 소포트웨어: AWS의 EC2 인스턴스 사양을 micro → (small, medium)등으로 업그레이드 이처럼 하나의 서버의 능력을 증강하기 때문에 수직 스케일링(vertical scaling)이라고도 한다.  스케일 아웃(Scale-out)스케일 아웃(Scale-out)은 장비를 추가해서 확장하는 방식기존 서버만으로 용량이나 성능의 한계에 도달했을 때, 비슷한 사양의 서버를 추가로 연..

CSRF? + Spring Security 기본 설정

CSRF란 무엇인가? CSRF(Cross-Site Request Forgery, 크로스 사이트 요청 위조)웹 애플리케이션의 보안 취약점을 악용하여, 사용자가 원하지 않는 동작을 수행하게 만드는 공격 기법 중 하나이다.사용자가 웹사이트에 로그인한 상태에서 사용자의 권한을 악용해 공격자가 의도한 요청을 실행하도록 유도한다.  ex)특정 페이지에 방문할 때 저절로 로그아웃 or 게시글이 써지는 현상은행과 같은 사이트에서 다른 사람에게 송금하는 행동을 넣는 등 상황에 따라 크게 악용될 수 있는 심각한 공격이다. CSRF 공격의 작동 원리 1. 인증된 세션 사용자가 웹 애플리케이션에 로그인하면, 서버는 사용자에게 세션을 유지하기 위한 쿠키를 발급한다. 해당 쿠키는 사용자의 브라우저에 저장, 사용자가 해당 애플리케..

[MySQL] 프로그래머스 평균 일일 대여 요금 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/151136 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr코딩테스트 연습 > SELECT > 평균 일일 대여 요금 구하기  문제 분석 문제 난이도: LEVEL1  CAR_RENTAL_COMPANY_CAR 테이블에서 자동차 종류가 'SUV'인 자동차들의 평균 일일 대여 요금을 출력하는 SQL문을 작성해주세요. 이때 평균 일일 대여 요금은 소수 첫 번째 자리에서 반올림하고, 컬럼명은 AVERAGE_FEE 로 지정해주세요. 자동차 종류가 'SUV'인 자동차들W..

비밀번호 암호화 적용하기(Spring Security Crypto)

https://20240228.tistory.com/153 비밀번호 암호화목차암호화 종류단방향 암호화 방법단방향 암호화 문제점 개선 (+ Salt)단방향 암호화 문제점 개선 (+ Key Stretching)양방향 암호화 특징 참고 자료암호화 종류 암호화를 하는 이유는 해당20240228.tistory.com 최근에 비밀번호 암호화에 대해서 공부했었다. 그중에 단방향 암호화 라이브러리인 Spring Security Crypto를 사용해서 프로젝트에 적용해 보겠다.  라이브러리 Dependency 찾기 Maven Repository : Spring Security Crypto 검색   build.gradle  특정 버전 명시 Odependencies { implementation group: 'org.spr..

[MySQL] 프로그래머스 자동차 대여 기록에서 장기/단기 대여 구분하기

https://school.programmers.co.kr/learn/courses/30/lessons/151138 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr코딩테스트 연습 > SELECT > 자동차 대여 기록에서 장기/단기 대여 구분하기 문제 분석 CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는..

[MySQL] 프로그래머스 특정 옵션이 포함된 자동차 리스트 구하기

https://school.programmers.co.kr/learn/courses/30/lessons/157343 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr코딩테스트 연습 > SELECT > 특정 옵션이 포함된 자동차 리스트 구하기 문제 분석CAR_RENTAL_COMPANY_CAR 테이블에서 '네비게이션' 옵션이 포함된 자동차 리스트를 출력하는 SQL문을 작성해주세요. 결과는 자동차 ID를 기준으로 내림차순 정렬해주세요.  정답 코드SELECT CAR_ID, CAR_TYPE, DAILY_FEE, OPTIONSFROM CAR_RENTAL_COMPANY_C..