-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
IPC ko KR
ASF๋ ์ ์ผํ ์์ฒด IPC ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ก ์ธํด ํ๋ก์ธ์ค์ ๋ ์ํธ์์ฉํ ์ ์์ต๋๋ค. IPC๋ **ํ๋ก์ธ์ค ๊ฐ ํต์ (inter-process communication)**์ ์ฝ์์ด๋ฉฐ, ๊ฐ์ฅ ๋จ์ํ๊ฒ ์ ์ํ๋ฉด Kestrel HTTP ์๋ฒ ๊ธฐ๋ฐ์ "ASF ์น ์ธํฐํ์ด์ค"๋ก, ์ต์ข ์ฌ์ฉ์๋ฅผ ์ํ ํ๋ฐํธ์๋(ASF-ui)์ ์ 3์ ์ฐ๋์ ์ํ ๋ฐฑ์๋(ASF API) ์์ชฝ ๋ชจ๋๋ก ํ๋ก์ธ์ค์ ์ถ๊ฐ๋ก ์ฐ๋ํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
IPC๋ ์ฐ๋ฆฌ์ ํ์์ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ์๋ง์ ๋ค๋ฅธ ๊ฒ๋ค๋ก ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ASF์ ๋ชจ๋ ๋ด์ ์ํ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ASF์ ๋ช ๋ น์ด๋ฅผ ๋ณด๋ด๊ณ , ์ผ๋ฐ/๋ด ํ๊ฒฝ์ค์ ์ ๊ฐ์ ธ์์ ์์ ํ๊ณ , ์๋ก์ด ๋ด์ ์ถ๊ฐํ๊ณ , ๊ธฐ์กด์ ๋ด์ ์ญ์ ํ๊ณ , ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฒ์ ๋ฑ๋ก๊ธฐ ์ ํค๋ฅผ ๋ณด๋ด๊ณ , ASF์ ๋ก๊ทธํ์ผ์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ์์ ์ API๋ก ์ ๊ณต๋ฉ๋๋ค. ์ฆ, ๋น์ ์ด ์์ ์ ๋๊ตฌ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ง์ ASF ์คํ์ค์ ASF์ ํต์ ํ๊ณ ์ํฅ์ ๋ฏธ์น ์ ์๋ค๋ ๋ป์ ๋๋ค. ์ถ๊ฐ๋ก, ๋ช ๋ น์ด ์ ์ก๊ฐ์ ์ ํ๋ ์์ ์ ASF-ui์ ๊ตฌํ๋์ด ์์ผ๋ฉฐ ์น์ํ ์น ์ธํฐํ์ด์ค๋ก ์ฝ๊ฒ ์ ๊ทผํ ์ ์์ต๋๋ค.
IPC **์ ์ญ ์ค์ ์์ฑ**์ ํตํด ์๋์ผ๋ก ๋นํ์ฑํํ์ง ์๋ ํ, IPC๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋์ด ์์ต๋๋ค. ASF๋ IPC์ ์คํ์ ๋ก๊ทธ์์ ํ์ํ์ฌ IPC ์ธํฐํ์ด์ค๊ฐ ์ ๋๋ก ์์๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
INFO|ASF|Start() Starting IPC server...
INFO|ASF|Start() IPC server ready!
ASF์ http ์๋ฒ๊ฐ ์ด์ ์ ํํ ๋จ๋ง์์ ์์ ์ค์
๋๋ค. IPC์ฉ ์ปค์คํ
์ค์ ํ์ผ์ ์ ๊ณตํ์ง ์์ ๊ฒฝ์ฐ, ๊ธฐ๋ณธ 1242 ํฌํธ์์ IPv4 ๊ธฐ๋ฐ **127.0.0.1**๊ณผ IPv6 ๊ธฐ๋ฐ [::1] ๋ชจ๋๋ฅผ ํฌํจํ๋ localhost๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ ๋งํฌ๋ฅผ ํตํด IPC ์ธํฐํ์ด์ค์ ์ ๊ทผํ ์ ์์ง๋ง, ASF ํ๋ก์ธ์ค๊ฐ ์คํ ์ค์ธ ๊ธฐ๊ธฐ์์๋ง ๊ฐ๋ฅํฉ๋๋ค.
ASF์ IPC ์ธํฐํ์ด์ค๋ ์ฌ์ฉ๊ณํ์ ๋ฐ๋ผ ์ธ๊ฐ์ง์ ๋ค๋ฅธ ์ ๊ทผ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
๊ฐ์ฅ ๋ฎ์ ๋จ๊ณ๋ก IPC ์ธํฐํ์ด์ค์ ํต์ฌ์ด๋ฉฐ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ด ๋์ํ๋๋ก ํ๋ ASF API ๊ฐ ์์ต๋๋ค. ์์ ๋ง์ ๋๊ตฌ๋ ์ ํธ๋ฆฌํฐ, ํ๋ก์ ํธ์์ ASF์ ์ง์ ์ ์ผ๋ก ํต์ ํ๊ธฐ ์ํด ์ด๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ค๊ฐ ๋จ๊ณ๋ก ASF API์ ํ๋ก ํธ์๋ ์ญํ ์ ํ๋ Swagger documentation ์ด ์์ต๋๋ค. ์ด๊ฒ์ ASF API์ ์์ ํ ๋ฌธ์๋ฅผ ์ ๊ณตํ๊ณ ๋ ์ฝ๊ฒ ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค. ๋ง์ฝ API๋ฅผ ํตํด ASF์ ํต์ ํ๋ ค๋ ๋๊ตฌ, ์ ํธ๋ฆฌํฐ ํน์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ค๋ฉด Swagger ๋ฌธ์๋ฅผ ํ์ธํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ฐ์ฅ ๋์ ๋จ๊ณ๋ก ASF API์ ๊ธฐ๋ฐํ ASF-ui ๊ฐ ์์ผ๋ฉฐ, ASF ์์
์ ์ํ๊ฐ๋ฅํ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. ์ด๊ฒ์ ์ต์ข
์ฌ์ฉ์๋ฅผ ์ํ ๊ธฐ๋ณธ IPC ์ธํฐํ์ด์ค์ด๋ฉฐ, ASF API๋ก ๋ง๋ค์ ์๋ ์๋ฒฝํ ์์ ์
๋๋ค. ์ํ๋ค๋ฉด --path ๋ช
๋ น์ค ์ธ์ ๋ฅผ ์ง์ ํ๊ณ , ๊ทธ๊ณณ์ ์์นํ ์ฌ์ฉ์ ์ง์ www ๋๋ ํ ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ ๋ง์ ์ฌ์ฉ์ ์ง์ ์น UI๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
ASF-ui๋ ์ต์ข ์ฌ์ฉ์์๊ฒ ์ฌ์ฉ์ ์นํ์ ์ธ ๊ทธ๋ํฝ ์น ์ธํฐํ์ด์ค๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๋ ์ปค๋ฎค๋ํฐ ํ๋ก์ ํธ์ ๋๋ค. ์ด๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํด ASF API ์ ํ๋ก ํธ์๋๋ก ๋์ํ์ฌ ์ฌ์ฉ์๊ฐ ๋ค์ํ ์์ ์ ์ฝ๊ฒ ํ ์ ์์ต๋๋ค. ์ด๊ฒ์ ASF์ ํจ๊ป ์ ๊ณต๋๋ ๊ธฐ๋ณธ UI ์ ๋๋ค.
์์์ ์ค๋ช ํ๋ฏ์ด ASF-ui๋ ASF ํต์ฌ ๊ฐ๋ฐ์๋ค์ด ์ ์ง๊ด๋ฆฌํ์ง ์๋ ์ปค๋ฎค๋ํฐ ํ๋ก์ ํธ์ ๋๋ค. ASF-ui ๋ฆฌํฌ ์ ์๋ ์์ฒด ํ๋ฆ์ ๋ฐ๋ผ๊ฐ๋ฉฐ, ์ด๊ณณ์์ ๋ชจ๋ ๊ด๋ จ๋ ์ง๋ฌธ, ์ด์, ๋ฒ๊ทธ ๋ณด๊ณ ๋ฐ ์ ์์ด ์ด๋ฃจ์ด์ง๋๋ค.
ASF ํ๋ก์ธ์ค์ ์ผ๋ฐ์ ์ธ ๊ด๋ฆฌ๋ฅผ ์ํด ASF-ui๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ด ๊ด๋ฆฌ, ์ค์ ๋ณ๊ฒฝ, ๋ช ๋ น์ด ์ ์ก, ๊ทธ๋ฆฌ๊ณ ํ์ ASF๋ฅผ ํตํด ์ฌ์ฉ ๊ฐ๋ฅํ ๊ทธ ์ธ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ํํ ์ ์์ต๋๋ค.

ASF API๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์์ธ JSON์ ๊ธฐ๋ฐํ ์ ํ์ ์ธ REST ์๋ฆฌ๋ฅผ ๋ฐ๋ฅด๋ ์น API ์ ๋๋ค. ์๋ฆฌ๋ HTTP ์ํ์ฝ๋(ํด๋นํ๋ ๊ฒฝ์ฐ)์, ์ง์ ํ์ฑํด์ ์์ฒญ์ด ์ฑ๊ณตํ๋์ง ํน์ ์ ์คํจํ๋์ง๋ฅผ ์ ์ ์๋ ์๋ต์ ๋ชจ๋ ์ฌ์ฉํ์ฌ ์๋ต์ ์ ํํ๊ฒ ์ค๋ช ํ๊ธฐ ์ํด ์ต์ ์ ๋คํ๊ณ ์์ต๋๋ค.
ASF API๋ ์ ์ ํ /Api ๋จ๋ง์ ์ ์ ํ ์์ฒญ์ ๋ณด๋ด์ ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. ์ด API ๋จ๋ง์ ์ฌ์ฉํด์ ์์ ๋ง์ ๋์ฐ๋ฏธ ์คํฌ๋ฆฝํธ, ๋๊ตฌ, GUI ๋ฑ๋ฑ์ ๋ง๋ค์ ์์ต๋๋ค. ์ด๊ฒ์ด ๋ฐ๋ก ASF-ui์ ๋น๊ฒฐ์ด๊ณ , ๋ค๋ฅธ ๋ชจ๋ ๋๊ตฌ๋ ๋์ผํฉ๋๋ค. ASF API๋ ๊ณต์์ ์ผ๋ก ์ง์๋๋ฉฐ ASF ํต์ฌ ํ์ด ์ ์ง๊ด๋ฆฌํฉ๋๋ค.
์ด์ฉ๊ฐ๋ฅํ ๋จ๋ง, ์ค๋ช , ์์ฒญ, ์๋ต, http ์ํ์ฝ๋์ ASF API์ ๋ํ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ๋ํ ์์ ํ ๋ฌธ์๋**swagger ๋ฌธ์**๋ฅผ ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.

IPC ์ธํฐํ์ด์ค๋ ์ถ๊ฐ ํ๊ฒฝ์ค์ ํ์ผ์ ์ง์ํฉ๋๋ค.IPC.config ํ์ผ์ ํ์ค ASF config ๋๋ ํ ๋ฆฌ์ ๋ฃ์ผ์ญ์์ค.
์ฌ์ฉ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ด ํ์ผ์ ASF Kestrel http ์๋ฒ์ ๊ณ ๊ธ ํ๊ฒฝ์ค์ ๊ณผ ๋ค๋ฅธ IPC ๊ด๋ จ ์กฐ์ ์ฌํญ์ ์ ์ํฉ๋๋ค. ํน์ ํ ํ์๊ฐ ์๋ค๋ฉด ์ด ํ์ผ์ ์ฌ์ฉํ ์ด์ ๋ ์์ต๋๋ค. ASF๋ ์ด ๊ฒฝ์ฐ ํฉ๋ฆฌ์ ์ธ ๊ธฐ๋ณธ๊ฐ์ ์ฌ์ฉํฉ๋๋ค.
ํ๊ฒฝ์ค์ ํ์ผ์ ๋ค์์ JSON ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํฉ๋๋ค.
{
"Kestrel": {
"Endpoints": {
"example-http4": {
"Url": "http://127.0.0.1:1242"
},
"example-http6": {
"Url": "http://[::1]:1242"
},
"example-https4": {
"Url": "https://127.0.0.1:1242",
"Certificate": {
"Path": "/path/to/certificate.pfx",
"Password": "passwordToPfxFileAbove"
}
},
"example-https6": {
"Url": "https://[::1]:1242",
"Certificate": {
"Path": "/path/to/certificate.pfx",
"Password": "passwordToPfxFileAbove"
}
},
"example-unix-socket": {
"Url": "http://unix:/run/asf-asf/asf.sock"
}
},
"KnownNetworks": [
"10.0.0.0/8",
"172.16.0.0/12",
"192.168.0.0/16"
],
"PathBase": "/"
}
}Endpoints - ์ด๊ฒ์ ๋จ๋ง์ ์งํฉ์
๋๋ค. ๋ชจ๋ ๋จ๋ง์ example-http4์ ๊ฐ์ ์ ์ผํ ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ฉฐ, Url ์์ฑ๊ฐ์ Protocol://Host:Port ์์ ์ฃผ์๋ฅผ ํน์ ํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ASF๋ IPv4์ IPv6 http ์ฃผ์๋ฅผ ์์ ํ์ง๋ง, ํ์ํ ์ง ๋ชฐ๋ผ ์ฌ์ฉํ ์ ์๋ https ์์๋ฅผ ์ถ๊ฐํด ๋์์ต๋๋ค. ํ์ํ ์๋ํฌ์ธํธ๋ง ์ ์ธํด์ผ ํ๋ฉฐ, ๋ ์ฝ๊ฒ ํธ์งํ ์ ์๋๋ก ์์ ๋ช ๊ฐ์ง ์์๋ฅผ ํฌํจํด๋์์ต๋๋ค.
Host์๋ localhost, ์์ ๋๊ธฐํ ์ธํฐํ์ด์ค์ ๊ณ ์ IP ์ฃผ์(IPv4/IPv6), ๋๋ ASF์ http ์๋ฒ๋ฅผ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ชจ๋ ์ธํฐํ์ด์ค์ ๋ฐ์ธ๋ฉํ๋ * ๊ฐ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. mydomain.com์ด๋ 192.168.0.*์ ๊ฐ์ ๋ค๋ฅธ ๊ฐ์ ์ฌ์ฉํด๋ ``์ ๋์ผํ๊ฒ ์๋ํ๋ฉฐ, IP ํํฐ๋ง์ ๊ตฌํ๋์ด ์์ง ์์ต๋๋ค. ๋ฐ๋ผ์ ์๊ฒฉ ์ ๊ทผ์ ํ์ฉํ๋ Host ๊ฐ์ ์ฌ์ฉํ ๋๋ ๊ฐ๋ณํ ์ฃผ์ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ASF IPC ์ธํฐํ์ด์ค๋ ๋ค๋ฅธ ๊ธฐ๊ธฐ์์์ ์ ๊ทผ์ ํ์ฉํ๊ณ , ๋ณด์ ์ํ์ด ๋ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ์ต์ํ `IPCPassword`, ๊ทธ๋ฆฌ๊ณ ๋ฐฉํ๋ฒฝ์ ์ฌ์ฉ์ ๊ฐ๋ ฅํ๊ฒ ๊ถ์ฅํฉ๋๋ค.
KnownNetworks - ์ ๋ขฐํ ์ ์๋ค๊ณ ๊ฐ์ฃผํ๋ ๋คํธ์ํฌ ์ฃผ์๋ฅผ ์ง์ ํ๋ ์ ํ์ ๋ณ์์
๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ASF๋ ์ค์ง ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค(localhost, ๋์ผํ ๊ธฐ๊ธฐ)๋ฅผ ์ ๋ขฐํ๋๋ก ์ค์ ๋์ด ์์ต๋๋ค. ์ด ์์ฑ์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค. ์ฒซ์งธ, IPCPassword๋ฅผ ์๋ตํ๋ ๊ฒฝ์ฐ, ๋ณด์ ์กฐ์น๋ก์ ์๋ ค์ง(์ ๋ขฐํ๋) ๋คํธ์ํฌ์ ๊ธฐ๊ธฐ๋ง ASF API์ ์ ๊ทผํ ์ ์๋๋ก ํ์ฉํ๊ณ ๊ทธ ์ธ ๋ชจ๋ ์ ๊ทผ์ ๊ฑฐ๋ถํฉ๋๋ค. ๋์งธ, ์ด ์์ฑ์ ASF์ ์ ๊ทผํ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์์ ๊ด๋ จํด ๋งค์ฐ ์ค์ํฉ๋๋ค. ASF๋ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์๋ฒ๊ฐ ์๋ ค์ง(์ ๋ขฐํ๋) ๋คํธ์ํฌ ๋ด์ ์๋ ๊ฒฝ์ฐ์๋ง ํด๋น ํค๋๋ฅผ ์ ๋ขฐํ๊ธฐ ๋๋ฌธ์
๋๋ค. ํค๋๋ฅผ ์ ๋ขฐํ๋ ๊ฒ์ ASF์ ๋ฌด์ฐจ๋ณ ๋์
๊ณต๊ฒฉ ๋ฐฉ์ง ๋ฉ์ปค๋์ฆ๊ณผ ๊ด๋ จํด ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ ๋ ๋ฆฌ๋ฒ์ค ํ๋ก์ ์์ฒด๋ฅผ ์ฐจ๋จํ๋ ๋์ , ๋ฆฌ๋ฒ์ค ํ๋ก์๊ฐ ์๋ณธ ๋ฉ์์ง์ ์ถ์ฒ๋ก ์ง์ ํ IP๋ฅผ ์ฐจ๋จํ๊ธฐ ๋๋ฌธ์
๋๋ค. ์ ๋ขฐํ๋ ๊ธฐ๊ธฐ๊ฐ ์นจํด๋นํ๊ฑฐ๋ ์๋ชป ์ค์ ๋ ๊ฒฝ์ฐ ์ ์ฌ์ ์ธ IP ์คํธํ ๊ณต๊ฒฉ ๋ฐ ๋ฌด๋จ ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๋ฏ๋ก, ์ฌ๊ธฐ์ ์ง์ ํ๋ ๋คํธ์ํฌ์๋ ๊ฐ๋ณํ ์ฃผ์ํด์ผ ํฉ๋๋ค.
PathBase - IPC ์ธํฐํ์ด์ค์์ ์ฌ์ฉ๋ ์ ํ์ ๊ธฐ๋ณธ ๊ฒฝ๋ก์
๋๋ค. ๊ธฐ๋ณธ๊ฐ์ /์ด๋ฉฐ, ๋๋ถ๋ถ์ ์ฌ์ฉ ์ฌ๋ก์์๋ ์์ ํ ํ์๊ฐ ์์ต๋๋ค. ์ด ์์ฑ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ์ ์ฒด IPC ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉ์ ์ง์ ์ ๋์ฌ์์ ํธ์คํ
ํ๊ฒ ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด http://localhost:1242 ๊ฐ ์๋๋ผ http://localhost:1242/MyPrefix ๊ฐ ๋ฉ๋๋ค. ์ฌ์ฉ์ ์ง์ PathBase ๋ ํน์ ํ URL๋ง ํ๋ก์ํ๊ธฐ ์ํ๋ ์ญ๋ฐฉํฅ ํ๋ก์์ ํน์ ์ค์น์์ ์กฐํฉ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ์ ์ฒด mydomain.com ๋๋ฉ์ธ์ด ์๋mydomain.com/ASF ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก๋ mydomain.com/ASF/Api/X๋ฅผ localhost:1242/Api/X๋ก ๋งคํํ๋ rewrite ๊ท์น์ ์น ์๋ฒ์ ์์ฑํด์ผ ํ์ง๋ง, ๋์ ์ปค์คํ
PathBase๋ฅผ /ASF๋ก ์ง์ ํ๋ฉด mydomain.com/ASF/Api/X๋ฅผ localhost:1242/ASF/Api/X๋ก ๋ ๊ฐํธํ๊ฒ ์ค์ ํ ์ ์์ต๋๋ค.
๋น์ ์ด ์ฌ์ฉ์ ์ง์ ๊ธฐ๋ณธ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ ํ์๊ฐ ์๋ค๊ณ ์ง์ฌ์ผ๋ก ๋ฏฟ์ง ์๋ ํ, ๊ธฐ๋ณธ๊ฐ์ผ๋ก ๋๋ ๊ฒ์ด ์ต์ ์ ๋๋ค.
๋ค์ config๋ ASF์ ๊ธฐ๋ณธ ์์ ๋๊ธฐ ํฌํธ๋ฅผ 1242์์ 1337๋ก ๋จ์ํ ๋ณ๊ฒฝํฉ๋๋ค. ์ํ๋ ํฌํธ๋ฅผ ์์ ๋กญ๊ฒ ์ ํํ ์ ์์ง๋ง, 1024-32767 ๋ฒ์๋ฅผ ๊ถ์ฅํฉ๋๋ค. ๊ทธ ์ธ์ ํฌํธ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฑ๋ก๋(registered) ํฌํธ๋ผ์, ์๋ฅผ ๋ค์ด Linux์์๋ root ๊ถํ์ด ํ์ํ ์ ์์ต๋๋ค.
{
"Kestrel": {
"Endpoints": {
"HTTP4": {
"Url": "http://127.0.0.1:1337"
},
"HTTP6": {
"Url": "http://[::1]:1337"
}
}
}
}๋ค์ config๋ ๋ชจ๋ ์์ค๋ก๋ถํฐ์ ์๊ฒฉ ์ ๊ทผ์ ํ์ฉํ๋ฏ๋ก, ์์์ ์ ๊ณตํ ์ด์ ๊ดํ ๋ณด์ ์๋ด๋ฅผ ๋ฐ๋์ ์ฝ๊ณ ์ดํดํ๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
{
"Kestrel": {
"Endpoints": {
"HTTP": {
"Url": "http://*:1242"
}
}
}
}๋ชจ๋ ์ถ์ฒ์์์ ์ ๊ทผ์ด ํ์ํ์ง ์๊ณ (์: LAN ๋ด์์๋ง ์ ๊ทผํ๋ ๊ฒฝ์ฐ), ASF๋ฅผ ํธ์คํ
ํ๋ ๊ธฐ๊ธฐ์ ๋ก์ปฌ IP ์ฃผ์(์: 192.168.0.10)๋ฅผ ํ์ธํ์ฌ ์ ์์ ์ค์ ์ * ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ํจ์ฌ ์ข์ต๋๋ค. ์์ฝ๊ฒ๋ ์ด๋ LAN ์ฃผ์๊ฐ ํญ์ ๊ณ ์ ๋์ด ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด ๋ก์ปฌ ์๋ธ๋ท๋ง ASF ํฌํธ์ ์ ๊ทผํ๋๋ก ๋ฐฉํ๋ฒฝ์ ์ง์ ์ค์ ํ๊ณ , *๋ฅผ ์ฌ์ฉํ๋ ํธ์ด ๋์ฒด๋ก ๋ ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์ ๋์ค ์์ผ์ Windows๊ฐ ์๋ ํ๋ซํผ์์ ์ง์๋ฉ๋๋ค. asf ์ฌ์ฉ์๋ก ์ ํฌ **systemd ์๋น์ค**๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด ์๋ ๋ด์ฉ์ด ๋ณ๋ ์ค์ ์์ด ๋ฐ๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ ์ง ์๋ค๋ฉด, ํ์์ ๋ง๊ฒ ๊ฒฝ๋ก๋ฅผ ์กฐ์ ํ์ธ์.
{
"Kestrel": {
"Endpoints": {
"Unix": {
"Url": "http://unix:/run/asf-asf/asf.sock"
}
}
}
}ASF์๋ ์ ๋์ค ์์ผ ์์ฑ ์ ๊ถํ์ chmod๋ฅผ ํตํด 0666์ผ๋ก ์๋ ๋ณ๊ฒฝํ๋ ์ปค์คํ
๋ก์ง์ด ํฌํจ๋์ด ์์ต๋๋ค. ํน์ ์ด๊ฒ์ด ์์น ์๋ ๊ฒฝ์ฐ๋ผ๋ฉด, ๋์ ์์ผ์ ํ์ ํด๋ ๊ถํ์ ์์ ํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด [Service] ์๋ **systemd override**์์ RuntimeDirectoryMode=0700์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ ๋์ค ์์ผ์ ์ด๋ฌํ ์ ํ์ ํต์ ์ ์ง์ํ๋ ํน์ ์ํํธ์จ์ด์์ ํ์ค TCP ์์ผ์ ๋์์ผ๋ก ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์๋ฅผ ๋ค์ด ๋ค์ํ ๋ฆฌ๋ฒ์ค ํ๋ก์ ๋ฉ์ปค๋์ฆ์ ์ ์คํธ๋ฆผ ์๋ฒ๋ก ํ์ฉ๋ ์ ์์ต๋๋ค.
ASF IPC ์ธํฐํ์ด์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก IPCPassword๊ฐ null๋ก ์ค์ ๋์ด ์์ผ๋ฏ๋ก ์ด๋ ํ ์ข
๋ฅ์ ์ธ์ฆ๋ ์๊ตฌํ์ง ์์ต๋๋ค. ํ์ง๋ง IPCPassword๊ฐ ๋น ๊ฐ์ด ์๋๊ฒ์ผ๋ก ์ค์ ๋์ด ํ์ฑํ๋๋ฉด, ๋ชจ๋ ASF API ํธ์ถ์ IPCPassword์ ๋ง๋ ์ํธ๋ฅผ ์๊ตฌํ ๊ฒ์
๋๋ค. ์ธ์ฆ์ ์๋ตํ๊ฑฐ๋ ์๋ชป๋ ์ํธ๋ฅผ ์
๋ ฅํ๋ฉด 401 - Unauthorized ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ธ์ฆ์ 5๋ฒ ์คํจํ๋ฉด(์๋ชป๋ ๋น๋ฐ๋ฒํธ), 403 - Forbidden ์ค๋ฅ์ ํจ๊ป ์ผ์์ ์ผ๋ก ์ฐจ๋จ๋ฉ๋๋ค.
์ธ์ฆ์ ๋๊ฐ์ง ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๊ฐ๋ฅํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก Authentication ํ๋์ ๋น๋ฐ๋ฒํธ๋ฅผ ๊ฐ์ผ๋ก ์ค์ ํ์ฌ **HTTP ์์ฒญ ํค๋**๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ASF IPC ์ธํฐํ์ด์ค์ ์ ๊ทผํ๋ ์ค์ ๋๊ตฌ์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค. ์๋ฅผ ๋ค์ด curl์ ์ฌ์ฉํ๋ค๋ฉด -H 'Authentication: MyPassword' ๋ฅผ ์ธ์๋ก ๋ฃ์ด์ผ ํฉ๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ค์ ์ธ์ฆ์ด ์ผ์ด๋์ผ ํ๋ ์์ฒญ์ ํค๋ ๋ถ๋ถ์์ ์ธ์ฆ์ด ํต๊ณผ๋ฉ๋๋ค.
๋๋ password ๋งค๊ฐ๋ณ์๋ฅผ ํธ์ถํ๋ ค๋ URL์ ๋ง์ง๋ง์ ์ถ๊ฐํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด /Api/ASF ๋์ ์ /Api/ASF?password=MyPassword๋ก ํธ์ถํฉ๋๋ค. ์ด ์ ๊ทผ๋ฐฉ๋ฒ๋ ์ถฉ๋ถํ ์ข์ง๋ง ๋ช
๋ฐฑํ๊ฒ ์ํธ๋ฅผ ์ด๋ฆฐ ๊ณณ์ ๋
ธ์ถํ๋ฏ๋ก ํญ์ ์ ์ ํ์ง๋ ์์ต๋๋ค. ๊ฒ๋ค๊ฐ ์ฟผ๋ฆฌ๋ฌธ์ ์ถ๊ฐ ์ธ์์ด๋ฏ๋ก URL์ด ๋ณต์กํด๋ณด์ด๊ณ , ์ํธ๊ฐ ASF API ํต์ ์ ์ฒด์ ์ ์ฉ๋๋๋ฐ๋ ๋ง์น ๊ทธ URL ์ ์ฉ์ธ ๊ฒ ๊ฐ์ ๋๋์ ์ค๋๋ค.
๋ ๋ฐฉ๋ฒ ๋ชจ๋ ์ง์๋๋ฉฐ ์ด๋ ๊ฒ์ ์ฌ์ฉํ ์ง๋ ๋น์ ์ ์ ํ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋ฅํ ๋ชจ๋ ๊ณณ์ HTTP ํค๋๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์๋ฅผ ๋ค์๋ฏ์ด HTTP ํค๋๊ฐ ์ฟผ๋ฆฌ๋ฌธ๋ณด๋ค ๋ ์ ํฉํฉ๋๋ค. ํ์ง๋ง ํค๋ ์์ฒญ๊ณผ ๊ด๋ จ๋ ๋ค์ํ ์ ํ์ด ์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๋ ์ฟผ๋ฆฌ๋ฌธ๋ ์ง์์ ํฉ๋๋ค. RFC์ ๋ฐ๋ฅด๋ฉด ์์ ํ ์ ํจํฉ๋๋ค๋ง, ์๋ฐ์คํฌ๋ฆฝํธ์์ ์น์์ผ ์ฐ๊ฒฐ ์์์ ์ฌ์ฉ์ ์ง์ ํค๋์ ๋ถ์ฌ๋ ์ข์ ์์ ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ์ฟผ๋ฆฌ๋ฌธ์ ์ ์ผํ ์ธ์ฆ๋ฐฉ๋ฒ์ ๋๋ค.
IPC ์ธํฐํ์ด์ค์๋ ASF API, ASF-ui์ ๋๋ถ์ด swagger ๋ฌธ์๊ฐ ์์ผ๋ฉฐ /swagger URL ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํฉ๋๋ค. Swagger ๋ฌธ์๋ API ๊ตฌํ๊ณผ ์ด๋ฅผ ์ฌ์ฉํ๋ ASF-ui ๋ฑ ๋ค๋ฅธ ๋๊ตฌ๊ฐ์ ์ค๊ฐ๋ค๋ฆฌ ์ญํ ์ ํฉ๋๋ค. ์ด๊ฒ์ OpenAPI ์ฌ์์ ๋ชจ๋ API ๋จ๋ง์ ์์ ํ ๋ฌธ์์ด๋ฉฐ ๊ฐ๋ฅ์ฑ์
๋๋ค. ๋ค๋ฅธ ํ๋ก์ ํธ๋ ์ด๋ฅผ ์ฝ๊ฒ ์๋นํ ์ ์์ผ๋ฉฐ ASF API๋ฅผ ์ฝ๊ฒ ์์ฑํ๊ณ ํ
์คํธํ ์ ์์ต๋๋ค.
Swagger ๋ฌธ์๋ฅผ ASF API์ ์์ ํ ์ฌ์์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ๊ณผ ๋ณ๊ฐ๋ก ์ฃผ๋ก ASF-ui์ ๊ตฌํ๋์ง ์์ ๋ค์ํ API ๋จ๋ง์ ์คํํ๋ ์ฌ์ฉ์ ์นํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉํ ์๋ ์์ต๋๋ค. Swagger ๋ฌธ์๋ ASF ์ฝ๋์์ ์๋์ผ๋ก ์์ฑ๋๋ฏ๋ก ์ฌ์ฉ์ค์ธ ASF๊ฐ ํฌํจํ๋ API ๋จ๋ง๊ณผ ๋ฌธ์๊ฐ ํญ์ ์ต์ ์์ ๋ณด์ฅํฉ๋๋ค.

ASF๋ ๊ธฐ๋ณธ์ ์ผ๋ก localhost ์ฃผ์๋ฅผ ์์ ํฉ๋๋ค. ์ฆ ๋น์ ์์ ์ ๊ธฐ๊ธฐ๊ฐ ์๋ ๋ค๋ฅธ ๊ธฐ๊ธฐ๋ ASF IPC์ ์ ์ํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋น์ ์ด ๊ธฐ๋ณธ ๋จ๋ง์ ๋ณ๊ฒฝํ์ง ์๋ ํ, ๊ณต๊ฒฉ์๋ ASF IPC์ ์ ๊ทผํ๋ ค๋ฉด ๋น์ ์ ๊ธฐ๊ธฐ์ ์ง์ ์ ๊ทผํ ํ์๊ฐ ์์ต๋๋ค. ๋ฐ๋ผ์ ๊ฐ์ฅ ์์ ํ๋ฉฐ LAN์ ์ ์๋ ์ด๋ฅผ ํฌํจํ ๋ค๋ฅธ ๋๊ตฐ๊ฐ์ ์ ๊ทผ ๊ฐ๋ฅ์ฑ์ ์์ต๋๋ค.
ํ์ง๋ง ๊ธฐ๋ณธ localhost ํ ๋น ์ฃผ์๋ฅผ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ๋ก ๋ฐ๊พธ๊ธฐ๋ก ํ๋ค๋ฉด ๊ณต์ธ๋ IP๋ง ASF IPC ์ธํฐํ์ด์ค์ ์ ๊ทผํ๋๋ก ์ ์ ํ ๋ฐฉํ๋ฒฝ ๊ท์น์์ง์ ์ค์ ํด์ผ ํฉ๋๋ค. ์ด์ ํจ๊ป IPCPassword๋ ์ค์ ํด์ผ ํฉ๋๋ค. ASF๋ ๋น๋ฐ๋ฒํธ๊ฐ ์์ผ๋ฉด ๋ค๋ฅธ ๊ธฐ๊ธฐ๊ฐ ASF API์ ์ ๊ทผํ๋ ๊ฒ์ ๊ฑฐ๋ถํ๋ฉฐ, ์ด๋ ์ถ๊ฐ์ ์ธ ๋ณด์ ๊ณ์ธต์ ๋ํด์ค๋๋ค. ์ด ๊ฒฝ์ฐ ASF IPC ์ธํฐํ์ด์ค๋ฅผ ์ญ๋ฐฉํฅ ํ๋ก์ ๋ค์์ ์คํํ๊ณ ์ถ์์๋ ์์ต๋๋ค. ์ด๋ ์๋์์ ์ถ๊ฐ๋ก ์ค๋ช
ํฉ๋๋ค.
์. ์ด๊ฒ์ ASF API๊ฐ ์ค๊ณ๋ ์ด์ ์ด๋ฉฐ ์ ๊ทผ์ ์ํ HTTP ์์ฒญ์ ๋ณด๋ด๋ ๊ฒ์ผ๋ก ๋ฌด์์ด๋ ํ ์ ์์ต๋๋ค. ๋ก์ปฌ ์ฌ์ฉ์์คํฌ๋ฆฝํธ๋ ๊ต์ฐจ ์ถ์ฒ ๋ฆฌ์์ค ๊ณต์ (CORS, Cross-origin resource sharing) ๋
ผ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก, ์ถ๊ฐ ๋ณด์ ์กฐ์น๋ก IPCPassword๊ฐ ์ค์ ๋์ด ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ฅผ ์ํด ๋ชจ๋ ๊ณณ(*)์์์ ์ ๊ทผ์ ํ์ฉํฉ๋๋ค. ์ด๋ ๊ฒ ํด์ ์ ์ฌ์ ์ผ๋ก ์
์์ ์ธ ์คํฌ๋ฆฝํธ๊ฐ ์๋์ผ๋ก ์์ฒญ์ ์คํํ๋ ๊ฒ์ ๋ง์ผ๋ฉด์ ๋ค์ํ ์ธ์ฆ๋ฐ์ ASF API ์์ฒญ์ ์คํํ ์ ์์ต๋๋ค.(์
์์ ์ธ ์คํฌ๋ฆฝํธ๋ ์์ฒญ ์คํ์ ์ํด IPCPassword๋ฅผ ์์์ผ๋ง ํฉ๋๋ค.)
๋ค, ์ด๋ฅผ ์ํด ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ฌ์ฉํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ด๋ ๊ฒ ํด์ ์น์๋ฒ์ ์ ํ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ์ ๊ทผํ ์ ์๊ณ ASF IPC๋ฅผ ๋์ผํ ๊ธฐ๊ธฐ์์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก, ๋ฆฌ๋ฒ์ค ํ๋ก์ ์์ด ์ด์ํ๊ณ ์ถ๋ค๋ฉด ์ ์ ํ URL๋ก **์ปค์คํ
์ค์ **์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๊ธฐ๊ธฐ๊ฐ 10.8.0.1 ์ฃผ์๋ฅผ ๊ฐ์ง VPN ๋ด์ ์๋ค๋ฉด, IPC config์์ ์์ ๋๊ธฐ URL์ http://10.8.0.1:1242๋ก ์ค์ ํ ์ ์์ผ๋ฉฐ, ์ด ๊ฒฝ์ฐ ๊ฐ์ธ VPN ๋ด์์๋ง IPC ์ ๊ทผ์ด ๊ฐ๋ฅํด์ง๊ณ ๊ทธ ์ธ์ ๊ณณ์์๋ ์ ๊ทผํ ์ ์๊ฒ ๋ฉ๋๋ค.
์. IPC๋ ๊ทธ๋ฐ ์ค์น์ ์์ ํ ํธํ๋๋ฏ๋ก ์ํ๋ค๋ฉด ์ถ๊ฐ ๋ณด์๊ณผ ํธํ์ฑ์ ์ํด ๋น์ ์ ๋๊ตฌ ์์์ ํธ์คํ ํด๋ ์ข์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ASF์ Kestrel http ์๋ฒ๋ ์ธํฐ๋ท์ ์ง์ ์ฐ๊ฒฐ๋์์ ๋ ๋งค์ฐ ์์ ํ๊ณ ์ํ์ด ์์ต๋๋ค. ํ์ง๋ง Apache๋ Nginx ๊ฐ์ ์ญ๋ฐฉํฅ ํ๋ก์ ๋ค์ ๋์ผ๋ฉด ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก๋ ํ ์ ์๋ ์ถ๊ฐ ๊ธฐ๋ฅ๋ค, ์๋ฅผ ๋ค๋ฉด ASF ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ์ด ์ธ์ฆ(Basic auth) ์ผ๋ก ์์ ํ๊ฒ ํ๋ ๊ฒ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ์ ๊ณตํ ์ง๋ ๋ชจ๋ฆ ๋๋ค.
Nginx ํ๊ฒฝ์ค์ ์ ์์๋ ์๋์ ์์ต๋๋ค. ์์ ํ๊ณ ์๊ฒฐ๋, ๊ทธ๋ฌ๋ฉด์๋ ์ต์ํ์ผ๋ก ๊ตฌ์ฑ๋ ์ ์๋ฅผ ํฌํจํด๋์์ต๋๋ค. ๋ ์์ธํ ์ค๋ช ์ด ํ์ํ๋ฉด nginx ๋ฌธ์(์๋ฌธ) ๋ฅผ ์ฐธ๊ณ ํ์ญ์์ค.
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream asf-server {
# You can also use unix socket if you've enabled it, e.g. unix:/run/asf-asf/asf.sock
server 127.0.0.1:1242;
}
server {
listen *:443 ssl;
ssl_certificate /path/to/your/fullchain.pem;
ssl_certificate_key /path/to/your/privkey.pem;
ssl_trusted_certificate /path/to/your/chain.pem;
server_name asf.mydomain.com;
location ~* /Api/NLog {
proxy_pass http://asf-server;
# X-headers should always be specified when proxying requests to ASF
# They're crucial for proper identification of original IP, allowing ASF to e.g. ban the actual offenders instead of your nginx server
# Specifying them allows ASF to properly resolve IP addresses of users making requests - making nginx work as a reverse proxy
# Not specifying them will cause ASF to treat your nginx as the client - nginx will act as a traditional proxy in this case
# If you're unable to host nginx service on the same machine as ASF, you most likely want to set KnownNetworks appropriately in addition to those
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
# We add those 3 extra options for websockets proxying, see https://nginx.org/en/docs/http/websocket.html
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Upgrade $http_upgrade;
}
location / {
proxy_pass http://asf-server;
# X-headers should always be specified when proxying requests to ASF
# They're crucial for proper identification of original IP, allowing ASF to e.g. ban the actual offenders instead of your nginx server
# Specifying them allows ASF to properly resolve IP addresses of users making requests - making nginx work as a reverse proxy
# Not specifying them will cause ASF to treat your nginx as the client - nginx will act as a traditional proxy in this case
# If you're unable to host nginx service on the same machine as ASF, you most likely want to set KnownNetworks appropriately in addition to those
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}๋ค์์ ์ํ์น ํ๊ฒฝ์ค์ ์ ์์์ ๋๋ค. ๋ ์์ธํ ์ค๋ช ์ด ํ์ํ๋ค๋ฉด **Apache ๋ฌธ์**๋ฅผ ์ฐธ๊ณ ํ์ธ์.
<IfModule mod_ssl.c>
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /path/to/your/fullchain.pem
SSLCertificateKeyFile /path/to/your/privkey.pem
ServerName asf.mydomain.com
# TODO: Apache can't do case-insensitive matching properly, so we hardcode two most commonly used cases
# You can also use unix socket if you've enabled it, e.g. unix:/run/asf-asf/asf.sock|ws://localhost/
ProxyPass "/api/nlog" "ws://127.0.0.1:1242/api/nlog"
ProxyPass "/Api/NLog" "ws://127.0.0.1:1242/Api/NLog"
# You can also use unix socket if you've enabled it, e.g. unix:/run/asf-asf/asf.sock|http://localhost/
ProxyPass "/" "http://127.0.0.1:1242/"
</VirtualHost>
</IfModule>๋ค, ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก ์ด๋ฅผ ๊ตฌํํ ์ ์์ต๋๋ค. ๊ถ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ ํ์์ฒ๋ผ https๋ก ์น ์๋ฒ์ ์ ๊ทผํ๊ณ , ์ด๋ฅผ ํตํด ๊ฐ์ ๊ธฐ๊ธฐ์ ASF IPC ์ธํฐํ์ด์ค์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ ํธ๋ํฝ์ด ์์ ํ ์ํธํ๋๋ฏ๋ก ์ด๋ฐ ์ค์น๋ฅผ ์ํด IPC๋ฅผ ์ด๋ค ๋ฐฉ์์ผ๋ก๋ ์์ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ ๋ฒ์งธ ๋ฐฉ๋ฒ์ ASF์ IPC ์ธํฐํ์ด์ค์ **์ปค์คํ config**๋ฅผ ์ง์ ํ์ฌ, https ์๋ํฌ์ธํธ๋ฅผ ํ์ฑํํ๊ณ ์ ํฌ Kestrel http ์๋ฒ์ ์ ์ ํ ์ธ์ฆ์๋ฅผ ์ง์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ค๋ฅธ ์น์๋ฒ๋ฅผ ์คํํ์ง ์๊ณ ์์ผ๋ฉฐ ์ค์ง ASF๋ฅผ ์ํด์ ์น์๋ฒ๋ฅผ ์ถ๊ฐ๋ก ์คํํ๊ณ ์ถ์ง ์์ ๊ฒฝ์ฐ ์ถ์ฒํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ญ๋ฐฉํฅ ํ๋ก์ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์นํ๋๋ฐ ํจ์ฌ ์ฌ์ธ ๊ฒ์ ๋๋ค.
IPC ์์ ์ค์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค: System.IO.IOException: Failed to bind to address, An attempt was made to access a socket in a way forbidden by its access permissions
์ด ์ค๋ฅ๋ ๊ธฐ๊ธฐ์ ๋ค๋ฅธ ๋ฌด์ธ๊ฐ๊ฐ ์ด๋ฏธ ํด๋น ํฌํธ๋ฅผ ์ฌ์ฉ ์ค์ด๊ฑฐ๋, ํฅํ ์ฌ์ฉ์ ์ํด ์์ฝํด๋ ์ํ์์ ๋ํ๋
๋๋ค. ๊ฐ์ ๊ธฐ๊ธฐ์์ ๋ ๋ฒ์งธ ASF ์ธ์คํด์ค๋ฅผ ์คํํ๋ ค๋ ๊ฒฝ์ฐ ๋ณธ์ธ์ด ์์ธ์ผ ์๋ ์์ง๋ง, ๊ฐ์ฅ ํํ ๊ฒฝ์ฐ๋ Windows๊ฐ 1242 ํฌํธ๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ์ ์ธํด๋ ๊ฒ์ด๋ฏ๋ก, ์ด ๊ฒฝ์ฐ ASF๋ฅผ ๋ค๋ฅธ ํฌํธ๋ก ์ฎ๊ฒจ์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ํด ์์ **์์ config**๋ฅผ ๋ฐ๋ผ, 12420๊ณผ ๊ฐ์ ๋ค๋ฅธ ํฌํธ๋ฅผ ๊ฐ๋จํ ์ ํํด๋ณด์ธ์.
๋ฌผ๋ก ๋ฌด์์ด ASF์ 1242 ํฌํธ ์ฌ์ฉ์ ๋ง๊ณ ์๋์ง ์ฐพ์๋ด์ด ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ๋ ์๋ํด๋ณผ ์ ์์ง๋ง, ์ด๋ ๋์ฒด๋ก ASF์ ๋ค๋ฅธ ํฌํธ๋ฅผ ์ฌ์ฉํ๋๋ก ์ง์ํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ฒ๊ฑฐ๋ก์ฐ๋ฏ๋ก ์ฌ๊ธฐ์๋ ๋ ์์ธํ ๋ค๋ฃจ์ง ์๊ฒ ์ต๋๋ค.
ASF์๋ ์ถ๊ฐ์ ์ธ ๋ณด์ ์กฐ์น๊ฐ ํฌํจ๋์ด ์์ด, config์ IPCPassword๊ฐ ์ค์ ๋์ง ์์ ๊ฒฝ์ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค(localhost, ๋ณธ์ธ์ ๊ธฐ๊ธฐ)์์๋ง ASF API์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ ASF ์ธํฐํ์ด์ค๋ฅผ ์ธ๋ถ๋ก ๋ ๋
ธ์ถ์ํค๊ธฐ๋ก ํ ์ฌ๋์ด๋ผ๋ฉด ๋๊ตฌ๋ IPCPassword ์ฌ์ฉ์ ์ต์ํ์ ๋ณด์ ์กฐ์น๋ก ์ค์ ํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค.
์ด ๋ณ๊ฒฝ์ ์ ์ธ๊ณ์ ์ผ๋ก ์ด๋ฅผ ์ธ์งํ์ง ๋ชปํ ์ฌ์ฉ์๋ค์ด ํธ์คํ ํ๋ ๋๋์ ASF๊ฐ ์ ์์ ์ธ ๋ชฉ์ ์ผ๋ก ํ์ทจ๋นํ๋ ์ฌ๋ก๊ฐ ๋ง์๊ณ , ์ด๋ก ์ธํด ๋๋ถ๋ถ ๊ณ์ ๊ณผ ์์ดํ ์ ์๊ฒ ๋์๋ค๋ ์ฌ์ค์ ๋ฐ๋ฅธ ๊ฒ์ ๋๋ค. "ASF๋ฅผ ์ธ๋ถ ์ ์ฒด์ ๊ฐ๋ฐฉํ๊ธฐ ์ ์ ์ด ํ์ด์ง๋ฅผ ๋ฏธ๋ฆฌ ์ฝ์์ผ๋ฉด ์ข์์ ํ ๋ฐ"๋ผ๊ณ ๋งํ ์๋ ์๊ฒ ์ง๋ง, ๊ทธ๋ณด๋ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ ํ์ง ์์ ASF ์ค์ ์ ๋นํ์ฑํํ๊ณ ์ฌ์ฉ์๊ฐ ๋ช ์์ ์ผ๋ก ์ด๋ฅผ ํ์ฉํ๋ ค๋ ๊ฒฝ์ฐ์๋ง ์ง์ ์ถ๊ฐ ์กฐ์น๋ฅผ ์ทจํ๋๋ก ํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ ๋๋ค. ์ด์ ๋ํด์๋ ์๋์์ ์์ธํ ์ค๋ช ํฉ๋๋ค.
๊ตฌ์ฒด์ ์ผ๋ก๋, IPCPassword ์์ด๋ ASF์ ์ ๊ทผํ ์ ์๋๋ก ์ ๋ขฐํ๋ ๋คํธ์ํฌ๋ฅผ ์ง์ ํจ์ผ๋ก์จ ์ ํฌ์ ์ด ๊ธฐ๋ณธ ์ ์ฑ
์ ์ฌ์ ์ํ ์ ์์ต๋๋ค. ์ด๋ ์ปค์คํ
์ค์ (config)์ KnownNetworks ์์ฑ์์ ์ค์ ํ ์ ์์ต๋๋ค. ๋ค๋ง, ์ ๋ง๋ก ๋ฌด์์ ํ๋์ง ์๊ณ ์ํ์ ์์ ํ ์ดํดํ๊ณ ์๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ผ๋ฉด, ๋์ IPCPassword๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. KnownNetworks๋ฅผ ์ง์ ํ๋ฉด ํด๋น ๋คํธ์ํฌ์ ์ํ ๋๊ตฌ๋ ์กฐ๊ฑด ์์ด ASF API์ ์ ๊ทผํ ์ ์๊ฒ ๋๊ธฐ ๋๋ฌธ์
๋๋ค. ์ ๋ง ์ง์งํ๊ฒ ๋๋ฆฌ๋ ๋ง์์
๋๋ค. ์ค์ ๋ก ๋ง์ ์ฌ๋๋ค์ด ์์ ์ ๋ฆฌ๋ฒ์ค ํ๋ก์๋ iptables ๊ท์น์ด ์์ ํ๋ค๊ณ ๋ฏฟ์์ง๋ง ์ค์ ๋ก๋ ๊ทธ๋ ์ง ์์์ ์ค์ค๋ก ๋ฌธ์ ๋ฅผ ์์ดํ ์ฌ๋ก๊ฐ ์์์ต๋๋ค. IPCPassword๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ์ด์ ์ด์ ๋๋ก๋ ๋ง์ง๋ง ๋ฐฉ์ด์ ์
๋๋ค. ์ด ๊ฐ๋จํ๋ฉด์๋ ๋งค์ฐ ํจ๊ณผ์ ์ด๊ณ ์์ ํ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ง ์๊ธฐ๋ก ํ๋ค๋ฉด, ๊ทธ๋ก ์ธํ ๊ฒฐ๊ณผ๋ ์ ์ ์ผ๋ก ๋ณธ์ธ์ ์ฑ
์์
๋๋ค.
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
|---|---|---|---|
- ๐ก ํ
- ๐ฌ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
- โ๏ธ ์์ํ๊ธฐ (์ฌ๊ธฐ์๋ถํฐ)
- ๐ฅ ๋ฐฑ๊ทธ๋ผ์ด๋ ๊ฒ์ ๋ฑ๋ก๊ธฐ
- ๐ข ๋ช ๋ น์ด
- ๐ ๏ธํธํ์ฑ
- ๐ง ํ๊ฒฝ์ค์
- ๐ด ItemsMatcherPlugin
- ๐ ๊ด๋ฆฌ
- โฑ๏ธ ์ฑ๋ฅ
- ๐ก ์๊ฒฉ ํต์
- ๐ช Steam ๊ฐ์กฑ ๊ณต์
- ๐ ๊ฑฐ๋
- โจ๏ธ ๋ช ๋ น์ค ์ธ์
- ๐ง ์ฌ์ฉ ์ค๋จ
- ๐ณ Docker
- ๐ค ์ถ๊ฐ ์์ฃผ ๋ฌป๋ ์ง๋ฌธ
- ๐ ๊ณ ์ฑ๋ฅ ์ค์
- ๐ IPC
- ๐ ํ์งํ
- ๐ ๋ก๊น
- ๐พ ์ ์ฌ์ ๋ฉ๋ชจ๋ฆฌ ํ๊ฒฝ ์ค์
- ๐ต๐ผโโ๏ธ MonitoringPlugin
- ๐ ํ๋ฌ๊ทธ์ธ
- ๐ ๋ณด์
- โฌ๏ธ SteamTokenDumperPlugin
- ๐ฆ ์๋ ํํฐ
- ๐ต 2๋จ๊ณ ์ธ์ฆ







