전체 글 128

Vivim : 고객사와 개발사 간의 프로젝트 공유 웹 서비스 만들기 (Spring Boot, React, MySQL, Team Project)

테스트 Mockito + JUnit 방식 (위 예제와 같은 방식)장점:개별 의존성을 모의(mock)하여 단위 테스트에 집중할 수 있음테스트가 빠르고, 간단한 단위 테스트 작성에 적합함단점:많은 모의 객체와 반복되는 설정 코드가 필요할 수 있음복잡한 객체 생성 로직이 중복되면 셋업 코드가 장황해질 수 있음BDD 스타일 (Given-When-Then)로 작성장점:테스트의 흐름이 자연어에 가깝게 표현되어 가독성이 높음Mockito의 BDDMockito를 사용하면 테스트의 의도를 명확하게 전달할 수 있음단점:팀 내에 BDD 패턴에 익숙하지 않다면 초기 학습 비용이 있음기존 코드와의 일관성 문제가 발생할 수 있음Spring Boot Test 활용 (예: @SpringBootTest, @DataJpaTest)장점:..

Spring Security Series (3) 필터 체인 더 깊게 들어가기 (FilterChain, Filter, ServletFilterChain, Servlet Filter, Servlet Container, HttpServletRequest, ServletRequest, Wrapper Class)

각 구성요소의 시점 별로 재설명합니다. 따라서 일부 설명이 중복되는 점 양해바랍니다. 전체적인 프로세스 즉, 스프링 시큐리티 프레임워크의 동작원리를 알고 싶다면 동작원리 관점에서 기록한 여기를 참고해주세요.FilterChain과 자주 혼동하는 SpringFilterChain이 궁금하다면 여기에 기록해두었으니 참고하시길 바랍니다.파란 밑줄 글씨는 링크, 주황 밑줄 글씨는 단순한 강조, 초록 밑줄 글씨는 뇌피셜입니다.   ➡️ 자바가 제공하는 인터페이스 : FilterChain 서블릿 API의 일부분으로 Java Servlet API에서 정의된 인터페이스이다. FilterChain은 단일 HTTP 요청을 처리하는 레이어로, Servlet Container에서 필터를 구성하고 관리하는 방식을 사용한다. Fil..

Spring Security Library : SecurityContextHolder Class

SecurityContextHolder는 Spring Security에서 인증된 사용자의 보안 정보를 애플리케이션의 전체 범위에서 관리하고 접근할 수 있도록 하는 핵심적인 역할을 합니다. 이 객체는 인증이 성공하면 Authentication 객체를 저장하며, 애플리케이션의 다른 컴포넌트가 이를 참조할 수 있게 합니다.  1. SecurityContextHolder의 역할SecurityContextHolder는 보안 컨텍스트(SecurityContext) 를 관리하는 저장소입니다. SecurityContext는 현재 인증된 사용자에 대한 정보를 담고 있는 객체로, 주로 Authentication 객체가 포함됩니다.SecurityContextHolder는 각 요청에 대해 인증된 사용자 정보를 저장하고, 이 ..

Spring Security Library : DispatcherServlet Class

DispatcherServlet은 Spring MVC의 핵심 서블릿으로, HTTP 요청을 처리하기 위해 사용됩니다. Spring Security와 Spring Boot에서 DispatcherServlet은 요청을 처리하는 중요한 역할을 하며, Spring Security의 보안 관련 필터를 통합하여 인증 및 권한 부여를 처리합니다.DispatcherServlet의 유의미한 동작 (스프링 시큐리티 및 스프링 부트 관점)DispatcherServlet의 역할:클라이언트로부터 들어오는 HTTP 요청을 **핸들러(컨트롤러)**에게 전달하는 역할을 합니다.DispatcherServlet은 Spring MVC 프레임워크에서 핸들러 매핑, 컨트롤러 호출, 뷰 리졸버와의 통합을 담당하며, 핸들러 인터셉터 및 필터를 통..

Spring Security Library : HttpServletRequest Interface

스프링 시큐리티 및 스프링 부트에서 HttpServletRequest 객체는 중요한 역할을 하며, 보안 관련 작업에 많이 사용됩니다. 아래는 HttpServletRequest에서 스프링 시큐리티 및 스프링 부트 동작에서 유의미한 동작과 관련된 주요 메소드들입니다.1. getAuthType()설명: 이 메소드는 요청에 대해 사용된 인증 방법을 반환합니다. 예를 들어, "BASIC", "FORM", "CLIENT_CERT", "DIGEST" 등이 될 수 있습니다.스프링 시큐리티에서 사용: 스프링 시큐리티에서 인증 방식(Basic, Form 등)을 확인할 때 사용될 수 있습니다. 인증 방식은 인증을 처리하는 필터에 영향을 미칩니다.String authType = request.getAuthType();2. g..

알고리즘 성능 : 시간복잡도와 공간복잡도 (Big-O)

알고리즘 성능을 판단하는 복잡도알고리즘 성능을 판단하는 주요 수단은 시간 복잡도(Time Complexity)와 공간 복잡도(Space Complexity)입니다. 이 두 가지는 알고리즘이 실행되는 데 필요한 자원(시간과 메모리)을 평가하는 중요한 기준입니다. 자세히 살펴보면: 1. 시간 복잡도 (Time Complexity)정의 : 주어진 입력 크기 nn에 대해 알고리즘이 실행되는 데 걸리는 시간의 양을 측정합니다.목적 : 입력 크기가 커질수록 알고리즘이 얼마나 빨리 실행되는지를 평가합니다.표기법 : 보통 빅오 표기법 (Big O Notation)을 사용하여 최악의 경우를 나타냅니다. 예를 들어 :O(1)O(1) : 상수 시간 복잡도O(n)O(n) : 선형 시간 복잡도O(n2)O(n^2) : 이차 시간..

Coding Test/Theory 2025.03.07

Spring Boot : 스프링부트 프로젝트 만들기 시리즈 03. 테스트 (JUnit, Unit test, Integration test, Mocking, MockMvc, @MockBean, Stub)

목차 테스트 기초편 : 스프링부트 테스트 환경 설정테스트 기초편 : 스프링부트의 다양한 테스트 기법 (단위 테스트, 통합 테스트, 컨트롤러 테스트)테스트 기초편 : 기본 어노테이션 살펴보기 테스트 실전편 첫 번째 : 복잡한 비즈니스 로직을 위한 테스트 전략 (Mockito, Mocking, MockMvc, @MockBean, Stub)테스트 실전편 두 번째 : 데이터베이스와 통합 테스트테스트 실전편 세 번째 : REST API 테스트와 MockMvc테스트 실전편 네 번째 : 모의 객체(Mock Objects)와 의존성 주입테스트 실전편 다섯 번째 : 예외 처리 및 경계 조건 테스트테스트 실전편 여섯 번째 : 성능 테스트 및 최적화테스트 실전편 일곱 번째 : CI/CD와 통합된 테스트 파이프라인 구성테스트..

Library : Mockito에서 제공하는 when ~ then 구문을 활용한 스프링부트 단위 테스트

when ~ then을 사용한 검증Mockito는 Java에서 가장 인기 있는 Mocking 라이브러리로, 주로 단위 테스트에서 객체 간의 의존성을 Mock 처리하고, 이를 통해 독립적인 테스트 환경을 구축할 수 있도록 돕습니다. Mockito에서 테스트할 때, when ~ then 구문은 동작 설정 및 검증을 위한 핵심적인 부분입니다.when(mockObject.method()).thenReturn(someValue);when(mockObject.method())Mockito 라이브러리에서 Mock 객체의 메서드를 호출하는 형태입니다. 이 구문을 사용할 때, Mock 객체는 실제 구현이 아닌, 모킹(mocking)된 객체입니다. 이 객체는 가짜 객체로, 실제 구현체가 아닌 테스트에서 예상한 동작을 하도..

Spring Boot : 스프링부트 프로젝트 만들기 시리즈 01. 환경 설정 (Gradle, H2, MySQL, Git, application.yml)

인텔리제이 설치하기프로젝트 개발을 보다 편하게 할 수 있게 도와주는 IDE인 인텔리제이는 아래 링크에서 다운로드 받을 수 있습니다. 유의할 점은 본인 운영체제에 맞는 것을 다운받고, 설치 과정에서 PATH 설정 조항(add bin for path)을 꼭 체크하셔야 나중에 환경변수를 따로 설정하지 않아도 됩니다. 참고로 인텔리제이는 유료(ultimate) 버전과 무료(community) 버전이 있으니 선택하여 뭔지 잘 보고 다운로드하세요. 유료 버전을 다운로드 받는다고 해서 큰일이 나진 않지만 다시 받기 귀찮지 말입니다.https://www.jetbrains.com/ko-kr/idea/download/?section=mac IntelliJ IDEA 다운로드 www.jetbrains.com 깃 설치하고 사용..

DTO : 사용 범위, 변환 로직 위치, 효율성의 의미

프로그래밍을 공부하면서 DTO(Data Transfer Object)의 개념을 접하게 되었고, 그 역할과 사용 방법 등에 대해 많은 생각을 하게 되었습니다. 지금부터 제 고민과 나름의 답에 대해 기록해보려 합니다.목차왜 모든 엔티티 속성 요청에도 DTO를 사용해야 하는가변환 로직 코드, 어디에 작성하는 게 좋을까사용하면 무엇이 효율적이라는 건지왜 모든 엔티티 속성 요청에도 DTO를 사용해야 하는가이 문제는 DTO가 수행하는 역할을 이해하면 명확한 답이 나옵니다. DTO를 사용하는 이유는 단순히 데이터를 효율적으로 전송하는 목적에만 있지 않습니다. 명시적 계약과 보안, 데이터 형식 변환 등을 위한 중요한 역할을 한다는 것이었습니다.명시적 계약 수립엔티티의 모든 속성이 필요하다 하더라도, DTO를 사용하면 ..