{"id":227305,"date":"2022-02-10T07:59:20","date_gmt":"2022-02-10T06:59:20","guid":{"rendered":"https:\/\/blog.jetbrains.com\/space\/2022\/01\/12\/a-deep-dive-into-space-dev-environments\/"},"modified":"2022-02-10T07:59:22","modified_gmt":"2022-02-10T06:59:22","slug":"a-deep-dive-into-space-dev-environments","status":"publish","type":"space","link":"https:\/\/blog.jetbrains.com\/ko\/space\/2022\/02\/10\/a-deep-dive-into-space-dev-environments\/","title":{"rendered":"Space \uac1c\ubc1c \ud658\uacbd \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30"},"content":{"rendered":"<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1200\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/cover.png\" alt=\"Space \uac1c\ubc1c \ud658\uacbd \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uae30\" class=\"wp-image-217173\"><\/figure>\n<p><a href=\"https:\/\/www.jetbrains.com\/ko-kr\/space\/\" class=\"ek-link\" target=\"_blank\" rel=\"noopener\">JetBrains Space<\/a>\uc5d0\uc11c\ub294 \uac1c\ubc1c \ud658\uacbd\uc744 \uc2e4\ud589\ud558\uc5ec \uc6d0\uaca9\uc73c\ub85c \ucf54\ub4dc \uc791\uc5c5\uc744 \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uac15\ub825\ud55c \uc804\uc6a9 \uac00\uc0c1\uba38\uc2e0\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uc18c\uc2a4 \ucf54\ub4dc\uc5d0 \uc561\uc138\uc2a4\ud560 \uc218 \uc788\ub294 Docker \ucee8\ud14c\uc774\ub108\ub97c \uc2e4\ud589\ud558\uace0 \ub85c\uceec \ucf54\ub4dc \uc5d0\ub514\ud130\uc5d0 \ubc31\uc5d4\ub4dc \uad6c\uc131 \uc694\uc18c\ub97c \uc81c\uacf5\ud569\ub2c8\ub2e4. <strong>\ub85c\uceec \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud558\ub294 \ub300\uc2e0 \uc774\ub7ec\ud55c \uc6d0\uaca9 \uc2dc\uc2a4\ud15c\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc18c\ud504\ud2b8\uc6e8\uc5b4\ub97c \uac1c\ubc1c<\/strong>\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/blog.jetbrains.com\/space\/2021\/11\/29\/introducing-remote-development-with-space\/\">Space \uac1c\ubc1c \ud658\uacbd\uc744 \uc774\uc6a9\ud560 \ub54c\uc758 \ub9ce\uc740 \uc774\uc810<\/a> \uc911 \ud558\ub098\ub294 \ud300\uc758 <strong>\uac1c\ubc1c \ud658\uacbd\uc744 \ud45c\uc900\ud654<\/strong>\ud558\uc5ec \ubaa8\ub4e0 \ud300\uc6d0\uc774 \ub85c\uceec \uc2dc\uc2a4\ud15c\uc744 \uc124\uc815\ud558\ub294 \ub370 \uc2dc\uac04\uc744 \ud5c8\ube44\ud558\uc9c0 \uc54a\uace0 \uac70\uc758 \uc989\uc2dc \ud504\ub85c\uc81d\ud2b8 \uc791\uc5c5\uc744 \uc2dc\uc791\ud560 \uc218 \uc788\ub2e4\ub294 \uac83\uc785\ub2c8\ub2e4. \ub610\ud55c, <strong>\uc6cc\ubc0d\uc5c5 \uc791\uc5c5\uc744 \uc2e4\ud589<\/strong>\ud558\uace0 \ud544\uc694\ud55c \ubaa8\ub4e0 \ud328\ud0a4\uc9c0 \uc885\uc18d \uc694\uc18c\uac00 \uc774\ubbf8 \ub2e4\uc6b4\ub85c\ub4dc\ub418\uace0 \uc0ac\uc804 \ube4c\ub4dc\ub41c \ud504\ub85c\uc81d\ud2b8 \uc0c9\uc778\uc744 \uc989\uc2dc \uc774\uc6a9\ud560 \uc218 \uc788\ub294 \uc0c1\ud0dc\ub85c \uc2a4\ub0c5\uc0f7\uc744 \uc900\ube44\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 Space \uac1c\ubc1c \ud658\uacbd\uc758 \uc774\ub7ec\ud55c \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc635\uc158\uc5d0 \ub300\ud574 \uc790\uc138\ud788 \uc54c\uc544\ubcf4\uace0 <strong>\ud300\uc758 \uc694\uad6c \uc0ac\ud56d\uc5d0 \ub9de\uac8c \uac1c\ubc1c \ud658\uacbd\uc744 \ub9de\ucda4 \uc124\uc815<\/strong>\ud558\ub294 \ubc29\ubc95\uc744 \uc54c\uc544\ubd05\ub2c8\ub2e4.<\/p>\n<p><span id=\"more-216825\"><\/span><\/p>\n<h1>\uac1c\ubc1c \ud658\uacbd \uc0dd\uc131<\/h1>\n<p>\uc0ac\uc6a9\uc790 \uc9c0\uc815 \uc635\uc158\uc5d0 \ub300\ud574 \uc54c\uc544\ubcf4\uae30 \uc804\uc5d0 <a href=\"https:\/\/blog.jetbrains.com\/space\/2021\/11\/29\/introducing-remote-development-with-space\/\">Space \uac1c\ubc1c \ud658\uacbd\uc73c\ub85c \uac1c\ubc1c\uc744 \uc2dc\uc791<\/a>\ud558\ub294 \ubc29\ubc95\uc744 \uac04\ub2e8\ud788 \uc694\uc57d\ud574 \ubcf4\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<p>Space \uc870\uc9c1\uc5d0 \uc788\ub294 Git \uc800\uc7a5\uc18c\uc5d0\uc11c <strong>Open in IDE(IDE\uc5d0\uc11c \uc5f4\uae30)<\/strong>\ub97c \ud074\ub9ad\ud558\uc5ec \uac1c\ubc1c \ud658\uacbd\uc744 \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub610\ud55c \ubaa8\ub4e0 \ubcd1\ud569 \uc694\uccad\uc5d0 \ub300\ud574 \uc0c8 \uac1c\ubc1c \ud658\uacbd\uc744 \ub9cc\ub4e4 \uc218 \uc788\uc73c\ubbc0\ub85c, \ubcc0\uacbd \uc0ac\ud56d\uc744 \uac80\ud1a0\ud558\uace0 \ud14c\uc2a4\ud2b8\ud558\uae30 \uc704\ud574 \ucf54\ub4dc\ub97c \uc218\ub3d9\uc73c\ub85c \ubcf5\uc81c\ud558\uace0 \ub85c\uceec \uc2dc\uc2a4\ud15c\uc5d0 \uc885\uc18d \uc694\uc18c\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud560 \ud544\uc694\uac00 \uc5c6\uc2b5\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/01-create-dev-environment.png\" alt=\"JetBrains Space\uc5d0\uc11c \uc6d0\uaca9 \uac1c\ubc1c \ud658\uacbd \ub9cc\ub4e4\uae30\" class=\"wp-image-216826\" width=\"840\" height=\"472\"><\/figure>\n<p><em>\ud301: <\/em><a href=\"https:\/\/blog.jetbrains.com\/space\/2020\/02\/06\/mirroring-an-external-git-repository-in-space\/\"><em>GitHub \ub610\ub294 BitBucket\uc5d0\uc11c \uae30\uc874 Git \uc800\uc7a5\uc18c\ub97c \ub9c8\uc774\uadf8\ub808\uc774\uc158 \ub610\ub294 \ubbf8\ub7ec\ub9c1<\/em><\/a><em>\ud558\uace0 \ubaa8\ub4e0 \ube0c\ub79c\uce58, \ud0dc\uadf8 \ubc0f \ucee4\ubc0b\uc744 \ud3ec\ud568\ud558\uc5ec Space\uc5d0\uc11c \uc774\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\ub3c4\ub85d \uc124\uc815\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774\ub7f0 \uc2dd\uc73c\ub85c \uae30\uc874 \uc800\uc7a5\uc18c\uc640 \ud568\uaed8 Space \uac1c\ubc1c \ud658\uacbd\uc744 \uc774\uc6a9\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/em><\/p>\n<p>\ud504\ub85c\uc81d\ud2b8 \uc791\uc5c5\uc5d0 \ud544\uc694\ud55c \uc131\ub2a5\uc5d0 \ub530\ub77c \uc77c\ubc18(4 CPU \ucf54\uc5b4, 8GB RAM), \ub300\ud615(8 CPU \ucf54\uc5b4, 16GB RAM) \ub610\ub294 \ucd08\ub300\ud615(16 CPU \ucf54\uc5b4, 32GB RAM)\uc758 \uc138 \uac00\uc9c0 \uac00\uc0c1 \uba38\uc2e0 \uc778\uc2a4\ud134\uc2a4 \uc720\ud615 \uc911 \ud558\ub098\ub97c \uc120\ud0dd\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc73c\ub85c, <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/remote-development\/gateway\/\" target=\"_blank\" rel=\"noopener\">JetBrains Gateway<\/a>(<a href=\"https:\/\/www.jetbrains.com\/ko-kr\/toolbox\/app\" target=\"_blank\" rel=\"noopener\">Toolbox App<\/a>\uc744 \ud1b5\ud574 \ub2e4\uc6b4\ub85c\ub4dc \uac00\ub2a5)\ub97c \ud3ec\ud568\ud55c <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/idea\/\" target=\"_blank\" rel=\"noopener\">IntelliJ IDEA<\/a> \ub610\ub294 <a href=\"https:\/\/jetbrains.com\/ko-kr\/fleet\/\" target=\"_blank\" rel=\"noopener\">JetBrains Fleet<\/a> \uc911\uc5d0\uc11c \uc791\uc5c5\ud560 IDE\ub97c \uc120\ud0dd\ud574\uc57c \ud569\ub2c8\ub2e4. \ub2e4\ub978 IntelliJ \uae30\ubc18 IDE\uc5d0 \ub300\ud55c \uc9c0\uc6d0\uc774 \uc9c4\ud589 \uc911\uc785\ub2c8\ub2e4.<\/p>\n<p>\ub610\ud55c \uc774 \ub300\ud654\uc0c1\uc790\uc5d0\uc11c \uc6d0\uaca9 IDE\ub97c \uc2dc\uc791\ud558\ub294 \ub370 \uc0ac\uc6a9\ub418\ub294 <strong>\uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7<\/strong>\uacfc <strong>\uac1c\ubc1c \ucee8\ud14c\uc774\ub108<\/strong>\ub77c\ub294 \ub450 \uac00\uc9c0 \ub2e4\ub978 \uc694\uc18c\ub3c4 \ubcfc \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc704\uc758 \uc608\uc2dc\uc5d0\uc11c\ub294 \uc544\uc9c1 \uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc774 \uc5c6\uc73c\uba70(\uc7a0\uc2dc \ud6c4\uc5d0 \uc124\uba85) <a href=\"https:\/\/www.jetbrains.com\/help\/space\/set-up-a-dev-evnvironment.html#using-the-default-dev-environment\" target=\"_blank\" rel=\"noopener\">\ub514\ud3f4\ud2b8 Docker \uc774\ubbf8\uc9c0<\/a>\uac00 IDE\uac00 \uc2dc\uc791\ub420 \ucee8\ud14c\uc774\ub108\ub85c \uc0ac\uc6a9\ub429\ub2c8\ub2e4.<\/p>\n<p><strong>Create(\uc0dd\uc131)<\/strong>\ub97c \ud074\ub9ad\ud558\uba74 Space\uac00 \ud074\ub77c\uc6b0\ub4dc\uc5d0\uc11c IDE\ub97c \uc2e4\ud589\ud569\ub2c8\ub2e4. \uac00\uc0c1\uba38\uc2e0\uc774 \uc124\uc815\ub418\uace0 IDE \ubc31\uc5d4\ub4dc\ub97c \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub418\uba74 JetBrains Gateway(\ub610\ub294 Fleet)\uac00 \uc5f4\ub9ac\uace0 \uc5f0\uacb0\ub429\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/02-dev-environment-running.png\" alt=\"IntelliJ IDEA(\ubc0f JetBrains Gateway)\uc5d0\uc11c \uac1c\ubc1c \ud658\uacbd \uc2e4\ud589\" class=\"wp-image-216837\"><\/figure>\n<p>IntelliJ IDEA \ubc31\uc5d4\ub4dc\uac00 \uc774\uc81c Space \ud074\ub77c\uc6b0\ub4dc\uc5d0\uc11c \uc2e4\ud589\ub418\uba70 \uc52c \ud074\ub77c\uc774\uc5b8\ud2b8\uc778 <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/remote-development\/gateway\/\" target=\"_blank\" rel=\"noopener\">JetBrains Gateway<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \uc5f0\uacb0\ub429\ub2c8\ub2e4.<\/p>\n<p>\ub300\ubd80\ubd84\uc758 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 \uc774\uac83\ub9cc\uc73c\ub85c\ub3c4 \uc989\uc2dc \ucf54\ub529\uc744 \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uadf8\ub7ec\ub098 \uc774 \ud2b9\uc815 \uc608\uc2dc\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \uba87 \uac00\uc9c0 \uc0ac\ud56d\uc774 \ub204\ub77d\ub41c \uac83 \uac19\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>\uc5d0\ub514\ud130\uc758 \uacbd\uace0\uc5d0 \ud45c\uc2dc\ub41c \ub300\ub85c \uc62c\ubc14\ub978 JDK\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<li>\uc885\uc18d \uc694\uc18c\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uae30 \uc704\ud574 \uc5ec\uc804\ud788 <code>mvnw compile<\/code>\uc744 \uc2e4\ud589\ud574\uc57c \ud558\uba70 IDE\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8\ub97c \ub3d9\uae30\ud654\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<\/ul>\n<p>\uc77c\ud68c\uc131 \uac1c\ubc1c \ud658\uacbd\uc5d0\uc11c\ub294 \uc774\ub807\uac8c \ud574\ub3c4 \ubb38\uc81c\ub420 \uac83\uc774 \uc5c6\uaca0\uc9c0\ub9cc \uc804\uccb4 \ud300\uc774 \uc774 \uc800\uc7a5\uc18c\uc5d0\uc11c \uc791\uc5c5\ud560 \uc608\uc815\uc774\ub77c\uba74 \uac1c\ubc1c \ud658\uacbd\uc744 \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud558\uace0 \ucc98\uc74c\ubd80\ud130 \ubaa8\ub4e0 \uc885\uc18d \uc694\uc18c\ub97c \uc900\ube44\ud558\ub294 \uac83\uc774 \ub354 \ub098\uc744 \uac83\uc785\ub2c8\ub2e4. \uadf8\ub7ec\uba74 \uc5b4\ub5bb\uac8c \ud558\ub294\uc9c0 \uc54c\uc544\ubd05\uc2dc\ub2e4!<\/p>\n<h2>\uac1c\ubc1c \ud658\uacbd Dockerfile \uc0ac\uc6a9\uc790 \uc9c0\uc815<\/h2>\n<p>\uae30\ubcf8\uc801\uc73c\ub85c Space\ub294 Ubuntu OS \uae30\ubc18\uc758 <a href=\"https:\/\/www.jetbrains.com\/help\/space\/set-up-a-dev-evnvironment.html#using-the-default-dev-environment\" target=\"_blank\" rel=\"noopener\">\ub514\ud3f4\ud2b8 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0<\/a>\ub97c \uc0ac\uc6a9\ud558\uc5ec \uac1c\ubc1c \ud658\uacbd\uc744 \uc2e4\ud589\ud558\uba70 Git, cURL, Docker, Docker Compose \ubc0f OpenJDK\ub97c \ud3ec\ud568\ud569\ub2c8\ub2e4.<\/p>\n<p>\ud504\ub85c\uc81d\ud2b8\uc5d0 \uc0ac\uc6a9\uc790 \uc9c0\uc815 Dockerfile\uc744 \ucd94\uac00\ud558\uc5ec \ud544\uc694\ud55c \ub3c4\uad6c\uc640 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc124\uce58\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\ud560 IDE\uc5d0 \ub530\ub77c <code>.\/.jb-gateway\/Dockerfile<\/code>(JetBrains Gateway\ub97c \ud3ec\ud568\ud55c IntelliJ IDEA) \ub610\ub294 <code>.\/.fleet\/Dockerfile<\/code>(Fleet)\uc744 \uc0dd\uc131\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<p>\uc774 \ud2b9\uc815 \ud504\ub85c\uc81d\ud2b8\uc5d0\uc11c\ub294 Ubuntu 20.04\uc5d0 \uae30\ubc18\uc744 \ub450\ub3c4\ub85d \ud658\uacbd\uc744 \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud558\uace0 Git, curl, Docker \ub4f1\uc744 \ud3ec\ud568\ud55c \ub9ce\uc740 \uba85\ub839\uc904 \ub3c4\uad6c\ub3c4 \uc124\uce58\ud560 \uac83\uc785\ub2c8\ub2e4. \ub610\ud55c \uc5ec\ub7ec \ubc84\uc804\uc758 OpenJDK\ub97c \ucd94\uac00\ud558\uace0 \uac1c\ubc1c\uc790 \ud658\uacbd\uc5d0\uc11c \uc120\ud0dd\ud560 \uc218 \uc788\ub3c4\ub85d \ub514\ud3f4\ud2b8 \uac12\uc744 \ubc84\uc804 16\uc73c\ub85c \uc124\uc815\ud558\uaca0\uc2b5\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"dockerfile\" data-enlighter-theme=\"wpcustom\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">FROM ubuntu:20.04\n\nENV DEBIAN_FRONTEND=noninteractive\nENV LC_ALL=C.UTF-8\n\nRUN apt-get update &amp;&amp; apt-get install -y apt-utils apt-transport-https\n\nRUN apt-get install -y \\\n  # Utilities \\\n  curl unzip wget software-properties-common socat man-db gnupg2 pass lsof \\\n  # VCS \\\n  git \\\n  # JVM \\\n  openjdk-8-jre-headless openjdk-11-jdk-headless openjdk-16-jdk-headless openjdk-17-jdk-headless maven \\\n  # Docker\n  docker docker-compose \\\n  &amp;&amp; rm -rf \/var\/lib\/apt\/lists\/*\n\n\nENV JAVA_HOME=\/usr\/lib\/jvm\/java-16-openjdk-amd64\n<\/pre>\n<p>\uc0ac\uc6a9\uc790 \uc9c0\uc815 Dockerfile\uc5d0\ub294 \uba87 \uac00\uc9c0 \uc694\uad6c \uc0ac\ud56d\uc774 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<ul>\n<li>OS\ub294 glibc \uae30\ubc18 Linux \ubc30\ud3ec\ud310(\uc608: CentOS 7+, Debian 9+ \ub610\ub294 Ubuntu 20.04+)\uc774\uc5b4\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<li>Git, OpenSSH(\uc6d0\uaca9 Git \uc800\uc7a5\uc18c\ub97c \uc0ac\uc6a9\ud558\ub824\ub294 \uacbd\uc6b0) \ubc0f <code>lsof<\/code>(IDE\uc5d0\uc11c \ud3ec\ud2b8 \ud3ec\uc6cc\ub529\uc774 \ud544\uc694\ud55c \uacbd\uc6b0)\ub97c \uc124\uce58\ud574\uc57c \ud569\ub2c8\ub2e4.<\/li>\n<li>\ucee8\ud14c\uc774\ub108\ub294 \ub8e8\ud2b8\ub85c \uc2e4\ud589\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4(Dockerfile\uc5d0 \ub8e8\ud2b8\uac00 \uc544\ub2cc \uc0ac\uc6a9\uc790\uac00 \uc5c6\uc5b4\uc57c \ud568).<\/li>\n<\/ul>\n<p>Dockerfile\uc740 \ube0c\ub79c\uce58\ubcc4\ub85c \ub2e4\ub985\ub2c8\ub2e4. \uc774\uc5d0 \ub530\ub77c \ud300\uc758 \ub2e4\ub978 \uac1c\ubc1c\uc790\uc5d0\uac8c \uc601\ud5a5\uc744 \uc8fc\uc9c0 \uc54a\uace0 \ubcc4\ub3c4\uc758 \ube0c\ub79c\uce58\uc5d0\uc11c \uc0ac\uc6a9\uc790 \uc9c0\uc815\uc744 \ud14c\uc2a4\ud2b8\ud558\uace0 \uae30\ub2a5 \ube0c\ub79c\uce58\uc758 \ucd5c\uc2e0 \ub3c4\uad6c \ubc84\uc804\uc73c\ub85c \uc5c5\ub370\uc774\ud2b8\ud558\ub294 \ub4f1\uc758 \uc791\uc5c5\uc744 \uc27d\uac8c \uc218\ud589\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\uc774 \uc0ac\uc6a9\uc790 \uc9c0\uc815 Dockerfile\uc744 \ucee4\ubc0b\ud558\uace0 \ud504\ub85c\uc81d\ud2b8\uc758 \uc800\uc7a5\uc18c\uc5d0 \ud478\uc2dc\ud558\uba74 Space\ub294 \uc774 \ube0c\ub79c\uce58\uc5d0\uc11c \uc0c8 \uac1c\ubc1c \ud658\uacbd\uc744 \uc0dd\uc131\ud560 \ub54c \uc774\ub97c \uae30\ubcf8 \uc774\ubbf8\uc9c0\ub85c \uc0ac\uc6a9\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/03-customize-dockerfile.png\" alt=\"Space \uc6d0\uaca9 \uac1c\ubc1c \ud658\uacbd\uc744 \uc704\ud55c \uc0ac\uc6a9\uc790 \uc9c0\uc815 Dockerfile\/Docker \ucee8\ud14c\uc774\ub108\" class=\"wp-image-217353\"><\/figure>\n<p>\uc774 \uc0ac\uc6a9\uc790 \uc9c0\uc815 \uac1c\ubc1c \ud658\uacbd\uc744 \uc2dc\uc791\ud558\uba74 IDE\uc5d0\uc11c \uc62c\ubc14\ub978 JDK \ubc84\uc804\uc744 \uc0ac\uc6a9\ud560 \uc218 \uc788\uc74c\uc744 \uc54c \uc218 \uc788\uc2b5\ub2c8\ub2e4. \ub2e8, IntelliJ IDEA \ubc0f Maven \ud504\ub85c\uc81d\ud2b8\ub97c \uc5ec\uc804\ud788 \ub3d9\uae30\ud654\ud574\uc57c \ud569\ub2c8\ub2e4. \uc774\ub294 \uc6cc\ubc0d\uc5c5 \uc2a4\ud06c\ub9bd\ud2b8\ub97c \uc704\ud55c \uc644\ubcbd\ud55c \uc791\uc5c5\uc785\ub2c8\ub2e4!<\/p>\n<h2>\uac1c\ubc1c \ud658\uacbd \uc6cc\ubc0d\uc5c5<\/h2>\n<p>\uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc744 \ube4c\ub4dc\ud558\uba74 IDE\uac00 \ud504\ub85c\uc81d\ud2b8 \uc885\uc18d \uc694\uc18c\ub97c \ud655\uc778\ud558\uace0, \uc0c9\uc778\uc744 \ube4c\ub4dc\ud558\uace0, \uae30\ud0c0 \ubc31\uadf8\ub77c\uc6b4\ub4dc \ud65c\ub3d9\uc744 \uc218\ud589\ud558\ub294 \ub370 \uac78\ub9ac\ub294 \uc2dc\uac04\uc744 \ub2e8\ucd95\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc774 \uc608\uc2dc\uc5d0\uc11c <code>mvnw compile<\/code>\uc744 \uc2e4\ud589\ud558\uace0 \ud504\ub85c\uc81d\ud2b8\uc758 \uc0c9\uc778\uc744 \uc0dd\uc131\ud558\uba74 \uac1c\ubc1c \ud658\uacbd\uc744 \uc900\ube44\ud558\ub294 \ub370 \ub3c4\uc6c0\uc774 \ub429\ub2c8\ub2e4.<\/p>\n<p>\uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc740 <a href=\"https:\/\/www.jetbrains.com\/ko-kr\/space\/features\/software-development.html#a-automation\" target=\"_blank\" rel=\"noopener\">Space Automation<\/a>\uc73c\ub85c \uc0dd\uc131\ub429\ub2c8\ub2e4. <code>.space.kts<\/code> \ud30c\uc77c\uc744 \ucd94\uac00\ud558\uba74 \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub300\ud55c \uc9c0\uc18d\uc801 \ud1b5\ud569(CI) \uad6c\uc131\uc744 \uc2dc\uc791\ud560 \uc218 \uc788\uc744 \ubfd0\ub9cc \uc544\ub2c8\ub77c \uac1c\ubc1c \ud658\uacbd\uc744 \uc6cc\ubc0d\uc5c5\ud558\ub294 \ubc29\uc2dd\ub3c4 \uad6c\uc131\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p>\ub2e4\uc74c\uc740 \ub9e4\uc77c \ubc24 \uc2e4\ud589\ub418\ub294 \ud558\ub098\uc758 \uc791\uc5c5\uc744 \uc815\uc758\ud558\uace0 \ubaa8\ub4e0 Git \ube0c\ub79c\uce58\ub97c \ub2e4\uc6b4\ub85c\ub4dc\ud55c \ub2e4\uc74c IntelliJ IDEA\ub85c \uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc744 \uc900\ube44\ud558\ub294 \ub2e8\uacc4\ub97c \uc2e4\ud589\ud558\ub294 <code>.space.kts<\/code> \ud30c\uc77c\uc758 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"kotlin\" data-enlighter-theme=\"wpcustom\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">job(\"Dev Environment Warmup - Gateway\") {\n    startOn {\n        schedule { cron(\"0 5 * * *\") }\n    }\n\n    git {\n        depth = UNLIMITED_DEPTH\n        refSpec = \"refs\/*:refs\/*\"\n    }\n\n    warmup(ide = Ide.IJGateway) {\n        scriptLocation = \"warmup.sh\"\n    }\n}<\/pre>\n<p><code>scriptLocation<\/code>\uc740 \uc120\ud0dd \uc0ac\ud56d\uc785\ub2c8\ub2e4. \uc774 \uc635\uc158\uc744 \uc0dd\ub7b5\ud558\uba74 Space Automation\uc774 \ud504\ub85c\uc81d\ud2b8\uc758 Git \uc800\uc7a5\uc18c\ub97c \ubcf5\uc81c\ud558\uace0 IDE\uc5d0\uc11c \ud504\ub85c\uc81d\ud2b8 \uc0c9\uc778 \uc0dd\uc131\uc744 \ucc98\ub9ac\ud569\ub2c8\ub2e4. \uc774 \uc635\uc158\uc744 \ucd94\uac00\ud558\uba74 <code>warmup.sh<\/code>\uc640 \uac19\uc740 \uc6cc\ubc0d\uc5c5 \uc2a4\ud06c\ub9bd\ud2b8\uc758 \uc774\ub984\uc744 \uc9c0\uc815\ud560 \uc218 \uc788\uc73c\uba70 \ud574\ub2f9 \uc2a4\ud06c\ub9bd\ud2b8\uc5d0\uc11c <code>mvnw compile<\/code> \uc2e4\ud589\uacfc \uac19\uc740 \uc791\uc5c5\uc744 \uc218\ud589\ud558\uc5ec \ubaa8\ub4e0 Maven \uc885\uc18d \uc694\uc18c\ub97c \uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc73c\ub85c \ub2e4\uc6b4\ub85c\ub4dc\ud558\uac70\ub098 <code>npm install<\/code>\uc744 \uc2e4\ud589\ud560 \uc218\ub3c4 \uc788\uc2b5\ub2c8\ub2e4. \ub2e4\uc74c\uc740 <code>warmup.sh<\/code> \uc2a4\ud06c\ub9bd\ud2b8\uc758 \uc608\uc785\ub2c8\ub2e4.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\" data-enlighter-theme=\"wpcustom\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">#!\/bin\/bash\n.\/mvnw compile<\/pre>\n<p><code>warmup.sh<\/code>\ub294 \uc2e4\ud589 \uad8c\ud55c\uc774 \uc788\ub294 \uc800\uc7a5\uc18c\uc5d0 \ucee4\ubc0b\ub418\uc5b4\uc57c \ud569\ub2c8\ub2e4. \uc774\ub807\uac8c \ud558\ub824\uba74 <code>git update-index --chmod=+x warmup.sh<\/code>\ub97c \uc2e4\ud589\ud558\uba74 \ub429\ub2c8\ub2e4.<\/p>\n<p>Space Automation\uc774 \uc6cc\ubc0d\uc5c5 \uc791\uc5c5 \uc2e4\ud589\uc744 \uc644\ub8cc\ud558\uba74 \uc0c8\ub85c \uc0dd\uc131\ub41c \uac1c\ubc1c \ud658\uacbd\uc740 \uc774\uc804\uc5d0 \uc0dd\uc131\ud55c \uc0ac\uc6a9\uc790 \uc9c0\uc815 Dockerfile\uc744 \uc0ac\uc6a9\ud558\uace0 \ud504\ub85c\uc81d\ud2b8 \uc0c9\uc778 \ubc0f \uc885\uc18d \uc694\uc18c\ub97c \uc0ac\uc6a9\ud560 \uc900\ube44\uac00 \ub41c \uc0c1\ud0dc\ub85c \ubc29\uae08 \uc0dd\uc131\ud55c \uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc744 \ub9c8\uc6b4\ud2b8\ud569\ub2c8\ub2e4.<\/p>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/04-warmup-script.png\" alt=\"\uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc744 \ud3ec\ud568\ud55c \uac1c\ubc1c \ud658\uacbd\" class=\"wp-image-216865\"><figcaption>\uc6cc\ubc0d\uc5c5 \uc791\uc5c5\uc758 \ubb38\uc81c\ub97c \ud574\uacb0\ud574\uc57c \ud558\ub294 \uacbd\uc6b0 Space Automation\uc744 \uc0ac\uc6a9\ud558\uc5ec \ucf58\uc194 \ucd9c\ub825\uacfc \ud568\uaed8 \uc2e4\ud589\ub41c \ubaa8\ub4e0 \ub2e8\uacc4\uc758 \ub85c\uadf8\ub97c \ucc3e\uc744 \uc218 \uc788\uc2b5\ub2c8\ub2e4.&nbsp;<\/figcaption><\/figure>\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" loading=\"lazy\" width=\"2560\" height=\"1440\" src=\"https:\/\/blog.jetbrains.com\/wp-content\/uploads\/2022\/01\/05-warmup-automation2.png\" alt=\"Space\uc758 \uac1c\ubc1c \ud658\uacbd \ub85c\uadf8\" class=\"wp-image-217341\"><\/figure>\n<p>\ub610\ud55c \ud504\ub85c\uc81d\ud2b8\uc758 <strong>Dev Environments(\uac1c\ubc1c \ud658\uacbd)<\/strong> \uba54\ub274\uc5d0\uc11c \ub354 \uc774\uc0c1 \ud544\uc694\ud558\uc9c0 \uc54a\uc740 \uc2a4\ub0c5\uc0f7\uc744 \uad00\ub9ac\ud558\uace0 \uc81c\uac70\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<h2>\ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0, \uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7, \uc544\ub2c8\uba74 \ub458 \ub2e4 \uc2e4\ud589\ud574\uc57c \ud560\uae4c\uc694?<\/h2>\n<p>\uc9c0\uae08\uae4c\uc9c0 \uac1c\ubc1c \ud658\uacbd\uc758 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud558\ub294 \ubc29\ubc95\uacfc \uc6cc\ubc0d\uc5c5 \uc2a4\ub0c5\uc0f7\uc744 \ube4c\ub4dc\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uadf8\ub807\ub2e4\uba74 \uc5b4\ub5a4 \uc720\ud615\uc758 \uc791\uc5c5\uc744 \uc5b4\ub514\uc5d0\uc11c \uc2e4\ud589\ud574\uc57c \ud560\uae4c\uc694?<\/p>\n<p>\uacbd\ud5d8\uc73c\ub85c \ubcfc \ub54c \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub294 \ud658\uacbd \ubc0f \uc6b4\uc601 \uccb4\uc81c\ub97c \uad6c\uc131\ud558\ub294 \ub370 \uc0ac\uc6a9\ud574\uc57c \ud558\uace0, \uc6cc\ubc0d\uc5c5 \uc791\uc5c5\uc740 \ubc14\uc774\ub108\ub9ac \uc885\uc18d \uc694\uc18c \ub2e4\uc6b4\ub85c\ub4dc \ubc0f \ud504\ub85c\uc81d\ud2b8\uc5d0 \ub9de\ub294 IDE \uc900\ube44\uc640 \uac19\uc740 \ud504\ub85c\uc81d\ud2b8\ubcc4 \uc791\uc5c5\uc5d0 \uc0ac\uc6a9\ud574\uc57c \ud569\ub2c8\ub2e4.<\/p>\n<h2>\uacb0\ub860<\/h2>\n<p>\uc774 \uac8c\uc2dc\ubb3c\uc5d0\uc11c\ub294 JetBrains Space\uc5d0\uc11c \uac1c\ubc1c \ud658\uacbd\uc744 \uc2dc\uc791\ud558\uace0 \uc0ac\uc6a9\uc790 \uc9c0\uc815\ud558\ub294 \ubc29\ubc95\uc744 \uc0b4\ud3b4\ubcf4\uc558\uc2b5\ub2c8\ub2e4. \uc0ac\uc6a9\uc790 \uc9c0\uc815 \ucee8\ud14c\uc774\ub108 \uc774\ubbf8\uc9c0\ub97c \uc0ac\uc6a9\ud558\uba74 \ud300\uc758 \uac1c\ubc1c \ud658\uacbd\uc744 \ud45c\uc900\ud654\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4. \uc6cc\ubc0d\uc5c5 \uc791\uc5c5\uc744 \ud1b5\ud574 \ub2e4\uc6b4\ub85c\ub4dc\ud55c \ud328\ud0a4\uc9c0 \uc885\uc18d \uc694\uc18c\uc640 \uc0ac\uc804 \ube4c\ub4dc\ub41c \ud504\ub85c\uc81d\ud2b8 \uc0c9\uc778\uc774 \ud3ec\ud568\ub41c \uc2a4\ub0c5\uc0f7\uc744 \uc900\ube44\ud560 \uc218 \uc788\uc73c\uba70, \uadf8\ub7ec\uba74 \uac1c\ubc1c \ud658\uacbd\uc5d0\uc11c \ub354 \ube60\ub974\uac8c \uac1c\ubc1c\uc744 \uc2dc\uc791\ud560 \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n<p><a href=\"https:\/\/www.jetbrains.com\/ko-kr\/space\/#sign-up-popup\" target=\"_blank\" rel=\"noopener\"><strong>JetBrains Space \ubc0f \uac1c\ubc1c \ud658\uacbd\uc744 \uc0ac\uc6a9\ud574 \ubcf4\uc138\uc694!<\/strong><\/a> \uc5ec\ub7ec\ubd84\uc758 \uc0dd\uac01\uc744 \ub4e3\uace0 \uc2f6\uc2b5\ub2c8\ub2e4!<\/p>\n<p><em>\uac8c\uc2dc\ubb3c \uc6d0\ubb38 \uc791\uc131\uc790<\/em><\/p>\n\n    <div class=\"about-author \">\n        <div class=\"about-author__box\">\n            <div class=\"row\">\n                <div class=\"about-author__box-img\">\n                    <img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/?s=200&#038;r=g\" width=\"200\" height=\"200\" alt=\"\" loading=\"lazy\"  class=\"avatar avatar-200 wp-user-avatar wp-user-avatar-200 photo avatar-default\">\n                <\/div>\n                <div class=\"about-author__box-text\">\n                                                        <\/div>\n            <\/div>\n        <\/div>\n    <\/div>\n\n\n\n<p><\/p>\n","protected":false},"author":964,"featured_media":217179,"comment_status":"closed","ping_status":"closed","template":"","categories":[1401],"tags":[447,91,1038,6495],"cross-post-tag":[],"acf":[],"_links":{"self":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/space\/227305"}],"collection":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/space"}],"about":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/types\/space"}],"author":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/users\/964"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/comments?post=227305"}],"version-history":[{"count":3,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/space\/227305\/revisions"}],"predecessor-version":[{"id":227310,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/space\/227305\/revisions\/227310"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media\/217179"}],"wp:attachment":[{"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/media?parent=227305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/categories?post=227305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/tags?post=227305"},{"taxonomy":"cross-post-tag","embeddable":true,"href":"https:\/\/blog.jetbrains.com\/ko\/wp-json\/wp\/v2\/cross-post-tag?post=227305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}