Framework 28

[Spring] 단위 테스트(Unit Test) vs 통합 테스트(Integration Test)

단위 테스트(Unit Test)단위 테스트는 DB 없이 서비스 로직을 검증하는 테스트이다.Spring을 실행하지 않고 Mockito로 필요한 객체를 Mock 처리해서 사용한다.📌 단위 테스트 코드 예시@ExtendWith(MockitoExtension.class) // Spring 실행 없이 Mockito만 사용class UserServiceTest { @Mock // 가짜 객체(Mock) 생성 private UserRepository userRepository; @InjectMocks // UserService가 위의 Mock 객체를 사용하도록 설정 private UserService userService; @Test void findUserById() { ..

[Spring] JPA Specification

JPA SpecificationJPA Specification은 Spring Data JPA에서 제공하는 도구로, 복잡한 데이터베이스 쿼리를 SQL 문자열로 작성하는 대신 Java 객체와 메서드로 표현하여 객체지향적으로 작성할 수 있게 도와줍니다. 이를 통해 코드의 가독성과 재사용성이 높아지고, 유지보수가 쉬워집니다.특징1. 객체지향적 쿼리 작성JPA Specification은 SQL 대신 Java 객체를 사용하여 쿼리를 작성합니다.SQL: SELECT * FROM customers WHERE name = 'John' AND age > 30;객체지향적 표현: Specification.where(nameEquals("John")).and(ageGreaterThan(30));2. 재사용 가능한 조건각 조건을..

[Spring Security] 역할 기반 접근 제어 (RBAC) feat. Role

역할 기반 접근 제어 (RBAC)애플리케이션에서는 사용자마다 다른 권한을 가지는 경우가 많습니다. 예를 들어, 관리자는 시스템을 관리할 수 있지만, 일반 사용자는 자신의 데이터만 접근하도록 제한해야 합니다. 이런 차이를 구현하려면 역할 기반 접근 제어(Role-Based Access Control, RBAC)가 필요합니다.역할(Role) : 사용자의 직무나 그룹을 나타냅니다. ex. ADMIN, USER권한(Authority):  Spring Security가 사용하는 실제 권한 이름으로, 보통 ROLE_ 접두사를 사용합니다. ex. ROLE_ADMIN, ROLE_USERSpring Security 역할 기반 접근 제어package com.example.security.roles;import lombok..

[Spring Security] 보안

1. CSRF (Cross-Site Request Forgery)CSRF는 사용자가 의도하지 않은 요청을 서버로 전송하도록 속이는 공격입니다. 로그인 상태의 사용자를 대상으로 악성 요청을 실행할 수 있어 보안에 매우 위험합니다.ex. 사용자가 은행 웹사이트에 로그인한 상태에서 악성 링크를 클릭하면, 공격자가 사용자 계정으로 돈을 송금하는 요청이 전송될 수 있습니다.1. Spring Security의 CSRF 방지Spring Security를 사용하면 CSRF 보호가 기본으로 활성화됩니다.POST, PUT, DELETE 등의 요청 시, CSRF 토큰을 요구합니다.2. 예시 Submit name="_csrf": 서버에서 지정한 CSRF 토큰의 파라미터 이름value="1a2b3c4d5e6f7g8..

[Spring] Bean

BeanSpring Bean은 Spring 컨테이너가 관리하는 객체입니다.여기서 관리란 객체의 생성, 의존성 주입, 그리고 생명주기를 제어하는 것을 의미합니다.* 특징객체 관리의 중앙화 : 개발자가 직접 객체를 생성할 필요 없이 Spring이 대신 생성하고 관리합니다.재사용성 : 동일한 Bean은 컨테이너 내에서 필요에 따라 재사용됩니다.유연한 의존성 관리 : 객체 간의 의존관계를 설정하고 주입하는 작업을 간소화합니다.컨테이너Spring 컨테이너는 Spring 프레임워크가 제공하는 객체 관리 도구입니다.Spring 애플리케이션이 실행되면 Spring 컨테이너가 시작되고, 이 컨테이너는 애플리케이션에서 사용할 객체(Bean)를 생성하고 관리합니다.Spring 컨테이너는 ApplicationContext 인..

[Spring Security] 스프링 세큐리티 (Spring Security)

Spring SecuritySpring Security는 웹 애플리케이션의 보안을 제공하는 Java 라이브러리입니다.주요 기능은 다음과 같습니다인증 (Authentication) : 사용자가 누구인지 확인합니다.ex. 아이디와 비밀번호를 확인해서 올바른 사용자인지 검증합니다.인가 (Authorization) : 사용자가 특정 기능을 수행할 권한이 있는지 확인합니다.ex. 관리자인지 일반 사용자인지 구분하여 접근할 수 있는 페이지를 제한합니다.CSRF 보호 : 악의적인 요청을 방지합니다.세션 관리 : 사용자의 세션을 안전하게 관리합니다.비밀번호 암호화 : 비밀번호를 안전하게 저장하기 위해 암호화합니다.주요 개념1. 인증 (Authentication)인증은 사용자가 누구인지 확인하는 과정입니다.사용자가 로그..

[Spring] 페이징 (Paiging) 주요 메서드

페이징 (Paging)페이징(Paging)은 데이터를 한 번에 모두 보여주는 대신, 여러 페이지에 나누어 보여주는 방법입니다.데이터가 많아지면 한 화면에 전부 출력하는 것은 비효율적이기 때문에 사용자가 원하는 만큼의 데이터만 나누어 보여주도록 하는 것입니다.예를 들어, 게시판에서 글이 100개가 있을 때 한 페이지에 10개씩 보여준다면 총 10개의 페이지로 나누어 표시하는 방식이 페이징입니다.페이징 객체 & 클래스 1. 스프링에서는 페이징 처리를 위해 Pageable과 Page 객체를 사용합니다.Pageable : 페이지 번호와 페이지당 데이터 개수 등의 페이징 정보를 담는 객체입니다.Pageable pageable = PageRequest.of(0, 10); // 0번째 페이지부터 10개씩 가져오기Pa..

[Spring] 바인딩 (Binding)

바인딩 (Binding)Spring Binding은 클라이언트 요청 데이터와 서버의 Java 객체 간의 자동 매핑을 제공하는 Spring MVC의 핵심 기능 중 하나입니다.HTML 폼에서 입력한 데이터를 Java 객체로 변환하거나, 반대로 Java 객체의 데이터를 HTML 폼에 표시할 때 사용됩니다.이를 통해 개발자는 데이터를 수작업으로 변환하는 번거로움을 줄이고, 간결하고 가독성 높은 코드를 작성할 수 있습니다.예를 들어, 사용자가 웹 페이지에서 폼을 작성해 제출하면, 서버는 이 데이터를 Java 객체로 변환하여 처리하게 됩니다. Spring Binding은 이 과정을 자동화합니다.동작 원리Spring Binding은 다음과 같은 과정을 통해 데이터를 Java 객체와 연결합니다.클라이언트 요청 수신사용..

[Spring] Validation Library 데이터 유효성 검사

Validation LibrarySpring Validation은 Spring 프레임워크(Spring Framework)에서 제공하는 기능으로, 클라이언트가 입력한 데이터가 정해진 조건을 만족하는지 확인하고, 애플리케이션의 비즈니스 로직이 잘못된 데이터로 인해 문제가 발생하지 않도록 보장합니다.Spring Validation은 Java Bean Validation 표준을 기반으로 하며, Hibernate Validator라는 라이브러리(Library)를 사용하여 유효성 검증을 수행합니다. 데이터 유효성 검증웹 애플리케이션은 사용자 입력 데이터를 처리하는 경우가 많습니다.예를 들어, 회원가입 페이지에서 사용자가 이름, 이메일, 비밀번호를 입력한다고 할 때이름은 빈 값일 수 없고이메일은 올바른 형식이어야 하..

[Spring] HTTP Method

HTTPHTTP 메서드는 클라이언트가 서버에 요청을 보낼 때 사용하는 방식으로, CRUD(생성, 읽기, 업데이트, 삭제) 작업과 연결됩니다.HTTP 메서드는 서버가 클라이언트로부터 "무엇을 하길 원하는지"를 이해하도록 돕는 명령어입니다.* 주요 HTTP 메서드GET : 서버에서 데이터를 조회합니다.POST : 서버에 데이터를 생성하거나 추가합니다.PUT : 서버의 데이터를 수정하거나 업데이트합니다.DELETE : 서버에서 데이터를 삭제합니다.특징명확한 역할 분담: 요청의 의도를 명확히 나타냄으로써, 서버와 클라이언트 간의 의사소통을 표준화합니다.유지보수 용이성: 의도가 명확하면 개발자들이 코드를 이해하고 수정하기 쉬워집니다.RESTful 설계의 핵심 요소: HTTP 메서드는 RESTful API 설계에서..