diff --git a/pom.xml b/pom.xml index 1bc182b..4fa3119 100644 --- a/pom.xml +++ b/pom.xml @@ -91,7 +91,15 @@ json-simple 1.1.1 - + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + diff --git a/src/main/java/com/itn/mjonApi/cmn/config/RestTemplateConfig.java b/src/main/java/com/itn/mjonApi/cmn/config/RestTemplateConfig.java new file mode 100644 index 0000000..91345f1 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/config/RestTemplateConfig.java @@ -0,0 +1,65 @@ +package com.itn.mjonApi.cmn.config; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Configuration; + +/** + * packageName : com.itn.mjonApi.cmn.config + * fileName : RestTemplateConfig + * author : hylee + * date : 2023-05-08 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-05-08 hylee 최초 생성 + */ +@Slf4j +@Configuration +public class RestTemplateConfig { +/* + public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) { + + + + *//*return new RestTemplateBuilder() + // 로깅 인터셉터에서 Stream을 소비하므로 BufferingClientHttpRequestFactory 을 꼭 써야한다. + .requestFactory(() -> new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory())) + // 타임아웃 설정 + .setConnectTimeout(Duration.ofMillis(5000)) // connection-timeout + .setReadTimeout(Duration.ofMillis(5000)) // read-timeout + //메시지 컨버터 추가 + .additionalMessageConverters(new StringHttpMessageConverter(Charset.forName("UTF-8"))) + // 로깅 인터셉터 설정 + .additionalInterceptors(new RestTemplateLoggingInterceptor()) + .build();*//* + + + // Apache HttpComponents + HttpClient httpClient = HttpClientBuilder.create() + .setMaxConnTotal(50)//최대 커넥션 수 + .setMaxConnPerRoute(20) + .build(); //각 호스트(IP와 Port 의 조합)당 커넥션 풀에 생성가능한 커넥션 수 + + HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(); + factory.setHttpClient(httpClient); + + RestTemplate restTemplate = restTemplateBuilder +// .requestFactory(() -> factory) + .setReadTimeout(Duration.ofSeconds(5)) // read timeout + .setConnectTimeout(Duration.ofSeconds(5)) // connection timeout + .additionalMessageConverters(new StringHttpMessageConverter(StandardCharsets.UTF_8)) //메시지 컨버터 추가 + .additionalInterceptors(new RestTemplateLoggingInterceptor()) + .build(); + + // 로깅 DEBUG 레벨이 활성화된 경우에만 BufferingClientHttpRequest 사용 + if (log.isDebugEnabled()) { + ClientHttpRequestFactory clientHttpRequestFactory = new BufferingClientHttpRequestFactory(new SimpleClientHttpRequestFactory()); + restTemplate.setRequestFactory(clientHttpRequestFactory); + return restTemplate; + } + return restTemplate; + } +*/ + +} \ No newline at end of file diff --git a/src/main/java/com/itn/mjonApi/cmn/interceptor/RestTemplateLoggingInterceptor.java b/src/main/java/com/itn/mjonApi/cmn/interceptor/RestTemplateLoggingInterceptor.java new file mode 100644 index 0000000..9c54e76 --- /dev/null +++ b/src/main/java/com/itn/mjonApi/cmn/interceptor/RestTemplateLoggingInterceptor.java @@ -0,0 +1,54 @@ +package com.itn.mjonApi.cmn.interceptor; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.HttpRequest; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.stream.Collectors; + +/** + * packageName : com.itn.mjonApi.cmn.interceptor + * fileName : RestTemplateLoggingInterceptor + * author : hylee + * date : 2023-05-08 + * description : + * =========================================================== + * DATE AUTHOR NOTE + * ----------------------------------------------------------- + * 2023-05-08 hylee 최초 생성 + */ +@Slf4j +public class RestTemplateLoggingInterceptor implements ClientHttpRequestInterceptor { + + @Override + public ClientHttpResponse intercept(HttpRequest req, byte[] body, ClientHttpRequestExecution ex) throws IOException { + final String sessionNumber = makeSessionNumber(); + printRequest(sessionNumber, req, body); + ClientHttpResponse response = ex.execute(req, body); + printResponse(sessionNumber, response); + return response; + } + + private String makeSessionNumber() { + return Integer.toString((int) (Math.random() * 1000000)); + } + + private void printRequest(final String sessionNumber, final HttpRequest req, final byte[] body) { + log.info("[{}] \n URI: {}\n, Method: {}\n, Headers:{}\n, Body:{} \n", + sessionNumber, req.getURI(), req.getMethod(), req.getHeaders(), new String(body, StandardCharsets.UTF_8)); + } + + private void printResponse(final String sessionNumber, final ClientHttpResponse res) throws IOException { + String body = new BufferedReader(new InputStreamReader(res.getBody(), StandardCharsets.UTF_8)).lines() + .collect(Collectors.joining("\n")); + + log.info("[{}] \n Status: {}\n, Headers:{}\n, Body:{}\n ", + sessionNumber, res.getStatusCode(), res.getHeaders(), body); + } +} diff --git a/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java b/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java index 45208ec..5389930 100644 --- a/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java +++ b/src/main/java/com/itn/mjonApi/mjon/api/web/AccessKeyRestController.java @@ -1,7 +1,10 @@ package com.itn.mjonApi.mjon.api.web; -import java.time.LocalDateTime; - +import com.itn.mjonApi.cmn.idgen.mapper.domain.SendMsgVO; +import com.itn.mjonApi.cmn.msg.PlainResponse; +import com.itn.mjonApi.cmn.msg.RestResponse; +import com.itn.mjonApi.mjon.api.service.AccessKeyService; +import com.itn.mjonApi.mjon.api.service.AccessTokenService; import org.json.simple.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; @@ -10,11 +13,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RestController; -import com.itn.mjonApi.cmn.idgen.mapper.domain.SendMsgVO; -import com.itn.mjonApi.cmn.msg.PlainResponse; -import com.itn.mjonApi.cmn.msg.RestResponse; -import com.itn.mjonApi.mjon.api.service.AccessKeyService; -import com.itn.mjonApi.mjon.api.service.AccessTokenService; +import java.time.LocalDateTime; /** * @author User @@ -48,7 +47,7 @@ public class AccessKeyRestController { */ @GetMapping("/api/accessKey/SendMsg") public ResponseEntity apiaccessKeysendMsg( - @ModelAttribute SendMsgVO sendMsgVO + SendMsgVO sendMsgVO ){ //step2.api 처리 //단문 문자 발송 처리