[Spring] Spring Security의 기초 이해
·
Spring
Spring Security란?Spring Security란 Spring 기반 애플리케이션의 인증과 인가를 담당하는 보안 프레임워크다.Filter 레이어에서 동작하기 때문에, 요청이 컨트롤러에 도달하기 전에 보안 처리가 완료된다.개발자가 직접 보안 로직을 작성하지 않아도, 체계적인 보안 옵션을 제공해준다.필요한 이유웹 애플리케이션을 만들다보면 비로그인과 로그인 회원의 기능(마이페이지 등), 권한에 따른 기능(관리자 전용 기능)들이 나누어지기 마련이다. 만약 이러한 보안 코드를 직접 구현한다면 다음과 같은 코드가 필요할 것이다.@GetMapping("/admin")public String adminPage(HttpSession session) { User user = (User) session.get..
[Spring Boot] JPA, Spring Data JPA, QueryDSL의 이해
·
Spring
JDBC(Java Database Connectivity)JPA를 이해하기 위해서는 JPA가 나오게 된 배경부터 이해해야 한다. 이를 이해하기 위해서는 먼저 JDBC에 대해서 알아야 한다.JDBC는 자바에서 제공하는 API로 DB에 접근하는 가장 기본적인 방법이며, 이는 DB에 연결하고 SQL을 직접 작성하고 실행하는 방식이다. 예시 코드다음 코드는 JDBC를 활용한 회원 조회 코드이다. 회원 하나를 조회하는 코드임에도 DB 연결, SQl 작성 등 반복되는 코드가 매우 많다. 테이블이 30개라면 이 패턴이 30번 반복된다. Connection conn = dataSource.getConnection();PreparedStatement ps = conn.prepareStatement("SELECT * FR..
[Spring Boot] 중복 로그인 차단 정리(스케일업, 스케일 아웃)
·
Spring
Collections.synchronizedSet()중복 로그인을 차단하기 위해 현재 로그인된 사용자의 ID를 메모리에 보관하는 방식을 많이 사용하는데, 대표적인 구현이 Collections.synchronizedSet()을 사용하는 것이였고, 나 또한 동일하게 사용했다. 다음 코드는 내가 실제로 활용한 코드이다.@Componentpublic class LoginUserRegistry { private final Set loggedInUsers = Collections.synchronizedSet(new HashSet()); public boolean isLoggedIn(String userId) { return loggedInUsers.contains(userId); } ..
[Spring Boot] 테스트의 이해와 @Transactional 동작 원리
·
Spring
테스트란?작성한 코드가 의도대로 작동하는지 확인하고, 예상치 못한 문제를 방지하기 위해 코드의 기능 및 단위를 검증하는 과정이다.테스트는 왜 필요한걸까? 코드를 작성하고 직접 실행해서 확인하면 되지 않을까? 할 수 있지만 해당 방식은 한계가 있다. 💡 기능이 늘어날수록 모든 경우를 손으로 테스트하는 것은 불가능에 가까워지고, 어느 한 부분을 수정했을 때 다른 부분이 버그가 생길 수 있다. 이러한 문제를 해결하기 위해 테스트 코드를 작성이 필요하다.단위 테스트(Unit Test)단위 테스트는 하나의 클래스 또는 메서드 단위를 외부 의존성 없이 독립적으로 검증하는 테스트이다. 외부 의존성이란 DB, 네트워크, 파일 시스템 등을 뜻하며, 이들은 Mock이나 Stub으로 대체해서 테스트 로직에만 집중한다.@T..
[Spring] - AOP(관점 지향 프로그래밍)의 이해
·
Spring
AOP(Aspect Oriented Programming)💡 AOP란 관점 지향 프로그래밍이란 의미로 프록시를 사용하여 핵심 비즈니스 로직과 공통 부가 기능을 분리하는 것 ↳ 핵심 로직(주문, 회원가입 등) / 부가 기능(시간 측정, 트랜잭션 관리 등)🎈 OOP(객체 지향 프로그래밍) - 객체를 기준으로 기능을 모듈화했다면, AOP(관점 지향 프로그래밍) - 여러 객체에 공통적으로 적용되는 기능(횡단 관심사)을 기준으로 모듈화 한 것, ↳ 즉 여러 곳에 흩어져 있는 공통 코드를 한 곳으로 모아서 관리하는 방식*횡단 관심사(Cross-cutting Concern) : 여러 클래스에서 반복적으로 나타나는 공통 기능(로깅, 트랜잭션 처리, 성능 측정, 보안 체크 등)프록시(Proxy..
[Spring] - BCryptPasswordEncoder를 이용한 비밀번호 암호화와 보안 원리
·
Spring
BCrpytPasswordEncoder란?💡 BCryptPasswordEncoder는 1999년에 설계된 강력한 암호화 알고리즘으로, Spring Security 프레임워크에서 제공하는 비밀번호 암호화 구현체이며, BCrypt 해시 함수를 사용하여 비밀번호를 단방향 해싱합니다. 단순히 해시 결과값만 내놓는 MD5나 SHA 계열의 알고리즘과 달리, BCrypt는 솔팅(Salting)과 키 스트레칭(Key Stretching)을 통해 보안성을 극대화 합니다.단방향 해시 함수(One-way Hash Function)💡 한 번 암호화된 비밀번호는, 원래의 평문으로 복호화가 불가능 합니다. ↳ 데이터베이스가 유출되더라도, 공격자가 사용자의 실제 비밀번호를 알아낼 수 없는 구조적 안정성 보장 솔팅(Salt..
[Spring] 싱글톤 패턴과 싱글톤 컨테이너 정리
·
Spring
웹 애플리케이션과 싱글톤스프링은 주로 웹 애플리케이션 개발을 위해 사용되는 프레임워크입니다.웹 애플리케이션의 특징은 여러 사용자가 동시에 요청을 보낸다는 점입니다. 예를 들어 하나의 요청이 들어올떄마다 서비스 객체를 새로 생성한다고 가정하겠습니다.만약 초당 100개의 요청이 들어오면 100개의 객체를 생성 후 소멸해야 합니다.이러한 방식은 메모리 사용량이 증가하여 성능 저하와 같은 문제가 발생합니다.이 문제를 해결하기 위해서는 요청에 비례하여 객체를 생성하는 것이 아니라, 딱 하나만 생성해 두고 여러 요청이 공유해서 사용하도록 하면 됩니다. 이러한 방식을 싱글톤 패턴(Singleton Pattern)이라고 합니다.웹 애플리케이션처럼 동시에 많은 요청이 발생하는 환경에서는 싱글톤 패턴이 효율적입니다. 싱..
[Spring] 스프링 프레임워크의 기초 이해(2) - 스프링 애플리케이션 구조와 스프링 컨테이너, 빈(Bean)
·
Spring
2026.03.08 - [Spring] - [Spring] 스프링 프레임워크의 기초 이해 [Spring] 스프링 프레임워크의 기초 이해Framework (프레임 워크)프레임워크는 애플리케이션을 만들 때 필요한 도구와 기능을 미리 모아놓은 틀이다. 집을 지을 때 망치, 못, 설계도와 같은 도구가 필요하듯이 앱을 만들 때도 반복적으로min-soon.tistory.com 스프링 애플리케이션의 기본 구조일반적인 스프링 애플리케이션은 보통 Controller, Service, Repository 3개의 계층으로 나누어 설계합니다.전체적인 구조는 다음과 같습니다.Client 요청 ↓Controller ↓Service ↓Repository ↓Database각 계층은 서로 다른 역할..