{"id":2476,"date":"2016-10-19T03:36:31","date_gmt":"2016-10-19T03:36:31","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=2476"},"modified":"2016-10-19T03:36:31","modified_gmt":"2016-10-19T03:36:31","slug":"golang-%ea%b0%9d%ec%b2%b4-pool","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=2476","title":{"rendered":"[Golang] \uac1d\uccb4 Pool"},"content":{"rendered":"<p>Golang\uc5d0\uc11c \uac1d\uccb4 \uc7ac\ud65c\uc6a9\uc744 \uc704\ud55c pool\uc744 \uc81c\uacf5\ud558\ub294\ub370\uc694. \uc774 \uac1d\uccb4 \ud480\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \uc815\ub9ac\ud574 \ubd05\ub2c8\ub2e4.<\/p>\n<p>\uba3c\uc800 \ud480\uc5d0 \ub123\uace0 \uc7ac\ud65c\uc6a9\ud558\uace0\uc790 \ud558\ub294 \uac1d\uccb4 \ud0c0\uc785\uc744 \uc544\ub798\ucc98\ub7fc \uc815\uc758\ud569\ub2c8\ub2e4.<\/p>\n<pre>\ntype DB struct {\n    bConnected bool\n}\n\nfunc (c *DB) connect() {\n    c.bConnected = true\n    fmt.Println(\"[connection completed]\")\n}\n\nfunc (c *DB) query() {\n    if c.bConnected {\n        fmt.Println(\"    [query completed]\")\n    } else {\n        fmt.Println(\"    [could not query]\")\n    }\n}\n<\/pre>\n<p>\ub370\uc774\ud130\ubca0\uc774\uc2a4 \uac1d\uccb4\uc5d0 \ub300\ud574 \ud749\ub0b4\ub97c \ub0b8 DB \ud0c0\uc785\uc778\ub370\uc694. DB\ub294 \ubbf8\ub9ac DB \uc11c\ubc84\uc5d0 \uc5f0\uacb0\uc744 \ud55c\ubc88 \ub9fa\uc5b4 \ub193\uace0 \uacc4\uc18d \ucffc\ub9ac\ub97c \ub0a0\ub9bd\ub2c8\ub2e4. \uc774 DB \ud0c0\uc785\uc740 DB \uc11c\ubc84\uc5d0 \uc5f0\uacb0\ud558\ub294 connect \ub9e4\uc11c\ub4dc\uc640 \ucffc\ub9ac\ub97c \ub0a0\ub9ac\ub294 query \ub9e4\uc11c\ub4dc\uac00 \uc788\uace0, DB \uc11c\ubc84\uc5d0 \uc5f0\uacb0\uc774 \ub418\uc5b4 \uc788\ub294\uc9c0\ub97c \ud655\uc778\ud560 \uc218 \uc788\ub294 bConnected \ud544\ub4dc \ubcc0\uc218\ub97c \uac00\uc9c0\uace0 \uc788\ub294\ub370, \uc774 \ud544\ub4dc \ubcc0\uc218\ub294 connect \ub9e4\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uba74 true\ub85c \ubcc0\uacbd\ub429\ub2c8\ub2e4.<\/p>\n<p>\uc790, \uc774\uc81c \uc774 DB \uac1d\uccb4\ub97c \ubbf8\ub9ac \uc5f0\uacb0\ud574 \ub193\uace0 \ud480\uc5d0\uc11c \uac00\uc838\ub2e4 \uc7ac\ud65c\uc6a9\ud558\ub294 \ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\nfunc main() {\n    pool := sync.Pool{\n        New: func() interface{} {\n            r := new(DB)\n            r.bConnected = false\n            return r\n        },\n    }\n\n    for i := 0; i < 10; i++ {\n        go func() {\n            c := pool.Get().(*DB)\n            if !c.bConnected {\n                c.connect()\n            }\n\n            c.query()\n            pool.Put(c)\n        }()\n    }\n\n    fmt.Scanln()\n}\n<\/pre>\n<p>Key Point\uac00 \ub418\ub294 \ubd80\ubd84\ub9cc\uc744 \uc0b4\ud3b4\ubcf4\uba74, \uba3c\uc800 Golang\uc758 Pool \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uae30 \uc704\ud574\uc11c 2~8\ubc88\ucc98\ub7fc New \ud544\ub4dc\uc5d0 \uc7ac\uc0ac\uc6a9\ud560 \uac1d\uccb4\ub97c \uc0dd\uc131\ud574\uc8fc\ub294 \ud568\uc218\ub97c \uc815\uc758\ud574\uc918\uc57c \ud569\ub2c8\ub2e4. 4\ubc88\ucc98\ub7fc \uc55e\uc11c DB \ud0c0\uc785\uc758 \uac1d\uccb4\ub97c \uc0dd\uc131\ud558\uace0, \uc544\uc9c1 connect \ub9e4\uc11c\ub4dc\ub97c \ud638\ucd9c\ud558\uc9c0 \uc54a\uc558\uc73c\ubbc0\ub85c 5\ubc88\uc5d0\uc11c bConnected\ub97c false\ub85c \uc9c0\uc815\ud569\ub2c8\ub2e4. \ubb3c\ub860 \uc9c0\uc815\ud558\uc9c0 \uc54a\uc544\ub3c4 Null \uac12\uc73c\ub85c false\uac00 \uc800\uc7a5\ub418\uc5b4 \uc788\uc9c0\ub9cc \uba85\ud655\ud788 \ud558\ub294 \uac83\uc774 \uc88b\uc73c\ub2c8 \uc774\ub9ac \ud588\uc2b5\ub2c8\ub2e4. \uadf8\ub9ac\uace0 6\ubc88\uc5d0\uc11c \uc0dd\uc131\ud55c DB \uac1d\uccb4\ub97c \ubc18\ud658\ud569\ub2c8\ub2e4. \uc774 New \ud568\uc218\ub294 \ud480\uc5d0 \uac1d\uccb4\uac00 \ubd80\uc871\ud560\ub54c\ub9cc \ud638\ucd9c\ub418\uace0 \uc7ac\ud65c\uc6a9 \uac00\ub2a5\ud55c \uc5ec\ubd84\uc758 \uac1d\uccb4\uac00 \uc788\ub2e4\uba74 New \ud568\uc218 \ud638\ucd9c \uc5c6\uc774 \uc5ec\ubd84\uc758 \uac1d\uccb4 \uc911 \ud558\ub098\ub97c \uac00\uc838\ub2e4\uac00 \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774\uc81c 10\ubc88\uc758 for \ubb38\uc5d0\uc11c 10\ubc88\uc5d0 \uac78\uccd0 db \uac1d\uccb4\ub97c \ud1b5\ud574 \ucffc\ub9ac\ub97c \ub0a0\ub9bd\ub2c8\ub2e4. go \ub8e8\ud2f4\uc73c\ub85c \ucffc\ub9ac\ub97c \ub3d9\uc2dc\uc5d0 10\ubc88 \ub0a0\ub9ac\ub294 \uacbd\uc6b0\uc778\ub370\uc694. go \ub8e8\ud2f4\uc758 \ud568\uc218\ub97c \ubcf4\uba74.. \uba3c\uc800 12\ubc88\uc5d0\uc11c DB \uac1d\uccb4\ub97c \ud480\uc5d0\uc11c \uac00\uc838\uc635\ub2c8\ub2e4. \uc5ec\uae30\uc11c \ud0c0\uc785\ub2e8\uc5b8(Type Assertion)\uc744 \ud1b5\ud574 DB \ud0c0\uc785\uc774\ub77c\ub294 \uac83\uc744 \ubd84\uba85\ud788 \ud569\ub2c8\ub2e4. \uadf8\ub9ac\uace0 13\ubc88\uc5d0\uc11c \uc544\uc9c1 \uc5f0\uacb0\uc774 \ub418\uc5b4 \uc788\uc9c0 \uc54a\ub2e4\uba74 connect \ud568\uc218\ub97c \ud638\ucd9c\ud558\uad6c\uc694. 17\ubc88\uc5d0\uc11c \ucffc\ub9ac\ub97c \ub0a0\ub9bd\ub2c8\ub2e4. DB \uac1d\uccb4\ub97c \ub2e4 \uc0ac\uc6a9\ud588\ub2e4\uba74 18\ubc88 \ucf54\ub4dc\uc5d0\uc11c \ub2e4\uc2dc \ud480\uc5d0 \ubc18\ud658\ud569\ub2c8\ub2e4.<\/p>\n<p>\ub9cc\uc57d \ud480\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc558\ub2e4\uba74 10\ubc88\uc758 DB \uc5f0\uacb0\uacfc 10\ubc88\uc758 DB \ucffc\ub9ac\uac00 \ubc1c\uc0dd\ud560 \uac83\uc785\ub2c8\ub2e4\ub9cc.. \uc6b0\ub9ac\ub294 \ud480\uc744 \uc0ac\uc6a9\ud588\uae30 \ub54c\ubb38\uc5d0 DB \ucffc\ub9ac\ub294 10\ubc88\uc744 \ud588\uc9c0\ub9cc DB \uc5f0\uacb0\uc740 \uadf8\ubcf4\ub2e4 \uc801\uc744 \uac83\uc785\ub2c8\ub2e4. \uc81c PC\uc5d0\uc11c\ub294\uc758 \uc2e4\ud589 \uacb0\uacfc\ub294 \uc544\ub798\uc640 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<pre>\n[connection completed]\n    [query completed]\n    [query completed]\n    [query completed]\n    [query completed]\n    [query completed]\n    [query completed]\n    [query completed]\n[connection completed]\n    [query completed]\n    [query completed]\n[connection completed]\n    [query completed]\n<\/pre>\n<p>\uc2e4\ud589\ud560\ub54c\ub9c8\ub2e4 \uadf8 \uacb0\uacfc\ub294 \ub9e4\ubc88 \ub2ec\ub77c\uc9c0\uae30\ub294 \ud588\uc9c0\ub9cc, \ubd84\uba85\ud55c \uac83\uc740 DB \ucffc\ub9ac\uc5d0 \ub300\ud55c query completed \ubb38\uc790\uc5f4\uc740 \ud56d\uc0c1 10\ubc88 \ud45c\uc2dc\ub418\uace0 connection completed\ub294 \uadf8\ubcf4\ub2e4 \uc801\uac8c \ud45c\uc2dc\ub41c\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Golang\uc5d0\uc11c \uac1d\uccb4 \uc7ac\ud65c\uc6a9\uc744 \uc704\ud55c pool\uc744 \uc81c\uacf5\ud558\ub294\ub370\uc694. \uc774 \uac1d\uccb4 \ud480\uc5d0 \ub300\ud55c \ub0b4\uc6a9\uc744 \uc815\ub9ac\ud574 \ubd05\ub2c8\ub2e4. \uba3c\uc800 \ud480\uc5d0 \ub123\uace0 \uc7ac\ud65c\uc6a9\ud558\uace0\uc790 \ud558\ub294 \uac1d\uccb4 \ud0c0\uc785\uc744 \uc544\ub798\ucc98\ub7fc \uc815\uc758\ud569\ub2c8\ub2e4. type DB struct { bConnected bool } func (c *DB) connect() { c.bConnected = true fmt.Println(&#8220;[connection completed]&#8221;) } func (c *DB) query() { if c.bConnected { fmt.Println(&#8221; [query completed]&#8221;) } else { fmt.Println(&#8221; &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=2476\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;[Golang] \uac1d\uccb4 Pool&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[113],"tags":[111],"class_list":["post-2476","post","type-post","status-publish","format-standard","hentry","category-golang","tag-golang"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/2476","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2476"}],"version-history":[{"count":0,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/2476\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2476"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2476"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2476"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}