12. ๋ชจ๋ฐ์ผ ์ ์ ๋ฅผ ์ก์๋ผ! ๋ฐ์ํ ์น ๋์์ธ๊ณผ Jinja2 ๋ํ ์ผ์ ์์ฑ
๋ค์ด๊ฐ๋ฉฐ: ๋ด ์น์ฌ์ดํธ, ์ค๋งํธํฐ์ผ๋ก ์ ์ํด ๋ณธ ์ ์์ผ์ ๊ฐ์?
์ง๋ 11ํธ์์ 30์ผ ๊ธฐ๋ฐ์ ๋ญํน ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๊ณ ์๋ฒ ์ฝ๋๊น์ง ์์ ํ๊ฒ ๊นํ๋ธ์ ๋ฐฑ์ ํด ๋์์ต๋๋ค. ์์คํ ์ ์ผ๋ก๋ ์ ๋ฒ ํํํด์ง ๊ฒ ๊ฐ์ ๋ฟ๋ฏํ ๋ง์์, ํด๊ทผ๊ธธ ์งํ์ฒ ์์ ์ค๋งํธํฐ์ ๊บผ๋ด ์ ์น์ฌ์ดํธ์ ์ ์ํด ๋ณด์์ต๋๋ค.
๊ทธ๋ฐ๋ฐ ์ฌ๊ฑธ, ํ๋ฉด์ ๋ณด๋ ์๊ฐ ๊ฒฝ์ ์ ๊ธ์น ๋ชปํ์ต๋๋ค. ๋์ PC ๋ชจ๋ํฐ์ ๋ง์ถฐ ์์๊ฒ ๋ฐฐ์ดํด ๋์๋ ์ธ๋ค์ผ ์ด๋ฏธ์ง๋ค์ด ๋ชจ๋ฐ์ผ์ ์ข์ ํ๋ฉด์์๋ ๊ฐ๋ฏธ๋ง ํ๊ฒ ์ชผ๊ทธ๋ผ๋ค์ด ์์๊ณ , ์๋จ ๋ฉ๋ด๋ฐ๋ ์ค ๋ฐ๊ฟ์ด ๋๋ฉด์ ํ๋ฉด์ ์ ๋ฐ์ ๊ฐ๋ฆฌ๊ณ ์์์ต๋๋ค.
์๋ฌด๋ฆฌ ์๋ฒ๋ฅผ ๋ฌด์ค๋จ์ผ๋ก ํผํผํ๊ฒ ๋๋ฆฌ๊ณ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๊ฐ ๋งํ๊ฒ ์ง๋์๋, ๊ฒฐ๊ตญ ์ ์ ์ 90% ์ด์์ด ์ ์ํ๋ '๋ชจ๋ฐ์ผ ํ๊ฒฝ'์ด ์๋ง์ด๋ผ๋ฉด ์๋ฌด๋ ์ด ์ปค๋ฎค๋ํฐ๋ฅผ ์ด์ฉํ์ง ์์ ๊ฒ์ด ๋ปํ์ต๋๋ค. ์ค๋ ์ด์ผ๊ธฐ๋ ๋ชจ๋ฐ์ผ ์ ์ ์ ๋ง์์ ์ฌ๋ก์ก๊ธฐ ์ํด ๋ฐค์ ์์๊ฐ๋ฉฐ ๋ฏ์ด๊ณ ์น UI/UX(์ฌ์ฉ์ ํ๊ฒฝ ๋ฐ ๊ฒฝํ) ๊ฐ์ ๊ธฐ์ ๋๋ค.
1. PC๋ 2์ด, ๋ชจ๋ฐ์ผ์ 1์ด! CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ(Media Query)์ ๋ง๋ฒ
๊ฐ์ฅ ์๊ธํ ๋ฌธ์ ๋ ์ธ๋ค์ผ ๊ฒ์ํ์ ๋ฐฐ์ด์ด์์ต๋๋ค. ์ธ์คํ๊ทธ๋จ ๊ฐ์ ๋ฏธ๋์ด ์ค์ฌ์ ์ปค๋ฎค๋ํฐ๋ ์ฌ์ง์ด ํผ์งํ๊ณ ์์ํ๊ฒ ๋ณด์ฌ์ผ ์ ๋ง์ ๋๋ค. ํ์ง๋ง ํ๋ฉด์ด ์ข์ ์ค๋งํธํฐ์์ PC์ ๋๊ฐ์ด ์ฌ๋ฌ ์ด๋ก ์ฌ์ง์ ์ฑ์ฌ๋ฃ์ผ๋, ์ฌ์ง ์ ์ธ๋ฌผ์ด ๋๊ตฌ์ธ์ง์กฐ์ฐจ ์์๋ณด๊ธฐ ํ๋ค์์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ ํ ๊ธฐ์ ์ด ๋ฐ๋ก **'๋ฐ์ํ ์น(Responsive Web)'**์ ํต์ฌ์ธ **CSS ๋ฏธ๋์ด ์ฟผ๋ฆฌ(Media Query)**์ ๋๋ค.
<ul><li>๋ฏธ๋์ด ์ฟผ๋ฆฌ๋?: ์ ์ํ ๊ธฐ๊ธฐ์ ํ๋ฉด ๋๋น(Width)๋ฅผ ์ธ์ํด์, PC, ํ๋ธ๋ฆฟ, ์ค๋งํธํฐ ๋ฑ ๊ฐ๊ฐ์ ๊ธฐ๊ธฐ์ ๋ง๋ ๋ณ๋์ ๋์์ธ(CSS)์ ์ ํ์ฃผ๋ ๋ง๋ฒ ๊ฐ์ ๊ธฐ์ ์ ๋๋ค.
</li></ul>์ ๋ CSS ํ์ผ์ <code>@media screen and (max-width: 768px)</code>๋ผ๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ์ต๋๋ค. "ํ๋ฉด ๋๋น๊ฐ 768ํฝ์ ์ดํ(์ค๋งํธํฐ ์ฌ์ด์ฆ)๋ก ์ค์ด๋ค๋ฉด ์ด ๋์์ธ์ ์ ์ฉํด๋ผ!"๋ผ๋ ๋ป์ด์ฃ . ์ด ์กฐ๊ฑด๋ฌธ ์์, ์ค๋งํธํฐ์์๋ ์ฌ์ง์ด ํ๋ฉด ๊ฐ๋ก๋ฅผ ๊ฝ ์ฑ์ฐ๋๋ก '๋ชจ๋ฐ์ผ 1์ด(1 Column)' ๋ฐฐ์น๋ฅผ ์ง์ํ์ต๋๋ค. ๋ฐ๋๋ก ๋์ ๋ชจ๋ํฐ์์๋ ์ฌ์ง์ด ๋๋ฌด ๊ฑฐ๋ํด์ง๋ ๊ฒ์ ๋ง๊ธฐ ์ํด **'PC 2์ด(2 Columns)'**๋ก ๋๋ํ ๋ณด์ด๋๋ก ๊ทธ๋ฆฌ๋(Grid)๋ฅผ ์ธํ ํ์ต๋๋ค.
์ฝ๋๋ฅผ ์๋ฒ์ ์ฌ๋ฆฌ๊ณ PC ๋ธ๋ผ์ฐ์ ์ฐฝ์ ํฌ๊ธฐ๋ฅผ ๋ง์ฐ์ค๋ก ์ก๊ณ ์ค์ฌ๋ณด์์ต๋๋ค. ํน์ ํฌ๊ธฐ ์ดํ๋ก ์ฐฝ์ด ์ข์์ง๋ ์๊ฐ, ๋๋ํ ์๋ 2๊ฐ์ ์ฌ์ง์ด ์ค๋ฅด๋ฅต ํ๊ณ ์ธ๋ก 1์ค๋ก ์์๊ฒ ์ฌ๋ฐฐ์น๋๋ ๊ฒ์ ๋ณด๋ฉฐ "์ด๊ฒ ์ง์ง ์น ๋์์ธ์ด๊ตฌ๋!" ํ๋ ์ง๋ฆฟํจ์ ๋๊ผ์ต๋๋ค.
2. ์ฑ(App)์ฒ๋ผ ๋งค๋๋ฝ๊ฒ, ๋ชจ๋ฐ์ผ ๊ฐ๋ก ์ค์์ดํ ๋ค๋น๊ฒ์ด์ ๋ฐ
๊ฒ์๊ธ ๋ฐฐ์น๋ฅผ ํด๊ฒฐํ๊ณ ๋๋, ์ด๋ฒ์ ํ๋ฉด ์๋จ์ **๋ค๋น๊ฒ์ด์ ๋ฐ(๋ฉ๋ด๋ฐ)**๊ฐ ๊ฑฐ์ฌ๋ ธ์ต๋๋ค. ์์ ๊ฒ์ํ, ์์ด๋ ์ฌ์ง ๊ฒ์ํ, ๋ญํน ๋ณด๋ ๋ฑ ๋ฉ๋ด ๊ฐ์๊ฐ ๋์ด๋๋ค ๋ณด๋ ๋ชจ๋ฐ์ผ ํ๋ฉด์์๋ ์ด ๋ฉ๋ด๋ค์ด ๋ ์ค, ์ธ ์ค๋ก ๋ฐ๋ ค ๋ด๋ ค์ ๋ฒ๋ ธ์ต๋๋ค. ํ๋ฉด์ ์คํฌ๋กคํ๊ธฐ๋ ์ ์ ๋ฉ๋ด๊ฐ ๊ณต๊ฐ์ ๋ค ์ฐจ์งํด ๋ฒ๋ฆฌ๋ ์ฌ๊ฐ ๋ต๋ตํ ๊ฒ ์๋์์ต๋๋ค.
"์์ฆ ๋์ค๋ ๋ชจ๋ฐ์ผ ์ฑ๋ค์ฒ๋ผ, ๋ฉ๋ด๋ฅผ ํ ์ค๋ก ๊ธธ๊ฒ ๋์ด๋จ๋ฆฌ๊ณ ์๊ฐ๋ฝ์ผ๋ก ์์ผ๋ก ์ฅ์ฅ ๋ฐ์ด์(์ค์์ดํ) ๋ณผ ์๋ ์์๊น?"
์ด ์ญ์ CSS์ ํ์ผ๋ก ๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์์์ต๋๋ค. ๋ฉ๋ด๋ฅผ ๊ฐ์ธ๊ณ ์๋ ๋ฐ์ค์ <code>white-space: nowrap;</code>์ ์ฃผ์ด ๊ธ์จ๊ฐ ๋ฐ์ผ๋ก ์ค ๋ฐ๊ฟ ๋๋ ๊ฒ์ ๊ฐ์ ๋ก ๋ง์๋ฒ๋ ธ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์์ ธ๋๊ฐ ๋ฉ๋ด๋ค์ <code>overflow-x: auto;</code> ์์ฑ์ ์ฃผ์ด ๊ฐ๋ก๋ก ์คํฌ๋กค์ด ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์์ฃ . ์ฌ๊ธฐ์ ์คํฌ๋กค๋ฐ๊ฐ ๋ณด์ด๋ฉด ๋ชป์๊ฒจ ๋ณด์ด๋๊น <code>::-webkit-scrollbar { display: none; }</code>์ ์ถ๊ฐํด ์คํฌ๋กค๋ฐ๋ฅผ ํฌ๋ช ํ๊ฒ ์จ๊ฒจ๋ฒ๋ ธ์ต๋๋ค.
์ค๋งํธํฐ์ผ๋ก ์ ์ํด ์๋จ ๋ฉ๋ด๋ฅผ ์๊ฐ๋ฝ์ผ๋ก ๋ถ๋๋ฝ๊ฒ ์ข์ฐ๋ก ๋ฐ์ด๋ณด๋ ์๊ฐ, ์ ์น์ฌ์ดํธ๊ฐ ๋จ์ํ ์นํ์ด์ง๋ฅผ ๋์ด ์ง์ง ๋ค์ดํฐ๋ธ '์ดํ๋ฆฌ์ผ์ด์ '์ ํ ๋ฐ์ง ๋ค๊ฐ์ ๊ฒ ๊ฐ์ ๊ณ ๊ธ์ค๋ฌ์์ด ๋๊ปด์ก์ต๋๋ค.
3. ์ฒ ํต ๋ณด์ ๋ญํน ๋ณด๋: Jinja2 ์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ธ์ฐ๊ธฐ ๋ฒํผ ์จ๊ธฐ๊ธฐ
๋์์ธ์ ์์๊ฒ ๋ค๋ฌ๊ณ ๋๋, ์ด๋ฒ์ ๋ ผ๋ฆฌ์ ์ธ(Logic) ํ์ ์ด ํ๋ ๋์ ๋์์ต๋๋ค. ์ ์ปค๋ฎค๋ํฐ์๋ ์ ์ ๋ค์ ์ถ์ฒ์์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์๋์ผ๋ก ์์๊ฐ ๋งค๊ฒจ์ง๋ '๋ญํน ๋ณด๋(๋ช ์์ ์ ๋น)' ๊ฒ์ํ์ด ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด ๋ญํน ๋ณด๋ ํ์ด์ง ์ฐ์ธก ํ๋จ์ ๋ฒ์ ์ด [๊ธ์ฐ๊ธฐ] ๋ฒํผ์ด ํ์ฑํ๋์ด ์๋ ๊ฒ์ด ์๋๊ฒ ์ต๋๊น?
๋ญํน ๋ณด๋๋ ์์คํ ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋๋ ค ๊ธฐ์กด ๊ฒ์๊ธ๋ค์ ์ง์ดํด ์ฃผ๋ ์ ์๊ด ๊ฐ์ ๊ณณ์ ๋๋ค. ์ ์ ๊ฐ ์ด ๊ฒ์ํ์ ์ง์ ๋ค์ด๋ ํธ๋ก ์ ๊ธ์ ์์ฑํ๋ค๋ ๊ฒ์ ๋ ผ๋ฆฌ์ ์ผ๋ก ๋ง์ด ์ ๋๋ ์ํฉ์ด์์ฃ . ํ์ง๋ง [๊ธ์ฐ๊ธฐ] ๋ฒํผ์ ์ฌ์ดํธ์ ๊ธฐ๋ณธ ๋ผ๋(Base Template)์ ๋ฐํ์์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๊ฒ์ํ์์ ๊ณตํต์ผ๋ก ์ถ๋ ฅ๋๊ณ ์์์ต๋๋ค.
์ด ๋ฒํผ์ ํน์ ๊ฒ์ํ์์๋ง ์ ๋ณด์ด๊ฒ ํ๋ ค๋ฉด ํ์ด์ฌ ๋ฐฑ์๋์ HTML ํ๋ก ํธ์๋๋ฅผ ์ฐ๊ฒฐํด ์ฃผ๋ Jinja2(์ง์2) ํ ํ๋ฆฟ์ ์กฐ๊ฑด๋ฌธ์ด ํ์ํ์ต๋๋ค.
์ ๋ HTML ์ฝ๋์ ๊ธ์ฐ๊ธฐ ๋ฒํผ ํ๊ทธ ์ฃผ๋ณ์ ๋ค์๊ณผ ๊ฐ์ Jinja2 ๋ฌธ๋ฒ์ผ๋ก ๊ฐ์์ต๋๋ค. <code>{% if board_name != 'ranking' %}</code> <code><button>๊ธ์ฐ๊ธฐ</button></code> <code>{% endif %}</code>
ํด์ํ์๋ฉด **"ํ์ฌ ์ ์ํ ๊ฒ์ํ์ ์ด๋ฆ์ด 'ranking(๋ญํน ๋ณด๋)'์ด ์๋ ๋๋ง ๊ธ์ฐ๊ธฐ ๋ฒํผ์ ํ๋ฉด์ ๊ทธ๋ ค๋ผ!"**๋ผ๋ ๋ป์ ๋๋ค. ์ฝ๋๋ฅผ ์ ์ฉํ๊ณ ๋ญํน ๋ณด๋์ ๋ค์ด๊ฐ ๋ณด๋, ๋์ ๊ฐ์ ๊ฐ์๋ ๊ธ์ฐ๊ธฐ ๋ฒํผ์ด ๋ง๋ฒ์ฒ๋ผ ์น ์ฌ๋ผ์ก์ต๋๋ค. ๋ฐ๋๋ก ์์ ๊ฒ์ํ์ด๋ ์ผ๋ฐ ์ฌ์ง ๊ฒ์ํ์ผ๋ก ์ด๋ํ๋ฉด ๋ฒํผ์ด ๋ค์ ์ ์์ ์ผ๋ก ๋ํ๋ฌ๊ณ ์.
ํ๋ก ํธ์๋์ ๋์์ธ(CSS)๊ณผ ๋ฐฑ์๋์ ๋ ผ๋ฆฌ(Jinja2)๋ฅผ ์์ ์์ฌ๋ก ๋ค๋ฃจ๋ฉฐ ์ฌ์ดํธ์ ๋ํ ์ผ์ ํต์ ํ๋ ๋ฒ์ ๋ฐฐ์ฐ๊ฒ ๋ ๊ฐ์ง ๊ฒฝํ์ด์์ต๋๋ค.
๋ง์น๋ฉฐ: ๋ชจ๋ฐ์ผ๊น์ง ์ฑ๊ธด ์์ฑ๋ ๋์ ์ปค๋ฎค๋ํฐ์ ํ์
์ค๋งํธํฐ ํ ์์ผ๋ก ์ฅ์ฅ ๋ฉ๋ด๋ฅผ ์ค์์ดํํ๊ณ , ์ธ๋ก๋ก ์์ํ๊ฒ ๋ป์ 1์ด ์ธ๋ค์ผ์ ๊ฐ์ํ๋ฉฐ, ๋ญํน ๋ณด๋์์๋ ๊น๋ํ๊ฒ ์ ์๋ ์ธ๊ธฐ ๊ธ๋ง ์๋นํ ์ ์๋ ํ๊ฒฝ. ๋๋์ด ์ ๊ฐ ๊ธฐํํ๋ ์ธ์คํ๊ทธ๋จ ์คํ์ผ์ ๋ฏธ๋์ด ์ปค๋ฎค๋ํฐ๊ฐ PC์ ๋ชจ๋ฐ์ผ์ ๊ฐ๋ฆฌ์ง ์๊ณ ์๋ฒฝํ ๋ชจ์ต์ ๊ฐ์ถ๊ฒ ๋์์ต๋๋ค. ๋์ ๋ณด์ด๋ ๋ํ ์ผ๋ค์ ํ๋ํ๋ ์ก์๋๊ฐ๋ค ๋ณด๋ ์น ๊ฐ๋ฐ์ด ์ดํ ๋ก ์ฌ๋ฐ๋ ๊ฒ์ด์๋ ์์ผ ๊ฐํํ๊ฒ ๋ฉ๋๋ค.
์ง๋ํธ ๋ณด๋ฌ๊ฐ๊ธฐ: 11. ํญ์ ๋ง๋ค๊ณ ๋๋ฉด ์กฐ๊ธ์ฉ ์์ฝ๋ค: ๊ณ์๋๋ ๋ค๋ฌ๊ธฐ
๋ค์ํธ ๋ณด๋ฌ๊ฐ๊ธฐ: 13. ์๋ฒฝํ ์ปค๋ฎค๋ํฐ๋ฅผ ์ํ ๊ด๋ฆฌ์์ ๊ณ ๊ตฐ๋ถํฌ: OpenCV ์ธ๋ค์ผ๊ณผ ์๋ฌ ๋์ฒ๋ฒ
๐ฌ ๋๊ธ 0๊ฐ