{"id":1730,"date":"2017-11-13T13:44:36","date_gmt":"2017-11-13T04:44:36","guid":{"rendered":"https:\/\/beta.gitple.io\/?p=1730"},"modified":"2017-12-06T10:57:23","modified_gmt":"2017-12-06T01:57:23","slug":"techstack_backend","status":"publish","type":"post","link":"https:\/\/gitple.io\/ko\/techstack_backend","title":{"rendered":"\uae43\ud50c \uae30\uc220 \uc2a4\ud0dd \uc18c\uac1c (\ubc31\uc5d4\ub4dc \ud3b8)"},"content":{"rendered":"<p>Gitple\uc740 <strong>SaaS(Software as a Service) \ud615\ud0dc\uc758 \uc804\ud615\uc801\uc778 \ud074\ub77c\uc6b0\ub4dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/strong> \uc785\ub2c8\ub2e4. (\uac1c\ubc1c\ud300\uc740 \ub450\ubc88\uc9f8\uc758 \uacbd\ud5d8\uc774\ub77c \uc774\ubc88\uc5d0\ub294 \ub354\uc6b1 \uc815\uad50\ud558\uac8c \uae30\uc220\uc2a4\ud0dd\uc744 \uc313\uc544 \ub098\uac00\uace0 \uc788\uc2b5\ub2c8\ub2e4.)<\/p>\n<p style=\"text-align: center;\">\uae43\ud50c \uc544\ud0a4\ud14d\ucc98 \uc804\uccb4\ud615\uc0c1<\/p>\n<p><img src=\"http:\/\/tech.gitple.io\/images\/techstack.png\" alt=\"\uae43\ud50c \uae30\uc220\uc2a4\ud0dd \uc804\uccb4\" \/><\/p>\n<p>\uae43\ud50c \uc11c\ube44\uc2a4\uc758 <strong>\ubc31\uc5d4\ub4dc \uae30\uc220\uc2a4\ud0dd<\/strong>\uc744 \uc804\ubc18\uc801\uc73c\ub85c \uc124\uba85\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uac01\uac01\uc758 \uae30\uc220\uc5d0 \ub300\ud55c \uc0c1\uc138 \ub0b4\uc6a9\uc740 \uc55e\uc73c\ub85c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud305 \ud560 \uc608\uc815\uc785\ub2c8\ub2e4.<\/p>\n<p style=\"text-align: center;\">\uae43\ud50c \ubc31\uc5d4\ub4dc: \ub3c4\ucee4\uae30\ubc18 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc544\ud0a4\ud14d\ucc98<\/p>\n<p>&nbsp;<\/p>\n<p><img src=\"http:\/\/tech.gitple.io\/images\/dockerized_arch.png\" alt=\"\ubc31\uc5d4\ub4dc: \ub3c4\ucee4\uae30\ubc18 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc544\ud0a4\ud14d\ucc98\" \/><\/p>\n<p>\uadf8\ub9bc\uc758 \uc717\ubd80\ubd84 \ubd80\ud130 \ucc28\ub840\ub85c \uc124\uba85\ud558\uaca0\uc2b5\ub2c8\ub2e4. \uae43\ud50c \uc11c\ube44\uc2a4\uc758 \ubc31\uc5d4\ub4dc\ub294 \ub2e8\uc704\uae30\ub2a5\uc744 \uc218\ud589\ud558\ub294 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4\ub85c \uad6c\uc131\ub429\ub2c8\ub2e4. \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4\uc740 \ubd80\ud558\ubd84\uc0b0\uacfc \uc7a5\uc560\uc870\uce58<code>failover<\/code>\ub97c \uc704\ud574 \uc5ec\ub7ec \ub178\ub4dc\uc5d0 \uac78\uccd0 \uc218\ud3c9\uc801\ud655\uc7a5\ub420 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub294 \ubc84\uc804\uad00\ub9ac\ub418\ub294 \ub3c4\ucee4\uc774\ubbf8\uc9c0\ub85c \uc81c\uc791\ub418\uc5b4 \uc5ec\ub7ec\uac1c \ub178\ub4dc\uc5d0 \ubc30\ud3ec\ub429\ub2c8\ub2e4. \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub294 \ub3c4\ucee4<code>docker<\/code> \ucee8\ud14c\uc774\ub108\ub85c \uc218\ud589\ub429\ub2c8\ub2e4. \ubaa8\ub4e0 \ubc31\uc5d4\ub4dc\uc758 \uc11c\ube44\uc2a4\ub294 \ub3c4\ucee4\ub85c \uad00\ub9ac\ub418\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc800\uc7a5\uc7a5\uce58\uc640 \ucef4\ud4e8\ud305\uc744 \uc81c\uacf5\ud558\ub294 \ub178\ub4dc\ub4e4\uc740 \ud074\ub77c\uc6b0\ub4dc \uc778\ud504\ub77c(IaaS)\uc5d0\uc11c \uc218\ud589\ub429\ub2c8\ub2e4. \uc624\ud508\uc2a4\ud0dd\uae30\ubc18\uc758 <a href=\"https:\/\/ixcloud.net\/\">IXcloud<\/a> \ubc0f AWS \uc5d0 \uc0c1\uad00\uc5c6\ub3c4\ub85d IaaS \uc758\uc874\uc131\uc744 \ucd5c\uc18c\ud654 \ud588\uc2b5\ub2c8\ub2e4.<\/p>\n<blockquote><p>\ubc31\uc5d4\ub4dc \uc778\ud504\ub77c\ub97c \uace0\ubbfc\ud558\uba74\uc11c,<\/p>\n<p>Docker swarm \uc640 Kubenetes \ub97c \uac80\ud1a0\ud588\uace0 \uc2e4\uc81c\ub85c docker swarm\uc740 \ud55c\ub3d9\uc548 \uc0ac\uc6a9\ud588\uc5c8\uc9c0\ub9cc \uc815\uad50\ud558\uac8c \ubc30\ud3ec\ud558\uae30 \uc704\ud55c \uae30\ub2a5\uacfc \ub124\ud2b8\uc6cc\ud06c \uc131\ub2a5 \ub54c\ubb38\uc5d0 \uc9c1\uc811 \ud658\uacbd\uc744 \uad6c\ucd95\ud558\uac8c \ub418\uc5c8\uc2b5\ub2c8\ub2e4. Cloud Foundry \uac19\uc740 <code>Application PaaS<\/code>\u00a0\uc758 \uae30\ub2a5\uc744 \uc9c0\ud5a5\ud558\uc9c0\ub9cc, \uc6b0\ub9ac\uc758 \ubaa9\uc801\uc5d0 \uaf2d \ub9de\ub294 \uae30\ub2a5\ub9cc\uc744 \uac16\ucd98 \uc778\ud504\ub77c \ud658\uacbd\uc744 \ub9cc\ub4e4\uc5c8\uc2b5\ub2c8\ub2e4.<\/p><\/blockquote>\n<h2>Ansible : \uc9c0\uc18d\uc801 \ubc30\ud3ec<\/h2>\n<p>\uc9c0\uc18d\uc801 \ubc30\ud3ec<code>CD(Continuous Delivery)<\/code>\ub97c \uc704\ud574 ansible\uc744 \ud65c\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800, \ud074\ub77c\uc6b0\ub4dc \uc778\ud504\ub77c\uc5d0 \uae30\ubcf8 \ud658\uacbd\uc744 \uad6c\ucd95\ud569\ub2c8\ub2e4. \uac1c\ubc1c\ud658\uacbd\uc744 \uc704\ud574 \ud558\ub098\uc758 \ub178\ub4dc\uc5d0 \uc804\uccb4 \ud658\uacbd\uc744 \ub9cc\ub4e4\uae30\ub3c4 \ud558\uace0, \ub2e4\uc218\uc758 \ub178\ub4dc \ud074\ub7ec\uc2a4\ud130\uc5d0 \uc790\ub3d9\uc73c\ub85c \ud658\uacbd\uc744 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uae30\uc874 \ud074\ub7ec\uc2a4\ud130\uc5d0 \ub178\ub4dc\ub97c \ucd94\uac00\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uad6c\ucd95\uacfc\uc815\uc744 \uc608\ub85c \ub4e4\uba74,<\/p>\n<ul>\n<li>VM \uc778\uc2a4\ud134\uc2a4\ub97c \uc0dd\uc131\ud558\uc5ec \ub178\ub4dc\ub4e4 \ud074\ub7ec\uc2a4\ud130\ub97c \ub9cc\ub4e4\uace0,<\/li>\n<li>\ubcf4\uc548\uc124\uc815 <code>security group<\/code>\ud558\uace0,<\/li>\n<li>\ub178\ub4dc \ub0b4\uc5d0\uc11c, \uae30\ubcf8 \uc2dc\uc2a4\ud15c \uc11c\ube44\uc2a4(ntp, logrotated \ub4f1) \uc124\uc815\ud558\uace0,<\/li>\n<li>\ub178\ub4dc \ub0b4\uc5d0\uc11c, \ubaa8\ub2c8\ud130\ub9c1 \uc124\uc815\ud558\uace0,<\/li>\n<li>\ub178\ub4dc \ub0b4\uc5d0\uc11c, Docker \uc218\ud589\ud658\uacbd \ub9cc\ub4e4\uae30 \ub4f1,<\/li>\n<\/ul>\n<p>\ub178\ub4dc \uad6c\ucd95 \ud6c4\uc758 \ub3c4\ucee4\uc774\ubbf8\uc9c0 \ube4c\ub4dc \ubc0f \ubc30\ud3ec\uacfc\uc815\uc740,<\/p>\n<p>Ansible\uacfc \ud568\uaed8 make\ub97c \uc774\uc6a9\ud558\uc5ec \ubcf5\uc7a1\ud55c \uc758\uc874\uc131\uc744 \ud655\uc778\ud558\uc5ec \ub3c4\ucee4\uc774\ubbf8\uc9c0\ub97c \ube4c\ub4dc\ud558\uace0 \ubc30\ud3ec\ub97c \uc9c4\ud589\ud569\ub2c8\ub2e4. \uc218\uc2dc\ub85c \uac1c\ubcc4 \uc11c\ube44\uc2a4\ubcc4\ub85c \uc5c5\uadf8\ub808\uc774\ub4dc \ud574\uc57c \ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\uc740\ub370\uc694. \uc774\ub54c, \uc11c\ube44\uc2a4\uc5d0 \uc601\ud5a5\uc744 \uc8fc\uc9c0\uc54a\ub3c4\ub85d, \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \ucee8\ud14c\uc774\ub108 \ud558\ub098\uc529 \uc21c\ucc28\uc801\uc73c\ub85c \ubc30\ud3ec\ud558\uace0 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>Docker : \ucee8\ud14c\uc774\ub108 \uc544\ud0a4\ud14d\ucc98<\/h2>\n<p>Docker swarm\uc744 \uc774\uc6a9\ud558\uc9c0 \uc54a\uc2b5\ub2c8\ub2e4. \ud3b8\ub9ac\ud558\uae30\ub294 \ud558\uc9c0\ub9cc, \uc624\ubc84\ub808\uc774 \ub124\ud2b8\uc6cc\ud06c<code>overlay network<\/code>\uc758 \uc131\ub2a5 \ubb38\uc81c\ub85c <code>host port binding<\/code>\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<h2>Docker Registry: \ubc30\ud3ec \uc774\ubbf8\uc9c0 \uad00\ub9ac<\/h2>\n<p>\uc0ac\uc124 \ub3c4\ucee4 \ub808\uc9c0\uc2a4\ud2b8\ub9ac<code>Private Registry<\/code> \ub97c \uad6c\ucd95\ud569\ub2c8\ub2e4. \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4\uc740 \ucf54\ub4dc \ubcc0\uacbd\uc774 \ub418\uba74 \ube4c\ub4dc \ud6c4, \ub3c4\ucee4 \uc774\ubbf8\uc9c0\ub85c \uc0ac\uc124 \ub808\uc9c0\uc2a4\ud2b8\ub9ac\uc5d0 \ub4f1\ub85d\ud558\uc5ec \ubc84\uc804\uad00\ub9ac \ud569\ub2c8\ub2e4.<\/p>\n<h2><a href=\"https:\/\/coreos.com\/etcd\/\">Etcd<\/a> : \ud074\ub7ec\uc2a4\ud130 \ucf54\ub514\ub124\uc774\ud130<\/h2>\n<p>Etcd\ub97c \uc774\uc6a9\ud574 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4 \uc0ac\uc774\uc758 \uc870\uc815\uc790 \uc5ed\ud560\uc744 \uad6c\ud604\ud569\ub2c8\ub2e4. \uc870\uc815\uc790 \uae30\ub2a5\uc758 \uc608\ub97c \ub4e4\uba74,<\/p>\n<ul>\n<li>\ub9ac\ub354, \ub9e4\uc2a4\ud130 \uc120\ucd9c<\/li>\n<li>\uacf5\ud1b5 \uc124\uc815 \uad00\ub9ac<\/li>\n<li>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \ub4f1\ub85d \ubc0f \ub514\uc2a4\ucee4\ubc84\ub9ac<\/li>\n<\/ul>\n<blockquote><p>Etcd vs Consul<\/p>\n<p>Etcd\ub294 \ub2e8\uc21c key\/value \uc800\uc7a5\ub9cc \uc81c\uacf5\ud558\uc9c0\ub9cc, Consul\uc758 \uacbd\uc6b0\ub294 \uc11c\ube44\uc2a4 \ub514\uc2a4\ucee4\ubc84\ub9ac(service discovery), \uc0c1\ud0dc\uccb4\ud06c(health check)\ub97c \ucd94\uac00\ub85c \uc81c\uacf5\ud558\uae30 \ub54c\ubb38\uc5d0 \uac04\ud3b8\ud558\uac8c \uc4f0\uae30 \uc88b\uc740 \ub3c4\uad6c\uc785\ub2c8\ub2e4. \uc77c\ubc18\uc801\uc778 \uacbd\uc6b0\ub294 Consul\ub97c \ucd94\ucc9c\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud558\uc9c0\ub9cc, \uae43\ud50c\uc774 \uc0ac\uc6a9\ud558\ub294 \uc77c\ubd80 \ubaa8\ub4c8\uc774 Etcd\uc5d0 \uc758\uc874\uc131\uc774 \uc788\uc5c8\uace0, Consul\uc774 \uc81c\uacf5\ud558\ub294 \ubd80\uac00\uae30\ub2a5\ub3c4 Etcd\ub97c \uc9c0\uc6d0\ud558\ub294 \ub2e4\ub978 \ub3c4\uad6c\ub85c \ud574\uacb0 \uac00\ub2a5\ud588\uc2b5\ub2c8\ub2e4.<\/p><\/blockquote>\n<h2><a href=\"https:\/\/github.com\/gliderlabs\/registrator\">Registrator<\/a> \ubc0f <a href=\"https:\/\/github.com\/skynetservices\/skydns\">Skydns<\/a> : \uc11c\ube44\uc2a4 \ub514\uc2a4\ucee4\ubc84\ub9ac<\/h2>\n<p>Skydns\ub294 \ub0b4\ubd80 DNS \uc11c\ube44\uc2a4\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. Registrator\ub294 \uac01 \ub178\ub4dc\uc5d0\uc11c \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub85c \uc218\ud589\ub418\ub294 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\uc758 \uc0c1\ud0dc\ubcc0\ud654\ub97c \uad00\ub9ac\ud569\ub2c8\ub2e4. Registrator\uc640 Skydns\ub294 etcd\ub97c \ud1b5\ud574 \uc815\ubcf4\ub97c \uacf5\uc720\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub8f0\uaddc\uce59\uc744 \uc218\ud589\ud558\ub294 Rule \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\uac00 \ucd94\uac00\ub418\ub294 \uc608\ub97c \ub4e4\uba74,<\/p>\n<ul>\n<li>N\ubc88\uc9f8 \ub178\ub4dc\uc5d0 Rule-n \uc774 \uc218\ud589\ub429\ub2c8\ub2e4.<\/li>\n<li>N\uc804\uc9f8 \ub178\ub4dc\uc758 Registrator\ub294 Rule-n\uc758 service name, IP \ubc0f PORT \uc815\ubcf4\ub97c etcd\uc5d0 \uae30\ub85d\ud569\ub2c8\ub2e4.<\/li>\n<li>Skydns\ub294 rule-n.rule.skydns \ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<li>\ub2e4\ub978 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4\uc740 rule.skydns \ub85c \uc804\uccb4 Rule \ud074\ub7ec\uc2a4\ud130\uc758 \uc815\ubcf4\uc5d0\uc11c rule-n.rule.skydns\uc758 IP \ubc0f PORT\uc815\ubcf4\ub97c \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/li>\n<\/ul>\n<pre style=\"padding: 1em; background-image: none; background-color: rgba(0, 0, 0, .05);\"><code>$ dig +short SRV rule.skydns.local\r\n** ** ***** rule-1.rule.skydns.local.\r\n** ** ***** rule-2.rule.skydns.local.\r\n** ** ***** rule-3.rule.skydns.local.<\/code><\/pre>\n<h2>Reverse Proxy : \ub9ac\ubc84\uc2a4 \ud504\ub85d\uc2dc<\/h2>\n<p>\uae30\ubcf8\uc801\uc73c\ub85c <a href=\"http:\/\/haproxy.org\">Haproxy<\/a>\ub97c \ud65c\uc6a9\ud569\ub2c8\ub2e4. \uc774\ub97c \ud1b5\ud574, \uc678\ubd80\ub85c \uc81c\uacf5\ub418\ub294 \uc6f9\uc11c\ube44\uc2a4\uc758 \ub85c\ub4dc\ubd84\uc0b0\uacfc \uc7a5\uc560\uc870\uce58<code>failover<\/code>\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. \uc6f9\uc18c\ucf13\uc744 \ud1b5\ud55c MQTT, REST API \ub4f1\uc758 \uc694\uad6c\uc0ac\ud56d\uc5d0 \ub530\ub77c \uc815\uad50\ud55c \uc124\uc815\uc774 \ud544\uc694\ud569\ub2c8\ub2e4. \ub610\ud55c, Etcd\uc5d0 \uad00\ub9ac\ub418\uace0 \uc788\ub294 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4\uc758 \ub3d9\uc801\uc778 \ucd94\uac00\/\uc0ad\uc81c\ub97c \ub3d9\uc801\uc73c\ub85c \ubc18\uc601\ud569\ub2c8\ub2e4.<\/p>\n<h2>Rsyslog \/ ELK : \ub85c\uadf8 \ud1b5\ud569 \ubc0f \ubd84\uc11d<\/h2>\n<p>\ubc31\uc5d4\ub4dc\uc5d0\uc11c \uc6b4\uc601\ub418\ub294 \uc11c\ube44\uc2a4\uc758 severity\uc5d0 \ub530\ub978 \ub85c\uadf8 \uad00\ub9ac\ub294 \ubb34\uc5c7\ubcf4\ub2e4 \uc911\uc694\ud569\ub2c8\ub2e4. \ud2b9\ud788, \ub2e4\uc218\uc758 \ub9c8\uc774\ud06c\ub85c \uc11c\ube44\uc2a4\ub85c \uad6c\uc131\ub418\ub294 \ud658\uacbd\uc5d0\uc11c\ub294 \ub85c\uadf8\ub97c \ud1b5\ud55c \ube60\ub978 \ubb38\uc81c\ud574\uacb0\uc774 \ubb34\uc5c7\ubcf4\ub2e4 \uc911\uc694\ud569\ub2c8\ub2e4.<\/p>\n<p>\uadf8\ub798\uc11c,<\/p>\n<ul>\n<li>\ubaa8\ub4e0 \ub9c8\uc774\ud06c\ub85c \uc11c\ube44\uc2a4\uc5d0\uc11c \ubc1c\uc0dd\ud558\ub294 \ub85c\uadf8\ub294 rsyslog\ub97c \ud1b5\ud574 \ud55c \uacf3\uc73c\ub85c \ud1b5\ud569\ud569\ub2c8\ub2e4.<\/li>\n<li>\ub610\ud55c, Logstash\ub85c \ud574\ub2f9 \ub85c\uadf8\ub97c \uc804\uc1a1\ud558\uc5ec ELK(Elasticsearch, Logstash, Kibana)\ub97c \ud1b5\ud55c \ubcf5\uc7a1\ud55c \ub85c\uadf8\ub97c \uc27d\uac8c \ubd84\uc11d\ud560 \uc218 \uc788\ub3c4\ub85d \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2><a href=\"https:\/\/www.zabbix.com\/\">Zabbix<\/a>: \ubaa8\ub2c8\ud130\ub9c1 \ubc0f \uc54c\ub78c<\/h2>\n<p>Zabbix\ub294 \uc11c\ubc84\uc758 \uac01\uc885 \uc790\uc6d0\uc744 \ubaa8\ub2c8\ud130\ub9c1\ud558\uace0, \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\uc744 \ub54c \uc54c\ub78c\uc744 \ubc1c\uc0dd\ud560 \uc218 \uc788\ub294 \uc624\ud508\uc18c\uc2a4 \ub3c4\uad6c\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ub300\uc0c1\uc744 \ubaa8\ub2c8\ud130\ub9c1\ud558\uace0, \uc9c0\uc815\ub41c \uc784\uacc4\uce58\ub97c \ub118\uc73c\uba74 \uc54c\ub78c\uc774 \ubc1c\uc0dd\ud569\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc804\uccb4 \ub178\ub4dc\ubcc4 \uc790\uc6d0(CPU, Disk, Network \ub4f1)<\/li>\n<li>\ubaa8\ub4e0 \ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\uc758 \uc790\uc6d0 \ubc0f \ud574\ub2f9 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc0c1\ud0dc\ud655\uc778 \uacb0\uacfc<\/li>\n<li>Redis, Mongo \ub4f1\uc758 \uc54c\ub824\uc9c4 \ub3c4\uad6c\ub4e4: \ucee4\ubba4\ub2c8\ud2f0\uc5d0 \uacf5\uac1c\ub41c template\uc744 \uc774\uc6a9\ud568<\/li>\n<li><a href=\"https:\/\/www.zabbix.com\/documentation\/3.2\/manual\/web_monitoring\">Zabbix web monitoring<\/a> \uae30\ub2a5\uc744 \uc774\uc6a9\ud55c \uc6f9\uc11c\ube44\uc2a4 \ubaa8\ub2c8\ud130\ub9c1<\/li>\n<\/ul>\n<blockquote><p>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\uc758 \uc0c1\ud0dc \ubaa8\ub2c8\ud130\ub9c1\uc744 \uc704\ud574\uc11c, <code>docker run<\/code>\uc758 \uc0c1\ud0dc\uccb4\ud06c(health check) \uae30\ub2a5\uc744 \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p><\/blockquote>\n<p>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc0c1\ud0dc \uccb4\ud06c \uc608)<\/p>\n<pre style=\"padding: 1em; background-image: none; background-color: rgba(0, 0, 0, .05);\"><code>docker run \\\r\n... \\\r\n--health-interval 10s  \\\r\n--health-retries 2  \\\r\n--health-timeout 2s --health-cmd \"curl --connect-timeout 1 -sf localhost:$(PORT)\/api\/status | grep -w ok\"<\/code><\/pre>\n<blockquote><p>Docker \ubaa8\ub2c8\ud130\ub9c1\uc744 \uc704\ud574 <a href=\"https:\/\/github.com\/monitoringartist\/zabbix-docker-monitoring\">zabbix-docker-monitoring<\/a> \uc774\uc6a9\ud569\ub2c8\ub2e4.<\/p><\/blockquote>\n<h2>\ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4 \uc560\ud50c\ub9ac\ucf00\uc774\uc158<\/h2>\n<p>\ubc31\uc5d4\ub4dc\uc758 \ub2e8\uc704 \uae30\ub2a5\ub4e4\uc740 \ubd80\ud558\uc5d0 \ub530\ub77c \ucee8\ud14c\uc774\ub108 \uc218\uac00 \uc99d\uac10\ub420 \uc218 \uc788\ub294 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub85c \uad6c\ud604\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc758 \uac00\uc774\ub4dc\ub77c\uc778\uc744 \ub530\ub985\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\ub3c4\ucee4 \ucee8\ud14c\uc774\ub108\ub85c \uc81c\uacf5\ud55c\ub2e4.<\/li>\n<li>\uac00\ub2a5\ud558\uba74 nodejs \uae30\ubc18\uc73c\ub85c \uad6c\ud604\ud569\ub2c8\ub2e4.<\/li>\n<li>\uad6c\ud604\uc5b8\uc5b4\ub294 javascript\uc785\ub2c8\ub2e4. \ud615<code>type<\/code> \uccb4\ud06c\uac00 \uba85\ud655\ud55c Typescript \uc5b8\uc5b4\ub97c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/li>\n<li>\ub3d9\uc77c\uae30\ub2a5\uc744 \ud558\ub294 \uc5b4\ub290 \ub9c8\uc774\ud06c\ub85c\uc11c\ube44\uc2a4\ub4e4\uc740 Master\/Slave\ubcf4\ub2e4\ub294 Active\/Active \uad6c\uc131\uc744 \uc9c0\ud5a5\ud569\ub2c8\ub2e4.<\/li>\n<li>\uc0c1\ud0dc\uccb4\ud06c<code>health check<\/code>\ub97c \uc704\ud55c REST API\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<h2>\ub370\uc774\ud130 \uc800\uc7a5<\/h2>\n<h3>Mongo : NO SQL DB<\/h3>\n<p>MongoDB\ub294 JSON \ud615\ud0dc\uc758 \ub3c4\ud050\uba3c\ud2b8 \ub2e8\uc704\ub85c \ub370\uc774\ud130\ub97c \uc800\uc7a5\ud558\ub294 NoSQL DB\uc785\ub2c8\ub2e4.<\/p>\n<ul>\n<li>Query, Index, Aggregation \uae30\ub2a5 \uc9c0\uc6d0<\/li>\n<li>Replica set\uc73c\ub85c \uad6c\uc131\ud558\uc5ec \uace0\uac00\uc6a9\uc131 \uc81c\uacf5<\/li>\n<li>\uc0e4\ub529<code>sharding<\/code>\uad6c\uc131\ud558\uc5ec \uc218\ud3c9 \ud655\uc7a5 \uc81c\uacf5<\/li>\n<\/ul>\n<p>\uae43\ud50c\uc5d0\uc11c\ub294 \uc8fc\ub85c \ucc44\ud305 \ub85c\uadf8 \uae30\ub85d \ubc0f \ud1b5\uacc4 \ucc98\ub9ac \ub370\uc774\ud130 \uc800\uc7a5\ud569\ub2c8\ub2e4.<\/p>\n<h3>Redis : \uc778\uba54\ubaa8\ub9ac DB<\/h3>\n<p>Redis\ub294 Key-Value Store\ub85c \ub300\uc6a9\ub7c9\uc758 \ub370\uc774\ud130 \ucc98\ub9ac\ub97c \uc704\ud574 \uc124\uacc4\ub41c \uc778\uba54\ubaa8\ub9ac DB\uc785\ub2c8\ub2e4<\/p>\n<ul>\n<li>Strings, Hashes, Lists, Sets, Sorted Sets \ub4f1\uc758 \ub2e4\uc591\ud55c \ub370\uc774\ud130 \ud0c0\uc785\uc744 \uc9c0\uc6d0<\/li>\n<li>\ub9cc\ub8cc \uc2dc\uac01\uc774 \ub418\uba74 \ub370\uc774\ud130\ub97c \uc0ad\uc81c\ud558\ub294 Expire \uae30\ub2a5 \uc9c0\uc6d0<\/li>\n<li>\uba54\ubaa8\ub9ac\uc5d0 \uc788\ub294 \ub370\uc774\ud130\ub97c \ud30c\uc77c\uc5d0 \uc800\uc7a5\ud560 \uc218 \uc788\ub294 Persistence \uae30\ub2a5 \uc9c0\uc6d0<\/li>\n<li>Redis Sentinel \uad6c\uc131\uc73c\ub85c \uace0\uac00\uc6a9\uc131 \uc81c\uacf5<\/li>\n<li>Redis Cluster \uad6c\uc131\uc73c\ub85c \uc0e4\ub529 \uc81c\uacf5<\/li>\n<\/ul>\n<p>\uae43\ud50c\uc5d0\uc11c\ub294 Redis Sentinel\uc744 \uad6c\uc131\ud558\uc5ec \uc6b4\uc601\uc911\uc774\uba70, \uc138\uc158 \ub370\uc774\ud130 \uacf5\uc720 \ubc0f \uac04\ub2e8\ud55c Job queue \ub4f1\uc758 \uc6a9\ub3c4\ub85c \ud65c\uc6a9\ud569\ub2c8\ub2e4<\/p>\n<hr \/>\n<p>\uc774\uc0c1 \ubc31\uc5d4\ub4dc\uc758 \uae30\uc220\uc2a4\ud0dd\uc744 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ud504\ub860\ud2b8\uc5d4\ub4dc \uae30\uc220\uc2a4\ud0dd\uc5d0 \ub300\ud574\uc11c\ub294 \ub2e4\uc74c\ud3b8\uc744 \uae30\ub300\ud574 \uc8fc\uc138\uc694~<\/p>\n<p>\ubcc4\ub3c4\uc758 \uae43\ud50c <a href=\"http:\/\/tech.gitple.io\">\uae30\uc220\ube14\ub85c\uadf8( http:\/\/tech.gitple.io ) <\/a>\ub97c \ubc29\ubb38\ud574 \ubcf4\uc138\uc694. \ub9e4\uc8fc \uc0c8\ub85c\uc6b4 \uae30\uc220\uae00\ub4e4\uc774 \uc62c\ub77c\uc635\ub2c8\ub2e4~<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Gitple\uc740 SaaS(Software as a Service) \ud615\ud0dc\uc758 \uc804\ud615\uc801\uc778 \ud074\ub77c\uc6b0\ub4dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc785\ub2c8\ub2e4. (\uac1c\ubc1c\ud300\uc740 \ub450\ubc88\uc9f8\uc758 \uacbd\ud5d8\uc774\ub77c \uc774\ubc88\uc5d0\ub294 \ub354\uc6b1 \uc815\uad50\ud558\uac8c \uae30\uc220\uc2a4\ud0dd\uc744 \uc313\uc544 \ub098\uac00\uace0 \uc788\uc2b5\ub2c8\ub2e4.)<br \/>\n\uae43\ud50c \uc11c\ube44\uc2a4\uc758 \ubc31\uc5d4\ub4dc \uae30\uc220\uc2a4\ud0dd\uc744 \uc804\ubc18\uc801\uc73c\ub85c \uc124\uba85\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uac01\uac01\uc758 \uae30\uc220\uc5d0 \ub300\ud55c \uc0c1\uc138 \ub0b4\uc6a9\uc740 \uc55e\uc73c\ub85c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud305 \ud560 \uc608\uc815\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"author":1,"featured_media":1762,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[47],"tags":[56,61,60,58,59,57],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v16.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\uae43\ud50c \uae30\uc220 \uc2a4\ud0dd \uc18c\uac1c (\ubc31\uc5d4\ub4dc \ud3b8) - \ucc57\ubd07\uacfc \uc0c1\ub2f4\uc0ac\ub97c \ub118\ub098\ub4dc\ub294 \uc634\ub2c8\ucc44\ub110 \uace0\uac1d\uc0c1\ub2f4 \uc194\ub8e8\uc158, \uae43\ud50c\ucc57<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/gitple.io\/ko\/techstack_backend\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\uae43\ud50c \uae30\uc220 \uc2a4\ud0dd \uc18c\uac1c (\ubc31\uc5d4\ub4dc \ud3b8) - \ucc57\ubd07\uacfc \uc0c1\ub2f4\uc0ac\ub97c \ub118\ub098\ub4dc\ub294 \uc634\ub2c8\ucc44\ub110 \uace0\uac1d\uc0c1\ub2f4 \uc194\ub8e8\uc158, \uae43\ud50c\ucc57\" \/>\n<meta property=\"og:description\" content=\"Gitple\uc740 SaaS(Software as a Service) \ud615\ud0dc\uc758 \uc804\ud615\uc801\uc778 \ud074\ub77c\uc6b0\ub4dc \uc560\ud50c\ub9ac\ucf00\uc774\uc158 \uc785\ub2c8\ub2e4. (\uac1c\ubc1c\ud300\uc740 \ub450\ubc88\uc9f8\uc758 \uacbd\ud5d8\uc774\ub77c \uc774\ubc88\uc5d0\ub294 \ub354\uc6b1 \uc815\uad50\ud558\uac8c \uae30\uc220\uc2a4\ud0dd\uc744 \uc313\uc544 \ub098\uac00\uace0 \uc788\uc2b5\ub2c8\ub2e4.) \uae43\ud50c \uc11c\ube44\uc2a4\uc758 \ubc31\uc5d4\ub4dc \uae30\uc220\uc2a4\ud0dd\uc744 \uc804\ubc18\uc801\uc73c\ub85c \uc124\uba85\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4. \uac01\uac01\uc758 \uae30\uc220\uc5d0 \ub300\ud55c \uc0c1\uc138 \ub0b4\uc6a9\uc740 \uc55e\uc73c\ub85c \ube14\ub85c\uadf8 \ud3ec\uc2a4\ud305 \ud560 \uc608\uc815\uc785\ub2c8\ub2e4.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/gitple.io\/ko\/techstack_backend\" \/>\n<meta property=\"og:site_name\" content=\"\ucc57\ubd07\uacfc \uc0c1\ub2f4\uc0ac\ub97c \ub118\ub098\ub4dc\ub294 \uc634\ub2c8\ucc44\ub110 \uace0\uac1d\uc0c1\ub2f4 \uc194\ub8e8\uc158, \uae43\ud50c\ucc57\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/gitple\/\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/gitple\" \/>\n<meta property=\"article:published_time\" content=\"2017-11-13T04:44:36+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-12-06T01:57:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/beta.gitple.io\/wp-content\/uploads\/2017\/11\/techstack.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1216\" \/>\n\t<meta property=\"og:image:height\" content=\"740\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data1\" content=\"1\ubd84\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https:\/\/gitple.io\/ko\/#organization\",\"name\":\"\\uae43\\ud50c\\ucc57\",\"url\":\"https:\/\/gitple.io\/ko\/\",\"sameAs\":[\"https:\/\/www.facebook.com\/gitple\/\",\"https:\/\/www.youtube.com\/channel\/UCpQv2iWYRmk4xxES_LATVdg\"],\"logo\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/gitple.io\/ko\/#logo\",\"inLanguage\":\"ko-KR\",\"url\":\"https:\/\/gitple.io\/wp-content\/uploads\/2016\/12\/logo_gitple.png\",\"contentUrl\":\"https:\/\/gitple.io\/wp-content\/uploads\/2016\/12\/logo_gitple.png\",\"width\":583,\"height\":347,\"caption\":\"\\uae43\\ud50c\\ucc57\"},\"image\":{\"@id\":\"https:\/\/gitple.io\/ko\/#logo\"}},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/gitple.io\/ko\/#website\",\"url\":\"https:\/\/gitple.io\/ko\/\",\"name\":\"\\ucc57\\ubd07\\uacfc \\uc0c1\\ub2f4\\uc0ac\\ub97c \\ub118\\ub098\\ub4dc\\ub294 \\uc634\\ub2c8\\ucc44\\ub110 \\uace0\\uac1d\\uc0c1\\ub2f4 \\uc194\\ub8e8\\uc158, \\uae43\\ud50c\\ucc57\",\"description\":\"\\uace0\\uac1d \\uc0c1\\ub2f4 \\uc790\\ub3d9\\ud654, \\ucc57\\ubd07, \\uc2dc\\ub098\\ub9ac\\uc624 \\ubd07, FAQ \\ubd07\",\"publisher\":{\"@id\":\"https:\/\/gitple.io\/ko\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/gitple.io\/ko\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#primaryimage\",\"inLanguage\":\"ko-KR\",\"url\":\"https:\/\/gitple.io\/wp-content\/uploads\/2017\/11\/techstack.png\",\"contentUrl\":\"https:\/\/gitple.io\/wp-content\/uploads\/2017\/11\/techstack.png\",\"width\":1216,\"height\":740},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#webpage\",\"url\":\"https:\/\/gitple.io\/ko\/techstack_backend\",\"name\":\"\\uae43\\ud50c \\uae30\\uc220 \\uc2a4\\ud0dd \\uc18c\\uac1c (\\ubc31\\uc5d4\\ub4dc \\ud3b8) - \\ucc57\\ubd07\\uacfc \\uc0c1\\ub2f4\\uc0ac\\ub97c \\ub118\\ub098\\ub4dc\\ub294 \\uc634\\ub2c8\\ucc44\\ub110 \\uace0\\uac1d\\uc0c1\\ub2f4 \\uc194\\ub8e8\\uc158, \\uae43\\ud50c\\ucc57\",\"isPartOf\":{\"@id\":\"https:\/\/gitple.io\/ko\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#primaryimage\"},\"datePublished\":\"2017-11-13T04:44:36+00:00\",\"dateModified\":\"2017-12-06T01:57:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/gitple.io\/ko\/techstack_backend\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/gitple.io\/ko\",\"url\":\"https:\/\/gitple.io\/ko\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#webpage\"}}]},{\"@type\":\"Article\",\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#article\",\"isPartOf\":{\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#webpage\"},\"author\":{\"@id\":\"https:\/\/gitple.io\/ko\/#\/schema\/person\/4f4d719e5038dc90cc1d148d52a86d1b\"},\"headline\":\"\\uae43\\ud50c \\uae30\\uc220 \\uc2a4\\ud0dd \\uc18c\\uac1c (\\ubc31\\uc5d4\\ub4dc \\ud3b8)\",\"datePublished\":\"2017-11-13T04:44:36+00:00\",\"dateModified\":\"2017-12-06T01:57:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#webpage\"},\"publisher\":{\"@id\":\"https:\/\/gitple.io\/ko\/#organization\"},\"image\":{\"@id\":\"https:\/\/gitple.io\/ko\/techstack_backend#primaryimage\"},\"keywords\":[\"\\uae30\\uc220\",\"\\ubc31\\uc5d4\\ub4dc\",\"\\uc11c\\ubc84\",\"\\uc544\\ud0a4\\ud14d\\ucc98\",\"\\ud14c\\ud06c\",\"\\ud14c\\ud06c\\uc2a4\\ud0dd\"],\"articleSection\":[\"\\ud14c\\ud06c\\ub180\\ub85c\\uc9c0\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/gitple.io\/ko\/#\/schema\/person\/4f4d719e5038dc90cc1d148d52a86d1b\",\"name\":\"gitple\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/gitple.io\/ko\/#personlogo\",\"inLanguage\":\"ko-KR\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/2246d743a5174534bc59a54997f334a1?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/2246d743a5174534bc59a54997f334a1?s=96&d=mm&r=g\",\"caption\":\"gitple\"},\"sameAs\":[\"https:\/\/www.facebook.com\/gitple\"]}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/posts\/1730"}],"collection":[{"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/comments?post=1730"}],"version-history":[{"count":23,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/posts\/1730\/revisions"}],"predecessor-version":[{"id":2016,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/posts\/1730\/revisions\/2016"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/media\/1762"}],"wp:attachment":[{"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/media?parent=1730"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/categories?post=1730"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gitple.io\/ko\/wp-json\/wp\/v2\/tags?post=1730"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}