diff --git a/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTech.java b/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTech.java
new file mode 100644
index 0000000..49b058e
--- /dev/null
+++ b/src/main/java/com/eactive/eai/custom/adapter/http/client/impl/HttpClient5AdapterServiceBigTech.java
@@ -0,0 +1,127 @@
+package com.eactive.eai.custom.adapter.http.client.impl;
+
+import java.io.UnsupportedEncodingException;
+import java.security.InvalidKeyException;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
+import java.util.Properties;
+
+import javax.crypto.Mac;
+import javax.crypto.spec.SecretKeySpec;
+
+import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
+
+import com.eactive.eai.adapter.http.client.HttpClientAdapterServiceKey;
+import com.eactive.eai.adapter.http.client.impl.HttpClient5AdapterServiceRest;
+import com.eactive.eai.common.property.PropManager;
+
+/**
+ * 1. 기능 : EAI HTTP OutBound 용 어댑터로 수동 시스템의 HTTP 웹 컴포넌트를 GET/POST 방식으로 호출할 수 있는
+ * 기능을 제공한다.
+ * 2. 처리 개요 :
+ * * - 2020-09-25: Http Header 받아서 처리할 수 있게 기능 추가
+ * 3. 주의사항
+ *
+ * @author :
+ * @version : v 1.0.0
+ * @see : HttpClientAdapterServiceFactory.java,
+ * HttpClientAdapterServiceSupport.java
+ * @since :
+ *
+ */
+public class HttpClient5AdapterServiceBigTech extends HttpClient5AdapterServiceRest
+ implements HttpClientAdapterServiceKey {
+
+ private static final char[] _HEX_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd',
+ 'e', 'f' };
+
+ private static String hexEncode(byte[] data) {
+
+ if (data == null) {
+ return null;
+ }
+
+ int length = data.length;
+ char[] encoded = new char[length << 1];
+
+ for (int i = 0, j = 0; i < length; i++) {
+ encoded[j++] = _HEX_LOWER[(0xF0 & data[i]) >>> 4];
+ encoded[j++] = _HEX_LOWER[0x0F & data[i]];
+ }
+
+ return new String(encoded);
+ } // end of hex_encode
+
+ private static final String _BTP_CHARSET = "UTF-8";
+ private static final String _BTP_ALGORITHM = "HmacSHA256";
+ private static final String _BTP_ACCESS_KEY = "{BTP_ACCESS_KEY}";
+ private static final String _BTP_SECRET_KEY = "{BTP_SECRET_KEY}";
+
+ private static byte[] mac(String charset, String algorithm, String timestamp, String accessKey, String secretKey,
+ String url) throws UnsupportedEncodingException, NoSuchAlgorithmException, InvalidKeyException {
+ String message = String.join(" ", Arrays.asList(url, timestamp, accessKey));
+ SecretKeySpec secretKeySpec = new SecretKeySpec(secretKey.getBytes(charset), algorithm);
+ Mac mac = Mac.getInstance(algorithm);
+ mac.init(secretKeySpec);
+
+ return mac.doFinal(message.getBytes(charset));
+ }// end of mac
+
+ private static String macHex(String charset, String algorithm, String timestamp, String accessKey, String secretKey,
+ String url) throws InvalidKeyException, UnsupportedEncodingException, NoSuchAlgorithmException {
+ return hexEncode(mac(charset, algorithm, timestamp, accessKey, secretKey, url));
+ }// end of macHex
+
+ protected void assignRequestHeaders(HttpUriRequestBase method, Object httpHeader, Properties prop, Properties tempProp) {
+ super.assignRequestHeaders(method, httpHeader, prop, tempProp);
+
+ try {
+ String adapterGroupName = tempProp.getProperty(ADAPTER_GROUP_NAME);
+ Properties customProp = PropManager.getInstance().getProperties(adapterGroupName);
+ String charset = customProp.getProperty("_BTP_CHARSET", _BTP_CHARSET);
+ String alorithm = customProp.getProperty("_BTP_ALGORITHM", _BTP_ALGORITHM);
+ String timestamp = System.currentTimeMillis() + "";
+ String accessKey = customProp.getProperty("_BTP_ACCESS_KEY", _BTP_ACCESS_KEY);
+ String secretKey = customProp.getProperty("_BTP_SECRET_KEY", _BTP_SECRET_KEY);
+
+ String signature = macHex(charset// charset
+ , alorithm// algorithm
+ , timestamp// timestamp
+ , accessKey// accessKey
+ , secretKey// secretKey
+ , method.getRequestUri());
+
+ method.setHeader("x-btp-access-key", accessKey);
+ method.setHeader("x-btp-timestamp", timestamp);
+ method.setHeader("x-btp-signature-v1", signature);
+
+ } catch (InvalidKeyException | UnsupportedEncodingException | NoSuchAlgorithmException e) {
+ throw new RuntimeException("BigTech 헤더 설정 실패", e);
+ }
+ }
+
+ public static void main(String[] args) {
+ try {
+ String url = "/rest/v1/service?param0=¶m1=";
+ String timestamp = System.currentTimeMillis()+"";
+ String accessKey = _BTP_ACCESS_KEY;
+ String secretKey = _BTP_SECRET_KEY;
+ String signature = macHex(
+ _BTP_CHARSET//charset
+ , _BTP_ALGORITHM//algorithm
+ , timestamp// timestamp
+ , _BTP_ACCESS_KEY//accessKey
+ , _BTP_SECRET_KEY//secretKey
+ , url
+ );
+ System.out.println(String.format("charset=%s", _BTP_CHARSET));
+ System.out.println(String.format("algorithm=%s", _BTP_ALGORITHM));
+ System.out.println(String.format("accessKey=%s", accessKey));
+ System.out.println(String.format("secretKey=%s", secretKey));
+ System.out.println(String.format("timestamp=%s", timestamp));
+ System.out.println(String.format("signature=%s", signature));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }// end of main
+}