전체 글138 [Spring] API 및 예외 응답 통일 REST API 개발에서 클라이언트가 데이터를 처리하려면 가장 먼저 서버의 응답 형식을 파악해야 한다.그런데 API마다 응답 형식이 다르다면 오류 발생 시 응답에 포함되는 정보가 달라 혼란이 생기고, 유지보수가 어려워진다.따라서 이번에는 API를 일관되게 응답할 수 있도록 구현할 것이다.API 응답 형태는 다음과 같다.{ isSuccess : Boolean code : String message : String data : { // 응답하려는 실제 데이터 }} 위와 같은 형태로 응답할 수 있도록 ApiResponse 클래스를 구현한다.여기서 실제 응답인 data의 경우 null 일 시 클라이언트에게 응답하지 않도록 @JsonInclude(JsonInclude.Include.NON_NULL)을 붙여주었.. 2025. 1. 11. Error creating bean with name 'jpaAuditingHandler' @WebMvcTest를 통해 컨트롤러에 대한 테스트를 작성하는데 해당 에러가 나왔다.이는 JPA Auditing을 사용할 때 메인 메서드에 @EnableJpaAuditing을 추가하면서 기능 활성화를 위해 JPA 관련 빈들을 찾으려 하기 때문에 발생한다.따라서 해당 기능을 Configuration으로 분리하여 설정하였다.// @EnableJpaAuditing 제거@SpringBootApplicationpublic class MainApplication { public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); }}@EnableJpaAuditing@Configurationpublic class .. 2025. 1. 2. [Test] Spring-Security 도입 후 테스트 Spring Security 의존성을 추가했더니 대부분의 테스트가 실패하였다.이를 해결하기 위해 이유를 하나씩 살펴보도록 하겠다. 먼저 컨트롤러의 단위 테스트에서 @WebMvcTest 애노테이션을 사용한다.이는 Web과 관련된 (Controller, ControllerAdvice, Filter, Interceptor 등) 빈들만 등록하게 된다.즉 Service, Repository Component와 같은 빈들은 등록하지 않는데, Security 설정을 위해 추가한 SecurityConfig를 살펴보면 해당 Config에서 OAuth2UserService를 주입받는다.@RequiredArgsConstructor@Configuration@EnableWebSecuritypublic class Security.. 2025. 1. 2. [Spring] OAuth2.0을 이용한 네이버, 구글 소셜 로그인 구현 OAuth2.0이란? OAuth2.0 개념기존에 로그인 방식은 사이트마다 별도로 가입을 해 사용자가 많은 비밀번호를 사용해야 하며, 서비스 제공자 입장에서는 개인 정보를 직접 관리해야하므로 부담이 있었다.OAuth(Open Authorization)hbb-devlog.tistory.com 클라이언트 입장에서 소셜로그인 기능 구현 시 필요한 oauth2-client 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-oauth2-client' 위 의존성을 추가 후 네이버 로그인 시 스프링 시큐리티 필터 흐름을 간략하게 살펴보겠다.사용자가 서비스에서 oauth2 로그인 요청 (/oauth2/authorization/naver)Oauth2Au.. 2025. 1. 2. OAuth2.0 개념 기존에 로그인 방식은 사이트마다 별도로 가입을 해 사용자가 많은 비밀번호를 사용해야 하며, 서비스 제공자 입장에서는 개인 정보를 직접 관리해야하므로 부담이 있었다.OAuth(Open Authorization)는 인증과 권한 위임을 위한 개방형 표준 프로토콜로, 사용자가 자신의 개인정보를 제3자 서비스(우리 앱)에 직접 제공하지 않고도, 해당 서비스가 플랫폼 내의 정보에 접근할 수 있도록 권한을 부여하는 방식으로 사용한다.OAuth2.0 용어Authentication(인증)Id/Password 확인하여 신원을 체크Authorization(인가)사용자가 플랫폼에 있는 개인 정보 사용을 동의하여 권한 부여Resource서버가 관리하는 사용자 정보Authorization Code인가 단계 이후 Auth Serv.. 2025. 1. 2. [Test] 서비스 계층 테스트 서비스 계층의 경우 주로 비즈니스 로직이 구현되고 데이터 가공이 빈번하게 이루어지는 계층이므로 데이터의 정합성과 예외 케이스를 신경써서 테스트를 작성해야 한다.비즈니스 로직은 주로 Repository나 외부 서비스 계층과의 잦은 데이터 교환이 이루어지는 경우가 많기 때문에 무조건적인 단위 테스트 방식이 아니라 통합 테스트와 적절히 섞어서 많이 작성된다고 한다. 아래와 같은 서비스 로직이 있다고 하자.@Service@RequiredArgsConstructorpublic class PostService { private final PostRepository postRepository; public PostResponse.PostResponseDto findOne(Long id) { P.. 2024. 12. 30. [Test] 컨트롤러 테스트 Mockito와 단위 테스트 개념단위 테스트란?단위 테스트는 각 기능이나 모듈이 의도한 대로 작동하는지를 검증하는 테스트 방법으로 개발자가 작성한 코드의 작은 단위, 즉 함수나 메서드 단위로 진행된다.이는 각 기능 별hbb-devlog.tistory.com 저번에 간략하게 살펴본 Mockito와 단위 테스트의 개념을 토대로 컨트롤러 계층을 테스트하는 코드를 작성해보도록 하겠다.다음과 같은 컨트롤러가 있다고 하자.해당 코드는 postService.findOne이라는 메서드를 호출하고 이를 HttpResponse로 반환한다.@RestController@RequestMapping("/api/posts")@RequiredArgsConstructorpublic class PostController { pri.. 2024. 12. 30. [Test] Mockito와 단위 테스트 개념 단위 테스트란?단위 테스트는 각 기능이나 모듈이 의도한 대로 작동하는지를 검증하는 테스트 방법으로 개발자가 작성한 코드의 작은 단위, 즉 함수나 메서드 단위로 진행된다.이는 각 기능 별로 독립적으로 테스트하여 코드의 품질을 높이고, 버그를 조기에 발견할 수 있는 장점이 있다.↔ 통합 테스트목적: 여러 모듈 또는 클래스가 서로 상호작용할 때 시스템이 올바르게 동작하는지 확인하는 테스트 방법으로전체적인 동작을 테스트하기 때문에 시스템의 안정성을 검증하는 데 중요하다.실제 데이터베이스, 파일 시스템 등 외부 의존성을 포함하여 실행 시간이 길다.자바 언어의 경우 JUnit 프레임워크를 활용해서 단위 테스트를 수행할 수 있다.테스트 코드는 주로 Given/When/Then 패턴을 사용하여 작성한다.Given : .. 2024. 12. 30. [React] state와 리액트 훅 State컴포넌트가 현재 가지고 있는 상태로 변화할 수 있는 동적인 값으로 state 값이 변경되었을 때 해당 컴포넌트와 자식 컴포넌트가 리렌더링된다.참고로 리렌더링이 되는 경우는 3가지로 나눌 수 있다.자신이 관리하는 state 값이 변경될 때제공받는 props의 값이 변경될 때부모 컴포넌트가 리렌더링되면 자식컴포넌트도 리렌더링State는 컴포넌트 내에서 정의되며, useState 훅을 사용하여 설정 가능import { useState } from 'react';const Test = () => { // count는 state, setCount는 상태를 업데이트하는 함수 const [count, setCount] = useState(0); //useState 함수 인자에는 상태의 초.. 2024. 12. 30. 이전 1 2 3 4 5 6 7 ··· 16 다음