qooxdoo
qooxdoo ์ ํ๋ฆฌ์ผ์ด์
์ ์คํ ์ค์ธ ์น ๋ธ๋ผ์ฐ์ | |
| ์์ ํ ๋ฒ์ | 7.8.0
/ 2025๋
1์ 28์ผ[1] |
|---|---|
| ์ ์ฅ์ | |
| ์ข ๋ฅ | ์๋ฐ์คํฌ๋ฆฝํธ ์ ํ๋ฆฌ์ผ์ด์ ํ๋ ์์ํฌ |
| ๋ผ์ด์ ์ค | LGPL, EPL |
| ์น์ฌ์ดํธ | qooxdoo |
qooxdoo(/หkuหksduห/)๋ ์คํ ์์ค ์ํํธ์จ์ด Ajax ์น ํ๋ ์์ํฌ์ด๋ค. ์ด ํ๋ ์์ํฌ๋ LGPL ๋ฐ EPL ๋ผ์ด์ ์ค๋ฅผ ๋ฐ๋ฅด๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ฐ ์๋ฒ ๋ ๋ฆฝ์ ์ธ ์๋ฃจ์ ์ด๋ฉฐ, ์ ๋ฌธ์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ๋ฐ ์ง์, ๊ทธ๋ํฝ ์ฌ์ฉ์ ์ธํฐํ์ด์ค (GUI) ์์ ฏ ํดํท, ๊ทธ๋ฆฌ๊ณ ๊ณ ๊ธ ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ๊ธฐ๋ฅ์ ํฌํจํ๋ค.
ํ๋ ์์ํฌ
[ํธ์ง]qooxdoo๋ ์์ ํ ํด๋์ค ๊ธฐ๋ฐ์ผ๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ธฐ๋ฅ์ ํ์ฉํ๊ณ ๋ค์์คํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค. ๊ฒ์ฝ (ํ์ด์ดํญ์ค, ๋ชจ์ง๋ผ, ์๋ชฝํค), ํ๋ ์คํ (์คํ๋ผ), ํธ๋ผ์ด๋ํธ (์ธํฐ๋ท ์ต์คํ๋ก๋ฌ, ๋ฆฌ์ผํ๋ ์ด์ด, ์์ฐํ), ์นํท (ํฌ๋กฌ, ์ฌํ๋ฆฌ)์ ํฌํจํ ๋๋ถ๋ถ์ ํ๋์ ์ธ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํ๋ค.[2] ๋ํ Javadoc ์คํ์ผ์ ์ฃผ์์ผ๋ก๋ถํฐ ์๋ ์์ฑ๋๋ API ์ฐธ์กฐ๋ฅผ ํฌํจํ๋ค. ํจ๊ป ์ ๊ณต๋๋ ๋๊ตฌ ๋ชจ์์๋ ์๋ ๋น๋ ๊ณผ์ ์ ํ์ ์์์ธ ํฌ๊ด์ ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ๊ตฌ๋ฌธ ๋ถ์๊ธฐ๊ฐ ํฌํจ๋์ด ์์ผ๋ฉฐ, ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ต์ ํ, ๋ฐ์ดํฐ ์์ถ, ๋งํฌ, ๋ฐฐํฌ ๋ฐ ๋ฌธ์ ์์ฑ์ ์ฌ์ฉ๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตญ์ ํ์ ์ง์ญํ๋ ์ง์ํ๋ค. qooxdoo๋ ํฌ๊ด์ ์ธ SDK๋ก ๋ค์ด๋ก๋ํ ์ ์๋ค.[3]
GUI ํดํท
[ํธ์ง]์์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ์์๋ ๋ถ๊ตฌํ๊ณ , qooxdoo๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌํ ์ธก๋ฉด์์ Qt, ํ์ค ์์ ฏ ํดํท (SWT) ๋ฑ๊ณผ ๊ฐ์ GUI ํดํท๊ณผ ๋๋ฑํ ์์ค์ด๋ค. ๋ค์ดํฐ๋ธ ๋ฐ์คํฌํฑ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์๋ฅผ ๋ฎ์ ์ผ๋ จ์ ์์ ฏ์ ์ ๊ณตํ๋ค. ํค๋ณด๋ ํ์, ํฌ์ปค์ค ๋ฐ ํญ ์ฒ๋ฆฌ, ๋๋๊ทธ ์ค ๋๋กญ์ ๋ํ ๋ด์ฅ ์ง์์ด ์ ๊ณต๋๋ค. ํฌ๊ธฐ๋ ์ ์ (static), ์๋ ํฌ๊ธฐ ์กฐ์ (auto-sizing), ๋๋ฆฌ๊ธฐ(stretching), ๋ฐฑ๋ถ์จ, ๊ฐ์ค์น ํ๋ ์ค(weighted flex) ๋๋ ์ต์/์ต๋ ํฌ๊ธฐ, ํน์ ์ด๋ค์ ์กฐํฉ์ผ๋ก ์ง์ ํ ์ ์๋ค. ๋ชจ๋ ์์ ฏ์ ์ ์ฐํ ๋ ์ด์์ ๊ด๋ฆฌ์๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์ด๋ ๋ง์ ๊ณ ๊ธ ๋ ์ด์์ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค. ์ธํฐํ์ด์ค ์ค๋ช ์ ์ฑ๋ฅ ํฅ์์ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ํ๋๋ค.
์ฌ์ฉ์ ์ธํฐํ์ด์ค๋ฅผ ์ ์ํ ๋ HTML์ด ํ์ํ์ง ์์ผ๋ฉฐ, ์ธํฐํ์ด์ค ์คํ์ผ์ ์ง์ ํ ๋ CSS๊ฐ ํ์ํ์ง ์๋ค. ์์, ์์ด์ฝ ๋ฐ ๊ธฐํ ์๊ฐ์ ์์ฑ์ ์คํ์ผ์ ์ง์ ํ๊ธฐ ์ํด ๊ฐ๋จํ ๋ชจ์ ํ ๋ง(appearance theme)๊ฐ ์ฌ์ฉ๋๋ฉฐ, ์ด๋ ๋ฐํ์ ์ ํ๋ ์ง์ํ๋ค.
๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ
[ํธ์ง]qooxdoo๋ ์๋ก์ด ํด๋์ค๋ฅผ ์ ์ํ๊ธฐ ์ํด ๋ซํ ํํ(closed form)๋ฅผ ์ฌ์ฉํ๋ค. ์ ์ญ ํด๋์ค ์์ฑ์๋ ๋ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ฐ, ํ๋๋ ์ ํด๋์ค์ ์ด๋ฆ์ด๊ณ ๋ค๋ฅธ ํ๋๋ 'construct'(์์ฑ์ ๋ฉ์๋ ํ ), 'statics'(์ ์ ํด๋์ค ์์ฑ ๋ฐ ๋ฉ์๋์ฉ), 'members'(์ธ์คํด์ค ์์ฑ ๋ฐ ๋ฉ์๋์ฉ), 'destruct'(์๋ฉธ์์ฉ)์ ๊ฐ์ด ๋ฏธ๋ฆฌ ์ ์๋ ํค ์งํฉ์ ๊ฐ์ ์ ๊ณตํ๋ ๋งต์ด๋ค. ์ด (๋๋ก๋ ํฐ) ๋งต์ด ํด๋์ค ์ ์๋ฅผ ๋ํ๋ธ๋ค. ํด๋์ค๋ 'extend' ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ํด๋์ค๋ก๋ถํฐ ์์๋ฐ์ ์ ์๋ค.
๋ค์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณจ๊ฒฉ์ ์ด ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด์ฌ์ค๋ค. ์ด ์ฝ๋๋ ํดํ์ด ์๊ณ ๋๋ ์ ๋ ๊ฒฝ๊ณ ์์๋ฅผ ์ฌ๋ ๋ฒํผ์ด ํฌํจ๋ ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ฑํ๋ค. ์จ๋ผ์ธ ํ๋ ์ด๊ทธ๋ผ์ด๋์์ ์ด ์ฝ๋๋ฅผ ์ง์ ์คํํ๊ณ ํธ์งํ ์๋ ์๋ค:[4]
qx.Class.define("custom.Application",
{
extend : qx.application.Standalone,
members :
{
main : function()
{
this.base(arguments);
// ๋ฒํผ ์์ฑ
var button1 = new qx.ui.form.Button("์ฒซ ๋ฒ์งธ ๋ฒํผ",
"icon/22/apps/internet-web-browser.png");
// Document๋ ์ ํ๋ฆฌ์ผ์ด์
๋ฃจํธ์
var doc = this.getRoot();
// ๊ณ ์ ์ขํ๋ก ๋ฌธ์์ ๋ฒํผ ์ถ๊ฐ
doc.add(button1, {left: 100, top: 50});
// ํดํ ๋ถ์ฐฉ
button1.setToolTip(new qx.ui.tooltip.ToolTip("๋ฉ์ง ํดํ",
"icon/32/status/dialog-information.png"));
// ์ด๋ฒคํธ ๋ฆฌ์ค๋ ์ถ๊ฐ
button1.addListener("execute", function(e) {
alert("Hello World!");
});
}
}
});
์ธํฐํ์ด์ค์ ๋ฏน์ค์ธ๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ์ ์ํ๊ณ ์ฌ์ฉํ๋ค.
Ajax
[ํธ์ง]qooxdoo ํ๋ก์ ํธ๋ ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ฐ ์๋ฒ ๋ ๋ฆฝ์ ์ธ ์๋ฃจ์ ์ด์ง๋ง, ํด๋ผ์ด์ธํธ-์๋ฒ ํต์ ์ ์์ฐํ๊ธฐ ์ํด ์ ํ์ ์ธ RPC ์๋ฒ ๊ตฌํ(ํ์ฌ ์๋ฐ, PHP, ํ, ํ์ด์ฌ)์ ํฌํจํ๊ณ ์๋ค. ์ถ์ ์ ์ก ๊ณ์ธต์ XMLHttpRequest, Iframe ๋ฐ ์คํฌ๋ฆฝํธ๋ฅผ ํตํ ํ, ํ์์์ ๋ฐ ๊ตฌํ์ ์ง์ํ๋ค. qooxdoo์ ๋๋จธ์ง ๋ถ๋ถ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด ๊ณ์ธต์ ๋น๋๊ธฐ ํต์ ์ ๋จ์ํํ๊ธฐ ์ํด ์ด๋ฒคํธ ๊ธฐ๋ฐ ํ๋ก๊ทธ๋๋ฐ์ ์์กดํ๋ค.
๊ฐ์ด ๋ณด๊ธฐ
[ํธ์ง]๊ฐ์ฃผ
[ํธ์ง]- โ โRelease v7.8.0 ยท qooxdoo/qooxdooโ. ใgithub.comใ. 2025๋ 1์ 28์ผ. 2025๋ 4์ 1์ผ์ ํ์ธํจ.
- โ โqooxdoo Requirementsโ. 2010๋ 12์ 19์ผ์ ์๋ณธ ๋ฌธ์์์ ๋ณด์กด๋ ๋ฌธ์. 2011๋ 2์ 2์ผ์ ํ์ธํจ.
- โ โqooxdoo Download pageโ. 2010๋ 12์ 25์ผ์ ์๋ณธ ๋ฌธ์์์ ๋ณด์กด๋ ๋ฌธ์. 2011๋ 2์ 2์ผ์ ํ์ธํจ.
- โ โPlaygroundโ. 2011๋ 2์ 2์ผ์ ํ์ธํจ.