Controller 만들기

김성빈·2024년 3월 27일

controller 까지 만들면 API 호출을 통해 서버와 통신이 되는지 확인할 수 있다.

똑같이 blog 밑에 controller Package를 생성하고 그안에 Class Kotlin 파일을 생성한 뒤 API 사용을 위해 @RestController 를 선언해준다.

package com.example.study.blog.controller

import org.springframework.web.bind.annotation.RestController

@RestController
class BlogController {
}

그리고 API를 요청을 할때 기능을 제공하는 서버측에서 내 controller의 주소를 알아야 하므로 @RequestMapping을 추가해주고 그 주소는 /api/blog로 설정을 해주었다.

package com.example.study.blog.controller

import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController
@RequestMapping("/api/blog")
@RestController
class BlogController {
}

주소를 알려줬으니 Get 명령어가 들어왔을때 어떤 것들을 실행하는지 작성해줘야한다.

package com.example.study.blog.controller

import com.example.study.blog.dto.BlogDto
import com.example.study.blog.service.BlogService
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RestController

@RequestMapping("/api/blog") // 1. 클라이언트쪽에서 api/blog 쪽으로 호출
@RestController
class BlogController (
    val blogService: BlogService
){
    @GetMapping("") // 2. Get으로 호출시
    fun search(@RequestBody blogDto: BlogDto): String?{ // 3. search에 연결이 되고, 값들은 blogDto에 저장된다.
        val result = blogService.searchKaKao(blogDto) // 4. 그리고 그 결과 값이 kakaoService에 넘어가고 kakaoservice가 실행됨.
        return result
    }
}

위쪽 import는 아래 @RequestMapping, @RestController, @GetMapping, @RequestBody을 사용하기 위해서 선언한 것들이고, 실행 순서는 주석으로 처리했다.

API를 사용하면 api/blog에 호출을 하는데, Get으로 호출시 API를 이용해서 불러온 값들을 blogDto에 저장하고 그 결과를 저번에 생성한 service의 함수인 searchKakao가 실행된다.

설명한 대로 동작을 하기위해 서버를 실행한다.

StudyApplication.kt에 들어가서 실행을 해주면

"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=52544: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.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\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\org.springframework\spring-core\6.1.5\6dae1b06ffacbb9abab636be2dbc6acd3b6e5d68\spring-core-6.1.5.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-beans\6.1.5\9ae967f467281c9bb977585ef4d5ea7351704d60\spring-beans-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\com.zaxxer\HikariCP\5.0.1\a74c7f0a37046846e88d54f7cb6ea6d565c65f9c\HikariCP-5.0.1.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\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\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)

[19:20:20.795][INFO ][com.example.study.StudyApplicationKt.logStarting:line50] - Starting StudyApplicationKt using Java 20 with PID 3116 (C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI\study\build\classes\kotlin\main started by SmileB in C:\Users\SmileB\Desktop\kakaopay\SpringKotlinAPI)
[19:20:20.798][INFO ][com.example.study.StudyApplicationKt.logStartupProfileInfo:line654] - No active profile set, falling back to 1 default profile: "default"
[19:20:20.901][INFO ][org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo:line252] - Devtools property defaults active! Set 'spring.devtools.add-properties' to 'false' to disable
[19:20:20.902][INFO ][org.springframework.boot.devtools.env.DevToolsPropertyDefaultsPostProcessor.logTo:line252] - For additional web related logging consider setting the 'logging.level.web' property to 'DEBUG'
[19:20:22.114][INFO ][org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn:line139] - Bootstrapping Spring Data JPA repositories in DEFAULT mode.
[19:20:22.201][INFO ][org.springframework.data.repository.config.RepositoryConfigurationDelegate.registerRepositoriesIn:line208] - Finished Spring Data repository scanning in 75 ms. Found 1 JPA repository interface.
[19:20:23.266][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.initialize:line109] - Tomcat initialized with port 9999 (http)
[19:20:23.284][INFO ][org.apache.catalina.core.StandardService.log:line173] - Starting service [Tomcat]
[19:20:23.285][INFO ][org.apache.catalina.core.StandardEngine.log:line173] - Starting Servlet engine: [Apache Tomcat/10.1.19]
[19:20:23.362][INFO ][org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].log:line173] - Initializing Spring embedded WebApplicationContext
[19:20:23.363][INFO ][org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext:line296] - Root WebApplicationContext: initialization completed in 2460 ms
[19:20:23.625][INFO ][org.hibernate.jpa.internal.util.LogHelper.logPersistenceUnitInformation:line31] - HHH000204: Processing PersistenceUnitInfo [name: default]
[19:20:23.728][INFO ][org.hibernate.Version.logVersion:line44] - HHH000412: Hibernate ORM core version 6.4.4.Final
[19:20:23.794][INFO ][org.hibernate.cache.internal.RegionFactoryInitiator.initiateService:line50] - HHH000026: Second-level cache disabled
[19:20:24.207][INFO ][org.springframework.orm.jpa.persistenceunit.SpringPersistenceUnitInfo.addTransformer:line87] - No LoadTimeWeaver setup: ignoring JPA class transformer
[19:20:24.243][INFO ][com.zaxxer.hikari.HikariDataSource.getConnection:line110] - HikariPool-1 - Starting...
[19:20:24.386][INFO ][com.zaxxer.hikari.pool.HikariPool.checkFailFast:line565] - HikariPool-1 - Added connection org.mariadb.jdbc.Connection@311a1f54
[19:20:24.388][INFO ][com.zaxxer.hikari.HikariDataSource.getConnection:line123] - HikariPool-1 - Start completed.
[19:20:24.464][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(12, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@7130f934) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@1ea52c9f)
[19:20:24.464][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(-9, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@fe537ab) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@632db45)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(-3, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@70bd6bee) replaced previous registration(org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@474b60b2)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4003, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@61354f9f) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@71cd480f)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4001, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@6a34afc3) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@76e60cc7)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(4002, org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@3de4fc33) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@26f246b0)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2004, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@69f7af1a) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@2f3106d7)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2005, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@352e7266) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@1dd65b5)
[19:20:24.465][DEBUG][org.hibernate.type.descriptor.sql.spi.DdlTypeRegistry.addDescriptor:line64] - addDescriptor(2011, org.hibernate.type.descriptor.sql.internal.CapacityDependentDdlType@550685eb) replaced previous registration(org.hibernate.type.descriptor.sql.internal.DdlTypeImpl@72262622)
[19:20:25.356][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)
[19:20:25.376][DEBUG][org.hibernate.SQL.logStatement:line135] - 
    drop table if exists wordcount
[19:20:25.451][DEBUG][org.hibernate.SQL.logStatement:line135] - 
    create table wordcount (
        cnt integer not null,
        word varchar(255) not null,
        primary key (word)
    ) engine=InnoDB
[19:20:25.471][INFO ][org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.buildNativeEntityManagerFactory:line437] - Initialized JPA EntityManagerFactory for persistence unit 'default'
[19:20:26.459][INFO ][org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer.startServer:line59] - LiveReload server is running on port 35729
[19:20:26.504][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start:line241] - Tomcat started on port 9999 (http) with context path ''
[19:20:26.518][INFO ][com.example.study.StudyApplicationKt.logStarted:line56] - Started StudyApplicationKt in 6.41 seconds (process running for 7.147)

저번 시간과 똑같이 wordcount라는 것을 삭제하고 다시만든것을 이어서 확인할수있고, 정상적으로 실행된것을 확인했으니
실제로 그렇게 동작을 하는지 확인하기 위해 Postman(API 테스트 툴)에서
Get 방식으로 http://localhost:9999/api/blog 에 호출을 해보겠다.
포스트맨 다운로드 링크 공홈

postman에서 Get 방식으로 body - raw를 선택하고 안의 데이터는 JSON 형식으로 작성을 했는데 아래 사진과같이 어플리케이션의 Dto 형식에 맞게 작성을 했다.


그러고 Postman에서 실행하고 나면 "searchKakao가"라고 서버한테 받았는데,
서버는 Get 명령어를 받았으므로 searchKakao가 실행되는데 println으로 한번 blogDto를 출력하고 return으로 SearchKako를 반환했으므로 이 값이 postman으로 보내져서 postman은 서버로 부터 위의 결과값을 받은것이다.

com.example.study.blog.dto.BlogDto@44abc3bb

하지만 println을 찍었을때 출력되는 값은 내가 원하는 표현이 아니다. 문제는 Dto의 class 선언 문제에 있는데, Dto를 생성을 할때는 Data Class라는 class를 사용해야 데이터에 관한 처리방식이 추가 돼서 데이터 형식을 우리가 아는 형태로 표현해줄수 있기 때문이다.

기존에 class > data class로 선언을 바꿔주고 서버, application을 다시 실행 시키고 나서 postman에서 다시 get을 요청하면..

이상없이 동작하는데 서버측에서 print의 결과 값이 우리가 아는 형식으로 표현이 된것을 확인할 수 있다.

앞으로 Dto를 생성을 할땐 data class로 생성해줘야 데이터 후처리 및 관리가 가능하다는것을 기억하고 생성해야겠다.

[19:40:28.973][INFO ][org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.buildNativeEntityManagerFactory:line437] - Initialized JPA EntityManagerFactory for persistence unit 'default'
[19:40:30.109][INFO ][org.springframework.boot.devtools.autoconfigure.OptionalLiveReloadServer.startServer:line59] - LiveReload server is running on port 35729
[19:40:30.170][INFO ][org.springframework.boot.web.embedded.tomcat.TomcatWebServer.start:line241] - Tomcat started on port 9999 (http) with context path ''
[19:40:30.182][INFO ][com.example.study.StudyApplicationKt.logStarted:line56] - Started StudyApplicationKt in 6.356 seconds (process running for 7.257)
[19:43:09.823][INFO ][org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].log:line173] - Initializing Spring DispatcherServlet 'dispatcherServlet'
[19:43:09.824][INFO ][org.springframework.web.servlet.DispatcherServlet.initServletBean:line532] - Initializing Servlet 'dispatcherServlet'
[19:43:09.825][INFO ][org.springframework.web.servlet.DispatcherServlet.initServletBean:line554] - Completed initialization in 1 ms
BlogDto(query=애니, sort=Anime, page=1, size=10)

추가

참고로 GET 요청을 할때 형식을 잘못 입력하고 요청하면 에러가 발생한다.
query > queary
JSON에서 형식을 다르게 하면 서버로 부터 올바르지 않은 Request라고 알려준다.

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

0개의 댓글