본문 바로가기

스프링7

[Spring Boot] Security 없이 OAuth2로 Google 로그인 구현, 유저 정보 얻기 세션 저장, Spring Security 코드가 난무한 클론코딩 글들이 너무 많아 그냥 내가 쓰는 글이다... 웹 서버 애플리케이션용 OAuth 2.0 사용 | Authorization | Google Developers 이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 웹 서버 애플리케이션용 OAuth 2.0 사용 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분 developers.google.com GCP 설정 후 "http://accounts.google.com/o/oauth2/v2/auth" 엔드포인트로 client_id, redirect_uri, response_type, scope 4개의 필수 파라미터와.. 2023. 3. 27.
[Spring Reactive] RabbitMQ를 이용해 메시지 브로커 사용하기 AMQP 메시지 프로듀서 @RestController public class SpringAmqpItemController { private static final Logger log = LoggerFactory.getLogger(SpringAmqpItemController.class); private final AmqpTemplate template; public SpringAmqpItemController(AmqpTemplate template) { this.template = template; } @PostMapping("/items") Mono 2023. 3. 21.
[Spring Reactive] 리액티브 테스트 작성하기 스프링부트와 리액터에서는 비동기, 논블로킹 코드도 JUnit을 이용해 테스트할 수 있다. 리액티브 단위 테스트 리액티브 코드를 테스트할 때 핵심은 기능만을 검사하는 게 아니라 리액티브 스트림 시그널도 함께 검사해야 한다는 점이다. 리액티브 스트림은 onSubscribe, onNext, onError, onComplete를 말한다. @ExtendWith(SpringExtension.class) class InventoryServiceTest { InventoryService inventoryService; @MockBean private ItemRepository itemRepository; @MockBean private CartRepository cartRepository; @BeforeEach voi.. 2023. 3. 13.
[Spring Reactive] 리액티브 데이터 Repository 정의하기 리포지토리를 생성하기 앞서 도메인은 다음과 같다. public class Item { private @Id String id; private String name; private double price; private Item(){} public Item(String name, double price) { this.name = name; this.price = price; } public String getId() { return id; } } 블로킹API인 JPA를 사용하지 않지만 JPA와 매우 유사한 인터페이스가 정의되어 있다. ReactiveCrudRepository 인터페이스를 상속하면 된다. 주석 내용은 기본적으로 제공하는 메서드이다. JPA와 거의 동일하게 제공한다는 것을 알 수 있다. pub.. 2023. 3. 12.
[Spring Reactive] 리액티브 데이터베이스 저장 요건 리액티브 프로그래밍의 핵심은 모든 과정이 리액티브여야 한다! 웹 컨트롤러와 서비스 계층도 리액티브 방식으로 동작하게 만들었는데, 블로킹 방식으로 연결되는 데이터베이스를 호출하면 리액티브는 무너진다. 블로킹 방식으로 데이터베이스를 호출한 스레드는 응답을 받을 때까지 다른 작업을 하지 못한 채 기다린다. 동기, 비동기와 블로킹, 논블로킹 개념이 헷갈린다면? 2023.03.09 - [Develop/CS] - 동기(Synchronous)와 비동기(Asynchronous), 블로킹(Blocking)과 논블로킹(Non-Blocking) 그렇다면 어떤 데이터베이스가 리액티브 패러다임을 지원하고 있을까? 몽고디비 레디스 아파치 카산드라 엘라스틱서치 네오포제이 카우치베이스 우리가 평소 사용하는 관계형 데이터베이스는 포함.. 2023. 3. 10.
[Spring] 컴포넌트 탐색, 의존관계 주입과 서비스 로케이터 스프링 애플리케이션에서 빈을 등록하는 방식은 두 가지로 나눌 수 있다. 빈으로 등록될 클래스의 물리적 위치와 무관하게, 환경설정 클래스에서 직접 하나하나 빈으로 등록하기 그냥 빈의 존재를 플래그로 표시하기만 하고, 나머지는 스프링이 컴포넌트 탐색(Component Scanning)을 통해 자동으로 빈을 찾아내 등록하게 하기. 스프링 애플리케이션이 실행되면 모든 빈은 애플리케이션 컨텍스트(Application Context)에 등록된다. 스프링 애플리케이션에서는 의존관계 주입(DI, Dependency Injection)을 사용한다. 의존관계 주입 개념이 없던 2000년대 초반에는 서비스 로케이터(Service Locator) 패턴을 사용해서 서비스를 식별 가능한 어떤 주소와 함께 등록하고, 그 주소를 통.. 2023. 3. 7.
[Spring Boot] 스프링 부트 테스트하기 다루는 내용 - 통합 테스트 - 서버에서 애플리케이션을 테스트하는 방법 - 스프링 부트 테스트 유틸리티 ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ 6년 전 기술이므로 현재 용어가 많이 바뀌었다. 흐름만 파악하고 공식문서를 참고하여 개발하도록하자. https://spring.io/guides/gs/testing-web/ ★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆ 통합 테스트를 위한 자동 구성 스프링 애플리케이션 컨텍스트를 로드하고 테스트 클래스에 자동으로 주입하는 기능을 확성화하는 JUnit 클래스 러너인 SpringJUnit4ClassRunner를 제공하는 형태로 통합 테스트를 지원한다. @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationC.. 2023. 2. 5.