Webclient로 kakao API 호출하기

김성빈·2024년 3월 27일

저번시간에 controller를 이어서 webclient로 API를 받기위해선 maven을 통해 webclient 라이브러리를 설치해 줘야한다.


Google 에 maven repository를 입력하고 들어가고
maven
Spring WebFlux를 입력하고 들어가준다.

들어가게 되면 버전이 여러가지뜨는데 저는 가장 최신인 6.1.5를 다운로드 받았지만, 혹시 문제가 발생한다면 버전을 더 낮춰서 진행 할 것.

6.1.5 버전에 들어가서 Gradle Kotlin을 선택하고 해당 내용을 복사

다시 프로젝트에 돌아가서 build.gradle.kts 를 수정한다.

build.gradle.kts의 dependencies안에 아까 복사해둔것을 넣어준다음 우측 상단에 코끼리 클릭(Sync, 동기화로 누르면 빌드함)

빌드가 끝나면 라이브러리가 없어서 발생한 밑줄이나 에러는 사라진다.

그럼 이제 Blog Service에 Webclient로 kakao API를 호출해보겠다.

BlogService에 들어와서 저번에 Searchkakao의 반환값을 내보내는 코드에서 webclient로 kakao api를 호출해서 받은 값을 webclient에 그대로 전달하는 기능이다.

package com.example.study.blog.service

import com.example.study.blog.dto.BlogDto
import org.springframework.stereotype.Service
import org.springframework.web.reactive.function.client.WebClient

@Service
class BlogService {
    fun searchKaKao(blogDto: BlogDto): String? {
        val webClient = WebClient
            .builder()
            .baseUrl("")
    }
}

저기 안에 주소는 kakao developer의 API 주소를 입력하면된다.
Daum 검색 API
내가 사용할 API는 블로그 검색하기 이므로 아래 URL을 baseUrl 안에 넣어주면된다.

kakao.com 뒤의 v2/search/blog는 get할때 사용할것이므로 없앤다.
밑에 defaultHeader는 저희가 주고 받을 데이터의 형식이 JSON 형태이므로 저렇게 선언해주면되고,

신호를 보내고 받은 값을 처리할 response를 작성하겠다

queryParam을 입력하고 뒤에 any! 가 뜨는것을 누르고

소괄호를 만들고 저렇게 name:String 이런 화면이 나오면 "를 입력해주면

이것처럼 자동으로 name이 나오게된다.

이상 없이 잘 입력했다면 아래와 같이 나와야하는데, header에 authorization으로 api를 요청할때 키가 있어야한다.

key는 해당 글 시리즈 중에 생성했던 애플리케이션 안에 있다.

아래 형광칠한것을 복사해서 넣어준다.

넣고 나서 형태는 아래와 같다.

이어서 bodyTomono를 입력해줘야하는데 자동생성을 하면,

에러가 발생하는데 마우스를 위에 올리고 Alt+ Enter를 입력하면 된다.


여기까지 했으면 결과(response)를 받을 변수와 그 변수를 반환해줘서 webclient에 출력하게 하기 위한 처리를 한다.

여기까지 이상없이 작성한 코드의 전체 코드이다.

package com.example.study.blog.service

import com.example.study.blog.dto.BlogDto
import org.springframework.http.HttpHeaders
import org.springframework.http.MediaType
import org.springframework.stereotype.Service
import org.springframework.web.reactive.function.client.WebClient
import org.springframework.web.reactive.function.client.bodyToMono

@Service
class BlogService {
    fun searchKaKao(blogDto: BlogDto): String? {
        val webClient = WebClient
            .builder()
            .baseUrl("https://dapi.kakao.com")
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .build()

        val response = webClient
            .get()
            .uri { it.path("/v2/search/blog")
                .queryParam("query", blogDto.query)
                .queryParam("sort", blogDto.sort)
                .queryParam("page", blogDto.page)
                .queryParam("size", blogDto.size)
                .build()}
            .header("Authorization", "KakaoAK 5f006770c340b7e51a0d38439dc30f91")
            .retrieve()
            .bodyToMono<String>()

        val result = response.block()

        return result
    }
}

그리고 Intellij 어플리케이션을 실행시키면 에러없이 서버가 동작한다!

"C:\Program Files\Java\jdk-20\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3.5\lib\idea_rt.jar=62742:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3.5\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\classes\kotlin\main;C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\resources\main;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.2.4\a74df12b71060da7c8e87f9a8c2ef4ea43fc8017\spring-boot-starter-web-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-kotlin\2.15.4\8801daa3840336ff3de969ce4cb8a3b1a9be0412\jackson-module-kotlin-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-reflect\1.9.23\ab01e1cc8428c2140891318838ad7039f6fa389a\kotlin-reflect-1.9.23.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.9.23\dbaadea1f5e68f790d242a91a38355a83ec38747\kotlin-stdlib-1.9.23.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\3.2.4\d8c5f393d9b18d96021b3e02d80e4356c5cbe0f7\spring-boot-starter-data-jpa-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webflux\6.1.5\f4868f747fc029e350cfdf0727f67cac359ee1af\spring-webflux-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\3.2.4\ef3f72369ce7f6f7a7b02c0b23e60ef5bdf581b1\spring-boot-starter-json-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\3.2.4\842cf7f0ed2ecfef3011f3191fc53c59ceed752\spring-boot-starter-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\3.2.4\ffa632eeaaf1a4e807ec4bbcc1938f7d43096472\spring-boot-starter-tomcat-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\6.1.5\92809fce136e0b662dc9325529443386ba5ec2c6\spring-webmvc-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\6.1.5\4f4e92cc52ee33260f1ee0cdc7b7a2f22d49708c\spring-web-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.15.4\560309fc381f77d4d15c4a4cdaa0db5025c4fd13\jackson-databind-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.15.4\5223ea5a9bf52cdc9c5e537a0e52f2432eaf208b\jackson-annotations-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-aop\3.2.4\11aedc0a23c43947608f2122eed08eabe5e2994c\spring-boot-starter-aop-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\3.2.4\7dd399e7ba19d62cae32be6e20edac37ff8fcbc0\spring-boot-starter-jdbc-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.hibernate.orm\hibernate-core\6.4.4.Final\5c9decb3c5a70bf7801d41fc32633416c26be069\hibernate-core-6.4.4.Final.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\3.2.4\1932f90c487999575b57ad41986de96c8ebf5843\spring-data-jpa-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\6.1.5\202d9da55e24fec2eda80bbc3cd87fbefc0e1256\spring-aspects-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\6.1.5\9ae967f467281c9bb977585ef4d5ea7351704d60\spring-beans-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\6.1.5\6dae1b06ffacbb9abab636be2dbc6acd3b6e5d68\spring-core-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.projectreactor\reactor-core\3.6.4\ef683486f29c4bbd1615abc5a83efc6bad8be871\reactor-core-3.6.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.15.4\694777f182334a21bf1aeab1b04cc4398c801f3f\jackson-datatype-jdk8-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.15.4\7de629770a4559db57128d35ccae7d2fddd35db3\jackson-datatype-jsr310-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.15.4\e654497a08359db2521b69b5f710e00836915d8c\jackson-module-parameter-names-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\3.2.4\b3f481aff8f0775f44d78399c804a8c52d75b971\spring-boot-autoconfigure-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\3.2.4\ccb7cbb30dcf1d91dbbf20a3219a457eead46601\spring-boot-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\2.1.1\48b9bda22b091b1f48b13af03fe36db3be6e1ae3\jakarta.annotation-api-2.1.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\3.2.4\32616f4a33ec0fda0c54aaa67ab10dc78df3fd78\spring-boot-starter-logging-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\2.2\3af797a25458550a16bf89acc8e4ab2b7f2bfce0\snakeyaml-2.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\10.1.19\adf4710fac2471236f8a466ca678cdf7e6a8257c\tomcat-embed-websocket-10.1.19.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\10.1.19\3dbbca8acbd4dd6a137c3d6f934a2931512b42ce\tomcat-embed-core-10.1.19.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\10.1.19\c61a582c391aca130884a5421deedfe1a96c7415\tomcat-embed-el-10.1.19.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\6.1.5\735d1bd7372d7c53e7b31b4a9c980ce2e0b26424\spring-context-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\6.1.5\a4f596bd3c55b6cec93f0e2e7245dd0bab8afec3\spring-aop-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\6.1.5\7e21cb1c6bbef1509e12d485b75ffc61278d9fa7\spring-expression-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-observation\1.12.4\492deebbd9b8ab23f588428f66578e21af266e01\micrometer-observation-1.12.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.15.4\aebe84b45360debad94f692a4074c6aceb535fa0\jackson-core-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.21\beaabaea95c7f3330f415c72ee0ffe79b51d172f\aspectjweaver-1.9.21.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\6.1.5\e8617dcddd3377c809b3e62c325fcb923163cb20\spring-jdbc-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\5.0.1\a74c7f0a37046846e88d54f7cb6ea6d565c65f9c\HikariCP-5.0.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\3.1.0\66901fa1c373c6aff65c13791cc11da72060a8d6\jakarta.persistence-api-3.1.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\2.0.1\51a520e3fae406abb84e2e1148e6746ce3f80a1a\jakarta.transaction-api-2.0.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\6.1.5\d2dc2b996680fcc8ae5aea294f0ce6bda5577c7c\spring-orm-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\3.2.4\c934470822afb9f0751915b229d6fe28ff5e1ac2\spring-data-commons-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\6.1.5\90e95f4c3e30f9ecaef6ba53186ed21afebba618\spring-tx-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4-runtime\4.13.0\5a02e48521624faaf5ff4d99afc88b01686af655\antlr4-runtime-4.13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\2.0.12\48f109a2a6d8f446c794f3e3fa0d86df0cdfa312\slf4j-api-2.0.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\6.1.5\896ae3519327731589c6e77521656b50ae32d5b3\spring-jcl-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.reactivestreams\reactive-streams\1.0.4\3864a1320d97d7b045f729a326e1e077661f31b7\reactive-streams-1.0.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.4.14\d98bc162275134cdf1518774da4a2a17ef6fb94d\logback-classic-1.4.14.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.21.1\d77b2ba81711ed596cd797cc2b5b5bd7409d841c\log4j-to-slf4j-2.21.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\2.0.12\eb5f48f782b41cc881b0bf1fb4d88ae2ff6d5b93\jul-to-slf4j-2.0.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-commons\1.12.4\a57f10c78956b38087f97beae66cf14cb8b08d34\micrometer-commons-1.12.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.4.14\4d3c2248219ac0effeb380ed4c5280a80bf395e8\logback-core-1.4.14.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.21.1\74c65e87b9ce1694a01524e192d7be989ba70486\log4j-api-2.21.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-devtools\3.2.4\ccd261700a4ff8e8f629a4d267f0b4f53ca17897\spring-boot-devtools-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.mariadb.jdbc\mariadb-java-client\3.3.3\149f773186f5b7d2e840cfaecf4e3bcdddf7b065\mariadb-java-client-3.3.3.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.github.waffle\waffle-jna\3.3.0\6c1a06b345702bb1dfd77006af926b091bded851\waffle-jna-3.3.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jboss.logging\jboss-logging\3.5.3.Final\c88fc1d8a96d4c3491f55d4317458ccad53ca663\jboss-logging-3.5.3.Final.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.hibernate.common\hibernate-commons-annotations\6.0.6.Final\77a5f94b56d49508e0ee334751db5b78e5ccd50c\hibernate-commons-annotations-6.0.6.Final.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.smallrye\jandex\3.1.2\a6c1c89925c7df06242b03dddb353116ceb9584c\jandex-3.1.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml\classmate\1.6.0\91affab6f84a2182fce5dd72a8d01bc14346dddd\classmate-1.6.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.14.12\6e37f743dc15a8d7a4feb3eb0025cbc612d5b9e1\byte-buddy-1.14.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\4.0.5\ca84c2a7169b5293e232b9d00d1e4e36d4c3914a\jaxb-runtime-4.0.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.xml.bind\jakarta.xml.bind-api\4.0.2\6cd5a999b834b63238005b7144136379dc36cad2\jakarta.xml.bind-api-4.0.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.inject\jakarta.inject-api\2.0.1\4c28afe1991a941d7702fe1362c365f0a8641d1e\jakarta.inject-api-2.0.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.slf4j\jcl-over-slf4j\2.0.12\4462ddec70c0126e580dd0a637cb105a3c7a99ab\jcl-over-slf4j-2.0.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna-platform\5.13.0\88e9a306715e9379f3122415ef4ae759a352640d\jna-platform-5.13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna\5.13.0\1200e7ebeedbe0d10062093f32925a912020e747\jna-5.13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.github.ben-manes.caffeine\caffeine\3.1.8\24795585df8afaf70a2cd534786904ea5889c047\caffeine-3.1.8.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\3.37.0\ba74746d38026581c12166e164bb3c15e90cc4ea\checker-qual-3.37.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-core\4.0.5\7b4b11ea5542eea4ad55e1080b23be436795b3\jaxb-core-4.0.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\2.1.3\fa165bd70cda600368eee31555222776a46b881f\jakarta.activation-api-2.1.3.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.21.1\6d9b10773b5237df178a7b3c1b4208df7d0e7f94\error_prone_annotations-2.21.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.eclipse.angus\angus-activation\2.0.2\41f1e0ddd157c856926ed149ab837d110955a9fc\angus-activation-2.0.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\4.0.5\f36a4ef12120a9bb06d766d6a0e54b144fd7ed98\txw2-4.0.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\4.1.2\18ec117c85f3ba0ac65409136afa8e42bc74e739\istack-commons-runtime-4.1.2.jar com.example.study.StudyApplicationKt

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

[08:37:52.995][INFO ][com.example.study.StudyApplicationKt.logStarting:line50] - Starting StudyApplicationKt using Java 20 with PID 16772 (C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\classes\kotlin\main started by SmileB in C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI)
[08:37:53.012][INFO ][com.example.study.StudyApplicationKt.logStartupProfileInfo:line654] - No active profile set, falling back to 1 default profile: "default"
[08:37:53.300][INFO ][org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo:line252] - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
[08:37:53.301][INFO ][org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo:line252] - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
[08:37:55.070][INFO ][org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn:line139] - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
[08:37:55.364][INFO ][org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn:line208] - Finished Spring Data repository scanning in 274 ms. Found 1 JPA repository interface.
[08:37:57.057][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize:line109] - Tomcat initialized with port 9999 (http)
[08:37:57.085][INFO ][org.apache.catalina.core.StandardService.log:line173] - Starting service [Tomcat]
[08:37:57.086][INFO ][org.apache.catalina.core.StandardEngine.log:line173] - Starting Servlet engine: [Apache Tomcat/10.1.19]
[08:37:57.199][INFO ][org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].log:line173] - Initializing Spring embedded WebApplicationContext
[08:37:57.201][INFO ][org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext:line296] - Root WebApplicationContext: initialization completed in 3895 ms
[08:37:57.624][INFO ][org.hibernate.jpa.internal.util.LogHelper.logPersistenceUnitInformation:line31] - HHH000204: Processing PersistenceUnitInfo [name: default]
[08:37:57.782][INFO ][org.hibernate.Version.logVersion:line44] - HHH000412: Hibernate ORM core version 6.4.4.Final
[08:37:57.856][INFO ][org.hibernate.cache.internal.RegionFactoryInitiator.initiateService:line50] - HHH000026: Second-level cache disabled
[08:37:58.210][INFO ][org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.addTransformer:line87] - No LoadTimeWeaver setup: ignoring JPA class transformer
[08:37:58.242][INFO ][com.zaxxer.hikari.HikariDataSource.getConnection:line110] - HikariPool-1 - Starting...
[08:37:58.404][INFO ][com.zaxxer.hikari.pool.HikariPool.checkFailFast:line565] - HikariPool-1 - Added connection org.mariadb.jdbc.Connection@44835f7f
[08:37:58.407][INFO ][com.zaxxer.hikari.HikariDataSource.getConnection:line123] - HikariPool-1 - Start completed.
[08:37:58.507][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(12, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1e213bd9) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@30f72e41)
[08:37:58.507][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(-9, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@5a67fc20) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@6a7bcc5b)
[08:37:58.507][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(-3, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@7d13dd3e) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@749f71fb)
[08:37:58.508][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4003, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@11fc05b4) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@25d11ac4)
[08:37:58.508][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4001, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@46c8d96d) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@495768e6)
[08:37:58.508][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4002, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@38f705dd) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@15dd2f3d)
[08:37:58.508][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2004, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@15de8f5a) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@67bcd55f)
[08:37:58.508][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2005, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@6765fd98) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1bbd828e)
[08:37:58.509][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2011, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@7a786afc) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@7b6f4ec1)
[08:37:59.457][INFO ][org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator.initiateService:line58] - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
[08:37:59.481][DEBUG][org.hibernate.SQL.logStatement:line135] - 
    drop table if exists wordcount
[08:37:59.512][DEBUG][org.hibernate.SQL.logStatement:line135] - 
    create table wordcount (
        cnt integer not null,
        word varchar(255) not null,
        primary key (word)
    ) engine=InnoDB
[08:37:59.529][INFO ][org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.buildNativeEntityManagerFactory:line437] - Initialized JPA EntityManagerFactory for persistence unit 'default'
[08:38:00.539][INFO ][org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer.startServer:line59] - LiveReload server is running on port 35729
[08:38:00.589][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start:line241] - Tomcat started on port 9999 (http) with context path ''
[08:38:00.604][INFO ][com.example.study.StudyApplicationKt.logStarted:line56] - Started StudyApplicationKt in 9.415 seconds (process running for 11.647)

서버가 실행됐으면 Postman을 실행시켜서 다시 요청을 해보자
저번시간에

http://localhost:9999/api/blog

위 주소로 아래의 요청을 했을땐, searchKakao가 반환이 됐는데,

{
    "query": "애니",
    "sort": "Anime",
    "page": 1,
    "size": 10
}

{"documents":[{"blogname":"soy2on2","contents":"아닐 수도 있는_ 사적인 리스트 - 새벽의 연화 첫인상과 다르게 보면 볼수록 스토리가 탄탄하다. 1기는 이야기가 시작되는 프롤로그 느낌. 홍보성으로 만든 \u003cb\u003e애니\u003c/b\u003e라고 하던데 뒤는 만화를 봐야겠다. - 사사키와 미야노 ●●●●◐ 낯간지러운 BL물 치고 꽤 볼만하다. - 시광대리인 1기\u0026amp;2기 포스터만 보고 그렇고 그런 BL...","datetime":"2024-02-05T16:16:17.000+09:00","thumbnail":"","title":"📌본 \u003cb\u003e애니\u003c/b\u003e 리스트","url":"https://soy2on2.tistory.com/2"},{"blogname":"햇빛쨍쨍한오늘","contents":"​ 별거 없는데요 그냥 봐주세요^^ 줄거리 포함 안 되어 있음 진짜 추천만 함ㅋㅋㅋㅋ ​ 그 비스크돌은 사랑을 한다 평소보던 로맨스 \u003cb\u003e애니\u003c/b\u003e들은 여성향인데 비스크돌은 여성향 + 남성향, 여주가 코스프레를 하기 때문에 노출이 많고 쓸데없이 속옷을 주는 장면이 많아서 첨엔 뭐지??? 기분 나쁠 수 있는데 생각보다 전 흐린...","datetime":"2024-03-19T13:58:00.000+09:00","thumbnail":"https://search1.kakaocdn.net/argon/130x130_85_c/vipInxHsb4","title":"\u003cb\u003e애니\u003c/b\u003e 추천 들어간다....","url":"https://blog.naver.com/summer_adore/223388245750"},{"blogname":"꿀정보 콜렉션","contents":"마슐\u0026gt;을 무리없이 즐길 수 있을 것이다. 1. 정보 원제 : マッシュル (Mashle: Magic And Muscles) 장르 : 학원 배틀, 판타지, 개그, 패러디 작가 : 코모토 하지메 \u003cb\u003e애니\u003c/b\u003e : 현재 1기 12화까지 나왔다. 넷플릭스에서 볼 수 있다. 단행본 : 14권 발매 시점에서 누계 400만부를 돌파했고 162화, 총 18권으로 완결되었다. 만화...","datetime":"2024-03-26T09:00:34.000+09:00","thumbnail":"https://search3.kakaocdn.net/argon/130x130_85_c/FfnYAr3yJWG","title":"\u003cb\u003e애니\u003c/b\u003e [마슐] 줄거리, 결말, 마슐 뜻","url":"https://cheesdal.tistory.com/3715"},{"blogname":"시 쓰는 걸 좋아하는 공대생","contents":"힐링 코미디. 감독: 오다카 요시노리 장르: 코미디 제작신: 에이 동화 SynergySP 등급: 15세 관람 방송: 매주(화) 00:00 일상의 치유되는 힐링\u003cb\u003e애니\u003c/b\u003e를 보고싶은 분들! 잔잔한 \u003cb\u003e애니\u003c/b\u003e를 보고싶은 분들! 착한? 악당을 보고싶은 분들! 추.천 드립니당 2. high card(2기) \u0026#34;저 녀석이... 내 가족을...!\u0026#34; 나라 곳곳에 흩어진 카드...","datetime":"2024-02-06T19:25:20.000+09:00","thumbnail":"https://search1.kakaocdn.net/argon/130x130_85_c/2MoOmfoGOxO","title":"2024년 \u003cb\u003e애니\u003c/b\u003e추천","url":"https://poem-engineering.tistory.com/3"},{"blogname":"조개껍데기","contents":"우리 애쉬를 억까한다면 나라도 사랑하고 돌봐주고 아껴주면 돼... 왜 모든 능력을 몰아줬는데 이 아이의 삶은 괴롭기만 한 건지 슬프다. 만화책 먼저 보고 \u003cb\u003e애니\u003c/b\u003e 본 건데 둘 다 좋았다. 밥 먹을 때마다 봤는데 식사시간마다 이마를 짚던가 가슴을 부여잡는 경험을 할 수 있다. 바나나 피쉬 연출 미등록 출연 미등록 방송...","datetime":"2024-03-22T22:22:00.000+09:00","thumbnail":"https://search4.kakaocdn.net/argon/130x130_85_c/LtEgjnb4qKC","title":"콘텐츠 로그 _ \u003cb\u003e애니\u003c/b\u003e 편📺","url":"https://blog.naver.com/little_moment_s/223392273459"},{"blogname":"다똥's daily","contents":"안녕하세요!! 매월동 매월농원 옆에 위치한 \u0026lt;\u003cb\u003e애니\u003c/b\u003e\u0026gt;카페를 소개하려고 합니다! 전평제 호수공원쪽에 있어 앞에서 산책하다가 쉬어갈 겸 들리기 좋을 것 같은 \u0026lt;\u003cb\u003e애니\u003c/b\u003e\u0026gt; ​ \u0026lt;\u003cb\u003e애니\u003c/b\u003e\u0026gt;카페의 외관은 이렇게 생겼어요! 앞에 조명들이 있어서 저녁에 오면 분위기가 완전 좋을 것 같아보여요:) ​ 이번에 저는 낮에 방문했지만 다음번엔...","datetime":"2024-03-11T11:23:00.000+09:00","thumbnail":"https://search1.kakaocdn.net/argon/130x130_85_c/KXWujhfxzr","title":"광주 매월동 분위기 카페추천 \u0026lt;\u003cb\u003e애니\u003c/b\u003e\u0026gt;","url":"https://blog.naver.com/cdh0619/223379632058"},{"blogname":"오스카르소의 일반인 생활기","contents":"목차 1. 개요 2. 애니메이트 3. \u003cb\u003e애니\u003c/b\u003e플러스 4. 지하철 광고 1. 개요 *중요 데이터 주의 글 쓰기 귀찮아서 사진 매우 많음 * \u003cb\u003e애니\u003c/b\u003e플러스 카페에서2024.03.07 (목) ~ 2024.04.21 (일) 약 6주간 HoloX 콜라보 카페를 진행한다 해서 03월 09일 14시에 예약해서 갔습니다. 제 글을 많이 보신 분이라면 위치는 익숙 하실테니...","datetime":"2024-03-10T00:13:35.000+09:00","thumbnail":"https://search1.kakaocdn.net/argon/130x130_85_c/CIld6NHkzWw","title":"HoloX \u003cb\u003e애니\u003c/b\u003e플러스 콜라보 카페 (+ 홍대 애니메이트) 후기","url":"https://othkkartho.tistory.com/83"},{"blogname":"정와의 세상탐방","contents":"평창 \u003cb\u003e애니\u003c/b\u003e포레는 동물을 뜻하는 Animal과 숲을 뜻하는 Forest의 합성어로 동물과 숲이 함께 하는 공간을 의미하며 용평 리조트 내에 위치해 있습니다. 알파카목장에서는 알파카를 비롯한 다양한 동물들에게 먹이 주기 체험을 할 수 있으며 가문비나무 숲길을 걸으며 이국적인 풍경을 감상할 수 도 있는 곳입니다. 평창...","datetime":"2024-02-18T06:08:10.000+09:00","thumbnail":"https://search3.kakaocdn.net/argon/130x130_85_c/JpKseiNx2Xf","title":"평창 \u003cb\u003e애니\u003c/b\u003e포레","url":"https://happydogather.com/260"},{"blogname":"샹크스","contents":"원피스 \u003cb\u003e애니\u003c/b\u003e 목차 최신화 원피스 1098화 \u003cb\u003e애니\u003c/b\u003e 고대병기 설명 쿠마 본체 등장 시작 혁명군 쿠마 등장하다 S베어 CP0 등장 나오는 편 원피스 1098화 정리 마무리 최신화 원피스 1098화 \u003cb\u003e애니\u003c/b\u003e 원피스 1098화 \u003cb\u003e애니\u003c/b\u003e 최신화 쿠마 등장 편에 대해서 줄거리 리뷰를 해보겠습니다. 이번 원피스 \u003cb\u003e애니\u003c/b\u003e 최신화에서는 고대병기 TMI를...","datetime":"2024-03-24T11:36:00.000+09:00","thumbnail":"https://search3.kakaocdn.net/argon/130x130_85_c/GWToujDKeWw","title":"원피스 1098화 \u003cb\u003e애니\u003c/b\u003e 최신화 쿠마 등장","url":"https://blog.naver.com/saontsdkss119/223393451387"},{"blogname":"디어두어","contents":"장장 2년만에 다시 업로드 하는 \u003cb\u003e애니\u003c/b\u003e캐릭터 해석! 영어로된 자료를 한글화 시키고, 어떤 \u003cb\u003e애니\u003c/b\u003e에서 나오는지 정보도 추가했습니다. 첫번째는 INFJ 입니다! INFJ 가 검색어 순위 1위라고 하네요? INFJ 분들의 MBTI 사랑이 뜨거운 것 같습니다. 그럼 각 캐릭터별 성격 들여다보기, 시작해볼까요? 데쿠 (미도리야 이즈쿠...","datetime":"2024-03-06T00:50:31.000+09:00","thumbnail":"https://search2.kakaocdn.net/argon/130x130_85_c/CwDvGBVHP8F","title":"MBTI \u003cb\u003e애니\u003c/b\u003e 캐릭터로 들여다보는 INFJ","url":"https://deardoer.tistory.com/117"}],"meta":{"is_end":false,"pageable_count":788,"total_count":2017870}}

새벽의 연화, 원피스, 마슐 등 애니에 관한 내용들을 가져온것을 확인 할 수 있다.

이것으로 KaKao API가 정상적으로 동작한 것을 확인했다.

이때 사용했던 API KEY를 다음부터 관리하기 편하게 어플리케이션 yml로 따로 빼서 처리해보겠다.

이 프로젝트 초반에 진행했던, application.yml은 프로젝트들을 시작할때 기본 세팅값으로 api key를 여기다 빼두면 해당 api키를 가진 애플리케이션을 이용한 프로젝트들에 적용할수 있고, 소스코드에도 들어가지 않아 관리하기 편하다

다시 돌아와서 상단에 @Value를 입력하면 아래와 같이 나오는데 첫번째 자동완성을 선택해준다.

API 키를 입력해줬는데 에러가 발생한다.

아 잘못입력했다.

searchKakao 함수 밖에다 선언해줘야한다.

이어서 가져온 값을 변수에 담아주고,

header에 가져와준다.

다시 어플리케이션을 실행해보면,

"C:\Program Files\Java\jdk-20\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3.5\lib\idea_rt.jar=63609:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2023.3.5\bin" -Dfile.encoding=UTF-8 -Dsun.stdout.encoding=UTF-8 -Dsun.stderr.encoding=UTF-8 -classpath C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\classes\kotlin\main;C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\resources\main;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-web\3.2.4\a74df12b71060da7c8e87f9a8c2ef4ea43fc8017\spring-boot-starter-web-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-kotlin\2.15.4\8801daa3840336ff3de969ce4cb8a3b1a9be0412\jackson-module-kotlin-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-reflect\1.9.23\ab01e1cc8428c2140891318838ad7039f6fa389a\kotlin-reflect-1.9.23.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlin\kotlin-stdlib\1.9.23\dbaadea1f5e68f790d242a91a38355a83ec38747\kotlin-stdlib-1.9.23.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-data-jpa\3.2.4\d8c5f393d9b18d96021b3e02d80e4356c5cbe0f7\spring-boot-starter-data-jpa-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webflux\6.1.5\f4868f747fc029e350cfdf0727f67cac359ee1af\spring-webflux-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-json\3.2.4\ef3f72369ce7f6f7a7b02c0b23e60ef5bdf581b1\spring-boot-starter-json-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter\3.2.4\842cf7f0ed2ecfef3011f3191fc53c59ceed752\spring-boot-starter-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-tomcat\3.2.4\ffa632eeaaf1a4e807ec4bbcc1938f7d43096472\spring-boot-starter-tomcat-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-webmvc\6.1.5\92809fce136e0b662dc9325529443386ba5ec2c6\spring-webmvc-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-web\6.1.5\4f4e92cc52ee33260f1ee0cdc7b7a2f22d49708c\spring-web-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-databind\2.15.4\560309fc381f77d4d15c4a4cdaa0db5025c4fd13\jackson-databind-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-annotations\2.15.4\5223ea5a9bf52cdc9c5e537a0e52f2432eaf208b\jackson-annotations-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jetbrains\annotations\13.0\919f0dfe192fb4e063e7dacadee7f8bb9a2672a9\annotations-13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-aop\3.2.4\11aedc0a23c43947608f2122eed08eabe5e2994c\spring-boot-starter-aop-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-jdbc\3.2.4\7dd399e7ba19d62cae32be6e20edac37ff8fcbc0\spring-boot-starter-jdbc-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.hibernate.orm\hibernate-core\6.4.4.Final\5c9decb3c5a70bf7801d41fc32633416c26be069\hibernate-core-6.4.4.Final.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-jpa\3.2.4\1932f90c487999575b57ad41986de96c8ebf5843\spring-data-jpa-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aspects\6.1.5\202d9da55e24fec2eda80bbc3cd87fbefc0e1256\spring-aspects-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-beans\6.1.5\9ae967f467281c9bb977585ef4d5ea7351704d60\spring-beans-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-core\6.1.5\6dae1b06ffacbb9abab636be2dbc6acd3b6e5d68\spring-core-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.projectreactor\reactor-core\3.6.4\ef683486f29c4bbd1615abc5a83efc6bad8be871\reactor-core-3.6.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jdk8\2.15.4\694777f182334a21bf1aeab1b04cc4398c801f3f\jackson-datatype-jdk8-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.datatype\jackson-datatype-jsr310\2.15.4\7de629770a4559db57128d35ccae7d2fddd35db3\jackson-datatype-jsr310-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.module\jackson-module-parameter-names\2.15.4\e654497a08359db2521b69b5f710e00836915d8c\jackson-module-parameter-names-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-autoconfigure\3.2.4\b3f481aff8f0775f44d78399c804a8c52d75b971\spring-boot-autoconfigure-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot\3.2.4\ccb7cbb30dcf1d91dbbf20a3219a457eead46601\spring-boot-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.annotation\jakarta.annotation-api\2.1.1\48b9bda22b091b1f48b13af03fe36db3be6e1ae3\jakarta.annotation-api-2.1.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-starter-logging\3.2.4\32616f4a33ec0fda0c54aaa67ab10dc78df3fd78\spring-boot-starter-logging-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.yaml\snakeyaml\2.2\3af797a25458550a16bf89acc8e4ab2b7f2bfce0\snakeyaml-2.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-websocket\10.1.19\adf4710fac2471236f8a466ca678cdf7e6a8257c\tomcat-embed-websocket-10.1.19.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-core\10.1.19\3dbbca8acbd4dd6a137c3d6f934a2931512b42ce\tomcat-embed-core-10.1.19.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.tomcat.embed\tomcat-embed-el\10.1.19\c61a582c391aca130884a5421deedfe1a96c7415\tomcat-embed-el-10.1.19.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-context\6.1.5\735d1bd7372d7c53e7b31b4a9c980ce2e0b26424\spring-context-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-aop\6.1.5\a4f596bd3c55b6cec93f0e2e7245dd0bab8afec3\spring-aop-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-expression\6.1.5\7e21cb1c6bbef1509e12d485b75ffc61278d9fa7\spring-expression-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-observation\1.12.4\492deebbd9b8ab23f588428f66578e21af266e01\micrometer-observation-1.12.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml.jackson.core\jackson-core\2.15.4\aebe84b45360debad94f692a4074c6aceb535fa0\jackson-core-2.15.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.aspectj\aspectjweaver\1.9.21\beaabaea95c7f3330f415c72ee0ffe79b51d172f\aspectjweaver-1.9.21.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jdbc\6.1.5\e8617dcddd3377c809b3e62c325fcb923163cb20\spring-jdbc-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.zaxxer\HikariCP\5.0.1\a74c7f0a37046846e88d54f7cb6ea6d565c65f9c\HikariCP-5.0.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.persistence\jakarta.persistence-api\3.1.0\66901fa1c373c6aff65c13791cc11da72060a8d6\jakarta.persistence-api-3.1.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.transaction\jakarta.transaction-api\2.0.1\51a520e3fae406abb84e2e1148e6746ce3f80a1a\jakarta.transaction-api-2.0.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-orm\6.1.5\d2dc2b996680fcc8ae5aea294f0ce6bda5577c7c\spring-orm-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.data\spring-data-commons\3.2.4\c934470822afb9f0751915b229d6fe28ff5e1ac2\spring-data-commons-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-tx\6.1.5\90e95f4c3e30f9ecaef6ba53186ed21afebba618\spring-tx-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.antlr\antlr4-runtime\4.13.0\5a02e48521624faaf5ff4d99afc88b01686af655\antlr4-runtime-4.13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.slf4j\slf4j-api\2.0.12\48f109a2a6d8f446c794f3e3fa0d86df0cdfa312\slf4j-api-2.0.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework\spring-jcl\6.1.5\896ae3519327731589c6e77521656b50ae32d5b3\spring-jcl-6.1.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.reactivestreams\reactive-streams\1.0.4\3864a1320d97d7b045f729a326e1e077661f31b7\reactive-streams-1.0.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-classic\1.4.14\d98bc162275134cdf1518774da4a2a17ef6fb94d\logback-classic-1.4.14.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-to-slf4j\2.21.1\d77b2ba81711ed596cd797cc2b5b5bd7409d841c\log4j-to-slf4j-2.21.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.slf4j\jul-to-slf4j\2.0.12\eb5f48f782b41cc881b0bf1fb4d88ae2ff6d5b93\jul-to-slf4j-2.0.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.micrometer\micrometer-commons\1.12.4\a57f10c78956b38087f97beae66cf14cb8b08d34\micrometer-commons-1.12.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\ch.qos.logback\logback-core\1.4.14\4d3c2248219ac0effeb380ed4c5280a80bf395e8\logback-core-1.4.14.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.apache.logging.log4j\log4j-api\2.21.1\74c65e87b9ce1694a01524e192d7be989ba70486\log4j-api-2.21.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.springframework.boot\spring-boot-devtools\3.2.4\ccd261700a4ff8e8f629a4d267f0b4f53ca17897\spring-boot-devtools-3.2.4.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.mariadb.jdbc\mariadb-java-client\3.3.3\149f773186f5b7d2e840cfaecf4e3bcdddf7b065\mariadb-java-client-3.3.3.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.github.waffle\waffle-jna\3.3.0\6c1a06b345702bb1dfd77006af926b091bded851\waffle-jna-3.3.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.jboss.logging\jboss-logging\3.5.3.Final\c88fc1d8a96d4c3491f55d4317458ccad53ca663\jboss-logging-3.5.3.Final.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.hibernate.common\hibernate-commons-annotations\6.0.6.Final\77a5f94b56d49508e0ee334751db5b78e5ccd50c\hibernate-commons-annotations-6.0.6.Final.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\io.smallrye\jandex\3.1.2\a6c1c89925c7df06242b03dddb353116ceb9584c\jandex-3.1.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.fasterxml\classmate\1.6.0\91affab6f84a2182fce5dd72a8d01bc14346dddd\classmate-1.6.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\net.bytebuddy\byte-buddy\1.14.12\6e37f743dc15a8d7a4feb3eb0025cbc612d5b9e1\byte-buddy-1.14.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-runtime\4.0.5\ca84c2a7169b5293e232b9d00d1e4e36d4c3914a\jaxb-runtime-4.0.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.xml.bind\jakarta.xml.bind-api\4.0.2\6cd5a999b834b63238005b7144136379dc36cad2\jakarta.xml.bind-api-4.0.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.inject\jakarta.inject-api\2.0.1\4c28afe1991a941d7702fe1362c365f0a8641d1e\jakarta.inject-api-2.0.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.slf4j\jcl-over-slf4j\2.0.12\4462ddec70c0126e580dd0a637cb105a3c7a99ab\jcl-over-slf4j-2.0.12.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna-platform\5.13.0\88e9a306715e9379f3122415ef4ae759a352640d\jna-platform-5.13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\net.java.dev.jna\jna\5.13.0\1200e7ebeedbe0d10062093f32925a912020e747\jna-5.13.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.github.ben-manes.caffeine\caffeine\3.1.8\24795585df8afaf70a2cd534786904ea5889c047\caffeine-3.1.8.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.checkerframework\checker-qual\3.37.0\ba74746d38026581c12166e164bb3c15e90cc4ea\checker-qual-3.37.0.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\jaxb-core\4.0.5\7b4b11ea5542eea4ad55e1080b23be436795b3\jaxb-core-4.0.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\jakarta.activation\jakarta.activation-api\2.1.3\fa165bd70cda600368eee31555222776a46b881f\jakarta.activation-api-2.1.3.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.google.errorprone\error_prone_annotations\2.21.1\6d9b10773b5237df178a7b3c1b4208df7d0e7f94\error_prone_annotations-2.21.1.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.eclipse.angus\angus-activation\2.0.2\41f1e0ddd157c856926ed149ab837d110955a9fc\angus-activation-2.0.2.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\org.glassfish.jaxb\txw2\4.0.5\f36a4ef12120a9bb06d766d6a0e54b144fd7ed98\txw2-4.0.5.jar;C:\Users\SmileB\.gradle\caches\modules-2\files-2.1\com.sun.istack\istack-commons-runtime\4.1.2\18ec117c85f3ba0ac65409136afa8e42bc74e739\istack-commons-runtime-4.1.2.jar com.example.study.StudyApplicationKt

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v3.2.4)

[08:58:55.134][INFO ][com.example.study.StudyApplicationKt.logStarting:line50] - Starting StudyApplicationKt using Java 20 with PID 18524 (C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\classes\kotlin\main started by SmileB in C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI)
[08:58:55.137][INFO ][com.example.study.StudyApplicationKt.logStartupProfileInfo:line654] - No active profile set, falling back to 1 default profile: "default"
[08:58:55.231][INFO ][org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo:line252] - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
[08:58:55.231][INFO ][org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo:line252] - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
[08:58:56.451][INFO ][org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn:line139] - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
[08:58:56.684][INFO ][org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn:line208] - Finished Spring Data repository scanning in 214 ms. Found 1 JPA repository interface.
[08:58:57.647][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize:line109] - Tomcat initialized with port 9999 (http)
[08:58:57.667][INFO ][org.apache.catalina.core.StandardService.log:line173] - Starting service [Tomcat]
[08:58:57.667][INFO ][org.apache.catalina.core.StandardEngine.log:line173] - Starting Servlet engine: [Apache Tomcat/10.1.19]
[08:58:57.742][INFO ][org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].log:line173] - Initializing Spring embedded WebApplicationContext
[08:58:57.743][INFO ][org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext:line296] - Root WebApplicationContext: initialization completed in 2510 ms
[08:58:58.017][INFO ][org.hibernate.jpa.internal.util.LogHelper.logPersistenceUnitInformation:line31] - HHH000204: Processing PersistenceUnitInfo [name: default]
[08:58:58.127][INFO ][org.hibernate.Version.logVersion:line44] - HHH000412: Hibernate ORM core version 6.4.4.Final
[08:58:58.200][INFO ][org.hibernate.cache.internal.RegionFactoryInitiator.initiateService:line50] - HHH000026: Second-level cache disabled
[08:58:58.645][INFO ][org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.addTransformer:line87] - No LoadTimeWeaver setup: ignoring JPA class transformer
[08:58:58.690][INFO ][com.zaxxer.hikari.HikariDataSource.getConnection:line110] - HikariPool-1 - Starting...
[08:58:58.815][INFO ][com.zaxxer.hikari.pool.HikariPool.checkFailFast:line565] - HikariPool-1 - Added connection org.mariadb.jdbc.Connection@86e2de1
[08:58:58.816][INFO ][com.zaxxer.hikari.HikariDataSource.getConnection:line123] - HikariPool-1 - Start completed.
[08:58:58.918][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(12, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@3250c711) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@4a2e3a61)
[08:58:58.918][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(-9, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@51acb340) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@72842822)
[08:58:58.919][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(-3, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@46d8012c) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@7d1ec6a4)
[08:58:58.919][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4003, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@491c4cf4) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1a8ab8cd)
[08:58:58.920][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4001, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1cdd0bd1) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@177dd508)
[08:58:58.920][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4002, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@3cad40ff) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@73aecb77)
[08:58:58.920][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2004, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@759d550) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@7e758526)
[08:58:58.921][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2005, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@280998af) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@2d790baa)
[08:58:58.921][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2011, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@64c3a800) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@364d4d0b)
[08:58:59.942][INFO ][org.hibernate.engine.transaction.jta.platform.internal.JtaPlatformInitiator.initiateService:line58] - HHH000489: No JTA platform available (set 'hibernate.transaction.jta.platform' to enable JTA platform integration)
[08:58:59.963][DEBUG][org.hibernate.SQL.logStatement:line135] - 
    drop table if exists wordcount
[08:58:59.988][DEBUG][org.hibernate.SQL.logStatement:line135] - 
    create table wordcount (
        cnt integer not null,
        word varchar(255) not null,
        primary key (word)
    ) engine=InnoDB
[08:59:00.006][INFO ][org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.buildNativeEntityManagerFactory:line437] - Initialized JPA EntityManagerFactory for persistence unit 'default'
[08:59:01.230][INFO ][org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer.startServer:line59] - LiveReload server is running on port 35729
[08:59:01.322][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start:line241] - Tomcat started on port 9999 (http) with context path ''
[08:59:01.344][INFO ][com.example.study.StudyApplicationKt.logStarted:line56] - Started StudyApplicationKt in 6.78 seconds (process running for 7.862)

이상 없이 동작하고, 요청을 다시 해봐도 동작한다. 이번엔 query를 쿠팡으로하고 sort는 빈칸으로 두었다.

profile
감사합니다. https://www.youtube.com/channel/UCxlkiu9_aWijoD7BannNM7w

0개의 댓글