[Spring] 외부 API 호출 테스트 코드 문제상황현재 셀프 면접 연습 서비스 모니터미를 개인프로젝트로 진행하고 있다.여기서 OAuth 클라이언트를 따로 구현하여 구글 API 서버에 code, redirect_uri 와 같은 내용을 포함해 요청을 보내고 인증 토큰을 응답 받는다. 또한 인증 토큰을 전달해서 사용자 정보를 응답 받는다. 즉 외부 서버로 부터 정보를 받아오는 과정이 존재한다.구글 API 문서에 따라서 구현을 했는데 이걸 어떻게 테스트 해야하나 고민이 되었다.1️⃣ 외부 API 응답에 대한 문서에 따라야 한다.구글에서 제공한 API 문서 스펙에 따른 응답이 오게된다. 하지만 실제 개발자는 정해진 스펙에 맞는 요청을 보내고 그에 따른 응답이 오는지만 기대한다. 그렇기 때문에 외부 API 응..
[Spring 핵심원리] @ControllerAdvice 예외처리필자는 Spring을 통해 개발을 진행할 때 가장 처음 진행하는게 @ControllerAdvice를 이용한 전역 예외 처리기를 만들고 시작한다.이 포스팅을 통해서 어떻게 ControllerAdvice가 동작해서 각 컨트롤러의 예외를 전역으로 처리할 수 있는 원리를 정리해보겠다. ControllerAdvice 동작 과정Spring은 기본적으로 모든 요청에 대한 가장 첫 처리를 디스패처 서블릿에서 진행한다. 순서를 정리해보자디스패처 서블릿 에러 Catch에러 처리가 가능한 HandlerExceptionResolver가 에러를 처리컨트롤러의 ExceptionHandler로 처리가능한지 검사ControllerAdvice의 ExceptionHa..
프로그래머스 - 가장 큰 수 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요. 제한 사항 - number..
[Spring 시큐리티] 주요 클래스 및 인터페이스시큐리티가 어려운 이유는 아마 필터 체인을 사용하고 기존에 쓰던 Spring MVC 나 JPA 등 보안요소로 사용되는 클래스나 용어의 어려움이 있어서 그런것이고 생각된다이번 포스팅을 통해서 해당 클래스가 무슨 역할 들은 하는지 그리고 어떤 기능을 수행하는지를 정리해보려 한다. 1. AuthenticationAuthentication 은 접근하는 사용자의 정보와 권한을 담고 있는 인터페이스이다. Authentication 객체는 Security Context 에 저장되고, SecurityContextHolder 를 통해서 시큐리티 컨텍스트에 접근하고 시큐리티 컨텍스트를 통해서 Authentication 에 접근이 가능하다.public interface ..
[Spring 시큐리티] 사용자 인증사용자 인증을 개발하는 부분에서 사실 시큐리티를 배운적이 따로 없어 어떻게 해야할지 몰랐다가 최근 호돌맨 님의 강의 통해서 시큐리티 인증과 핸들링은 이렇게 하는구나 라는 것을 처음 보게 되었다.그리고 현재 수강죽인 교육 과정에서도 시큐리티 수업을 가볍게 하였고 쇼핑몰 토이 프로젝트에서 처음 진행하게 되었다. 토이프로젝트에서 사용한 스프링 시큐리티 인증 과정에 기반해서 전체적인 인증 플로우를 확인해보겠다.1. 스프링 Security스프링 시큐리티를 스프링 프레임워크에 기반한 보안,인증 관련 프레임워크이다 지금은 이런 수많은 시큐리티에서 사용하는 필터가 있다는 점을 알아두자 스프링 시큐리티는 Fitler를 기반으로 동작하게 된다.필터는 스프링 MVC의 프론트 컨트롤러인 D..
[디자인 패턴] Proxy 패턴개발을 하면서 프록시 라는 말을 정말 많이 들었는데 정작 프록시가 무엇인지 생각해본적은 없다.이 프록시 디자인 패턴이 무엇인지 실제 환경에서 어떤식으로 동작하는지 한번 알아보자 1. Proxy 패턴프록시는 대신, 대리 라는 뜻을 가진 단어이다. 이름 그대로 무언가를 대신해주는 역할을 수행한다대리라는 뜻을 어떤식으로 개발에 사용하는지 알아보자 프록시 패턴은 프록시라는 단어 처럼 대신하는 건데 여기서 말하는 대신은 타겟 객체의 메서드를 요청 객체가 직접 사용하는게 아니라 프록시 객체를 통해서 대신 하는 것이다. 대리 운전 처럼 차 주인이 차를 운전해야하지만 운전 이라는 메서드의 실행을 대리운전 기사가 대신하게 하는 것이다. 번거로워 보이지만 프록시 패턴을 차용하는데는 주요한..
REST API 란❔ 흔히 우리는 흔히 REST , RESTful 이라는 말을 많이 들어봤다.일반적으로 데이터를 주고 받는 통신을 할때 한다는 것을 알고 있다. 그럼 이 용어가 무엇을 의미하는지 한번 알아보자1. RESTREST는 Representation State Tranfer 의 약자이다. 쉽게 말하자면 자원의 약자로 이름으로 구분하고 자원의 상태를 전이한다는 의미를 가진다.그럼 왜 REST가 대중화 되었을까? 그러기 위해서 SOAP 아키텍처에 대해서 간단히 알아보자👉 SOAP SOAP 아키텍처는 웹 개발을 막 배우기 시작한 시점에 처음 접하게 될 것이다. 용어를 정리하면 Simple Object Access Protoco 이라고 한다. 즉 XML 기반의 메시지를 전달하는 방식이다.Spring ..
Spring Boot 테스트 TimeZone 불일치Junit을 통한 유닛 테스트나 H2 데이터베이스를 통한 중형 테스트를 할때 최근 겪은 단순하지만 헷갈리는 문제 사항을 공유하고 해결하고자 포스팅을 하게되었다. 1. Problem문제 상황은 소스코드에서 사용하는 Date 의 시간과 DB에서 읽어온 시간이 서로 9시간의 차이를 보였다.TestDateHolder dateHolder = new TestDateHolder(Date.from(Instant.parse("2023-12-12T00:00:00Z")));UserEntity userEntity = UserEntity.builder() .id(1L) .email("kimdodo@naver.com") ..