LEEYOONJONG

done

...@@ -2937,6 +2937,14 @@ ...@@ -2937,6 +2937,14 @@
2937 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 2937 "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
2938 "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 2938 "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
2939 }, 2939 },
2940 + "asn1": {
2941 + "version": "0.2.4",
2942 + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
2943 + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
2944 + "requires": {
2945 + "safer-buffer": "~2.1.0"
2946 + }
2947 + },
2940 "asn1.js": { 2948 "asn1.js": {
2941 "version": "5.4.1", 2949 "version": "5.4.1",
2942 "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", 2950 "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
...@@ -2979,6 +2987,11 @@ ...@@ -2979,6 +2987,11 @@
2979 } 2987 }
2980 } 2988 }
2981 }, 2989 },
2990 + "assert-plus": {
2991 + "version": "1.0.0",
2992 + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
2993 + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU="
2994 + },
2982 "assign-symbols": { 2995 "assign-symbols": {
2983 "version": "1.0.0", 2996 "version": "1.0.0",
2984 "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", 2997 "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
...@@ -3041,11 +3054,29 @@ ...@@ -3041,11 +3054,29 @@
3041 "postcss-value-parser": "^4.1.0" 3054 "postcss-value-parser": "^4.1.0"
3042 } 3055 }
3043 }, 3056 },
3057 + "aws-sign2": {
3058 + "version": "0.7.0",
3059 + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
3060 + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg="
3061 + },
3062 + "aws4": {
3063 + "version": "1.11.0",
3064 + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
3065 + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
3066 + },
3044 "axe-core": { 3067 "axe-core": {
3045 "version": "4.2.1", 3068 "version": "4.2.1",
3046 "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.1.tgz", 3069 "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.2.1.tgz",
3047 "integrity": "sha512-evY7DN8qSIbsW2H/TWQ1bX3sXN1d4MNb5Vb4n7BzPuCwRHdkZ1H2eNLuSh73EoQqkGKUtju2G2HCcjCfhvZIAA==" 3070 "integrity": "sha512-evY7DN8qSIbsW2H/TWQ1bX3sXN1d4MNb5Vb4n7BzPuCwRHdkZ1H2eNLuSh73EoQqkGKUtju2G2HCcjCfhvZIAA=="
3048 }, 3071 },
3072 + "axios": {
3073 + "version": "0.21.1",
3074 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz",
3075 + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==",
3076 + "requires": {
3077 + "follow-redirects": "^1.10.0"
3078 + }
3079 + },
3049 "axobject-query": { 3080 "axobject-query": {
3050 "version": "2.2.0", 3081 "version": "2.2.0",
3051 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz", 3082 "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
...@@ -3572,6 +3603,14 @@ ...@@ -3572,6 +3603,14 @@
3572 "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", 3603 "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
3573 "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=" 3604 "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY="
3574 }, 3605 },
3606 + "bcrypt-pbkdf": {
3607 + "version": "1.0.2",
3608 + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
3609 + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
3610 + "requires": {
3611 + "tweetnacl": "^0.14.3"
3612 + }
3613 + },
3575 "bfj": { 3614 "bfj": {
3576 "version": "7.0.2", 3615 "version": "7.0.2",
3577 "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz", 3616 "resolved": "https://registry.npmjs.org/bfj/-/bfj-7.0.2.tgz",
...@@ -3588,6 +3627,11 @@ ...@@ -3588,6 +3627,11 @@
3588 "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 3627 "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz",
3589 "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" 3628 "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ=="
3590 }, 3629 },
3630 + "bignumber.js": {
3631 + "version": "9.0.0",
3632 + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
3633 + "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
3634 + },
3591 "binary-extensions": { 3635 "binary-extensions": {
3592 "version": "2.2.0", 3636 "version": "2.2.0",
3593 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 3637 "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
...@@ -3963,6 +4007,11 @@ ...@@ -3963,6 +4007,11 @@
3963 "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz", 4007 "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.3.0.tgz",
3964 "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ==" 4008 "integrity": "sha512-/4YgnZS8y1UXXmC02xD5rRrBEu6T5ub+mQHLNRj0fzTRbgdBYhsNo2V5EqwgqrExjxsjtF/OpAKAMkKsxbD5XQ=="
3965 }, 4009 },
4010 + "caseless": {
4011 + "version": "0.12.0",
4012 + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
4013 + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw="
4014 + },
3966 "chalk": { 4015 "chalk": {
3967 "version": "2.4.2", 4016 "version": "2.4.2",
3968 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 4017 "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
...@@ -4367,6 +4416,15 @@ ...@@ -4367,6 +4416,15 @@
4367 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 4416 "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
4368 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" 4417 "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
4369 }, 4418 },
4419 + "cors": {
4420 + "version": "2.8.5",
4421 + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
4422 + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
4423 + "requires": {
4424 + "object-assign": "^4",
4425 + "vary": "^1"
4426 + }
4427 + },
4370 "cosmiconfig": { 4428 "cosmiconfig": {
4371 "version": "7.0.0", 4429 "version": "7.0.0",
4372 "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", 4430 "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz",
...@@ -4782,6 +4840,14 @@ ...@@ -4782,6 +4840,14 @@
4782 "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz", 4840 "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz",
4783 "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==" 4841 "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw=="
4784 }, 4842 },
4843 + "dashdash": {
4844 + "version": "1.14.1",
4845 + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
4846 + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
4847 + "requires": {
4848 + "assert-plus": "^1.0.0"
4849 + }
4850 + },
4785 "data-urls": { 4851 "data-urls": {
4786 "version": "2.0.0", 4852 "version": "2.0.0",
4787 "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz", 4853 "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-2.0.0.tgz",
...@@ -5216,6 +5282,15 @@ ...@@ -5216,6 +5282,15 @@
5216 } 5282 }
5217 } 5283 }
5218 }, 5284 },
5285 + "ecc-jsbn": {
5286 + "version": "0.1.2",
5287 + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
5288 + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
5289 + "requires": {
5290 + "jsbn": "~0.1.0",
5291 + "safer-buffer": "^2.1.0"
5292 + }
5293 + },
5219 "ee-first": { 5294 "ee-first": {
5220 "version": "1.1.1", 5295 "version": "1.1.1",
5221 "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 5296 "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
...@@ -6324,6 +6399,11 @@ ...@@ -6324,6 +6399,11 @@
6324 } 6399 }
6325 } 6400 }
6326 }, 6401 },
6402 + "extend": {
6403 + "version": "3.0.2",
6404 + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
6405 + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
6406 + },
6327 "extend-shallow": { 6407 "extend-shallow": {
6328 "version": "3.0.2", 6408 "version": "3.0.2",
6329 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", 6409 "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
...@@ -6402,6 +6482,11 @@ ...@@ -6402,6 +6482,11 @@
6402 } 6482 }
6403 } 6483 }
6404 }, 6484 },
6485 + "extsprintf": {
6486 + "version": "1.3.0",
6487 + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
6488 + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU="
6489 + },
6405 "fast-deep-equal": { 6490 "fast-deep-equal": {
6406 "version": "3.1.3", 6491 "version": "3.1.3",
6407 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 6492 "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
...@@ -6617,6 +6702,11 @@ ...@@ -6617,6 +6702,11 @@
6617 "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 6702 "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
6618 "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" 6703 "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA="
6619 }, 6704 },
6705 + "forever-agent": {
6706 + "version": "0.6.1",
6707 + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
6708 + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE="
6709 + },
6620 "fork-ts-checker-webpack-plugin": { 6710 "fork-ts-checker-webpack-plugin": {
6621 "version": "4.1.6", 6711 "version": "4.1.6",
6622 "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz", 6712 "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-4.1.6.tgz",
...@@ -6912,6 +7002,14 @@ ...@@ -6912,6 +7002,14 @@
6912 "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", 7002 "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
6913 "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" 7003 "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg="
6914 }, 7004 },
7005 + "getpass": {
7006 + "version": "0.1.7",
7007 + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
7008 + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
7009 + "requires": {
7010 + "assert-plus": "^1.0.0"
7011 + }
7012 + },
6915 "glob": { 7013 "glob": {
6916 "version": "7.1.7", 7014 "version": "7.1.7",
6917 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 7015 "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz",
...@@ -6994,6 +7092,20 @@ ...@@ -6994,6 +7092,20 @@
6994 "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", 7092 "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
6995 "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" 7093 "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg=="
6996 }, 7094 },
7095 + "har-schema": {
7096 + "version": "2.0.0",
7097 + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
7098 + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI="
7099 + },
7100 + "har-validator": {
7101 + "version": "5.1.5",
7102 + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz",
7103 + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
7104 + "requires": {
7105 + "ajv": "^6.12.3",
7106 + "har-schema": "^2.0.0"
7107 + }
7108 + },
6997 "harmony-reflect": { 7109 "harmony-reflect": {
6998 "version": "1.6.2", 7110 "version": "1.6.2",
6999 "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz", 7111 "resolved": "https://registry.npmjs.org/harmony-reflect/-/harmony-reflect-1.6.2.tgz",
...@@ -7424,6 +7536,16 @@ ...@@ -7424,6 +7536,16 @@
7424 } 7536 }
7425 } 7537 }
7426 }, 7538 },
7539 + "http-signature": {
7540 + "version": "1.2.0",
7541 + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
7542 + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
7543 + "requires": {
7544 + "assert-plus": "^1.0.0",
7545 + "jsprim": "^1.2.2",
7546 + "sshpk": "^1.7.0"
7547 + }
7548 + },
7427 "https-browserify": { 7549 "https-browserify": {
7428 "version": "1.0.0", 7550 "version": "1.0.0",
7429 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", 7551 "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
...@@ -7925,6 +8047,11 @@ ...@@ -7925,6 +8047,11 @@
7925 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", 8047 "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
7926 "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" 8048 "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8="
7927 }, 8049 },
8050 + "isstream": {
8051 + "version": "0.1.2",
8052 + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
8053 + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo="
8054 + },
7928 "istanbul-lib-coverage": { 8055 "istanbul-lib-coverage": {
7929 "version": "3.0.0", 8056 "version": "3.0.0",
7930 "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz", 8057 "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
...@@ -9480,6 +9607,11 @@ ...@@ -9480,6 +9607,11 @@
9480 "esprima": "^4.0.0" 9607 "esprima": "^4.0.0"
9481 } 9608 }
9482 }, 9609 },
9610 + "jsbn": {
9611 + "version": "0.1.1",
9612 + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
9613 + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM="
9614 + },
9483 "jsdom": { 9615 "jsdom": {
9484 "version": "16.6.0", 9616 "version": "16.6.0",
9485 "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz", 9617 "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-16.6.0.tgz",
...@@ -9536,6 +9668,11 @@ ...@@ -9536,6 +9668,11 @@
9536 "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", 9668 "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
9537 "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" 9669 "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="
9538 }, 9670 },
9671 + "json-schema": {
9672 + "version": "0.2.3",
9673 + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
9674 + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM="
9675 + },
9539 "json-schema-traverse": { 9676 "json-schema-traverse": {
9540 "version": "0.4.1", 9677 "version": "0.4.1",
9541 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 9678 "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
...@@ -9546,6 +9683,11 @@ ...@@ -9546,6 +9683,11 @@
9546 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 9683 "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
9547 "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" 9684 "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE="
9548 }, 9685 },
9686 + "json-stringify-safe": {
9687 + "version": "5.0.1",
9688 + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
9689 + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
9690 + },
9549 "json3": { 9691 "json3": {
9550 "version": "3.3.3", 9692 "version": "3.3.3",
9551 "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz", 9693 "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.3.tgz",
...@@ -9568,6 +9710,17 @@ ...@@ -9568,6 +9710,17 @@
9568 "universalify": "^2.0.0" 9710 "universalify": "^2.0.0"
9569 } 9711 }
9570 }, 9712 },
9713 + "jsprim": {
9714 + "version": "1.4.1",
9715 + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
9716 + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
9717 + "requires": {
9718 + "assert-plus": "1.0.0",
9719 + "extsprintf": "1.3.0",
9720 + "json-schema": "0.2.3",
9721 + "verror": "1.10.0"
9722 + }
9723 + },
9571 "jsx-ast-utils": { 9724 "jsx-ast-utils": {
9572 "version": "3.2.0", 9725 "version": "3.2.0",
9573 "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", 9726 "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz",
...@@ -10111,6 +10264,11 @@ ...@@ -10111,6 +10264,11 @@
10111 "minimist": "^1.2.5" 10264 "minimist": "^1.2.5"
10112 } 10265 }
10113 }, 10266 },
10267 + "moment": {
10268 + "version": "2.29.1",
10269 + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
10270 + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
10271 + },
10114 "move-concurrently": { 10272 "move-concurrently": {
10115 "version": "1.0.1", 10273 "version": "1.0.1",
10116 "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", 10274 "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
...@@ -10153,6 +10311,41 @@ ...@@ -10153,6 +10311,41 @@
10153 "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", 10311 "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz",
10154 "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=" 10312 "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE="
10155 }, 10313 },
10314 + "mysql": {
10315 + "version": "2.18.1",
10316 + "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
10317 + "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
10318 + "requires": {
10319 + "bignumber.js": "9.0.0",
10320 + "readable-stream": "2.3.7",
10321 + "safe-buffer": "5.1.2",
10322 + "sqlstring": "2.3.1"
10323 + },
10324 + "dependencies": {
10325 + "readable-stream": {
10326 + "version": "2.3.7",
10327 + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
10328 + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
10329 + "requires": {
10330 + "core-util-is": "~1.0.0",
10331 + "inherits": "~2.0.3",
10332 + "isarray": "~1.0.0",
10333 + "process-nextick-args": "~2.0.0",
10334 + "safe-buffer": "~5.1.1",
10335 + "string_decoder": "~1.1.1",
10336 + "util-deprecate": "~1.0.1"
10337 + }
10338 + },
10339 + "string_decoder": {
10340 + "version": "1.1.1",
10341 + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
10342 + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
10343 + "requires": {
10344 + "safe-buffer": "~5.1.0"
10345 + }
10346 + }
10347 + }
10348 + },
10156 "nan": { 10349 "nan": {
10157 "version": "2.14.2", 10350 "version": "2.14.2",
10158 "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", 10351 "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
...@@ -10402,6 +10595,11 @@ ...@@ -10402,6 +10595,11 @@
10402 "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", 10595 "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz",
10403 "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==" 10596 "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ=="
10404 }, 10597 },
10598 + "oauth-sign": {
10599 + "version": "0.9.0",
10600 + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
10601 + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
10602 + },
10405 "object-assign": { 10603 "object-assign": {
10406 "version": "4.1.1", 10604 "version": "4.1.1",
10407 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 10605 "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
...@@ -12767,6 +12965,64 @@ ...@@ -12767,6 +12965,64 @@
12767 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 12965 "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
12768 "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 12966 "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
12769 }, 12967 },
12968 + "request": {
12969 + "version": "2.88.2",
12970 + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz",
12971 + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
12972 + "requires": {
12973 + "aws-sign2": "~0.7.0",
12974 + "aws4": "^1.8.0",
12975 + "caseless": "~0.12.0",
12976 + "combined-stream": "~1.0.6",
12977 + "extend": "~3.0.2",
12978 + "forever-agent": "~0.6.1",
12979 + "form-data": "~2.3.2",
12980 + "har-validator": "~5.1.3",
12981 + "http-signature": "~1.2.0",
12982 + "is-typedarray": "~1.0.0",
12983 + "isstream": "~0.1.2",
12984 + "json-stringify-safe": "~5.0.1",
12985 + "mime-types": "~2.1.19",
12986 + "oauth-sign": "~0.9.0",
12987 + "performance-now": "^2.1.0",
12988 + "qs": "~6.5.2",
12989 + "safe-buffer": "^5.1.2",
12990 + "tough-cookie": "~2.5.0",
12991 + "tunnel-agent": "^0.6.0",
12992 + "uuid": "^3.3.2"
12993 + },
12994 + "dependencies": {
12995 + "form-data": {
12996 + "version": "2.3.3",
12997 + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz",
12998 + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
12999 + "requires": {
13000 + "asynckit": "^0.4.0",
13001 + "combined-stream": "^1.0.6",
13002 + "mime-types": "^2.1.12"
13003 + }
13004 + },
13005 + "qs": {
13006 + "version": "6.5.2",
13007 + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
13008 + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
13009 + },
13010 + "tough-cookie": {
13011 + "version": "2.5.0",
13012 + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz",
13013 + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
13014 + "requires": {
13015 + "psl": "^1.1.28",
13016 + "punycode": "^2.1.1"
13017 + }
13018 + },
13019 + "uuid": {
13020 + "version": "3.4.0",
13021 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
13022 + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
13023 + }
13024 + }
13025 + },
12770 "require-directory": { 13026 "require-directory": {
12771 "version": "2.1.1", 13027 "version": "2.1.1",
12772 "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 13028 "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
...@@ -13805,6 +14061,27 @@ ...@@ -13805,6 +14061,27 @@
13805 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 14061 "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
13806 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" 14062 "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
13807 }, 14063 },
14064 + "sqlstring": {
14065 + "version": "2.3.1",
14066 + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
14067 + "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
14068 + },
14069 + "sshpk": {
14070 + "version": "1.16.1",
14071 + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
14072 + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
14073 + "requires": {
14074 + "asn1": "~0.2.3",
14075 + "assert-plus": "^1.0.0",
14076 + "bcrypt-pbkdf": "^1.0.0",
14077 + "dashdash": "^1.12.0",
14078 + "ecc-jsbn": "~0.1.1",
14079 + "getpass": "^0.1.1",
14080 + "jsbn": "~0.1.0",
14081 + "safer-buffer": "^2.0.2",
14082 + "tweetnacl": "~0.14.0"
14083 + }
14084 + },
13808 "ssri": { 14085 "ssri": {
13809 "version": "8.0.1", 14086 "version": "8.0.1",
13810 "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", 14087 "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
...@@ -14581,6 +14858,19 @@ ...@@ -14581,6 +14858,19 @@
14581 "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", 14858 "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
14582 "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=" 14859 "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
14583 }, 14860 },
14861 + "tunnel-agent": {
14862 + "version": "0.6.0",
14863 + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
14864 + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
14865 + "requires": {
14866 + "safe-buffer": "^5.0.1"
14867 + }
14868 + },
14869 + "tweetnacl": {
14870 + "version": "0.14.5",
14871 + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
14872 + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q="
14873 + },
14584 "type": { 14874 "type": {
14585 "version": "1.2.0", 14875 "version": "1.2.0",
14586 "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", 14876 "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
...@@ -14920,6 +15210,16 @@ ...@@ -14920,6 +15210,16 @@
14920 "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", 15210 "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz",
14921 "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==" 15211 "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w=="
14922 }, 15212 },
15213 + "verror": {
15214 + "version": "1.10.0",
15215 + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
15216 + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
15217 + "requires": {
15218 + "assert-plus": "^1.0.0",
15219 + "core-util-is": "1.0.2",
15220 + "extsprintf": "^1.2.0"
15221 + }
15222 + },
14923 "vm-browserify": { 15223 "vm-browserify": {
14924 "version": "1.1.2", 15224 "version": "1.1.2",
14925 "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", 15225 "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
......
...@@ -6,16 +6,21 @@ ...@@ -6,16 +6,21 @@
6 "@testing-library/jest-dom": "^5.12.0", 6 "@testing-library/jest-dom": "^5.12.0",
7 "@testing-library/react": "^11.2.7", 7 "@testing-library/react": "^11.2.7",
8 "@testing-library/user-event": "^12.8.3", 8 "@testing-library/user-event": "^12.8.3",
9 + "axios": "^0.21.1",
10 + "body-parser": "^1.19.0",
11 + "cors": "^2.8.5",
12 + "express": "^4.17.1",
13 + "moment": "^2.29.1",
14 + "mysql": "^2.18.1",
9 "react": "^17.0.2", 15 "react": "^17.0.2",
10 "react-dom": "^17.0.2", 16 "react-dom": "^17.0.2",
11 "react-scripts": "4.0.3", 17 "react-scripts": "4.0.3",
18 + "request": "^2.88.2",
12 "web-vitals": "^1.1.2" 19 "web-vitals": "^1.1.2"
13 }, 20 },
14 "scripts": { 21 "scripts": {
15 "start": "react-scripts start", 22 "start": "react-scripts start",
16 - "build": "react-scripts build", 23 + "build": "react-scripts build"
17 - "test": "react-scripts test",
18 - "eject": "react-scripts eject"
19 }, 24 },
20 "eslintConfig": { 25 "eslintConfig": {
21 "extends": [ 26 "extends": [
......
1 +const bodyParser = require('body-parser');
2 +const {query} = require('express');
3 +const express = require('express');
4 +const weather = require('./weather');
5 +
6 +
7 +const router = express.Router();
8 +
9 +router.use(bodyParser.urlencoded({extended: true}))
10 +
11 +router.post('/weather', (req, res) => {
12 + console.log("weather와 연결합니다.");
13 + weather(req.body, (error, {weather} = {})=> {
14 + if (error){
15 + console.log("weather에서 error~~");
16 + return res.send({error});
17 + }
18 + return res.send(weather);
19 + })
20 +})
21 +
22 +module.exports = router;
...\ No newline at end of file ...\ No newline at end of file
1 +const { useCallback } = require('react');
2 +var request = require('request');
3 +
4 +const weather = (_weather, callback) => {
5 + let _lat = _weather.lat;
6 + let _lon = _weather.lon;
7 + let _calcDate = calcDate();
8 + var url = 'http://apis.data.go.kr/1360000/VilageFcstInfoService/getVilageFcst';
9 + var queryParams = '?' + encodeURIComponent('ServiceKey') + '=kr%2FQXx6vPof0PDy8c%2BYL6vB2U7M7rv%2ByDaBzN%2FJ1orHghEJnhIds2hOmt59WFhziYr0vvgFzsKAg1UlTpPLuQw%3D%3D'; /* Service Key*/
10 + queryParams += '&' + encodeURIComponent('pageNo') + '=' + encodeURIComponent('1'); /* */
11 + queryParams += '&' + encodeURIComponent('numOfRows') + '=' + encodeURIComponent('10'); /* */
12 + queryParams += '&' + encodeURIComponent('dataType') + '=' + encodeURIComponent('JSON'); /* */
13 + queryParams += '&' + encodeURIComponent('base_date') + '=' + encodeURIComponent(_calcDate.yeardate); /* */
14 + queryParams += '&' + encodeURIComponent('base_time') + '=' + encodeURIComponent(_calcDate.time); /* */
15 + queryParams += '&' + encodeURIComponent('nx') + '=' + encodeURIComponent(Math.round(_lat)); /* */
16 + queryParams += '&' + encodeURIComponent('ny') + '=' + encodeURIComponent(Math.round(_lon)); /* */
17 + console.log("weather.js의 ", _lat, ", ", _lon);
18 + console.log("접속하는 weather JSON은 ", url+queryParams);
19 + request({
20 + url: url + queryParams,
21 + method: 'GET'
22 + }, function (error, response, body) {
23 + //console.log('Status', response.statusCode);
24 + //console.log('Headers', JSON.stringify(response.headers));
25 + // console.log('Reponse received -->', body);
26 + console.log("URL은 --> ", url + queryParams);
27 + var bodyObj = JSON.parse(body);
28 + console.log("--> 날씨는", bodyObj.response.body.items.item[1].fcstValue, "입니다.");
29 + // 강수형태(PTY) 코드 : 없음(0), 비(1), 비/눈(2), 눈(3), 소나기(4), 빗방울(5), 빗방울/눈날림(6), 눈날림(7)
30 + callback(undefined, {
31 + weather: bodyObj.response.body.items.item[1].fcstValue
32 + })
33 + });
34 +}
35 +function calcDate() {
36 + var today = new Date();
37 + var week = new Array('일', '월', '화', '수', '목', '금', '토');
38 + var year = today.getFullYear();
39 + var month = today.getMonth() + 1;
40 + var day = today.getDate();
41 + var hours = today.getHours();
42 + var minutes = today.getMinutes();
43 + /*
44 + * 기상청 30분마다 발표
45 + * 30분보다 작으면, 한시간 전 hours 값
46 + */
47 + if (minutes < 30) {
48 + hours = hours - 1;
49 + hours = ((parseInt((hours + 1) / 3)) - 1) * 3 + 2;
50 + if (hours < 0) {
51 + // 자정 이전은 전날로 계산
52 + today.setDate(today.getDate() - 1);
53 + day = today.getDate();
54 + month = today.getMonth() + 1;
55 + year = today.getFullYear();
56 + hours = 23;
57 + }
58 + }
59 + else {
60 + hours = ((parseInt((hours + 1) / 3)) - 1) * 3 + 2;
61 + if (hours < 0) {
62 + // 자정 이전은 전날로 계산
63 + today.setDate(today.getDate() - 1);
64 + day = today.getDate();
65 + month = today.getMonth() + 1;
66 + year = today.getFullYear();
67 + hours = 23;
68 + }
69 + }
70 + /* example
71 + * 9시 -> 09시 변경 필요
72 + */
73 + if (hours < 10) {
74 + hours = '0' + hours;
75 + }
76 + if (month < 10) {
77 + month = '0' + month;
78 + }
79 + if (day < 10) {
80 + day = '0' + day;
81 + }
82 + let yeardate = year + month + day;
83 + let time = hours + '00';
84 + return { yeardate: yeardate, time: time }
85 +}
86 +
87 +module.exports = weather;
...\ No newline at end of file ...\ No newline at end of file
1 +const express = require('express')
2 +const app = express()
3 +const port = 3001 // react의 기본값은 3000이니까 3000이 아닌 아무 수
4 +const cors = require("cors");
5 +const bodyParser = require("body-parser");
6 +const route = require('./routes/index')
7 +const mysql = require("mysql");
8 +let moment = require('moment');
9 +//db연동 위해
10 +var connection = mysql.createConnection({
11 + host: "localhost",
12 + user: "root",
13 + password: "sotnadlrkxdlgo",
14 + database: "nodejs"
15 +})
16 +
17 +app.use(bodyParser.urlencoded({ extended: true }));
18 +app.use(bodyParser.json());
19 +app.use(cors());
20 +app.use('/', route);
21 +
22 +
23 +
24 +app.get('/', (req, res) => {
25 + res.send('코딩 중!')
26 +})
27 +
28 +
29 +// data가 0. 맑음
30 +app.post("/database0", (req, res) => {
31 + let month = moment().month() + 1;
32 + console.log("현재 월 : ", month);
33 + if (3 <= month && month <= 5) { // 맑고 봄
34 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, -rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="봄") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(-rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="봄") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
35 + if (error) throw error;
36 + res.send(results)
37 + console.log('맑고 봄이네요 : ', results);
38 + });
39 + }
40 + else if (6 <= month && month <= 8){
41 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, -rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="여름") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(-rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="여름") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
42 + if (error) throw error;
43 + res.send(results)
44 + console.log('맑고 여름이네요 : ', results);
45 + });
46 + }
47 + else if (9 <= month && month <= 11){
48 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, -rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="가을") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(-rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="가을") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
49 + if (error) throw error;
50 + res.send(results)
51 + console.log('맑고 가을이네요 : ', results);
52 + });
53 + }
54 + else {
55 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, -rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="겨울") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(-rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="겨울") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
56 + if (error) throw error;
57 + res.send(results)
58 + console.log('맑고 겨울이네요 : ', results);
59 + });
60 + }
61 +})
62 +
63 +// data가 0이 아님. 비/눈
64 +app.post("/database1", (req, res) => {
65 + let month = moment().month() + 1;
66 + console.log("현재 월 : ", month);
67 + if (3 <= month && month <= 5) { // 비오고 봄
68 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="봄") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="봄") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
69 + if (error) throw error;
70 + res.send(results)
71 + console.log('비/눈오고 봄이네요 : ', results);
72 + });
73 + }
74 + else if (6 <= month && month <= 8){
75 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="여름") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="여름") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
76 + if (error) throw error;
77 + res.send(results)
78 + console.log('비/눈오고 여름이네요 : ', results);
79 + });
80 + }
81 + else if (9 <= month && month <= 11){
82 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="가을") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="가을") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
83 + if (error) throw error;
84 + res.send(results)
85 + console.log('비/눈오고 가을이네요 : ', results);
86 + });
87 + }
88 + else {
89 + connection.query('SELECT * FROM (SELECT IFNULL(rain.menu, seasons.menu) AS menu, rain.percent + IFNULL(seasons.percent, 0) as sum_percent FROM rain LEFT JOIN (SELECT menu, percent FROM seasons WHERE season="겨울") seasons ON rain.menu = seasons.menu UNION SELECT IFNULL(rain.menu, seasons.menu) AS menu, IFNULL(rain.percent, 0)+seasons.percent FROM rain RIGHT JOIN (SELECT menu, percent FROM seasons WHERE season="겨울") seasons ON rain.menu = seasons.menu ORDER BY sum_percent DESC LIMIT 12) subtable ORDER BY rand() limit 5;', (error, results, field) => {
90 + if (error) throw error;
91 + res.send(results)
92 + console.log('비/눈오고 겨울이네요 : ', results);
93 + });
94 + }
95 +})
96 +app.listen(port, () => {
97 + console.log(`Connect at http://localhost:${port}`); // '가 아닌 좌측상단의 esc버튼 밑의 `다.
98 +})
...\ No newline at end of file ...\ No newline at end of file
1 -.App {
2 - text-align: center;
3 -}
4 -
5 -.App-logo {
6 - height: 40vmin;
7 - pointer-events: none;
8 -}
9 -
10 -@media (prefers-reduced-motion: no-preference) {
11 - .App-logo {
12 - animation: App-logo-spin infinite 20s linear;
13 - }
14 -}
15 -
16 -.App-header {
17 - background-color: #282c34;
18 - min-height: 100vh;
19 - display: flex;
20 - flex-direction: column;
21 - align-items: center;
22 - justify-content: center;
23 - font-size: calc(10px + 2vmin);
24 - color: white;
25 -}
26 -
27 -.App-link {
28 - color: #61dafb;
29 -}
30 -
31 -@keyframes App-logo-spin {
32 - from {
33 - transform: rotate(0deg);
34 - }
35 - to {
36 - transform: rotate(360deg);
37 - }
38 -}
1 -import logo from './logo.svg'; 1 +// import axios from 'axios';
2 -import './App.css'; 2 +import React from 'react'
3 3
4 -function App() { 4 +
5 +function getData() {
6 + return new Promise(function (resolve, reject) {
7 + navigator.geolocation.getCurrentPosition(function (position) {
8 + let lat = position.coords.latitude;
9 + let lon = position.coords.longitude;
10 + resolve({ lat, lon });
11 +
12 + })
13 + })
14 +}
15 +
16 +
17 +class App extends React.Component {
18 + // constructor(props) {
19 + // super(props);
20 + // this.findWeather = this.findWeather.bind(this);
21 + state = {
22 + id: "",
23 + }
24 + // }
25 +
26 + handleChange = (e) => {
27 + this.setState({
28 + [e.target.name]: e.target.value,
29 + });
30 + }
31 +
32 +
33 + findWeather = () => {
34 + var weatherData = -1;
35 + this.setState({
36 + id: "검색한 값: " + this.state.id,
37 + })
38 + getData() // 위치 정보 가져옴
39 + .then(function (object) {
40 + console.log(object.lat, object.lon);
41 + return { latitude: object.lat, longitude: object.lon };
42 + }) // 밑으로 위도, 경도 객체 넘김
43 + .then(function (result) {
44 + fetch("http://localhost:3001/weather", { // 위도, 경도 정보를 바탕으로 날씨정보 가져옴
45 + method: "post",
46 + headers: {
47 + "content-type": "application/json",
48 + },
49 + body: JSON.stringify({ lat: result.latitude, lon: result.longitude }),
50 + }) // '날씨' 만 가져와 아래로 넘김
51 + .then((res) => res.json())
52 + .then((json) => {
53 + console.log("클라이언트가 받은 값(날씨)은 : ", json);
54 + weatherData = json;
55 + return weatherData;
56 + })
57 + .then((data) => {
58 + console.log("넘어온 데이터는 : ", data);
59 + if (data === 0) { // 맑을 경우 디비 호출
60 + fetch(`http://localhost:3001/database0`, {
61 + method: "post",
62 + headers: {
63 + "content-type": "application/json",
64 + },
65 + body: JSON.stringify(),
66 + })
67 + .then((res) => res.json())
68 + .then((json) => {
69 + console.log(json);
70 + })
71 + }
72 + else { // 비/눈이 올 경우 디비 호출
73 + fetch(`http://localhost:3001/database1`, {
74 + method: "post",
75 + headers: {
76 + "content-type": "application/json",
77 + },
78 + body: JSON.stringify(),
79 + })
80 + .then((res) => res.json())
81 + .then((json) => {
82 + console.log(json);
83 + })
84 + }
85 +
86 + })
87 + })
88 +
89 +
90 + }
91 +
92 + render() {
5 return ( 93 return (
6 - <div className="App"> 94 + <div>
7 - <header className="App-header"> 95 + <input onChange={this.handleChange} name="id" />
8 - <img src={logo} className="App-logo" alt="logo" /> 96 + <button onClick={this.findWeather}>Run</button>
9 - <p> 97 + <h1>{this.state.id}</h1>
10 - Edit <code>src/App.js</code> and save to reload.
11 - </p>
12 - <a
13 - className="App-link"
14 - href="https://reactjs.org"
15 - target="_blank"
16 - rel="noopener noreferrer"
17 - >
18 - Learn React
19 - </a>
20 - </header>
21 </div> 98 </div>
22 - ); 99 + )
100 + }
23 } 101 }
24 -
25 export default App; 102 export default App;
...\ No newline at end of file ...\ No newline at end of file
......
1 -import { render, screen } from '@testing-library/react';
2 -import App from './App';
3 -
4 -test('renders learn react link', () => {
5 - render(<App />);
6 - const linkElement = screen.getByText(/learn react/i);
7 - expect(linkElement).toBeInTheDocument();
8 -});
1 -body {
2 - margin: 0;
3 - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
4 - 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
5 - sans-serif;
6 - -webkit-font-smoothing: antialiased;
7 - -moz-osx-font-smoothing: grayscale;
8 -}
9 -
10 -code {
11 - font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
12 - monospace;
13 -}
1 import React from 'react'; 1 import React from 'react';
2 import ReactDOM from 'react-dom'; 2 import ReactDOM from 'react-dom';
3 -import './index.css'; 3 +
4 import App from './App'; 4 import App from './App';
5 -import reportWebVitals from './reportWebVitals';
6 5
7 -ReactDOM.render(
8 - <React.StrictMode>
9 - <App />
10 - </React.StrictMode>,
11 - document.getElementById('root')
12 -);
13 6
14 -// If you want to start measuring performance in your app, pass a function 7 +ReactDOM.render(<App />, document.getElementById('root'));
15 -// to log results (for example: reportWebVitals(console.log))
16 -// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
17 -reportWebVitals();
......
1 -<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
...\ No newline at end of file ...\ No newline at end of file
1 -const reportWebVitals = onPerfEntry => {
2 - if (onPerfEntry && onPerfEntry instanceof Function) {
3 - import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
4 - getCLS(onPerfEntry);
5 - getFID(onPerfEntry);
6 - getFCP(onPerfEntry);
7 - getLCP(onPerfEntry);
8 - getTTFB(onPerfEntry);
9 - });
10 - }
11 -};
12 -
13 -export default reportWebVitals;
1 -// jest-dom adds custom jest matchers for asserting on DOM nodes.
2 -// allows you to do things like:
3 -// expect(element).toHaveTextContent(/react/i)
4 -// learn more: https://github.com/testing-library/jest-dom
5 -import '@testing-library/jest-dom';