{"id":2420,"date":"2026-09-11T12:23:02","date_gmt":"2026-09-11T12:23:02","guid":{"rendered":"https:\/\/wayhope.kro.kr\/?p=2420"},"modified":"2026-09-11T12:23:02","modified_gmt":"2026-09-11T12:23:02","slug":"%eb%b9%84%eb%b0%80%eb%b2%88%ed%98%b8-%ed%95%b4%ec%8b%b1%ea%b3%bc-%ec%95%94%ed%98%b8%ed%99%94","status":"publish","type":"post","link":"https:\/\/wayhope.kro.kr\/?p=2420","title":{"rendered":"\ube44\ubc00\ubc88\ud638 \ud574\uc2f1\uacfc \uc554\ud638\ud654"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\ube44\ubc00\ubc88\ud638\ub97c DB\uc5d0 \uc800\uc7a5\ud560 \ub54c \uc554\ud638\ud654\ud574\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud558\uae30 \uc27d\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud558\uc9c0\ub9cc \uc815\ud655\ud558\uac8c\ub294 \uc554\ud638\ud654\uac00 \uc544\ub2c8\ub77c <strong>\ud574\uc2f1(Hashing)<\/strong> \uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud654\ub294 \uc6d0\ubcf8 \ub370\uc774\ud130\ub97c \ub2e4\uc2dc \ubcf5\ud638\ud654\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Plaintext -&gt; Encryption + Key -&gt; Ciphertext\nCiphertext -&gt; Decryption + Key -&gt; Plaintext\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ubc00\ubc88\ud638\ub294 \ub2e4\uc2dc \uc6d0\ub798 \uac12\uc73c\ub85c \uac00\uc838\uc62c \ud544\uc694\uac00 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c\uadf8\uc778\uc5d0\uc11c \ud544\uc694\ud55c \uac83\uc740 \uc0ac\uc6a9\uc790\uac00 \uc785\ub825\ud55c \ube44\ubc00\ubc88\ud638 \uc790\uccb4\uac00 \uc544\ub2c8\ub77c, <strong>DB\uc5d0 \ub4f1\ub85d\ub41c \ube44\ubc00\ubc88\ud638\uc640 \uac19\uc740 \ube44\ubc00\ubc88\ud638\uc778\uc9c0 \ud655\uc778\ud558\ub294 \uac83<\/strong>\uc774\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ube44\ubc00\ubc88\ud638\ub294 \uc554\ud638\ud654\ud558\uc9c0 \uc54a\uace0 \ud574\uc2f1\ud574\uc11c \uc800\uc7a5\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Password -&gt; Hashing -&gt; Password Hash -&gt; DB\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">DB\uc5d0 \uc800\uc7a5\ub418\ub294 \uac83\uc740 <code>password<\/code>\uac00 \uc544\ub2c8\ub77c <code>password_hash<\/code>\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE TABLE users (\n    user_id BIGINT PRIMARY KEY,\n    email VARCHAR(255) NOT NULL UNIQUE,\n    password_hash VARCHAR(255) NOT NULL\n);\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c\uadf8\uc778\ud560 \ub54c\ub3c4 DB\uc758 \ud574\uc2dc\uac12\uc744 \ubcf5\ud638\ud654\ud558\ub294 \uacfc\uc815\uc740 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790\uac00 \uc785\ub825\ud55c \ube44\ubc00\ubc88\ud638\ub97c \ud574\uc2dc \uc54c\uace0\ub9ac\uc998\uc73c\ub85c \uac80\uc99d\ud558\uace0, \uc800\uc7a5\ub41c \ud574\uc2dc\uc640 \uc77c\uce58\ud558\ub294\uc9c0\ub9cc \ud655\uc778\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Input Password -&gt; Verify -&gt; Stored Password Hash\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c SHA-256 \uac19\uc740 \uc77c\ubc18\uc801\uc778 \ud574\uc2dc \ud568\uc218\ub97c \uc0ac\uc6a9\ud558\uba74 \ub418\ub294 \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">SHA-256\uc740 \uacc4\uc0b0 \uc18d\ub3c4\uac00 \ube60\ub974\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 \ub370\uc774\ud130 \ubb34\uacb0\uc131 \uac80\uc99d\uc5d0\uc11c\ub294 \uc7a5\uc810\uc774\uc9c0\ub9cc \ube44\ubc00\ubc88\ud638\uc5d0\uc11c\ub294 \ubb38\uc81c\uac00 \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uacf5\uaca9\uc790\uac00 DB\uc758 \ud574\uc2dc\uac12\uc744 \uac00\uc838\uac14\ub2e4\uba74 \uac00\ub2a5\ud55c \ube44\ubc00\ubc88\ud638\ub97c \uacc4\uc18d \ud574\uc2f1\ud558\uba74\uc11c \ube44\uad50\ud560 \uc218 \uc788\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>password1 -&gt; SHA-256\npassword2 -&gt; SHA-256\npassword3 -&gt; SHA-256\n...\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ube44\ubc00\ubc88\ud638\uc5d0\ub294 \uc77c\ubd80\ub7ec \uacc4\uc0b0 \ube44\uc6a9\uc744 \ub192\uc778 password hashing \uc54c\uace0\ub9ac\uc998\uc744 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub300\ud45c\uc801\uc73c\ub85c <code>Argon2id<\/code>, <code>bcrypt<\/code>, <code>scrypt<\/code> \ub4f1\uc774 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0c8\ub85c\uc6b4 \uc2dc\uc2a4\ud15c\uc774\ub77c\uba74 Argon2id\ub97c \uc6b0\uc120 \uace0\ub824\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Password -&gt; Argon2id -&gt; Password Hash\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub7f0\ub370 \uc5ec\uae30\uc11c Salt\ub77c\ub294 \uac12\uc774 \ud558\ub098 \ub354 \ub4f1\uc7a5\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uac19\uc740 \ube44\ubc00\ubc88\ud638\ub97c \uac19\uc740 \ubc29\uc2dd\uc73c\ub85c \ud574\uc2f1\ud558\uba74 \ud56d\uc0c1 \uac19\uc740 \uacb0\uacfc\uac00 \ub098\uc628\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>hello123 -&gt; Hash A\nhello123 -&gt; Hash A\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790\ub9c8\ub2e4 \uac19\uc740 \ube44\ubc00\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\uace0 \uc788\ub2e4\ub294 \uac83\uc744 \ud574\uc2dc\ub9cc \ubcf4\uace0 \uc54c \uc218 \uc788\uac8c \ub41c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c \ud574\uc2f1\ud560 \ub54c \ub79c\ub364\ud55c Salt\ub97c \ud568\uaed8 \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Password + Salt -&gt; Argon2id -&gt; Hash\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc0ac\uc6a9\uc790\ub9c8\ub2e4 Salt\uac00 \ub2e4\ub974\uba74 \uac19\uc740 \ube44\ubc00\ubc88\ud638\ub97c \uc0ac\uc6a9\ud558\ub354\ub77c\ub3c4 \uacb0\uacfc\uac00 \ub2ec\ub77c\uc9c4\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>User A\nhello123 + Salt A -&gt; Hash A\n\nUser B\nhello123 + Salt B -&gt; Hash B\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Salt\ub294 \ube44\ubc00\ubc88\ud638\ub97c \ubcf5\ud638\ud654\ud558\uae30 \uc704\ud55c \uac12\uc774 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ud574\uc2f1 \uacb0\uacfc\uac00 \uc11c\ub85c \ub2ec\ub77c\uc9c0\ub3c4\ub85d \ub9cc\ub4dc\ub294 \uac12\uc774\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c \uc554\ud638\ud654\uc5d0\uc11c \uc0ac\uc6a9\ud558\ub294 IV\uc640 \ud5f7\uac08\ub9b4 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub458 \ub2e4 \ub79c\ub364\ud55c \uac12\uc744 \uc0ac\uc6a9\ud558\ub294 \uacbd\uc6b0\uac00 \uc788\uc9c0\ub9cc \uc5ed\ud560\uc740 \ub2e4\ub974\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Encryption\nPlaintext + Key + IV \/ Nonce -&gt; Ciphertext\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Password Hashing\nPassword + Salt -&gt; Argon2id -&gt; Hash\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">IV\ub294 \uc554\ud638\ud654 \uacfc\uc815\uc5d0\uc11c \uc0ac\uc6a9\ud558\uace0, Salt\ub294 \ube44\ubc00\ubc88\ud638 \ud574\uc2f1 \uacfc\uc815\uc5d0\uc11c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ubc00\ubc88\ud638 \ud574\uc2f1\uc5d0 IV\uac00 \ud544\uc694\ud55c \uac83\uc740 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub807\ub2e4\uba74 \ube44\ubc00\ubc88\ud638\ub97c \ud074\ub77c\uc774\uc5b8\ud2b8\uc5d0\uc11c \uba3c\uc800 \ud574\uc2f1\ud574\uc11c \uc11c\ubc84\ub85c \ubcf4\ub0b4\uba74 \ub418\ub294 \uac83\ub3c4 \uc544\ub2c8\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uc77c\ubc18\uc801\uc778 HTTPS \uae30\ubc18 \uc778\uc99d\uc5d0\uc11c\ub294 \ud074\ub77c\uc774\uc5b8\ud2b8\uac00 \uc785\ub825\ud55c \ube44\ubc00\ubc88\ud638\ub97c HTTPS\ub97c \ud1b5\ud574 \uc11c\ubc84\ub85c \uc804\ub2ec\ud558\uace0, \uc11c\ubc84\uc5d0\uc11c password hashing\uc744 \uc218\ud589\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Client Password -&gt; HTTPS \/ TLS -&gt; Server -&gt; Argon2id + Salt -&gt; DB\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc5ec\uae30\uc11c HTTPS\uc640 Argon2id\ub294 \uc11c\ub85c \ub2e4\ub978 \ubb38\uc81c\ub97c \ud574\uacb0\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">HTTPS\ub294 <strong>\ud074\ub77c\uc774\uc5b8\ud2b8\uc640 \uc11c\ubc84 \uc0ac\uc774\uc758 \uc804\uc1a1 \uacfc\uc815<\/strong>\uc744 \ubcf4\ud638\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Argon2id\ub294 <strong>DB\uc5d0 \uc800\uc7a5\ub418\ub294 \ube44\ubc00\ubc88\ud638<\/strong>\ub97c \ubcf4\ud638\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>HTTPS \/ TLS -&gt; \uc804\uc1a1 \ubcf4\ud638\nArgon2id    -&gt; \uc800\uc7a5 \ubcf4\ud638\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Node.js\uc5d0\uc11c\ub294 <code>argon2<\/code> \ud328\ud0a4\uc9c0\ub97c \uc774\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>npm install argon2\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\ud68c\uc6d0\uac00\uc785\uc5d0\uc11c\ub294 \ube44\ubc00\ubc88\ud638\ub97c \ud574\uc2f1\ud55c\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import argon2 from 'argon2';\n\nconst passwordHash = await argon2.hash(password, {\n    type: argon2.argon2id\n});\n\nawait db.query(\n    'INSERT INTO users (email, password_hash) VALUES (?, ?)',<\/code><\/pre>\n\n\n<p>[email, passwordHash]<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">);<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub85c\uadf8\uc778\uc5d0\uc11c\ub294 \uc800\uc7a5\ub41c \ud574\uc2dc\ub97c \ubcf5\ud638\ud654\ud558\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>const valid = await argon2.verify(\n    user.password_hash,\n    password\n);\n\nif (!valid) {\n    throw new Error('Invalid password');\n}\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uacb0\uad6d \ube44\ubc00\ubc88\ud638 \ucc98\ub9ac \uacfc\uc815\uc740 \uac04\ub2e8\ud558\ub2e4.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\ud68c\uc6d0\uac00\uc785\nClient Password -&gt; HTTPS -&gt; Server -&gt; Argon2id + Salt -&gt; DB Hash\n<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>\ub85c\uadf8\uc778\nClient Password -&gt; HTTPS -&gt; Server -&gt; Verify -&gt; DB Hash\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\uc554\ud638\ud654\ub294 \ubcf5\ud638\ud654\uac00 \ud544\uc694\ud55c \ub370\uc774\ud130\ub97c \ubcf4\ud638\ud560 \ub54c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ube44\ubc00\ubc88\ud638\ub294 \ubcf5\ud638\ud654\ud560 \ud544\uc694\uac00 \uc5c6\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub798\uc11c DB\uc5d0\ub294 \uc6d0\ubcf8 \ube44\ubc00\ubc88\ud638\uac00 \uc544\ub2c8\ub77c \ud574\uc2dc\uac12\uc744 \uc800\uc7a5\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\ube44\ubc00\ubc88\ud638 \ud574\uc2f1\uc758 \ubaa9\uc801\uc740 \ube44\ubc00\ubc88\ud638\ub97c \ub2e4\uc2dc \ubcf5\ud638\ud654\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub77c, \uc6d0\ubcf8 \ube44\ubc00\ubc88\ud638\ub97c DB\uc5d0 \uc800\uc7a5\ud558\uc9c0 \uc54a\ub294 \uac83\uc774\ub2e4.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\uadf8\ub9ac\uace0 \uc774\ub54c HTTPS\ub294 \uc804\uc1a1\uc744 \ubcf4\ud638\ud558\uace0, Argon2id\ub294 \uc800\uc7a5\uc744 \ubcf4\ud638\ud55c\ub2e4.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\ub458\uc740 \uac19\uc740 \uc5ed\ud560\uc744 \ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ube44\ubc00\ubc88\ud638\ub97c DB\uc5d0 \uc800\uc7a5\ud560 \ub54c \uc554\ud638\ud654\ud574\uc57c \ud55c\ub2e4\uace0 \uc0dd\uac01\ud558\uae30 \uc27d\ub2e4. \ud558\uc9c0\ub9cc \uc815\ud655\ud558\uac8c\ub294 \uc554\ud638\ud654\uac00 \uc544\ub2c8\ub77c \ud574\uc2f1(Hashing) \uc744 \uc0ac\uc6a9\ud55c\ub2e4. \uc554\ud638\ud654\ub294 \uc6d0\ubcf8 \ub370\uc774\ud130\ub97c \ub2e4\uc2dc \ubcf5\ud638\ud654\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0 \uc0ac\uc6a9\ud55c\ub2e4. \ube44\ubc00\ubc88\ud638\ub294 \ub2e4\uc2dc \uc6d0\ub798 \uac12\uc73c\ub85c \uac00\uc838\uc62c \ud544\uc694\uac00 \uc5c6\ub2e4. \ub85c\uadf8\uc778\uc5d0\uc11c \ud544\uc694\ud55c \uac83\uc740 \uc0ac\uc6a9\uc790\uac00 \uc785\ub825\ud55c \ube44\ubc00\ubc88\ud638 \uc790\uccb4\uac00 \uc544\ub2c8\ub77c, DB\uc5d0 \ub4f1\ub85d\ub41c \ube44\ubc00\ubc88\ud638\uc640 \uac19\uc740 \ube44\ubc00\ubc88\ud638\uc778\uc9c0 \ud655\uc778\ud558\ub294 \uac83\uc774\uae30 \ub54c\ubb38\uc774\ub2e4. \uadf8\ub798\uc11c \ube44\ubc00\ubc88\ud638\ub294 \uc554\ud638\ud654\ud558\uc9c0 \uc54a\uace0 \ud574\uc2f1\ud574\uc11c \uc800\uc7a5\ud55c\ub2e4. DB\uc5d0 \uc800\uc7a5\ub418\ub294 \uac83\uc740 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[],"class_list":["post-2420","post","type-post","status-publish","format-standard","hentry","category-server"],"_links":{"self":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2420"}],"version-history":[{"count":1,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2420\/revisions"}],"predecessor-version":[{"id":2424,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=\/wp\/v2\/posts\/2420\/revisions\/2424"}],"wp:attachment":[{"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wayhope.kro.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}