728x90

👉 기본 환경

- Language: Java

- DB: MySQL

- IDE: IntelliJ

 

 

WebClient

    - HTTP 클라이언트(서버에 API 요청을 보내는 주체) 라이브러리

    - 비동기적으로 요청하는 non-blocking 처리 방식

    ▶ 요청을 보내고 응답을 받을 때까지 대기하지 않기 때문에 처리 속도가 빠름

 

 

1. Dependency 추가

1
2
3
4
5
6
dependencies {
    ...
 
    implementation 'org.springframework.boot:spring-boot-starter-webflux' // HTTP 클라이언트 라이브러리
}
 
 
 

 

2. WebClient 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import com.example.demo.dto.srt.RqstParams;
import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Mono;
 
@Service
public class SrtFcstInfoServiceImpl implements SrtFcstInfoService {
 
    // UltraSrtNcst
    @Override
    public void getUltraSrtNcst(RqstParams rqstParams) {
        WebClient webClient = WebClient.builder()
                .baseUrl("https://apis.data.go.kr/1360000/VilageFcstInfoService_2.0/getUltraSrtNcst")
                .build();
 
        String url = "?serviceKey=" + rqstParams.getServiceKey() +
                "&numOfRows=" + rqstParams.getNumOfRows() +
                "&pageNo=" + rqstParams.getPageNo() +
                "&dataType=" + rqstParams.getDataType() +
                "&base_date=" + rqstParams.getBase_date() +
                "&base_time=" + rqstParams.getBase_time() +
                "&nx=" + rqstParams.getNx() +
                "&ny=" + rqstParams.getNy();
 
        Mono<String> result = webClient.get().uri(url)
                .retrieve()
                .bodyToMono(String.class);
 
        String response = result.block();
 
        System.out.println(response);
 
    }
 
}
 
 
 

- WebClient webClient

    - Spring에서 제공하는 비동기적인 웹 요청을 처리하는 클래스

    - 웹 리소스에 대한 요청을 보내고 응답을 받아올 수 있음

    - WebClient.builder()

        - WebClient 인스턴스 생성을 위한 빌더 패턴 사용

        - 요청 보낼 대상의 URL 설정

    - build()

        - 이전 단계에서 설정한 정보를 기반으로 실제 WebClient 인스턴스를 생성하고 반환

 

- Mono<String>

    - 웹 요청의 결과인 Response Body 저장

    - 비동기적으로 값을 처리하고 반환하는데 사용

    - webClient.get().uri(url)

        - webClient.get(): 생성한 WebClient 인스턴스를 이용하여 HTTP GET 요청 생성

        - uri(url): baseUrl 메서드로 이미 설정한 기본 URL에 상대 경로를 추가

    - retrieve()

        - 실제로 HTTP 요청을 보내고, 응답을 받아오는 역할

    - bodyToMono(String.class)

        - HTTP Response Body를 Mono로 변환

        - String.class: Response Body를 문자열 형태로 받아옴

 

+ retrieve return

    - toEntity: response 자체를 얻기 위해 사용

    - bodyToMono: response body 데이터를 얻기 위해 사용

    - bodyToFlux: response body 데이터를 stream*으로 처리하기 위해 사용

* Steam: 데이터를 한 번에 모두 받아오는 것이 아니라, 조금씩 조각 조각 나누어 비동기적으로 처리하는 방식

 

- result.block()

    - 비동기적인 작업을 동기적으로 블로킹

    - Mono 작업이 끝날 때까지(=웹 요청의 응답을 받을 때까지) 현재 스레드를 블로킹하고, 응답을 받으면 해당 응답을 문자열 형태로 반환

 

 

 

📚 참고 자료

 

[SpringBoot] WebClient를 이용하여 외부 API 호출하기

안녕하세요. J4J입니다. 이번 포스팅은 webClient를 이용하여 외부 api 호출하는 방법에 대해 적어보는 시간을 가져보려고 합니다. WebClient란? webClient는 spring 5에서 부터 등장한 HTTP 클라이언트 라이

jforj.tistory.com

 

728x90

'Java > Spring' 카테고리의 다른 글

[SpringBoot] 스프링 부트 프로젝트 생성  (0) 2023.08.23
[SpringBoot_JPA_1] resources/static and templates  (0) 2023.05.20
728x90

👉 기본 환경

- Language: Java

- DB: MySQL

- IDE: IntelliJ

 

 

1. Spring Initializer에서 기본 설정 구축

https://start.spring.io/

 

- Project

    - Gradle - Groovy: 환경 설정 파일 build.gradle

    - Gradle - Kotlin: JVM에서 실행되는 다목적 프로그래밍 언어로, Java와 호환성이 뛰어남

    - Maven: 환경 설정 파일 pom.xml

 

- Spring Boot

    - SNAPSHOT: 실험 중인 버전

    - 3.XX버전을 사용할 땐 JAVA 17 이상으로 사용

 

- Project Metadata

    - Group: 기업 도메인명

    - Artifact : 빌드 결과물
    - Name : 프로젝트명 (일반적으로 Artifact와 동일하게 설정)
    - Package name : Group과 Artifact에 따라 자동으로 생성

    - packaging: JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일, 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등)들을 패키징

        - Jar

            - JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일

            - 원하는 구성을 할 수 있음

        - War

            - 웹 어플리케이션(Web Application) 압축 파일 포맷

            - WAR은 WEB-INF 및 META-INF 디렉토리로 사전 정의 된 구조를 사용

            - JAVA의 JAR 옵션( java - jar)을 이용해 생성하는 JAR파일의 일종으로 웹어플리케이션 전체를 패키징하기 위한 JAR파일

 

- Dependencies

    - Spring Web

        - Build web, including RESTful, applications using Spring MVC.

        - Uses Apache Tomcat as the default embedded container

    - Lombok

        - Java annotation library

    - Spring Boot DevTools

        - Provides fast application restarts, LiveReload, and configurations for enhanced development experience

 

* 필요한 Depencency 추가 후, Generate 클릭

 

 

2. IntelliJ

압축 파일 해제 후, IntelliJ에서 Open 클릭 후 압축 해제한 폴더 선택

    - Java Version 확인

    File / Project Structure / Project / Project SDK / Initializer에서 선택한 버전과 동일한 Java Version

    - Gradle 설정

    Preferences(Settings) / Build, Execution, Deployment / Build Tools / Gradle

        - Gradle JVM: Java Version과 동일하게 설정

        - Build and run using, Run tests using: IntelliJ IDEA ▶ Gradle

 

 

3. Database 설정

- build.gradle

    - dependencies{ ... } 안에 runtimeOnly 추가하여, DB 설정(MySQL ver.)

        - runtimeOnly 'com.mysql:mysql-connector-j'

- application.yml (⭐ 띄어쓰기 주의)

    - application.properties와 동일한 기능을하지만, 문법이 다름

 

spring:
  datasource:
  driver-class-name: com.mysql.cj.jdbc.Driver
  url: jdbc:mysql://localhost:3306/mydb?serverTimezone=Asia/Seoul
  username: DB 생성 시, 작성한 username
  password: DB 생성 시, 작성한 password

 

 

4. Application.java 실행

 

 

 

📚 참고 자료

 

[Java] JAR WAR 차이점 및 특징 ( + EAR )

JAR (Java Archive) WAR (Web Application Archive) 모두 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일이며 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등)들

ifuwanna.tistory.com

 

[Spring Boot] 프로젝트 생성 (start.spring.io)

목차 0. 환경 windows10 openjdk version "11" 2018-09-25 IntelliJ Tool Spring Boot 2.5.6 Gradle Project MyBatis + Mysql + HikariCp를 이용해 DB(Mysql) 연동할 프로젝트입니다. 1. Spring Boot 프로젝트 생성 1. https://start.spring.io/ 에

veneas.tistory.com

 

728x90

'Java > Spring' 카테고리의 다른 글

[SpringBoot] WebClient  (0) 2023.08.23
[SpringBoot_JPA_1] resources/static and templates  (0) 2023.05.20
728x90

이 글은 김영한의 [실전! 스프링 부트와 JPA 활용1 - 웹 애플리케이션 개발] 수강하며 정리한 글입니다.

 

 

🟦 기본 환경: IDE: IntelliJ, Language: Java

 

 

 

 

 

 

SpringBoot src 기본 폴더 구조는 좌측 이미지와 같다.

 

이번 포스팅에서는 resources 폴더와 관련된 static, templates 폴더에 대해 간략히 정리하고자 한다.

 

 

 

 

 

 

 

 

/static: 웹 개발 방법(static contents, MVC+template Engine, API) 중 하나인 static contents*가 위치하는 곳으로 html, CSS, javaScript 등을 저장한다. SpringBoot 라이브러리에 포함되어있는 WepProperties.java에서 Resources()는 static file 경로에 대해 다음과 같이 설정되어있다.

 

 

/templates: view에 사용할 thymeleaf 파일이 위치하며, SpringBoot에서는 기본적으로 thymeleaf라는 template를 이용해 html을 불러온다.

SpringBoot는 기본적으로 thymeleaf에 대한 auto-configuration을 지원하고 있으며, 자동 인식을 위해서는 src/main/resources/templates에 파일을 저장해야한다고 안내하고 있다(참조).

 

 

* static contents: 정적 컨텐츠, html 파일을 그대로 전달하여, 웹페이지에 보여지는 파일로 파일명 그대로 접속이 가능

 

 

 

➕ 만일 static 폴더가 아닌 다른 폴더에서 정적 컨텐츠를 관리하고 싶다면, 다음과 같은 추가 설정이 필요하다.

1. Configuration 파일 생성 후, implement WebMvcConfigurer

2. @Override addResourceHandlers

(자세한 내용은 참고 자료 확인)

 

 

 

참고 자료

📑 SpringBoot Manual

📑 SpringBoot docs

📑 Spring Boot HTML 파일 templates에서도 읽도록 설정하기

 

728x90

'Java > Spring' 카테고리의 다른 글

[SpringBoot] WebClient  (0) 2023.08.23
[SpringBoot] 스프링 부트 프로젝트 생성  (0) 2023.08.23