<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://bigforest.a2hosted.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cerulean</id>
	<title>큰숲백과 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://bigforest.a2hosted.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cerulean"/>
	<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Cerulean"/>
	<updated>2026-04-19T14:32:39Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.41.1</generator>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89491</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89491"/>
		<updated>2025-08-07T06:11:44Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 완성&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    document.querySelectorAll('.arrow-dataset').forEach((element) =&amp;gt; {&lt;br /&gt;
        const arrowBox = element.parentElement;&lt;br /&gt;
        const arrowPoint = element.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        const errorMsg = (message) =&amp;gt; {&lt;br /&gt;
            arrowBox.outerHTML = `&amp;lt;span&amp;gt;${message}&amp;lt;/span&amp;gt;`;&lt;br /&gt;
            console.log(message, element);&lt;br /&gt;
        };&lt;br /&gt;
        const dataSet = element.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.length = Number(dataSet.length);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        if (Number.isNaN(data.length)) {&lt;br /&gt;
            errorMsg(`length is not a number`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (Number.isNaN(data.thick)) {&lt;br /&gt;
            errorMsg(`thick is not a number`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (Number.isNaN(data.pointLength)) {&lt;br /&gt;
            errorMsg(`pointLength is not a number`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (Number.isNaN(data.pointDeg)) {&lt;br /&gt;
            errorMsg(`pointDeg is not a number`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (!['left', 'right', 'up', 'down'].includes(data.direction)) {&lt;br /&gt;
            errorMsg(`direction is invalid`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if (!['left', 'right', 'both'].includes(data.pointDirection)) {&lt;br /&gt;
            errorMsg(`pointDirection is invalid`);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89490</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89490"/>
		<updated>2025-08-07T05:47:41Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;use strict&amp;quot;;&lt;br /&gt;
{&lt;br /&gt;
    const arrowArray = document.getElementsByClassName('arrow-dataset');&lt;br /&gt;
    for (const arrowElement of arrowArray) {&lt;br /&gt;
        const data = Object.create(arrowElement.dataset);&lt;br /&gt;
        data.thick = Number(data.thick);&lt;br /&gt;
        data.pointLength = Number(data.pointLength);&lt;br /&gt;
        data.pointDeg = Number(data.pointDeg);&lt;br /&gt;
        const arrowBox = arrowElement.parentElement;&lt;br /&gt;
        const arrowPoint = arrowElement.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.background =&lt;br /&gt;
            arrowPoint.style.borderColor =&lt;br /&gt;
                arrowShaft.style.background =&lt;br /&gt;
                    arrowShaft.style.borderColor =&lt;br /&gt;
                        data.color;&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.height = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : &amp;quot;&amp;quot;;&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89489</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89489"/>
		<updated>2025-08-07T05:46:20Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    document.querySelectorAll('.arrow-dataset').forEach((element) =&amp;gt; {&lt;br /&gt;
        const error = (isError, message) =&amp;gt; {&lt;br /&gt;
            if (isError &amp;amp;&amp;amp; element.parentElement) {&lt;br /&gt;
                element.parentElement.outerHTML = `&amp;lt;span&amp;gt;${message}&amp;lt;/span&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        const dataSet = element.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.length = Number(dataSet.length);&lt;br /&gt;
        error(Number.isNaN(data.length), `length is not a number`);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        error(Number.isNaN(data.thick), `thick is not a number`);&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        error(Number.isNaN(data.pointLength), `pointLength is not a number`);&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        error(Number.isNaN(data.pointDeg), `pointDeg is not a number`);&lt;br /&gt;
        error(!['left', 'right', 'up', 'down'].includes(data.direction), `direction is invalid`);&lt;br /&gt;
        error(!['left', 'right', 'both'].includes(data.direction), `pointDirection is invalid`);&lt;br /&gt;
        const arrowBox = element.parentElement;&lt;br /&gt;
        const arrowPoint = element.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89488</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89488"/>
		<updated>2025-08-07T05:43:12Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    document.querySelectorAll('.arrow-dataset').forEach((element) =&amp;gt; {&lt;br /&gt;
        const error = (isError, message) =&amp;gt; {&lt;br /&gt;
            if (isError) {&lt;br /&gt;
                element.parentElement.outerHTML = `&amp;lt;span&amp;gt;${message}&amp;lt;/span&amp;gt;`;&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        const dataSet = element.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.length = Number(dataSet.length);&lt;br /&gt;
        error(Number.isNaN(data.length), `length is not a number`);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        error(Number.isNaN(data.thick), `thick is not a number`);&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        error(Number.isNaN(data.pointLength), `pointLength is not a number`);&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        error(Number.isNaN(data.pointDeg), `pointDeg is not a number`);&lt;br /&gt;
        error(!['left', 'right', 'up', 'down'].includes(data.direction), `direction is invalid`);&lt;br /&gt;
        error(!['left', 'right', 'both'].includes(data.direction), `pointDirection is invalid`);&lt;br /&gt;
        const arrowBox = element.parentElement;&lt;br /&gt;
        const arrowPoint = element.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89487</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89487"/>
		<updated>2025-08-07T05:41:32Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    document.querySelectorAll('.arrow-dataset').forEach((element) =&amp;gt; {&lt;br /&gt;
        const error = (isError, message) =&amp;gt; {&lt;br /&gt;
            if (isError) {&lt;br /&gt;
                element.parentElement.outerHTML = `&amp;lt;span&amp;gt;${message}&amp;lt;/span&amp;gt;`;&lt;br /&gt;
                throw new Error(message);&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        const dataSet = element.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.length = Number(dataSet.length);&lt;br /&gt;
        error(Number.isNaN(data.length), `length is not a number`);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        error(Number.isNaN(data.thick), `thick is not a number`);&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        error(Number.isNaN(data.pointLength), `pointLength is not a number`);&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        error(Number.isNaN(data.pointDeg), `pointDeg is not a number`);&lt;br /&gt;
        error(!['left', 'right', 'up', 'down'].includes(data.direction), `direction is invalid`);&lt;br /&gt;
        error(!['left', 'right', 'both'].includes(data.direction), `pointDirection is invalid`);&lt;br /&gt;
        const arrowBox = element.parentElement;&lt;br /&gt;
        const arrowPoint = element.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89486</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89486"/>
		<updated>2025-08-07T05:39:29Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    document.querySelectorAll('.arrow-dataset').forEach((element) =&amp;gt; {&lt;br /&gt;
        const error = (isError, message) =&amp;gt; {&lt;br /&gt;
            if (isError) {&lt;br /&gt;
                element.outerHTML = message;&lt;br /&gt;
                throw new Error(message);&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        const dataSet = element.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.length = Number(dataSet.length);&lt;br /&gt;
        error(Number.isNaN(data.length), `length is not a number`);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        error(Number.isNaN(data.thick), `thick is not a number`);&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        error(Number.isNaN(data.pointLength), `pointLength is not a number`);&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        error(Number.isNaN(data.pointDeg), `pointDeg is not a number`);&lt;br /&gt;
        error(!['left', 'right', 'up', 'down'].includes(data.direction), `direction is invalid`);&lt;br /&gt;
        error(!['left', 'right', 'both'].includes(data.direction), `pointDirection is invalid`);&lt;br /&gt;
        const arrowBox = element.parentElement;&lt;br /&gt;
        const arrowPoint = element.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89485</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89485"/>
		<updated>2025-08-07T05:37:27Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 오류 처리&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    document.querySelectorAll('.arrow-dataset').forEach((element) =&amp;gt; {&lt;br /&gt;
        const error = (isError, message) =&amp;gt; {&lt;br /&gt;
            if (isError) {&lt;br /&gt;
                element.innerHTML = message;&lt;br /&gt;
                throw new Error(message);&lt;br /&gt;
            }&lt;br /&gt;
        };&lt;br /&gt;
        const dataSet = element.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.length = Number(dataSet.length);&lt;br /&gt;
        error(Number.isNaN(data.length), `length is not a number`);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        error(Number.isNaN(data.thick), `thick is not a number`);&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        error(Number.isNaN(data.pointLength), `pointLength is not a number`);&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        error(Number.isNaN(data.pointDeg), `pointDeg is not a number`);&lt;br /&gt;
        error(!['left', 'right', 'up', 'down'].includes(data.direction), `direction is invalid`);&lt;br /&gt;
        error(!['left', 'right', 'both'].includes(data.direction), `pointDirection is invalid`);&lt;br /&gt;
        const arrowBox = element.parentElement;&lt;br /&gt;
        const arrowPoint = element.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    });&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89484</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89484"/>
		<updated>2025-08-07T05:05:54Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    const arrowArray = document.getElementsByClassName('arrow-dataset');&lt;br /&gt;
    for (const arrowElement of arrowArray) {&lt;br /&gt;
        const dataSet = arrowElement.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        if (Number.isNaN(data.thick)) {&lt;br /&gt;
            arrowElement.innerHTML = `thick is not a number`;&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        if (Number.isNaN(data.pointLength)) {&lt;br /&gt;
            arrowElement.innerHTML = `pointLength is not a number`;&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        if (Number.isNaN(data.pointDeg)) {&lt;br /&gt;
            arrowElement.innerHTML = `pointDeg is not a number`;&lt;br /&gt;
            continue;&lt;br /&gt;
        }&lt;br /&gt;
        const arrowBox = arrowElement.parentElement;&lt;br /&gt;
        const arrowPoint = arrowElement.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89483</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89483"/>
		<updated>2025-08-07T05:04:06Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 오류 처리&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;// [[틀:반응형 화살표]]&lt;br /&gt;
{&lt;br /&gt;
    const arrowArray = document.getElementsByClassName('arrow-dataset');&lt;br /&gt;
    for (const arrowElement of arrowArray) {&lt;br /&gt;
        const dataSet = arrowElement.dataset;&lt;br /&gt;
        const data = Object.create(dataSet);&lt;br /&gt;
        data.thick = Number(dataSet.thick);&lt;br /&gt;
        if (Number.isNaN(data.thick)) {&lt;br /&gt;
            arrowElement.innerHTML = `thick is not a number`;&lt;br /&gt;
        }&lt;br /&gt;
        data.pointLength = Number(dataSet.pointLength);&lt;br /&gt;
        if (Number.isNaN(data.pointLength)) {&lt;br /&gt;
            arrowElement.innerHTML = `pointLength is not a number`;&lt;br /&gt;
        }&lt;br /&gt;
        data.pointDeg = Number(dataSet.pointDeg);&lt;br /&gt;
        if (Number.isNaN(data.pointDeg)) {&lt;br /&gt;
            arrowElement.innerHTML = `pointDeg is not a number`;&lt;br /&gt;
        }&lt;br /&gt;
        const arrowBox = arrowElement.parentElement;&lt;br /&gt;
        const arrowPoint = arrowElement.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        if (data.color)&lt;br /&gt;
            arrowPoint.style.background =&lt;br /&gt;
                arrowPoint.style.borderColor =&lt;br /&gt;
                    arrowShaft.style.background =&lt;br /&gt;
                        arrowShaft.style.borderColor =&lt;br /&gt;
                            data.color;&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowBox.style.alignItems =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-start' : 'flex-end';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowBox.style.justifyContent =&lt;br /&gt;
                    data.pointDirection === 'right' ? 'flex-end' : 'flex-start';&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = '0px';&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowPoint.style.height = '0px';&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = '0px';&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : '';&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = '0px';&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = '0px';&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%ED%8B%80:%EB%B0%98%EC%9D%91%ED%98%95_%ED%99%94%EC%82%B4%ED%91%9C&amp;diff=89482</id>
		<title>틀:반응형 화살표</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%ED%8B%80:%EB%B0%98%EC%9D%91%ED%98%95_%ED%99%94%EC%82%B4%ED%91%9C&amp;diff=89482"/>
		<updated>2025-08-07T05:03:39Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;div class=&amp;quot;responsive-arrow&amp;quot; style=&amp;quot;display: flex; position: relative;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;arrow-dataset&amp;quot;&lt;br /&gt;
data-direction=&amp;quot;{{#if:{{{direction|}}}|{{{direction}}}|left}}&amp;quot;&lt;br /&gt;
data-thick=&amp;quot;{{#if:{{{thick|}}}|{{{thick}}}|5}}&amp;quot;&lt;br /&gt;
data-length=&amp;quot;{{#if:{{{length|}}}|{{{length}}}}}&amp;quot;&lt;br /&gt;
data-color=&amp;quot;{{#if:{{{color|}}}|{{{color}}}|black}}&amp;quot;&lt;br /&gt;
data-point-direction=&amp;quot;{{#if:{{{point-direction|}}}|{{{point-direction}}}|right}}&amp;quot;&lt;br /&gt;
data-point-deg=&amp;quot;{{#if:{{{point-deg|}}}|{{{point-deg}}}|30}}&amp;quot;&lt;br /&gt;
data-point-length=&amp;quot;{{#if:{{{point-length|}}}|{{{point-length}}}|48}}&amp;quot;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;arrow-point&amp;quot; style=&amp;quot;border: 1px solid; box-sizing: border-box;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;arrow-shaft&amp;quot; style=&amp;quot;border: 1px solid;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
화면 너비에 따라 반응하는 화살표 틀.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|{{반응형 화살표|direction=up|point-direction=left|length=}}&lt;br /&gt;
|{{반응형 화살표|direction=up|point-direction=both}}&lt;br /&gt;
|{{반응형 화살표|direction=up}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{반응형 화살표|length=100|point-length=|direction=}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; rowspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|{{반응형 화살표|direction=right|point-direction=left|length=|thick=2}}&lt;br /&gt;
|-&lt;br /&gt;
|{{반응형 화살표|direction=left|point-direction=both}}&lt;br /&gt;
|{{반응형 화살표|direction=right|point-direction=both|point-length=30|thick=2}}&lt;br /&gt;
|-&lt;br /&gt;
|{{반응형 화살표|direction=left|point-direction=left}}&lt;br /&gt;
|{{반응형 화살표|direction=right|point-direction=right|length=100|thick=1}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|{{반응형 화살표|direction=down|point-direction=right|thick=4}}&lt;br /&gt;
|{{반응형 화살표|direction=down|point-direction=both}}&lt;br /&gt;
|{{반응형 화살표|direction=down|point-direction=left|length=100|thick=3}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
잘못된 사용&lt;br /&gt;
{{반응형 화살표|direction=down|point-direction=left|length=100px|thick=3px}}&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{반응형 화살표|direction=down|point-direction=left|length=100px|thick=3px}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;direction&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살표 방향&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;up&amp;quot;,&lt;br /&gt;
				&amp;quot;down&amp;quot;,&lt;br /&gt;
				&amp;quot;left&amp;quot;,&lt;br /&gt;
				&amp;quot;right&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;left&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;thick&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;선 두께&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;length&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;선 길이, 비우면 100% 채우기 입니다.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;color&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살표 색상&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;red&amp;quot;,&lt;br /&gt;
				&amp;quot;#000&amp;quot;,&lt;br /&gt;
				&amp;quot;#eee&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;black&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;point-direction&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살촉 위치, 진행 방향을 기준으로 화살촉 모양을 지정합니다.&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;left&amp;quot;,&lt;br /&gt;
				&amp;quot;right&amp;quot;,&lt;br /&gt;
				&amp;quot;both&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;point-deg&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살촉과 화살대의 각도를 지정합니다. 90도 미만만 지정할 수 있습니다.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;30, 60, 88&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;30&amp;quot;,&lt;br /&gt;
				&amp;quot;60&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;point-length&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살촉 길이&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;48, 5, 10, 20&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;48&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%ED%8B%80:%EB%B0%98%EC%9D%91%ED%98%95_%ED%99%94%EC%82%B4%ED%91%9C&amp;diff=89481</id>
		<title>틀:반응형 화살표</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%ED%8B%80:%EB%B0%98%EC%9D%91%ED%98%95_%ED%99%94%EC%82%B4%ED%91%9C&amp;diff=89481"/>
		<updated>2025-08-07T04:34:29Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;onlyinclude&amp;gt;&amp;lt;div class=&amp;quot;responsive-arrow&amp;quot; style=&amp;quot;display: flex; position: relative;&amp;quot;&amp;gt;&amp;lt;div class=&amp;quot;arrow-dataset&amp;quot;&lt;br /&gt;
data-direction=&amp;quot;{{#if:{{{direction|}}}|{{{direction}}}|left}}&amp;quot;&lt;br /&gt;
data-thick=&amp;quot;{{#if:{{{thick|}}}|{{{thick}}}|5}}&amp;quot;&lt;br /&gt;
data-length=&amp;quot;{{#if:{{{length|}}}|{{{length}}}}}&amp;quot;&lt;br /&gt;
data-color=&amp;quot;{{#if:{{{color|}}}|{{{color}}}|black}}&amp;quot;&lt;br /&gt;
data-point-direction=&amp;quot;{{#if:{{{point-direction|}}}|{{{point-direction}}}|right}}&amp;quot;&lt;br /&gt;
data-point-deg=&amp;quot;{{#if:{{{point-deg|}}}|{{{point-deg}}}|30}}&amp;quot;&lt;br /&gt;
data-point-length=&amp;quot;{{#if:{{{point-length|}}}|{{{point-length}}}|48}}&amp;quot;&lt;br /&gt;
&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;arrow-point&amp;quot; style=&amp;quot;border: 1px solid; box-sizing: border-box;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div class=&amp;quot;arrow-shaft&amp;quot; style=&amp;quot;border: 1px solid;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
화면 너비에 따라 반응하는 화살표 틀.&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|{{반응형 화살표|direction=up|point-direction=left|length=}}&lt;br /&gt;
|{{반응형 화살표|direction=up|point-direction=both}}&lt;br /&gt;
|{{반응형 화살표|direction=up}}&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|{{반응형 화살표|length=100|point-length=|direction=}}&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; rowspan=&amp;quot;3&amp;quot; |&lt;br /&gt;
|{{반응형 화살표|direction=right|point-direction=left|length=|thick=2}}&lt;br /&gt;
|-&lt;br /&gt;
|{{반응형 화살표|direction=left|point-direction=both}}&lt;br /&gt;
|{{반응형 화살표|direction=right|point-direction=both|point-length=30|thick=2}}&lt;br /&gt;
|-&lt;br /&gt;
|{{반응형 화살표|direction=left|point-direction=left}}&lt;br /&gt;
|{{반응형 화살표|direction=right|point-direction=right|length=100|thick=1}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|{{반응형 화살표|direction=down|point-direction=right|thick=4}}&lt;br /&gt;
|{{반응형 화살표|direction=down|point-direction=both}}&lt;br /&gt;
|{{반응형 화살표|direction=down|point-direction=left|length=100|thick=3}}&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&amp;lt;templatedata&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;params&amp;quot;: {&lt;br /&gt;
		&amp;quot;direction&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살표 방향&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;up&amp;quot;,&lt;br /&gt;
				&amp;quot;down&amp;quot;,&lt;br /&gt;
				&amp;quot;left&amp;quot;,&lt;br /&gt;
				&amp;quot;right&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;left&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;thick&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;선 두께&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;5&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;length&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;선 길이, 비우면 100% 채우기 입니다.&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;color&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살표 색상&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;red&amp;quot;,&lt;br /&gt;
				&amp;quot;#000&amp;quot;,&lt;br /&gt;
				&amp;quot;#eee&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;black&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;point-direction&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살촉 위치, 진행 방향을 기준으로 화살촉 모양을 지정합니다.&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;left&amp;quot;,&lt;br /&gt;
				&amp;quot;right&amp;quot;,&lt;br /&gt;
				&amp;quot;both&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;point-deg&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살촉과 화살대의 각도를 지정합니다. 90도 미만만 지정할 수 있습니다.&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;30, 60, 88&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;string&amp;quot;,&lt;br /&gt;
			&amp;quot;suggestedvalues&amp;quot;: [&lt;br /&gt;
				&amp;quot;30&amp;quot;,&lt;br /&gt;
				&amp;quot;60&amp;quot;&lt;br /&gt;
			],&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		},&lt;br /&gt;
		&amp;quot;point-length&amp;quot;: {&lt;br /&gt;
			&amp;quot;description&amp;quot;: &amp;quot;화살촉 길이&amp;quot;,&lt;br /&gt;
			&amp;quot;example&amp;quot;: &amp;quot;48, 5, 10, 20&amp;quot;,&lt;br /&gt;
			&amp;quot;type&amp;quot;: &amp;quot;number&amp;quot;,&lt;br /&gt;
			&amp;quot;default&amp;quot;: &amp;quot;48&amp;quot;,&lt;br /&gt;
			&amp;quot;suggested&amp;quot;: true&lt;br /&gt;
		}&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;format&amp;quot;: &amp;quot;inline&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/templatedata&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89480</id>
		<title>미디어위키:Responsive-arrow.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Responsive-arrow.js&amp;diff=89480"/>
		<updated>2025-08-07T04:31:03Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 테스트 (빌드 시스템)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;use strict&amp;quot;;&lt;br /&gt;
{&lt;br /&gt;
    const arrowArray = document.getElementsByClassName('arrow-dataset');&lt;br /&gt;
    for (const arrowElement of arrowArray) {&lt;br /&gt;
        const data = Object.create(arrowElement.dataset);&lt;br /&gt;
        data.thick = Number(data.thick);&lt;br /&gt;
        data.pointLength = Number(data.pointLength);&lt;br /&gt;
        data.pointDeg = Number(data.pointDeg);&lt;br /&gt;
        const arrowBox = arrowElement.parentElement;&lt;br /&gt;
        const arrowPoint = arrowElement.nextElementSibling;&lt;br /&gt;
        const arrowShaft = arrowPoint.nextElementSibling;&lt;br /&gt;
        arrowPoint.style.borderWidth =&lt;br /&gt;
            arrowShaft.style.borderWidth = `${data.thick}px`;&lt;br /&gt;
        arrowPoint.style.position = arrowShaft.style.position = 'absolute';&lt;br /&gt;
        arrowPoint.style.borderRadius = arrowShaft.style.borderRadius = '100px';&lt;br /&gt;
        arrowPoint.style.background =&lt;br /&gt;
            arrowPoint.style.borderColor =&lt;br /&gt;
                arrowShaft.style.background =&lt;br /&gt;
                    arrowShaft.style.borderColor =&lt;br /&gt;
                        data.color;&lt;br /&gt;
        arrowPoint.style.transformBox = 'fill-box';&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'left';&lt;br /&gt;
                arrowPoint.style.left = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.alignItems = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'right';&lt;br /&gt;
                arrowPoint.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'top';&lt;br /&gt;
                arrowPoint.style.top = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'down':&lt;br /&gt;
                if (data.pointDirection === 'right') {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-end';&lt;br /&gt;
                }&lt;br /&gt;
                else {&lt;br /&gt;
                    arrowBox.style.justifyContent = 'flex-start';&lt;br /&gt;
                }&lt;br /&gt;
                arrowPoint.style.transformOrigin = 'bottom';&lt;br /&gt;
                arrowPoint.style.bottom = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            default:&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.direction) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.height = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                arrowPoint.style.width = `${data.pointLength}px`;&lt;br /&gt;
                arrowBox.style.minHeight = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.width = data.length ? `${data.length}px` : &amp;quot;&amp;quot;;&lt;br /&gt;
                arrowShaft.style.left = arrowShaft.style.right = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'up':&lt;br /&gt;
            case 'down':&lt;br /&gt;
                arrowPoint.style.width = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                arrowPoint.style.height = `${data.pointLength}px`;&lt;br /&gt;
                arrowBox.style.minWidth = `${data.pointLength *&lt;br /&gt;
                    Math.sin((data.pointDeg * Math.PI) / 180) *&lt;br /&gt;
                    (data.pointDirection === 'both' ? 2 : 1) +&lt;br /&gt;
                    data.thick +&lt;br /&gt;
                    1}px`;&lt;br /&gt;
                arrowBox.style.height = `${data.length || 100}px`;&lt;br /&gt;
                arrowShaft.style.top = arrowShaft.style.bottom = &amp;quot;0px&amp;quot;;&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        switch (data.pointDirection) {&lt;br /&gt;
            case 'left':&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'right':&lt;br /&gt;
                arrowPoint.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                break;&lt;br /&gt;
            case 'both': {&lt;br /&gt;
                arrowPoint.style.rotate = `${data.pointDeg}deg`;&lt;br /&gt;
                const arrowPoint2 = arrowPoint.cloneNode(true);&lt;br /&gt;
                arrowPoint2.style.rotate = `${-data.pointDeg}deg`;&lt;br /&gt;
                arrowBox.style.alignItems = 'center';&lt;br /&gt;
                arrowBox.style.justifyContent = 'center';&lt;br /&gt;
                arrowBox.appendChild(arrowPoint2);&lt;br /&gt;
                break;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Common.js&amp;diff=89479</id>
		<title>미디어위키:Common.js</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Common.js&amp;diff=89479"/>
		<updated>2025-08-07T03:44:59Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 버전 테스트&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* 이 자바스크립트 설정은 모든 문서, 모든 사용자에게 적용됩니다. 리브레 위키 본관-&amp;gt;자유위키에서 가져왔습니다. */&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * 이 스크립트는 큰숲백과 전체에 적용되며, 위키백과, 리브레 위키에서 가져온 것도 있습니다. 고칠 때는 주의해주세요.&lt;br /&gt;
 * [[위키백과:위키프로젝트 시스템]] 참고&lt;br /&gt;
 *&lt;br /&gt;
 * 스크립트를 넣을 때는 충분한 설명, 출처를 넣어주세요! 이후 관리가 어려워집니다.&lt;br /&gt;
 **/&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * 아이콘 로드&lt;br /&gt;
 *&lt;br /&gt;
 **/&lt;br /&gt;
&lt;br /&gt;
mw.loader.using( [&lt;br /&gt;
	'oojs-ui.styles.icons-movement',&lt;br /&gt;
	'oojs-ui.styles.icons-content',&lt;br /&gt;
	'oojs-ui.styles.icons-alerts',&lt;br /&gt;
	'oojs-ui.styles.icons-interactions',&lt;br /&gt;
	'oojs-ui.styles.icons-moderation',&lt;br /&gt;
	'oojs-ui.styles.icons-editing-core',&lt;br /&gt;
	'oojs-ui.styles.icons-editing-styling',&lt;br /&gt;
	'oojs-ui.styles.icons-editing-list',&lt;br /&gt;
	'oojs-ui.styles.icons-editing-advanced',&lt;br /&gt;
	'oojs-ui.styles.icons-editing-citation',&lt;br /&gt;
	'oojs-ui.styles.icons-media',&lt;br /&gt;
	'oojs-ui.styles.icons-location',&lt;br /&gt;
	'oojs-ui.styles.icons-user',&lt;br /&gt;
	'oojs-ui.styles.icons-layout',&lt;br /&gt;
	'oojs-ui.styles.icons-accessibility',&lt;br /&gt;
	'oojs-ui.styles.icons-wikimedia',&lt;br /&gt;
]);&lt;br /&gt;
&lt;br /&gt;
/* Begin of mw.loader.using callback */&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Map addPortletLink to mw.util &lt;br /&gt;
 *&lt;br /&gt;
 * @deprecated: Use mw.util.addPortletLink instead.&lt;br /&gt;
 */&lt;br /&gt;
mw.log.deprecate( window, 'addPortletLink', mw.util.addPortletLink,&lt;br /&gt;
 'Use mw.util.addPortletLink instead' );&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Extract a URL parameter from the current URL&lt;br /&gt;
 *&lt;br /&gt;
 * @deprecated: Use mw.util.getParamValue with proper escaping&lt;br /&gt;
 */&lt;br /&gt;
mw.log.deprecate( window, 'getURLParamValue', mw.util.getParamValue, 'Use mw.util.getParamValue instead' );&lt;br /&gt;
 &lt;br /&gt;
/** &lt;br /&gt;
 * Test if an element has a certain class&lt;br /&gt;
 *&lt;br /&gt;
 * @deprecated:  Use $(element).hasClass() instead.&lt;br /&gt;
 */&lt;br /&gt;
mw.log.deprecate( window, 'hasClass', function ( element, className ) {&lt;br /&gt;
    return $( element ).hasClass( className );&lt;br /&gt;
}, 'Use jQuery.hasClass() instead' );&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL&lt;br /&gt;
 * @rev 5&lt;br /&gt;
 */&lt;br /&gt;
// CSS&lt;br /&gt;
var extraCSS = mw.util.getParamValue( 'withCSS' );&lt;br /&gt;
if ( extraCSS ) {&lt;br /&gt;
	if ( extraCSS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.css$/ ) ) {&lt;br /&gt;
		importStylesheet( extraCSS );&lt;br /&gt;
	} else {&lt;br /&gt;
		mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// JS&lt;br /&gt;
var extraJS = mw.util.getParamValue( 'withJS' );&lt;br /&gt;
if ( extraJS ) {&lt;br /&gt;
	if ( extraJS.match( /^MediaWiki:[^&amp;amp;&amp;lt;&amp;gt;=%#]*\.js$/ ) ) {&lt;br /&gt;
		importScript( extraJS );&lt;br /&gt;
	} else {&lt;br /&gt;
		mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Import more specific scripts if necessary - Not used in bigforestwiki&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */&lt;br /&gt;
/** Collapsible tables *********************************************************&lt;br /&gt;
 *&lt;br /&gt;
 *  Description: Allows tables to be collapsed, showing only the header. See&lt;br /&gt;
 *               [[:en:Wikipedia:NavFrame]].&lt;br /&gt;
 *  Maintainers: [[:en:User:R. Koot]]&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
var autoCollapse = 2;&lt;br /&gt;
var collapseCaption = '숨기기';&lt;br /&gt;
var expandCaption = '보이기';&lt;br /&gt;
 &lt;br /&gt;
window.collapseTable = function ( tableIndex ) {&lt;br /&gt;
    var Button = document.getElementById( 'collapseButton' + tableIndex );&lt;br /&gt;
    var Table = document.getElementById( 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
    if ( !Table || !Button ) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    var Rows = Table.rows;&lt;br /&gt;
    var i;&lt;br /&gt;
 &lt;br /&gt;
    if ( Button.firstChild.data === collapseCaption ) {&lt;br /&gt;
        for ( i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
            Rows[i].style.display = 'none';&lt;br /&gt;
        }&lt;br /&gt;
        Button.firstChild.data = expandCaption;&lt;br /&gt;
    } else {&lt;br /&gt;
        for ( i = 1; i &amp;lt; Rows.length; i++ ) {&lt;br /&gt;
            Rows[i].style.display = Rows[0].style.display;&lt;br /&gt;
        }&lt;br /&gt;
        Button.firstChild.data = collapseCaption;&lt;br /&gt;
    }&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
function createCollapseButtons() {&lt;br /&gt;
    var tableIndex = 0;&lt;br /&gt;
    var NavigationBoxes = {};&lt;br /&gt;
    var Tables = document.getElementsByTagName( 'table' );&lt;br /&gt;
    var i;&lt;br /&gt;
 &lt;br /&gt;
    function handleButtonLink( index, e ) {&lt;br /&gt;
        window.collapseTable( index );&lt;br /&gt;
        e.preventDefault();&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for ( i = 0; i &amp;lt; Tables.length; i++ ) {&lt;br /&gt;
        if ( $( Tables[i] ).hasClass( 'collapsible' ) ) {&lt;br /&gt;
 &lt;br /&gt;
            /* only add button and increment count if there is a header row to work with */&lt;br /&gt;
            var HeaderRow = Tables[i].getElementsByTagName( 'tr' )[0];&lt;br /&gt;
            if ( !HeaderRow ) continue;&lt;br /&gt;
            var Header = HeaderRow.getElementsByTagName( 'th' )[0];&lt;br /&gt;
            if ( !Header ) continue;&lt;br /&gt;
 &lt;br /&gt;
            NavigationBoxes[ tableIndex ] = Tables[i];&lt;br /&gt;
            Tables[i].setAttribute( 'id', 'collapsibleTable' + tableIndex );&lt;br /&gt;
 &lt;br /&gt;
            var Button     = document.createElement( 'span' );&lt;br /&gt;
            var ButtonLink = document.createElement( 'a' );&lt;br /&gt;
            var ButtonText = document.createTextNode( collapseCaption );&lt;br /&gt;
 &lt;br /&gt;
            Button.className = 'collapseButton';  /* Styles are declared in Common.css */&lt;br /&gt;
 &lt;br /&gt;
            ButtonLink.style.color = Header.style.color;&lt;br /&gt;
            ButtonLink.setAttribute( 'id', 'collapseButton' + tableIndex );&lt;br /&gt;
            ButtonLink.setAttribute( 'href', '#' );&lt;br /&gt;
            $( ButtonLink ).on( 'click', $.proxy( handleButtonLink, ButtonLink, tableIndex ) );&lt;br /&gt;
            ButtonLink.appendChild( ButtonText );&lt;br /&gt;
 &lt;br /&gt;
            Button.appendChild( document.createTextNode( '[' ) );&lt;br /&gt;
            Button.appendChild( ButtonLink );&lt;br /&gt;
            Button.appendChild( document.createTextNode( ']' ) );&lt;br /&gt;
 &lt;br /&gt;
            Header.insertBefore( Button, Header.firstChild );&lt;br /&gt;
            tableIndex++;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    for ( i = 0;  i &amp;lt; tableIndex; i++ ) {&lt;br /&gt;
        if ( $( NavigationBoxes[i] ).hasClass( 'collapsed' ) || ( tableIndex &amp;gt;= autoCollapse &amp;amp;&amp;amp; $( NavigationBoxes[i] ).hasClass( 'autocollapse' ) ) ) {&lt;br /&gt;
            window.collapseTable( i );&lt;br /&gt;
        } &lt;br /&gt;
        else if ( $( NavigationBoxes[i] ).hasClass ( 'innercollapse' ) ) {&lt;br /&gt;
            var element = NavigationBoxes[i];&lt;br /&gt;
            while ((element = element.parentNode)) {&lt;br /&gt;
                if ( $( element ).hasClass( 'outercollapse' ) ) {&lt;br /&gt;
                    window.collapseTable ( i );&lt;br /&gt;
                    break;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
mw.hook( 'wikipage.content' ).add( createCollapseButtons );&lt;br /&gt;
 &lt;br /&gt;
/* ([[위키백과:관리자 요청/2007년 5월#스크립트 추가 요청]]) */&lt;br /&gt;
/** Dynamic Navigation Bars (experimental) *************************************&lt;br /&gt;
 *&lt;br /&gt;
 *  Description: See [[:en:Wikipedia:NavFrame]].&lt;br /&gt;
 *  Maintainers: UNMAINTAINED&lt;br /&gt;
 */&lt;br /&gt;
 &lt;br /&gt;
// set up the words in your language&lt;br /&gt;
/* set up the words in your language */&lt;br /&gt;
var NavigationBarHide = '[' + collapseCaption + ']';&lt;br /&gt;
var NavigationBarShow = '[' + expandCaption + ']';&lt;br /&gt;
 &lt;br /&gt;
/**&lt;br /&gt;
 * Shows and hides content and picture (if available) of navigation bars&lt;br /&gt;
 * Parameters:&lt;br /&gt;
 *     indexNavigationBar: the index of navigation bar to be toggled&lt;br /&gt;
 **/&lt;br /&gt;
window.toggleNavigationBar = function ( indexNavigationBar, event ) {&lt;br /&gt;
    var NavToggle = document.getElementById( 'NavToggle' + indexNavigationBar );&lt;br /&gt;
    var NavFrame = document.getElementById( 'NavFrame' + indexNavigationBar );&lt;br /&gt;
    var NavChild;&lt;br /&gt;
 &lt;br /&gt;
    if ( !NavFrame || !NavToggle ) {&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    /* if shown now */&lt;br /&gt;
    if ( NavToggle.firstChild.data === NavigationBarHide ) {&lt;br /&gt;
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {&lt;br /&gt;
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {&lt;br /&gt;
                NavChild.style.display = 'none';&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    NavToggle.firstChild.data = NavigationBarShow;&lt;br /&gt;
 &lt;br /&gt;
    /* if hidden now */&lt;br /&gt;
    } else if ( NavToggle.firstChild.data === NavigationBarShow ) {&lt;br /&gt;
        for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {&lt;br /&gt;
            if ( $( NavChild ).hasClass( 'NavContent' ) || $( NavChild ).hasClass( 'NavPic' ) ) {&lt;br /&gt;
                NavChild.style.display = 'block';&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        NavToggle.firstChild.data = NavigationBarHide;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    event.preventDefault();&lt;br /&gt;
};&lt;br /&gt;
 &lt;br /&gt;
/* adds show/hide-button to navigation bars */&lt;br /&gt;
function createNavigationBarToggleButton() {&lt;br /&gt;
    var indexNavigationBar = 0;&lt;br /&gt;
    var NavFrame;&lt;br /&gt;
    var NavChild;&lt;br /&gt;
    /* iterate over all &amp;lt; div &amp;gt;-elements */&lt;br /&gt;
    var divs = document.getElementsByTagName( 'div' );&lt;br /&gt;
    for ( var i = 0; (NavFrame = divs[i]); i++ ) {&lt;br /&gt;
        /* if found a navigation bar */&lt;br /&gt;
        if ( $( NavFrame ).hasClass( 'NavFrame' ) ) {&lt;br /&gt;
 &lt;br /&gt;
            indexNavigationBar++;&lt;br /&gt;
            var NavToggle = document.createElement( 'a' );&lt;br /&gt;
            NavToggle.className = 'NavToggle';&lt;br /&gt;
            NavToggle.setAttribute( 'id', 'NavToggle' + indexNavigationBar );&lt;br /&gt;
            NavToggle.setAttribute( 'href', '#' );&lt;br /&gt;
            $( NavToggle ).on( 'click', $.proxy( window.toggleNavigationBar, window, indexNavigationBar ) );&lt;br /&gt;
 &lt;br /&gt;
            var isCollapsed = $( NavFrame ).hasClass( 'collapsed' );&lt;br /&gt;
            /**&lt;br /&gt;
             * Check if any children are already hidden.  This loop is here for backwards compatibility:&lt;br /&gt;
             * the old way of making NavFrames start out collapsed was to manually add style=&amp;quot;display:none&amp;quot;&lt;br /&gt;
             * to all the NavPic/NavContent elements.  Since this was bad for accessibility (no way to make&lt;br /&gt;
             * the content visible without JavaScript support), the new recommended way is to add the class&lt;br /&gt;
             * &amp;quot;collapsed&amp;quot; to the NavFrame itself, just like with collapsible tables.&lt;br /&gt;
             */&lt;br /&gt;
            for ( NavChild = NavFrame.firstChild; NavChild != null &amp;amp;&amp;amp; !isCollapsed; NavChild = NavChild.nextSibling ) {&lt;br /&gt;
                if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {&lt;br /&gt;
                    if ( NavChild.style.display === 'none' ) {&lt;br /&gt;
                        isCollapsed = true;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            if ( isCollapsed ) {&lt;br /&gt;
                for ( NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {&lt;br /&gt;
                    if ( $( NavChild ).hasClass( 'NavPic' ) || $( NavChild ).hasClass( 'NavContent' ) ) {&lt;br /&gt;
                        NavChild.style.display = 'none';&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            var NavToggleText = document.createTextNode( isCollapsed ? NavigationBarShow : NavigationBarHide );&lt;br /&gt;
            NavToggle.appendChild( NavToggleText );&lt;br /&gt;
 &lt;br /&gt;
            /* Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked) */&lt;br /&gt;
            for( var j = 0; j &amp;lt; NavFrame.childNodes.length; j++ ) {&lt;br /&gt;
                if ( $( NavFrame.childNodes[j] ).hasClass( 'NavHead' ) ) {&lt;br /&gt;
                    NavToggle.style.color = NavFrame.childNodes[j].style.color;&lt;br /&gt;
                    NavFrame.childNodes[j].appendChild( NavToggle );&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            NavFrame.setAttribute( 'id', 'NavFrame' + indexNavigationBar );&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
mw.hook( 'wikipage.content' ).add( createNavigationBarToggleButton );&lt;br /&gt;
 &lt;br /&gt;
/* 대문의 &amp;quot;프로젝트&amp;quot; 탭을 &amp;quot;대문&amp;quot;으로 바꿉니다.&lt;br /&gt;
- 영어 위키백과 common.js의 main page 스크립트를 약간 변형 */&lt;br /&gt;
 &lt;br /&gt;
/***** 그림 정보 틀을 자동으로 불러옴 ********&lt;br /&gt;
 * Adds a link to subpages of current page&lt;br /&gt;
 * from commons.wikimedia.org&lt;br /&gt;
 *  Maintainers: [[User:Yonidebest]], [[User:Dschwen]]&lt;br /&gt;
 *  [[사용자:Kwj2772]]가 수정&lt;br /&gt;
 *  JSconfig items: bool 'loadAutoInformationTemplate'&lt;br /&gt;
 *                       (true=enabled (default), false=disabled)&lt;br /&gt;
 * JSConfig를 사용하지 않도록 수정함. --[[사용자:Klutzy|klutzy]] ([[사용자토론:Klutzy|토론]]) 2009년 9월 27일 (일) 20:33 (KST)&lt;br /&gt;
 ****/&lt;br /&gt;
/**&lt;br /&gt;
 * 파일 라이선스 체계화 150726 - 큰숲백과에서는 사용하지 않음.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
/* 인터랙티브 지도. 영어 위키백과에서 가져옴. -- [[사용자:ChongDae]] 2010년 3월 28일 (일) 02:08 (KST) */&lt;br /&gt;
/**&lt;br /&gt;
 * WikiMiniAtlas&lt;br /&gt;
 *&lt;br /&gt;
 * Description: WikiMiniAtlas is a popup click and drag world map.&lt;br /&gt;
 *              This script causes all of our coordinate links to display the WikiMiniAtlas popup button.&lt;br /&gt;
 *              The script itself is located on meta because it is used by many projects.&lt;br /&gt;
 *              See [[Meta:WikiMiniAtlas]] for more information. &lt;br /&gt;
 * Maintainers: [[User:Dschwen]]&lt;br /&gt;
 */&lt;br /&gt;
( function () {&lt;br /&gt;
    var require_wikiminiatlas = false;&lt;br /&gt;
    var coord_filter = /geohack/;&lt;br /&gt;
    $( function () {&lt;br /&gt;
        $( 'a.external.text' ).each( function( key, link ) {&lt;br /&gt;
            if ( link.href &amp;amp;&amp;amp; coord_filter.exec( link.href ) ) {&lt;br /&gt;
                require_wikiminiatlas = true;&lt;br /&gt;
                // break from loop&lt;br /&gt;
                return false;&lt;br /&gt;
            }&lt;br /&gt;
        } );&lt;br /&gt;
        if ( $( 'div.kmldata' ).length ) {&lt;br /&gt;
            require_wikiminiatlas = true;&lt;br /&gt;
        }&lt;br /&gt;
        if ( require_wikiminiatlas ) {&lt;br /&gt;
            mw.loader.load( '//meta.wikimedia.org/w/index.php?title=MediaWiki:Wikiminiatlas.js&amp;amp;action=raw&amp;amp;ctype=text/javascript' );&lt;br /&gt;
        }&lt;br /&gt;
    } );&lt;br /&gt;
} )();&lt;br /&gt;
&lt;br /&gt;
/** [[틀:USERNAME]]에서 사용하는 바꿔치기 함수&lt;br /&gt;
  * 작성자: 백괴사전 Peremen&lt;br /&gt;
*/&lt;br /&gt;
$(function () {&lt;br /&gt;
    if (typeof(disableUsernameReplace) != 'undefined' &amp;amp;&amp;amp; disableUsernameReplace) return;&lt;br /&gt;
    if (!document.getElementById('pt-userpage')) return;&lt;br /&gt;
    $(&amp;quot;span.insertusername&amp;quot;).each(function(i) {&lt;br /&gt;
        $(this).text(mw.config.get('wgUserName'))&lt;br /&gt;
    })&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
/** [[틀:제목]]에서 사용하는 제목 바꿔치기 함수 **/&lt;br /&gt;
 &lt;br /&gt;
$(function () {&lt;br /&gt;
    if (typeof(disableTitleRewrite) != 'undefined' &amp;amp;&amp;amp; disableTitleRewrite) return;&lt;br /&gt;
    if (!document.getElementById('title-meta')) return;&lt;br /&gt;
    $('h1.firstHeading').each( function(i){&lt;br /&gt;
        $(this).html( $(&amp;quot;#title-meta&amp;quot;).html()).css('text-align', $(&amp;quot;#title-align&amp;quot;).text())&lt;br /&gt;
    })&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/** 문서가 존재하는지 존재하지 않는지 판단하여 탭 색을 바꾸는 함수. **/&lt;br /&gt;
 &lt;br /&gt;
function checkDocumentExistency(documentTitle,tabId) {&lt;br /&gt;
  $.getJSON(&amp;quot;/w/api.php&amp;quot;,&lt;br /&gt;
    {action:&amp;quot;query&amp;quot;, titles:documentTitle, format:&amp;quot;json&amp;quot;},&lt;br /&gt;
    function(d) {&lt;br /&gt;
      if(d.query.pages[&amp;quot;-1&amp;quot;].missing != undefined) $(&amp;quot;#&amp;quot;+tabId).addClass(&amp;quot;new&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
* 안티-반달리즘 필터&lt;br /&gt;
*/&lt;br /&gt;
$(&amp;quot;#mw-content-text [style*='fixed'], #mw-content-text [style*='absolute']&amp;quot;).remove();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * HTTPS에서만 보이는 요소&lt;br /&gt;
 */&lt;br /&gt;
if (location.protocol == &amp;quot;https:&amp;quot;) $(&amp;quot;.view-https&amp;quot;).show();&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Fix for Windows XP Unicode font rendering&lt;br /&gt;
 */&lt;br /&gt;
if ( navigator.appVersion.search(/windows nt 5/i) !== -1 ) {&lt;br /&gt;
    mw.util.addCSS( '.IPA { font-family: &amp;quot;Lucida Sans Unicode&amp;quot;, &amp;quot;Arial Unicode MS&amp;quot;; } \&lt;br /&gt;
.Unicode { font-family: &amp;quot;Arial Unicode MS&amp;quot;, &amp;quot;Lucida Sans Unicode&amp;quot;; } ' );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* 사용자 문서에 기여 내역 리스트 추가 */&lt;br /&gt;
/*&lt;br /&gt;
if (document.querySelector(&amp;quot;body.ns-2&amp;quot;)) {&lt;br /&gt;
    // 사용자 이름 찾기&lt;br /&gt;
    var userName = document.getElementById('firstHeading').innerText.split('\n')[0].split('/')[0].split(':')[1];&lt;br /&gt;
    // 사용자 메뉴 찾기&lt;br /&gt;
    var cMenu = document.querySelector(&amp;quot;nav#p-cactions ul.vector-menu-content-list&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    var aUserContrib = document.createElement(&amp;quot;a&amp;quot;);&lt;br /&gt;
    aUserContrib.setAttribute(&amp;quot;href&amp;quot;, &amp;quot;/wiki/특수:기여/&amp;quot;+userName);&lt;br /&gt;
    aUserContrib.innerHTML = &amp;quot;기여 내역&amp;quot;;&lt;br /&gt;
    var userContrib = document.createElement(&amp;quot;li&amp;quot;)&lt;br /&gt;
    userContrib.id=&amp;quot;ca-contribs&amp;quot;;&lt;br /&gt;
    userContrib.appendChild(aUserContrib);&lt;br /&gt;
    cMenu.appendChild(userContrib);&lt;br /&gt;
}&lt;br /&gt;
*//* {하위문서목록}에서 하위문서의 개수에 따라 열 개수 자동 조절 */&lt;br /&gt;
document.querySelectorAll(&amp;quot;.subpage-list .mw-prefixindex-body&amp;quot;).forEach(function (item) {&lt;br /&gt;
	var elementNumber = item.childNodes[0].childElementCount;&lt;br /&gt;
    if ( elementNumber &amp;gt; 20 ) { item.style.columnCount = 2 }&lt;br /&gt;
    else if ( elementNumber &amp;lt;= 20 ) { item.style.columnCount = 1, item.style.width = &amp;quot;max-content&amp;quot;; }&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * [[틀:리브레탭]]용&lt;br /&gt;
 */&lt;br /&gt;
document.querySelectorAll('.libre-tab').forEach(function (libretab) {&lt;br /&gt;
    const $libretab = $(libretab);&lt;br /&gt;
    var $btns = $libretab.children('.libre-tab-btns');&lt;br /&gt;
    var $content = $libretab.children('.libre-tab-main');&lt;br /&gt;
    $btns.children('.libre-tab-btn').on('click', function () {&lt;br /&gt;
        if (this.classList.contains('.libre-tab-btn-active')) return;&lt;br /&gt;
        $btns.children('.libre-tab-btn-active').removeClass('libre-tab-btn-active');&lt;br /&gt;
        this.classList.add('libre-tab-btn-active');&lt;br /&gt;
&lt;br /&gt;
        var index = $(this).index();&lt;br /&gt;
        $content.children('.libre-tab-main-content-active').removeClass('libre-tab-main-content-active');&lt;br /&gt;
        $content.children('.libre-tab-main-content').eq(index).addClass('libre-tab-main-content-active');&lt;br /&gt;
    })&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
// HTML샌드박스 가동용 소스&lt;br /&gt;
mw.loader.load('//bigforest.a2hosted.com/w/index.php?title=mediawiki:HTMLSandbox/main.js&amp;amp;action=raw&amp;amp;ctype=text/javascript');&lt;br /&gt;
&lt;br /&gt;
// 대문 좋은 문서 작동 코드&lt;br /&gt;
$(function () {&lt;br /&gt;
	var goodArticlesContents = document.querySelector(&amp;quot;.good-articles-contents&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	if (!goodArticlesContents) return;&lt;br /&gt;
&lt;br /&gt;
	var listItems = goodArticlesContents.querySelectorAll(&amp;quot;li&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	for (var i = 0; i &amp;lt; listItems.length; i++) {&lt;br /&gt;
&lt;br /&gt;
		var node = listItems[i]&lt;br /&gt;
&lt;br /&gt;
		var a = node.firstChild&lt;br /&gt;
&lt;br /&gt;
		var box = document.createElement('div');&lt;br /&gt;
		box.classList.add(&amp;quot;page-box&amp;quot;);&lt;br /&gt;
		box.append(a.cloneNode(true));&lt;br /&gt;
&lt;br /&gt;
		var imgbox = document.createElement('div');&lt;br /&gt;
		imgbox.classList.add(&amp;quot;good-articles-imgbox&amp;quot;)&lt;br /&gt;
		box.prepend(imgbox)&lt;br /&gt;
&lt;br /&gt;
		goodArticlesContents.append(box);&lt;br /&gt;
&lt;br /&gt;
		(function (imgbox) {&lt;br /&gt;
			new mw.Api().get({&lt;br /&gt;
				action: &amp;quot;query&amp;quot;,&lt;br /&gt;
				format: &amp;quot;json&amp;quot;,&lt;br /&gt;
				formatversion: &amp;quot;latest&amp;quot;,&lt;br /&gt;
				utf8: 1,&lt;br /&gt;
				pithumbsize: 300,&lt;br /&gt;
				prop: &amp;quot;pageimages&amp;quot;,&lt;br /&gt;
				titles: a.title,&lt;br /&gt;
			}).then(function (data) {&lt;br /&gt;
				var page = data.query.pages[0];&lt;br /&gt;
				if (!page.thumbnail) return;&lt;br /&gt;
&lt;br /&gt;
				var img = document.createElement('img');&lt;br /&gt;
				img.src = page.thumbnail.source;&lt;br /&gt;
&lt;br /&gt;
				console.log(this)&lt;br /&gt;
&lt;br /&gt;
				imgbox.prepend(img)&lt;br /&gt;
			})&lt;br /&gt;
		})(imgbox)&lt;br /&gt;
	}&lt;br /&gt;
})&lt;br /&gt;
&lt;br /&gt;
mw.loader.load('/w/index.php?title=mediawiki:Responsive-arrow.js&amp;amp;action=raw&amp;amp;ctype=text/javascript');&lt;br /&gt;
/* DO NOT ADD CODE BELOW THIS LINE */&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89478</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89478"/>
		<updated>2025-08-07T03:23:31Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* /etc/hostapd.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;br /&gt;
&lt;br /&gt;
hostapd -dd /etc/hostapd를 실행하고 나서 뜨는 로그에 사용 가능한 채널들이 나열되므로 로그를 보고 채널 설정해도 된다.&lt;br /&gt;
&lt;br /&gt;
=== /etc/hostapd.conf ===&lt;br /&gt;
이 설정 파일을 작성하여야 한다.&lt;br /&gt;
&lt;br /&gt;
wifi의 채널, 대역폭, 주파수나 암호화 알고리즘 등을 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예제&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
interface=w****&lt;br /&gt;
&lt;br /&gt;
# SSID to be used in IEEE 802.11 management frames&lt;br /&gt;
ssid=yourname&lt;br /&gt;
# Driver interface type (hostap/wired/none/nl80211/bsd)&lt;br /&gt;
driver=nl80211&lt;br /&gt;
# Country code (ISO/IEC 3166-1)&lt;br /&gt;
country_code=KR&lt;br /&gt;
&lt;br /&gt;
ctrl_interface=/var/run/hostapd&lt;br /&gt;
ctrl_interface_group=0&lt;br /&gt;
&lt;br /&gt;
# Operation mode&lt;br /&gt;
802.11a -&amp;gt; hw_mode=a (5GHz)&lt;br /&gt;
802.11b -&amp;gt; hw_mode=g (2.4GHz)&lt;br /&gt;
802.11g -&amp;gt; hw_mode=b (2.4GHz)&lt;br /&gt;
802.11n (2.4GHz, 5GHz) -&amp;gt; hw_mode=g, ieee80211n=1 (설정값이 똑같음, 채널만 바꿔주면 됨)&lt;br /&gt;
802.11ac -&amp;gt; hw_mode=a (5GHz)&lt;br /&gt;
&lt;br /&gt;
hw_mode=b&lt;br /&gt;
# Channel number&lt;br /&gt;
# 비우면 자동 설정, 서비스 등록 된 상태에서 자동 실행될 경우 어째서인지 오류 발생 -&amp;gt; 꼭 채널을 지정해주어야 작동되었음&lt;br /&gt;
channel=1&lt;br /&gt;
# Maximum number of stations allowed&lt;br /&gt;
max_num_sta=5&lt;br /&gt;
&lt;br /&gt;
# Bit field: bit0 = WPA, bit1 = WPA2&lt;br /&gt;
wpa=2&lt;br /&gt;
# Bit field: 1=wpa, 2=wep, 3=both&lt;br /&gt;
auth_algs=1&lt;br /&gt;
&lt;br /&gt;
# Set of accepted cipher suites; disabling insecure TKIP&lt;br /&gt;
# TKIP는 쉽게 복호화되니까 사용하지 말자...&lt;br /&gt;
wpa_pairwise=CCMP&lt;br /&gt;
# Set of accepted key management algorithms&lt;br /&gt;
wpa_key_mgmt=WPA-PSK&lt;br /&gt;
wpa_passphrase=**********&lt;br /&gt;
&lt;br /&gt;
macaddr_acl=0&lt;br /&gt;
&lt;br /&gt;
#ap_isolate=1&lt;br /&gt;
&lt;br /&gt;
# hostapd event logger configuration&lt;br /&gt;
logger_stdout=-1&lt;br /&gt;
logger_stdout_level=2&lt;br /&gt;
&lt;br /&gt;
## Enable 802.11n support&lt;br /&gt;
ieee80211n=1&lt;br /&gt;
## Enable 802.11ac support&lt;br /&gt;
#ieee80211ac=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS 서버 ===&lt;br /&gt;
DNS를 1.1.1.1이나 8.8.8.8과 같은 공개 DNS를 쓰기도 하고 사설 DNS를 쓰기도 한다.&lt;br /&gt;
&lt;br /&gt;
=== dhcpd ===&lt;br /&gt;
IP를 네트워크에 있는 각 호스트에서 부여해야 함.&lt;br /&gt;
&lt;br /&gt;
isc-dhcp-server, dnsmasq가 있다.&lt;br /&gt;
&lt;br /&gt;
==== isc-dhcp-server ====&lt;br /&gt;
주소는 아래 범위의 내부용 주소를 입력해야 한다.&lt;br /&gt;
&lt;br /&gt;
routers 옵션이 없으면 라우터가 10.0.0.1 주소를 차지함에도 불구하고 클라이언트에 10.0.0.1 주소를 부여하는 불상사가 발생할 수 있다. (확인 안한 정보)&lt;br /&gt;
&lt;br /&gt;
172.16.0.0/12, 192.168.1.0/16, 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
subnet 10.0.0.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 10.0.0.2 10.0.0.100;&lt;br /&gt;
  option domain-name-servers 1.1.1.1;&lt;br /&gt;
  option domain-name &amp;quot;dhcp&amp;quot;;&lt;br /&gt;
  option routers 10.0.0.1;&lt;br /&gt;
  option broadcast-address 10.0.0.255;&lt;br /&gt;
  default-lease-time 600;&lt;br /&gt;
  max-lease-time 7200;&lt;br /&gt;
  interface *******;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Dnsmasq&lt;br /&gt;
&lt;br /&gt;
=== hostapd/dhcpd 오류 수정 ===&lt;br /&gt;
장치가 완전히 로드된 후에 hostapd 데몬이 작동하길 원한다면(dhcpd가 먼저 활성화되면서 인터페이스가 존재하지 않는다는 오류가 발생할 경우) 아래 파일에 작성. wlan0는 자신의 무선 네트워크 인터페이스 이름을 넣는다.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/system/hostapd.service.d/override.conf&lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
BindsTo=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
After=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
&lt;br /&gt;
systemctl edit hostapd 명령어를 이용해서 파일을 작성해도 된다.&lt;br /&gt;
&lt;br /&gt;
끝나고 systemctl restart hostapd 잊지 않는다&lt;br /&gt;
&lt;br /&gt;
=== NAT 활성화 ===&lt;br /&gt;
wifi 연결은 되는 상태여도 NAT를 활성화하지 않으면 인터넷 접근이 불가능.&lt;br /&gt;
&lt;br /&gt;
외부로 나가는(egress) 인터페이스(eth0)는 방화벽이 안전하게 설정되어야 한다.&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --zone=internal --add-interface=wifi0 --permanent&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --zone=external --add-interface=eth0 --permanent&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --permanent --new-policy int2ext&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-ingress-zone internal&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-egress-zone external&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --set-target ACCEPT&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
아래처럼 해도 되는데 설정 유지가 안되어 별도로 부팅 후 자동 실행 설정이 되어야 함. firewalld가 없는 경우에.&lt;br /&gt;
* iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE&lt;br /&gt;
* iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
* iptables -A FORWARD -i net0 -o internet0 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Internet_sharing&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89477</id>
		<title>사용자:Cerulean/메모장/linux ralt hangul</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89477"/>
		<updated>2025-08-07T03:22:13Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: Cerulean (토론)의 89476판 편집을 되돌림&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Xorg 호환 옵션 ===&lt;br /&gt;
&lt;br /&gt;
/etc/X11/xinit/xinitrc.d/fix-alt-hangul.sh을 작성하여 아래 내용을 넣는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo setxkbmap -option korean:ralt_hangul,korean:rctrl_hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xorg/Wayland 모두 적용 ===&lt;br /&gt;
&lt;br /&gt;
https://blog.elmi.page/1075&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo systemctl enable keyd --no&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
104키의 키보드의 경우 한글 키가 인식되지 않는다.&lt;br /&gt;
&lt;br /&gt;
한/영키라고 키보드에 프린팅되어 있을텐데 그 키를 눌러 키의 이름을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo keyd monitor&lt;br /&gt;
---&amp;gt; &lt;br /&gt;
rightalt down&lt;br /&gt;
rightalt up&lt;br /&gt;
rightcontrol down&lt;br /&gt;
rightcontrol up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
한글 키의 이름 확인 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;keyd list-keys | grep han&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
zenkakuhankaku&lt;br /&gt;
hangeul&lt;br /&gt;
hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
편집기로 편집 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo nano /etc/keyd/default.conf&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
아래 입력&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;conf&amp;quot; line&amp;gt;&lt;br /&gt;
[ids]&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[main]&lt;br /&gt;
&lt;br /&gt;
# capslock을 컨트롤+esc 키로 매핑한다. caplock을 누르면 컨트롤+esc을 누른 것으로 인식된다.&lt;br /&gt;
#capslock = overload(control, esc)&lt;br /&gt;
&lt;br /&gt;
# escape 키를 capslock로 매핑한다. esc를 누르면 caplock을 누른 것으로 인식된다.&lt;br /&gt;
#esc = capslock&lt;br /&gt;
&lt;br /&gt;
rightalt = hangeul # &amp;lt;- 위에서 확인한 키의 이름을 넣는다.&lt;br /&gt;
rightcontrol = hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fn 조합 특수 키도 유용하게 쓸 수 있을 것 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
keyd virtual keyboard file down&lt;br /&gt;
keyd virtual keyboard file up&lt;br /&gt;
keyd virtual keyboard search down&lt;br /&gt;
keyd virtual keyboard search up&lt;br /&gt;
keyd virtual keyboard calc down&lt;br /&gt;
keyd virtual keyboard calc up&lt;br /&gt;
keyd virtual keyboard config down&lt;br /&gt;
keyd virtual keyboard config up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89476</id>
		<title>사용자:Cerulean/메모장/linux ralt hangul</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89476"/>
		<updated>2025-08-07T03:21:51Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Xorg 호환 옵션 ===&lt;br /&gt;
&lt;br /&gt;
/etc/X11/xinit/xinitrc.d/fix-alt-hangul.sh을 작성하여 아래 내용을 넣는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo setxkbmap -option korean:ralt_hangul,korean:rctrl_hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xorg/Wayland 모두 적용 ===&lt;br /&gt;
&lt;br /&gt;
https://blog.elmi.page/1075&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo systemctl enable keyd --no&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
104키의 키보드의 경우 한글 키가 인식되지 않는다.&lt;br /&gt;
&lt;br /&gt;
한/영키라고 키보드에 프린팅되어 있을텐데 그 키를 눌러 키의 이름을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo keyd monitor&lt;br /&gt;
---&amp;gt; &lt;br /&gt;
rightalt down&lt;br /&gt;
rightalt up&lt;br /&gt;
rightcontrol down&lt;br /&gt;
rightcontrol up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
한글 키의 이름 확인 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;keyd list-keys | grep han&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
zenkakuhankaku&lt;br /&gt;
hangul&lt;br /&gt;
hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
편집기로 편집 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo nano /etc/keyd/default.conf&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
아래 입력&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;conf&amp;quot; line&amp;gt;&lt;br /&gt;
[ids]&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[main]&lt;br /&gt;
&lt;br /&gt;
# capslock을 컨트롤+esc 키로 매핑한다. caplock을 누르면 컨트롤+esc을 누른 것으로 인식된다.&lt;br /&gt;
#capslock = overload(control, esc)&lt;br /&gt;
&lt;br /&gt;
# escape 키를 capslock로 매핑한다. esc를 누르면 caplock을 누른 것으로 인식된다.&lt;br /&gt;
#esc = capslock&lt;br /&gt;
&lt;br /&gt;
rightalt = hangul # &amp;lt;- 위에서 확인한 키의 이름을 넣는다.&lt;br /&gt;
rightcontrol = hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fn 조합 특수 키도 유용하게 쓸 수 있을 것 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
keyd virtual keyboard file down&lt;br /&gt;
keyd virtual keyboard file up&lt;br /&gt;
keyd virtual keyboard search down&lt;br /&gt;
keyd virtual keyboard search up&lt;br /&gt;
keyd virtual keyboard calc down&lt;br /&gt;
keyd virtual keyboard calc up&lt;br /&gt;
keyd virtual keyboard config down&lt;br /&gt;
keyd virtual keyboard config up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/dhcpd&amp;diff=89456</id>
		<title>사용자:Cerulean/메모장/dhcpd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/dhcpd&amp;diff=89456"/>
		<updated>2025-07-21T01:31:54Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 새 문서: ..&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;..&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=Sextrigintillion&amp;diff=89455</id>
		<title>Sextrigintillion</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=Sextrigintillion&amp;diff=89455"/>
		<updated>2025-07-19T04:24:51Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* 용도 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{전임후임|'''수 단위(서구권)'''|'''Sextrigintillion'''|'''[[Quintrigintillion]]'''|'''[[Septtrigintillion]]'''|color=pink}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Sextrigintillion 은 수 단위 중 하나로,그 값은 &amp;lt;math&amp;gt;{10}^{111}&amp;lt;/math&amp;gt; 혹은 &amp;lt;math&amp;gt;{10}^{216}&amp;lt;/math&amp;gt;이다.&amp;lt;br&amp;gt;&lt;br /&gt;
1 Sextrigintillion second는 대략 &amp;lt;math&amp;gt;3.1\times{10}^{103}&amp;lt;/math&amp;gt;년이다.&lt;br /&gt;
== 용도 ==&lt;br /&gt;
부피가 1 Sextrigintillion 플랑크 부피&amp;lt;ref&amp;gt;1 플랑크 부피=&amp;lt;math&amp;gt;4.222\times10^{-105}m^{3}&amp;lt;/math&amp;gt;&amp;lt;/ref&amp;gt;인 구의 반지름은 대략&amp;lt;br&amp;gt;&lt;br /&gt;
100미터입니다.&lt;br /&gt;
&lt;br /&gt;
{{각주}}&lt;br /&gt;
[[분류:수 단위(서양)]]&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=Octovigintillion&amp;diff=89454</id>
		<title>Octovigintillion</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=Octovigintillion&amp;diff=89454"/>
		<updated>2025-07-19T04:23:42Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{전임후임|'''수 단위(서구권)'''|'''Octovigintillion'''|'''[[Septvigintillion]]'''|'''[[Novemvigintillion]]'''|color=pink}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Octovigintillion은 영어 수 단위로써 그 값은 &amp;lt;math&amp;gt;{10}^{87}&amp;lt;/math&amp;gt; 혹은 &amp;lt;math&amp;gt;{10}^{168}&amp;lt;/math&amp;gt;이다.&amp;lt;br&amp;gt;&lt;br /&gt;
1 Octovigintillion second는 대략 &amp;lt;math&amp;gt;3.1\times{10}^{79}&amp;lt;/math&amp;gt;년이다.&amp;lt;br&amp;gt;&lt;br /&gt;
1 Octovigintillion 달러는 대략 &amp;lt;math&amp;gt;1.182\times10^{90}&amp;lt;/math&amp;gt;원이다.&lt;br /&gt;
== 용도 ==&lt;br /&gt;
\require{action} 부피가\space1Octovigintillion\space\mathtip{플랑크\space부피}{1플랑크\space부피=약\space 4.2\times{10}^{-105}\space세제곱 \space미터입니다.} 인\space구의\space반지름은\\&lt;br /&gt;
약\space1마이크로\space미터\space입니다.&lt;br /&gt;
[[분류:수 단위(서양)]]&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Edittools&amp;diff=89453</id>
		<title>미디어위키:Edittools</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Edittools&amp;diff=89453"/>
		<updated>2025-07-19T04:22:36Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- 여기의 텍스트는 편집과 올리기 양식에 보여집니다. --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-edittools-charinsert&amp;quot; class=&amp;quot;mw-charinsert-buttons&amp;quot; title=&amp;quot;원하는 특수 문자를 클릭하세요.&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;기본 문법&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;| (+) [+] [[+]] {{+}} {{{+}}} {{{+|}}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;!-- + --&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[분류:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[파일:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[미디어:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;#넘겨주기 [[+]]&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;amp;nbsp;&amp;lt;charinsert&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;lt;nowiki&amp;gt;+&amp;amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;del&amp;gt;+&amp;lt;/del&amp;gt; {{ㅊ|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{각주}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;math&amp;gt;+&amp;lt;/math&amp;gt;&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
끼워넣기:&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;onlyinclude&amp;gt;+&amp;lt;/onlyinclude&amp;gt; &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt; &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
표:&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{| class=&amp;quot;wikitable&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;|-&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;rowspan=&amp;quot;+&amp;quot;|&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;colspan=&amp;quot;+&amp;quot;|&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;|}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;틀&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{lang|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{llang||+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{인용문|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{인용문2|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{유튜브|+}}&amp;lt;/charinsert&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{{삭제_신청|+}}&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{{특정판_삭제_신청|+}}&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;HTML&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;div&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;+&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;파서 함수&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#expr:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#if:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#ifeq:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#iferror:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#ifexist:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#switch:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#invoke:+|}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#time:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#timel:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#titleparts:+}}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;매직 워드&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__NOTOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__FORCETOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__TOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__HIDDENCAT__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{PAGENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{FULLPAGENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{SITENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{localurl:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{fullurl:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{ns:+}}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;문장 부호&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;–&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(대시)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;‘+’&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(작은따옴표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;“+”&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(큰따옴표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;·&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(가운뎃점)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;…&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(말줄임표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;‽&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(물음느낌표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;〈+〉&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(홑화살괄호)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;《+》&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(겹화살괄호)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;특수 기호&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(마이크로)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;Å °&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(도)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;′&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(분)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;″&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(초)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;그리스 문자&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(뮤)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ϊ ϊ Ϋ ϋ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;ΐ ΰ&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;확장 라틴 문자&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Æ æ Đ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(D with stroke)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;đ Ð&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(eth)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;ð ı Ł ł Ø ø Œ œ ß Þ þ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;À à È è Ì ì Ǹ ǹ Ò ò Ù ù&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;İ Ż ż&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;ǘ ǜ ǚ ǖ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;small&amp;gt;caron/háček: &amp;lt;/small&amp;gt;&amp;lt;charinsert&amp;gt;Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;small&amp;gt;breve: &amp;lt;/small&amp;gt;&amp;lt;charinsert&amp;gt;Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ā ā Ē ē Ī ī Ō ō Ū ū&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ã ã Ñ ñ Õ õ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Å å Ů ů&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ą ą Ę ę&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ç ç Ş ş Ţ ţ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ő ő Ű ű&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ș ș Ț ț&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Edittools&amp;diff=89452</id>
		<title>미디어위키:Edittools</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Edittools&amp;diff=89452"/>
		<updated>2025-07-19T04:20:53Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- 여기의 텍스트는 편집과 올리기 양식에 보여집니다. --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-edittools-charinsert&amp;quot; class=&amp;quot;mw-charinsert-buttons&amp;quot; title=&amp;quot;원하는 특수 문자를 클릭하세요.&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;기본 문법&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;| (+) [+] [[+]] {{+}} {{{+}}} {{{+|}}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;!-- + --&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[분류:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[파일:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[미디어:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;#넘겨주기 [[+]]&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;amp;nbsp;&amp;lt;charinsert&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;lt;nowiki&amp;gt;+&amp;amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;del&amp;gt;+&amp;lt;/del&amp;gt; {{ㅊ|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{각주}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;math&amp;gt;+&amp;lt;/math&amp;gt;&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;onlyinclude&amp;gt;+&amp;lt;/onlyinclude&amp;gt; &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt; &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{| class=&amp;quot;wikitable&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;|-&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;rowspan=&amp;quot;+&amp;quot;|&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;colspan=&amp;quot;+&amp;quot;|&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;|}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;틀&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{lang|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{llang||+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{인용문|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{인용문2|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{유튜브|+}}&amp;lt;/charinsert&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{{삭제_신청|+}}&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{{특정판_삭제_신청|+}}&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;HTML&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;div&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;+&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;파서 함수&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#expr:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#if:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#ifeq:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#iferror:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#ifexist:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#switch:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#invoke:+|}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#time:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#timel:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#titleparts:+}}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;매직 워드&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__NOTOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__FORCETOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__TOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__HIDDENCAT__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{PAGENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{FULLPAGENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{SITENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{localurl:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{fullurl:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{ns:+}}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;문장 부호&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;–&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(대시)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;‘+’&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(작은따옴표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;“+”&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(큰따옴표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;·&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(가운뎃점)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;…&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(말줄임표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;‽&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(물음느낌표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;〈+〉&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(홑화살괄호)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;《+》&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(겹화살괄호)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;특수 기호&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(마이크로)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;Å °&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(도)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;′&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(분)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;″&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(초)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;그리스 문자&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(뮤)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ϊ ϊ Ϋ ϋ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;ΐ ΰ&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;확장 라틴 문자&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Æ æ Đ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(D with stroke)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;đ Ð&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(eth)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;ð ı Ł ł Ø ø Œ œ ß Þ þ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;À à È è Ì ì Ǹ ǹ Ò ò Ù ù&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;İ Ż ż&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;ǘ ǜ ǚ ǖ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;small&amp;gt;caron/háček: &amp;lt;/small&amp;gt;&amp;lt;charinsert&amp;gt;Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;small&amp;gt;breve: &amp;lt;/small&amp;gt;&amp;lt;charinsert&amp;gt;Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ā ā Ē ē Ī ī Ō ō Ū ū&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ã ã Ñ ñ Õ õ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Å å Ů ů&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ą ą Ę ę&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ç ç Ş ş Ţ ţ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ő ő Ű ű&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ș ș Ț ț&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Edittools&amp;diff=89451</id>
		<title>미디어위키:Edittools</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%AF%B8%EB%94%94%EC%96%B4%EC%9C%84%ED%82%A4:Edittools&amp;diff=89451"/>
		<updated>2025-07-19T04:19:57Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- 여기의 텍스트는 편집과 올리기 양식에 보여집니다. --&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mw-edittools-charinsert&amp;quot; class=&amp;quot;mw-charinsert-buttons&amp;quot; title=&amp;quot;원하는 특수 문자를 클릭하세요.&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;기본 문법&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;| (+) [+] [[+]] {{+}} {{{+}}} {{{+|}}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;!-- + --&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[분류:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[파일:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;[[미디어:+]]&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;#넘겨주기 [[+]]&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;amp;lt;nowiki&amp;gt;+&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;amp;nbsp;&amp;lt;charinsert&amp;gt;&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;&amp;amp;lt;nowiki&amp;gt;+&amp;amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;del&amp;gt;+&amp;lt;/del&amp;gt; {{ㅊ|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;ref&amp;gt;+&amp;lt;/ref&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{각주}}&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;onlyinclude&amp;gt;+&amp;lt;/onlyinclude&amp;gt; &amp;lt;includeonly&amp;gt;+&amp;lt;/includeonly&amp;gt; &amp;lt;noinclude&amp;gt;+&amp;lt;/noinclude&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{| class=&amp;quot;wikitable&amp;quot;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;|-&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;rowspan=&amp;quot;+&amp;quot;|&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;colspan=&amp;quot;+&amp;quot;|&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;|}&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;math&amp;gt;+&amp;lt;/math&amp;gt;&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;틀&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{lang|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{llang||+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{인용문|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{인용문2|+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{유튜브|+}}&amp;lt;/charinsert&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{{삭제_신청|+}}&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;{{특정판_삭제_신청|+}}&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;(이유를 적지 않을 경우 기각될 가능성이 높습니다. 반드시 이유를 적어주세요.)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;HTML&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;div&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div class=&amp;quot;&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;div style=&amp;quot;&amp;quot;&amp;gt;+&amp;lt;/div&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;br&amp;gt; &amp;lt;hr&amp;gt;&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;&amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;+&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;파서 함수&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#expr:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#if:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#ifeq:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#iferror:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#ifexist:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#switch:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#invoke:+|}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#time:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#timel:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{#titleparts:+}}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;매직 워드&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__NOTOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__FORCETOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__TOC__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;__HIDDENCAT__&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{PAGENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{FULLPAGENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{SITENAME}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{localurl:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{fullurl:+}}&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;{{ns:+}}&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;문장 부호&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;–&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(대시)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;‘+’&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(작은따옴표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;“+”&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(큰따옴표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;·&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(가운뎃점)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;…&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(말줄임표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;‽&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(물음느낌표)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;〈+〉&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(홑화살괄호)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;《+》&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(겹화살괄호)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;특수 기호&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;± − × ÷ ≈ ≠ ∓ ≤ ≥ ∞ ¬ ¹ ² ³ ⁿ ¼ ½ ¾ § € £ ₩ ¥ ¢ † ‡ • ← → ↔ ‰ °C µ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(마이크로)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;Å °&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(도)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;′&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(분)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;″&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(초)&amp;lt;/small&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;그리스 문자&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Α α Β β Γ γ Δ δ Ε ε Ζ ζ Η η Θ θ Ι ι Κ κ Λ λ Μ μ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(뮤)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;Ν ν Ξ ξ Ο ο Π π Ρ ρ Σ σ ς Τ τ Υ υ Φ φ Χ χ Ψ ψ Ω ω&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ϊ ϊ Ϋ ϋ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;ΐ ΰ&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p class=&amp;quot;mw-edittools-section&amp;quot; data-section-title=&amp;quot;확장 라틴 문자&amp;quot; style=&amp;quot;display: none;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Æ æ Đ&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(D with stroke)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;đ Ð&amp;lt;/charinsert&amp;gt;&amp;lt;small&amp;gt;(eth)&amp;lt;/small&amp;gt; &amp;lt;charinsert&amp;gt;ð ı Ł ł Ø ø Œ œ ß Þ þ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;À à È è Ì ì Ǹ ǹ Ò ò Ù ù&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;İ Ż ż&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;ǘ ǜ ǚ ǖ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;small&amp;gt;caron/háček: &amp;lt;/small&amp;gt;&amp;lt;charinsert&amp;gt;Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;small&amp;gt;breve: &amp;lt;/small&amp;gt;&amp;lt;charinsert&amp;gt;Ă ă Ğ ğ Ŏ ŏ Ŭ ŭ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ā ā Ē ē Ī ī Ō ō Ū ū&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ã ã Ñ ñ Õ õ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Å å Ů ů&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ą ą Ę ę&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ç ç Ş ş Ţ ţ&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ő ő Ű ű&amp;lt;/charinsert&amp;gt; ·&lt;br /&gt;
&amp;lt;charinsert&amp;gt;Ș ș Ț ț&amp;lt;/charinsert&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=Septvigintillion&amp;diff=89450</id>
		<title>Septvigintillion</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=Septvigintillion&amp;diff=89450"/>
		<updated>2025-07-19T04:17:22Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{전임후임|'''수 단위(서구권)'''|'''Septvigintillion'''|'''[[Sexvigintillion]]'''|'''[[Octovigintillion]]'''|color=pink}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Septvigintillion은 영어 수 단위로써 그 값은 &amp;lt;math&amp;gt;{10}^{84}&amp;lt;/math&amp;gt; 혹은 &amp;lt;math&amp;gt;{10}^{162}&amp;lt;/math&amp;gt;이다.&amp;lt;br&amp;gt;&lt;br /&gt;
1 Septvigintillion second는 대략 &amp;lt;math&amp;gt;3.1\times{10}^{76}&amp;lt;/math&amp;gt;년이다.&lt;br /&gt;
[[분류:수 단위(서양)]]&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=Quattuorvigintillion&amp;diff=89449</id>
		<title>Quattuorvigintillion</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=Quattuorvigintillion&amp;diff=89449"/>
		<updated>2025-07-19T04:16:20Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{전임후임|수 단위(서구권)|Quattuorvigintillion&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;{10}^{75}&amp;lt;/math&amp;gt; &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; &amp;lt;math&amp;gt;{10}^{144}&amp;lt;/math&amp;gt;|[[Trevigintillion]]|[[Quinvigintillion]]|color=pink}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Quattuorvigintillion은 영어 수 단위로써 그 값은 &amp;lt;math&amp;gt;{10}^{75}&amp;lt;/math&amp;gt; 혹은 &amp;lt;math&amp;gt;{10}^{144}&amp;lt;/math&amp;gt;이다. 1 Quattuorvigintillion second는 대략 3100불가사의년이다.&lt;br /&gt;
&lt;br /&gt;
[[분류:수 단위(서양)]]&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=Trevigintillion&amp;diff=89448</id>
		<title>Trevigintillion</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=Trevigintillion&amp;diff=89448"/>
		<updated>2025-07-19T04:15:18Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__FORCETOC__&lt;br /&gt;
{{전임후임|수 단위(서구권)|Trevigintillion&amp;lt;br&amp;gt;&amp;lt;math&amp;gt;{10}^{72}&amp;lt;/math&amp;gt; &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; &amp;lt;math&amp;gt;{10}^{138}&amp;lt;/math&amp;gt;|[[Duovigintillion]]|[[Quattuorvigintillion]]|color=pink}}&lt;br /&gt;
&lt;br /&gt;
== 개요 ==&lt;br /&gt;
Trevigintillion은 영어 수 단위로써 그 값은 &amp;lt;math&amp;gt;{10}^{72}&amp;lt;/math&amp;gt; 혹은 &amp;lt;math&amp;gt;{10}^{138}&amp;lt;/math&amp;gt;이다.&amp;lt;br&amp;gt;&lt;br /&gt;
1 Trevigintillion second는 대략 3불가사의 1000나유타년이다.&lt;br /&gt;
[[분류:수 단위(서양)]]&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EB%B6%84%EC%82%B0_%EC%84%9C%EB%B9%84%EC%8A%A4_%EA%B1%B0%EB%B6%80_%EA%B3%B5%EA%B2%A9&amp;diff=89447</id>
		<title>분산 서비스 거부 공격</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EB%B6%84%EC%82%B0_%EC%84%9C%EB%B9%84%EC%8A%A4_%EA%B1%B0%EB%B6%80_%EA%B3%B5%EA%B2%A9&amp;diff=89447"/>
		<updated>2025-07-19T04:13:49Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''분산 서비스 거부 공격'''(DDOS, 디도스)는 감염된 호스트들을 동원하여 단일 서버에 트래픽을 집중시켜 사이트 서비스를 정지하는 공격이다. 이 유형으로 공격 받으면 트래픽이 과도하게 상승해 곧 [[서버]]가 무리를 받아 사이트가 멈추게 된다.&lt;br /&gt;
&lt;br /&gt;
일종의 인해전술이기 때문에 전 세계에서 가장 흔하면서도 확실한 파괴력 때문에 대응이 까다롭다. 또 전 세계에서 가장 흔한 만큼 가장 잘 잡히는 사이버 범죄이기도 하다. 하지만 돈 받고 전문적으로 공격하는 사람은 잘 안 잡히는 편이다.&lt;br /&gt;
&lt;br /&gt;
분산 서비스 공격은 DDOS와 다르며 DDOS가 분산 서비스 공격에 포함된다. 애초에 약칭부터가 DOS로 한 글자 차이나며 DDOS는 분산 서비스 '''거부''' 공격이다.&lt;br /&gt;
&lt;br /&gt;
클라우드 플레어에 도메인을 이전하면 DDOS 방지 서비스를 받을 수 있다.&lt;br /&gt;
&lt;br /&gt;
== 오사위키와의 관계 ==&lt;br /&gt;
정확히 오사위키와의 관계가 아니라 호스팅사와의 관계인데 한 해커가 [[host.us]]를 디도스로 테러하여 호스팅하던 사이트가 멈추게 되었다. 오사위키도 예외가 아니라서 무료 서비스에 겨우 빌붙어 살아있던 오사위키러들은 [[위키갤러리]]로 망명가서 [[팝콘]]을 뜯어먹었다고 한다.&lt;br /&gt;
&lt;br /&gt;
자세한건 [[오사위키 DDos 대란]] 문서 참조.&lt;br /&gt;
&lt;br /&gt;
== 같이보기 ==&lt;br /&gt;
* [[분산 반사 서비스 거부 공격]](DRDOS): 현재는 분산 서비스 공격 중에서 비주류이다. 정상적인 호스트들을 동원해 공격한다는 점이 다른 점이다.&lt;br /&gt;
&lt;br /&gt;
[[분류:보안 공격]]&lt;br /&gt;
[[분류:IT]]&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89446</id>
		<title>사용자:Cerulean/메모장/linux ralt hangul</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89446"/>
		<updated>2025-07-17T04:34:24Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Xorg 호환 옵션 ===&lt;br /&gt;
&lt;br /&gt;
/etc/X11/xinit/xinitrc.d/fix-alt-hangul.sh을 작성하여 아래 내용을 넣는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo setxkbmap -option korean:ralt_hangul,korean:rctrl_hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xorg/Wayland 모두 적용 ===&lt;br /&gt;
&lt;br /&gt;
https://blog.elmi.page/1075&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo systemctl enable keyd --no&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
104키의 키보드의 경우 한글 키가 인식되지 않는다.&lt;br /&gt;
&lt;br /&gt;
한/영키라고 키보드에 프린팅되어 있을텐데 그 키를 눌러 키의 이름을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo keyd monitor&lt;br /&gt;
---&amp;gt; &lt;br /&gt;
rightalt down&lt;br /&gt;
rightalt up&lt;br /&gt;
rightcontrol down&lt;br /&gt;
rightcontrol up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
한글 키의 이름 확인 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;keyd list-keys | grep han&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
zenkakuhankaku&lt;br /&gt;
hangeul&lt;br /&gt;
hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
편집기로 편집 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo nano /etc/keyd/default.conf&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
아래 입력&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;conf&amp;quot; line&amp;gt;&lt;br /&gt;
[ids]&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[main]&lt;br /&gt;
&lt;br /&gt;
# capslock을 컨트롤+esc 키로 매핑한다. caplock을 누르면 컨트롤+esc을 누른 것으로 인식된다.&lt;br /&gt;
#capslock = overload(control, esc)&lt;br /&gt;
&lt;br /&gt;
# escape 키를 capslock로 매핑한다. esc를 누르면 caplock을 누른 것으로 인식된다.&lt;br /&gt;
#esc = capslock&lt;br /&gt;
&lt;br /&gt;
rightalt = hangeul # &amp;lt;- 위에서 확인한 키의 이름을 넣는다.&lt;br /&gt;
rightcontrol = hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
fn 조합 특수 키도 유용하게 쓸 수 있을 것 같다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
keyd virtual keyboard file down&lt;br /&gt;
keyd virtual keyboard file up&lt;br /&gt;
keyd virtual keyboard search down&lt;br /&gt;
keyd virtual keyboard search up&lt;br /&gt;
keyd virtual keyboard calc down&lt;br /&gt;
keyd virtual keyboard calc up&lt;br /&gt;
keyd virtual keyboard config down&lt;br /&gt;
keyd virtual keyboard config up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89445</id>
		<title>사용자:Cerulean/메모장/linux ralt hangul</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89445"/>
		<updated>2025-07-17T04:29:56Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Xorg 호환 옵션 ===&lt;br /&gt;
&lt;br /&gt;
/etc/X11/xinit/xinitrc.d/fix-alt-hangul.sh을 작성하여 아래 내용을 넣는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo setxkbmap -option korean:ralt_hangul,korean:rctrl_hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Xorg/Wayland 모두 적용 ===&lt;br /&gt;
&lt;br /&gt;
https://blog.elmi.page/1075&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo systemctl enable keyd --no&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
104키의 키보드의 경우 한글 키가 인식되지 않는다.&lt;br /&gt;
&lt;br /&gt;
한/영키라고 키보드에 프린팅되어 있을텐데 그 키를 눌러 키의 이름을 확인한다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo keyd monitor&lt;br /&gt;
---&amp;gt; &lt;br /&gt;
rightalt down&lt;br /&gt;
rightalt up&lt;br /&gt;
rightcontrol down&lt;br /&gt;
rightcontrol up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
한글 키의 이름 확인 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;keyd list-keys | grep han&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
zenkakuhankaku&lt;br /&gt;
hangeul&lt;br /&gt;
hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
편집기로 편집 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo nano /etc/keyd/default.conf&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
아래 입력&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;conf&amp;quot; line&amp;gt;&lt;br /&gt;
[ids]&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[main]&lt;br /&gt;
&lt;br /&gt;
# capslock을 컨트롤+esc 키로 매핑한다. caplock을 누르면 컨트롤+esc을 누른 것으로 인식된다.&lt;br /&gt;
#capslock = overload(control, esc)&lt;br /&gt;
&lt;br /&gt;
# escape 키를 capslock로 매핑한다. esc를 누르면 caplock을 누른 것으로 인식된다.&lt;br /&gt;
#esc = capslock&lt;br /&gt;
&lt;br /&gt;
rightalt = hangeul # &amp;lt;- 위에서 확인한 키의 이름을 넣는다.&lt;br /&gt;
rightcontrol = hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89444</id>
		<title>사용자:Cerulean/메모장/linux ralt hangul</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_ralt_hangul&amp;diff=89444"/>
		<updated>2025-07-17T04:26:17Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 새 문서: https://blog.elmi.page/1075  &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo systemctl enable keyd --no&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;  104키의 키보드의 경우 한글 키가 인식되지 않는다.  &amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt; sudo keyd monitor ---&amp;gt;  rightalt down rightalt up rightcontrol down rightcontrol up &amp;lt;/syntaxhighlight&amp;gt;  한글 키의 이름 확인 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;keyd list-keys | grep han&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;  &amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt; zenkakuhankaku hangeul hanja &amp;lt;/syntaxhighlight&amp;gt;  편집기로 편집 &amp;lt;c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;https://blog.elmi.page/1075&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo systemctl enable keyd --no&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
104키의 키보드의 경우 한글 키가 인식되지 않는다.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
sudo keyd monitor&lt;br /&gt;
---&amp;gt; &lt;br /&gt;
rightalt down&lt;br /&gt;
rightalt up&lt;br /&gt;
rightcontrol down&lt;br /&gt;
rightcontrol up&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
한글 키의 이름 확인 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;keyd list-keys | grep han&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
zenkakuhankaku&lt;br /&gt;
hangeul&lt;br /&gt;
hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
편집기로 편집 &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;sudo nano /etc/keyd/default.conf&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
아래 입력&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;conf&amp;quot; line&amp;gt;&lt;br /&gt;
[ids]&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
[main]&lt;br /&gt;
&lt;br /&gt;
# capslock을 컨트롤+esc 키로 매핑한다. caplock을 누르면 컨트롤+esc을 누른 것으로 인식된다.&lt;br /&gt;
#capslock = overload(control, esc)&lt;br /&gt;
&lt;br /&gt;
# escape 키를 capslock로 매핑한다. esc를 누르면 caplock을 누른 것으로 인식된다.&lt;br /&gt;
#esc = capslock&lt;br /&gt;
rightalt = hangeul # &amp;lt;- 위에서 확인한 키의 이름을 넣는다.&lt;br /&gt;
rightcontrol = hanja&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89443</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89443"/>
		<updated>2025-07-17T04:17:00Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: Cerulean님이 사용자:Cerulean/메모장/linux 한글 입력 문서를 넘겨주기를 만들지 않고 사용자:Cerulean/메모장/linux keyboard settings 문서로 이동했습니다&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# IM_METHOD=nimf|ibus|fcitx5&lt;br /&gt;
&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS=&amp;quot;@im=$IM_METHOD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
case $IM_METHOD in&lt;br /&gt;
        nimf)&lt;br /&gt;
                nimf&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        ibus)&lt;br /&gt;
                ibus-daemon -rdx&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        fcitx5)&lt;br /&gt;
                fcitx5 -d&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89442</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89442"/>
		<updated>2025-07-15T14:11:11Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;br /&gt;
&lt;br /&gt;
hostapd -dd /etc/hostapd를 실행하고 나서 뜨는 로그에 사용 가능한 채널들이 나열되므로 로그를 보고 채널 설정해도 된다.&lt;br /&gt;
&lt;br /&gt;
=== /etc/hostapd.conf ===&lt;br /&gt;
이 설정 파일을 작성하여야 한다.&lt;br /&gt;
&lt;br /&gt;
wifi의 채널, 대역폭, 주파수나 암호화 알고리즘 등을 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예제&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
interface=w****&lt;br /&gt;
&lt;br /&gt;
# SSID to be used in IEEE 802.11 management frames&lt;br /&gt;
ssid=yourname&lt;br /&gt;
# Driver interface type (hostap/wired/none/nl80211/bsd)&lt;br /&gt;
driver=nl80211&lt;br /&gt;
# Country code (ISO/IEC 3166-1)&lt;br /&gt;
country_code=KR&lt;br /&gt;
&lt;br /&gt;
ctrl_interface=/var/run/hostapd&lt;br /&gt;
ctrl_interface_group=0&lt;br /&gt;
&lt;br /&gt;
# Operation mode&lt;br /&gt;
802.11a -&amp;gt; hw_mode=a (5GHz)&lt;br /&gt;
802.11b -&amp;gt; hw_mode=g (2.4GHz)&lt;br /&gt;
802.11g -&amp;gt; hw_mode=b (2.4GHz)&lt;br /&gt;
802.11n (2.4GHz, 5GHz) -&amp;gt; hw_mode=g, ieee80211n=1 (설정값이 똑같음, 채널만 바꿔주면 됨)&lt;br /&gt;
&lt;br /&gt;
hw_mode=b&lt;br /&gt;
# Channel number&lt;br /&gt;
# 비우면 자동 설정, 서비스 등록 된 상태에서 자동 실행될 경우 어째서인지 오류 발생 -&amp;gt; 꼭 채널을 지정해주어야 작동되었음&lt;br /&gt;
channel=1&lt;br /&gt;
# Maximum number of stations allowed&lt;br /&gt;
max_num_sta=5&lt;br /&gt;
&lt;br /&gt;
# Bit field: bit0 = WPA, bit1 = WPA2&lt;br /&gt;
wpa=2&lt;br /&gt;
# Bit field: 1=wpa, 2=wep, 3=both&lt;br /&gt;
auth_algs=1&lt;br /&gt;
&lt;br /&gt;
# Set of accepted cipher suites; disabling insecure TKIP&lt;br /&gt;
# TKIP는 쉽게 복호화되니까 사용하지 말자...&lt;br /&gt;
wpa_pairwise=CCMP&lt;br /&gt;
# Set of accepted key management algorithms&lt;br /&gt;
wpa_key_mgmt=WPA-PSK&lt;br /&gt;
wpa_passphrase=**********&lt;br /&gt;
&lt;br /&gt;
macaddr_acl=0&lt;br /&gt;
&lt;br /&gt;
#ap_isolate=1&lt;br /&gt;
&lt;br /&gt;
# hostapd event logger configuration&lt;br /&gt;
logger_stdout=-1&lt;br /&gt;
logger_stdout_level=2&lt;br /&gt;
&lt;br /&gt;
## Enable 802.11n support&lt;br /&gt;
ieee80211n=1&lt;br /&gt;
## Enable 802.11ac support&lt;br /&gt;
#ieee80211ac=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS 서버 ===&lt;br /&gt;
DNS를 1.1.1.1이나 8.8.8.8과 같은 공개 DNS를 쓰기도 하고 사설 DNS를 쓰기도 한다.&lt;br /&gt;
&lt;br /&gt;
=== dhcpd ===&lt;br /&gt;
IP를 네트워크에 있는 각 호스트에서 부여해야 함.&lt;br /&gt;
&lt;br /&gt;
isc-dhcp-server, dnsmasq가 있다.&lt;br /&gt;
&lt;br /&gt;
==== isc-dhcp-server ====&lt;br /&gt;
주소는 아래 범위의 내부용 주소를 입력해야 한다.&lt;br /&gt;
&lt;br /&gt;
routers 옵션이 없으면 라우터가 10.0.0.1 주소를 차지함에도 불구하고 클라이언트에 10.0.0.1 주소를 부여하는 불상사가 발생할 수 있다. (확인 안한 정보)&lt;br /&gt;
&lt;br /&gt;
172.16.0.0/12, 192.168.1.0/16, 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
subnet 10.0.0.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 10.0.0.2 10.0.0.100;&lt;br /&gt;
  option domain-name-servers 1.1.1.1;&lt;br /&gt;
  option domain-name &amp;quot;dhcp&amp;quot;;&lt;br /&gt;
  option routers 10.0.0.1;&lt;br /&gt;
  option broadcast-address 10.0.0.255;&lt;br /&gt;
  default-lease-time 600;&lt;br /&gt;
  max-lease-time 7200;&lt;br /&gt;
  interface *******;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Dnsmasq&lt;br /&gt;
&lt;br /&gt;
=== hostapd/dhcpd 오류 수정 ===&lt;br /&gt;
장치가 완전히 로드된 후에 hostapd 데몬이 작동하길 원한다면(dhcpd가 먼저 활성화되면서 인터페이스가 존재하지 않는다는 오류가 발생할 경우) 아래 파일에 작성. wlan0는 자신의 무선 네트워크 인터페이스 이름을 넣는다.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/system/hostapd.service.d/override.conf&lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
BindsTo=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
After=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
&lt;br /&gt;
systemctl edit hostapd 명령어를 이용해서 파일을 작성해도 된다.&lt;br /&gt;
&lt;br /&gt;
끝나고 systemctl restart hostapd 잊지 않는다&lt;br /&gt;
&lt;br /&gt;
=== NAT 활성화 ===&lt;br /&gt;
wifi 연결은 되는 상태여도 NAT를 활성화하지 않으면 인터넷 접근이 불가능.&lt;br /&gt;
&lt;br /&gt;
외부로 나가는(egress) 인터페이스(eth0)는 방화벽이 안전하게 설정되어야 한다.&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --zone=internal --add-interface=wifi0 --permanent&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --zone=external --add-interface=eth0 --permanent&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --permanent --new-policy int2ext&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-ingress-zone internal&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-egress-zone external&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --set-target ACCEPT&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
아래처럼 해도 되는데 설정 유지가 안되어 별도로 부팅 후 자동 실행 설정이 되어야 함. firewalld가 없는 경우에.&lt;br /&gt;
* iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE&lt;br /&gt;
* iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
* iptables -A FORWARD -i net0 -o internet0 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Internet_sharing&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89441</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89441"/>
		<updated>2025-07-15T13:40:37Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;br /&gt;
&lt;br /&gt;
hostapd -dd /etc/hostapd를 실행하고 나서 뜨는 로그에 사용 가능한 채널들이 나열되므로 로그를 보고 채널 설정해도 된다.&lt;br /&gt;
&lt;br /&gt;
=== /etc/hostapd.conf ===&lt;br /&gt;
이 설정 파일을 작성하여야 한다.&lt;br /&gt;
&lt;br /&gt;
wifi의 채널, 대역폭, 주파수나 암호화 알고리즘 등을 설정할 수 있다.&lt;br /&gt;
&lt;br /&gt;
예제&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
interface=w****&lt;br /&gt;
&lt;br /&gt;
# SSID to be used in IEEE 802.11 management frames&lt;br /&gt;
ssid=yourname&lt;br /&gt;
# Driver interface type (hostap/wired/none/nl80211/bsd)&lt;br /&gt;
driver=nl80211&lt;br /&gt;
# Country code (ISO/IEC 3166-1)&lt;br /&gt;
country_code=KR&lt;br /&gt;
&lt;br /&gt;
ctrl_interface=/var/run/hostapd&lt;br /&gt;
ctrl_interface_group=0&lt;br /&gt;
&lt;br /&gt;
# Operation mode (a = IEEE 802.11a (5 GHz), b = IEEE 802.11b (2.4 GHz)&lt;br /&gt;
# 5 GHz면 ac도 a도 a로 작성 -&amp;gt; ieee80211ac=1을 설정해주어야 비로소 ac로 작동함.&lt;br /&gt;
# 2.4 GHz면 b도 g도 n도 b로 작성 -&amp;gt; ieee80211n=1을 설정해주어야 비로소 n으로 작동함.&lt;br /&gt;
hw_mode=b&lt;br /&gt;
# Channel number&lt;br /&gt;
# 비우면 자동 설정, 서비스 등록 된 상태에서 자동 실행될 경우 어째서인지 오류 발생 -&amp;gt; 꼭 채널을 지정해주어야 작동되었음&lt;br /&gt;
channel=1&lt;br /&gt;
# Maximum number of stations allowed&lt;br /&gt;
max_num_sta=5&lt;br /&gt;
&lt;br /&gt;
# Bit field: bit0 = WPA, bit1 = WPA2&lt;br /&gt;
wpa=2&lt;br /&gt;
# Bit field: 1=wpa, 2=wep, 3=both&lt;br /&gt;
auth_algs=1&lt;br /&gt;
&lt;br /&gt;
# Set of accepted cipher suites; disabling insecure TKIP&lt;br /&gt;
# TKIP는 쉽게 복호화되니까 사용하지 말자...&lt;br /&gt;
wpa_pairwise=CCMP&lt;br /&gt;
# Set of accepted key management algorithms&lt;br /&gt;
wpa_key_mgmt=WPA-PSK&lt;br /&gt;
wpa_passphrase=**********&lt;br /&gt;
&lt;br /&gt;
macaddr_acl=0&lt;br /&gt;
&lt;br /&gt;
#ap_isolate=1&lt;br /&gt;
&lt;br /&gt;
# hostapd event logger configuration&lt;br /&gt;
logger_stdout=-1&lt;br /&gt;
logger_stdout_level=2&lt;br /&gt;
&lt;br /&gt;
## Enable 802.11n support&lt;br /&gt;
ieee80211n=1&lt;br /&gt;
## Enable 802.11ac support&lt;br /&gt;
#ieee80211ac=1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DNS 서버 ===&lt;br /&gt;
DNS를 1.1.1.1이나 8.8.8.8과 같은 공개 DNS를 쓰기도 하고 사설 DNS를 쓰기도 한다.&lt;br /&gt;
&lt;br /&gt;
=== dhcpd ===&lt;br /&gt;
IP를 네트워크에 있는 각 호스트에서 부여해야 함.&lt;br /&gt;
&lt;br /&gt;
isc-dhcp-server, dnsmasq가 있다.&lt;br /&gt;
&lt;br /&gt;
==== isc-dhcp-server ====&lt;br /&gt;
주소는 아래 범위의 내부용 주소를 입력해야 한다.&lt;br /&gt;
&lt;br /&gt;
routers 옵션이 없으면 라우터가 10.0.0.1 주소를 차지함에도 불구하고 클라이언트에 10.0.0.1 주소를 부여하는 불상사가 발생할 수 있다. (확인 안한 정보)&lt;br /&gt;
&lt;br /&gt;
172.16.0.0/12, 192.168.1.0/16, 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
subnet 10.0.0.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 10.0.0.2 10.0.0.100;&lt;br /&gt;
  option domain-name-servers 1.1.1.1;&lt;br /&gt;
  option domain-name &amp;quot;dhcp&amp;quot;;&lt;br /&gt;
  option routers 10.0.0.1;&lt;br /&gt;
  option broadcast-address 10.0.0.255;&lt;br /&gt;
  default-lease-time 600;&lt;br /&gt;
  max-lease-time 7200;&lt;br /&gt;
  interface *******;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Dnsmasq&lt;br /&gt;
&lt;br /&gt;
=== hostapd/dhcpd 오류 수정 ===&lt;br /&gt;
장치가 완전히 로드된 후에 hostapd 데몬이 작동하길 원한다면(dhcpd가 먼저 활성화되면서 인터페이스가 존재하지 않는다는 오류가 발생할 경우) 아래 파일에 작성. wlan0는 자신의 무선 네트워크 인터페이스 이름을 넣는다.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/system/hostapd.service.d/override.conf&lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
BindsTo=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
After=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
&lt;br /&gt;
systemctl edit hostapd 명령어를 이용해서 파일을 작성해도 된다.&lt;br /&gt;
&lt;br /&gt;
끝나고 systemctl restart hostapd 잊지 않는다&lt;br /&gt;
&lt;br /&gt;
=== NAT 활성화 ===&lt;br /&gt;
wifi 연결은 되는 상태여도 NAT를 활성화하지 않으면 인터넷 접근이 불가능.&lt;br /&gt;
&lt;br /&gt;
외부로 나가는(egress) 인터페이스(eth0)는 방화벽이 안전하게 설정되어야 한다.&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --zone=internal --add-interface=wifi0 --permanent&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --zone=external --add-interface=eth0 --permanent&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --permanent --new-policy int2ext&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-ingress-zone internal&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-egress-zone external&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --set-target ACCEPT&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
아래처럼 해도 되는데 설정 유지가 안되어 별도로 부팅 후 자동 실행 설정이 되어야 함. firewalld가 없는 경우에.&lt;br /&gt;
* iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE&lt;br /&gt;
* iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
* iptables -A FORWARD -i net0 -o internet0 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Internet_sharing&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89440</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89440"/>
		<updated>2025-07-15T13:34:03Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* dhcpd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;br /&gt;
&lt;br /&gt;
hostapd -dd /etc/hostapd를 실행하고 나서 뜨는 로그에 사용 가능한 채널들이 나열되므로 로그를 보고 채널 설정해도 된다.&lt;br /&gt;
&lt;br /&gt;
=== DNS 서버 ===&lt;br /&gt;
DNS를 1.1.1.1이나 8.8.8.8과 같은 공개 DNS를 쓰기도 하고 사설 DNS를 쓰기도 한다.&lt;br /&gt;
&lt;br /&gt;
=== dhcpd ===&lt;br /&gt;
IP를 네트워크에 있는 각 호스트에서 부여해야 함.&lt;br /&gt;
&lt;br /&gt;
isc-dhcp-server, dnsmasq가 있다.&lt;br /&gt;
&lt;br /&gt;
==== isc-dhcp-server ====&lt;br /&gt;
주소는 아래 범위의 내부용 주소를 입력해야 한다.&lt;br /&gt;
&lt;br /&gt;
routers 옵션이 없으면 라우터가 10.0.0.1 주소를 차지함에도 불구하고 클라이언트에 10.0.0.1 주소를 부여하는 불상사가 발생할 수 있다. (확인 안한 정보)&lt;br /&gt;
&lt;br /&gt;
172.16.0.0/12, 192.168.1.0/16, 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
subnet 10.0.0.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 10.0.0.2 10.0.0.100;&lt;br /&gt;
  option domain-name-servers 1.1.1.1;&lt;br /&gt;
  option domain-name &amp;quot;dhcp&amp;quot;;&lt;br /&gt;
  option routers 10.0.0.1;&lt;br /&gt;
  option broadcast-address 10.0.0.255;&lt;br /&gt;
  default-lease-time 600;&lt;br /&gt;
  max-lease-time 7200;&lt;br /&gt;
  interface *******;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Dnsmasq&lt;br /&gt;
&lt;br /&gt;
=== hostapd/dhcpd 오류 수정 ===&lt;br /&gt;
장치가 완전히 로드된 후에 hostapd 데몬이 작동하길 원한다면(dhcpd가 먼저 활성화되면서 인터페이스가 존재하지 않는다는 오류가 발생할 경우) 아래 파일에 작성. wlan0는 자신의 무선 네트워크 인터페이스 이름을 넣는다.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/system/hostapd.service.d/override.conf&lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
BindsTo=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
After=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
&lt;br /&gt;
systemctl edit hostapd 명령어를 이용해서 파일을 작성해도 된다.&lt;br /&gt;
&lt;br /&gt;
끝나고 systemctl restart hostapd 잊지 않는다&lt;br /&gt;
&lt;br /&gt;
=== NAT 활성화 ===&lt;br /&gt;
wifi 연결은 되는 상태여도 NAT를 활성화하지 않으면 인터넷 접근이 불가능.&lt;br /&gt;
&lt;br /&gt;
외부로 나가는(egress) 인터페이스(eth0)는 방화벽이 안전하게 설정되어야 한다.&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --zone=internal --add-interface=wifi0 --permanent&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --zone=external --add-interface=eth0 --permanent&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --permanent --new-policy int2ext&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-ingress-zone internal&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-egress-zone external&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --set-target ACCEPT&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
아래처럼 해도 되는데 설정 유지가 안되어 별도로 부팅 후 자동 실행 설정이 되어야 함. firewalld가 없는 경우에.&lt;br /&gt;
* iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE&lt;br /&gt;
* iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
* iptables -A FORWARD -i net0 -o internet0 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Internet_sharing&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89439</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89439"/>
		<updated>2025-07-15T13:31:24Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* NAT 활성화 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;br /&gt;
&lt;br /&gt;
hostapd -dd /etc/hostapd를 실행하고 나서 뜨는 로그에 사용 가능한 채널들이 나열되므로 로그를 보고 채널 설정해도 된다.&lt;br /&gt;
&lt;br /&gt;
=== dhcpd ===&lt;br /&gt;
IP를 네트워크에 있는 각 호스트에서 부여해야 함.&lt;br /&gt;
&lt;br /&gt;
isc-dhcp-server, dnsmasq가 있다.&lt;br /&gt;
&lt;br /&gt;
==== isc-dhcp-server ====&lt;br /&gt;
주소는 아래 범위의 내부용 주소를 입력해야 한다.&lt;br /&gt;
&lt;br /&gt;
routers 옵션이 없으면 라우터가 10.0.0.1 주소를 차지함에도 불구하고 클라이언트에 10.0.0.1 주소를 부여하는 불상사가 발생할 수 있다. (확인 안한 정보)&lt;br /&gt;
&lt;br /&gt;
172.16.0.0/12, 192.168.1.0/16, 10.0.0.0/8&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;&amp;quot; line&amp;gt;&lt;br /&gt;
subnet 10.0.0.0 netmask 255.255.255.0 {&lt;br /&gt;
  range 10.0.0.2 10.0.0.100;&lt;br /&gt;
  option domain-name-servers 1.1.1.1;&lt;br /&gt;
  option domain-name &amp;quot;dhcp&amp;quot;;&lt;br /&gt;
  option routers 10.0.0.1;&lt;br /&gt;
  option broadcast-address 10.0.0.255;&lt;br /&gt;
  default-lease-time 600;&lt;br /&gt;
  max-lease-time 7200;&lt;br /&gt;
  interface *******;&lt;br /&gt;
}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Dnsmasq&lt;br /&gt;
&lt;br /&gt;
=== hostapd/dhcpd 오류 수정 ===&lt;br /&gt;
장치가 완전히 로드된 후에 hostapd 데몬이 작동하길 원한다면(dhcpd가 먼저 활성화되면서 인터페이스가 존재하지 않는다는 오류가 발생할 경우) 아래 파일에 작성. wlan0는 자신의 무선 네트워크 인터페이스 이름을 넣는다.&lt;br /&gt;
&lt;br /&gt;
/etc/systemd/system/hostapd.service.d/override.conf&lt;br /&gt;
&lt;br /&gt;
[Unit]&lt;br /&gt;
BindsTo=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
After=sys-subsystem-net-devices-wlan0.device&lt;br /&gt;
&lt;br /&gt;
systemctl edit hostapd 명령어를 이용해서 파일을 작성해도 된다.&lt;br /&gt;
&lt;br /&gt;
끝나고 systemctl restart hostapd 잊지 않는다&lt;br /&gt;
&lt;br /&gt;
=== NAT 활성화 ===&lt;br /&gt;
wifi 연결은 되는 상태여도 NAT를 활성화하지 않으면 인터넷 접근이 불가능.&lt;br /&gt;
&lt;br /&gt;
외부로 나가는(egress) 인터페이스(eth0)는 방화벽이 안전하게 설정되어야 한다.&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --zone=internal --add-interface=wifi0 --permanent&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --zone=external --add-interface=eth0 --permanent&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --permanent --new-policy int2ext&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-ingress-zone internal&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-egress-zone external&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --set-target ACCEPT&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&lt;br /&gt;
아래처럼 해도 되는데 설정 유지가 안되어 별도로 부팅 후 자동 실행 설정이 되어야 함. firewalld가 없는 경우에.&lt;br /&gt;
* iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE&lt;br /&gt;
* iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT&lt;br /&gt;
* iptables -A FORWARD -i net0 -o internet0 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
https://wiki.archlinux.org/title/Internet_sharing&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89438</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89438"/>
		<updated>2025-07-15T13:14:49Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;br /&gt;
&lt;br /&gt;
hostapd -dd /etc/hostapd를 실행하고 나서 뜨는 로그에 사용 가능한 채널들이 나열되므로 로그를 보고 채널 설정해도 된다.&lt;br /&gt;
&lt;br /&gt;
=== NAT 활성화 ===&lt;br /&gt;
wifi 연결은 되는 상태여도 NAT를 활성화하지 않으면 인터넷 접근이 불가능.&lt;br /&gt;
&lt;br /&gt;
외부로 나가는(egress) 인터페이스(eth0)는 방화벽이 안전하게 설정되어야 한다.&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --zone=internal --add-interface=wifi0 --permanent&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --zone=external --add-interface=eth0 --permanent&lt;br /&gt;
&lt;br /&gt;
firewall-cmd --permanent --new-policy int2ext&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-ingress-zone internal&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --add-egress-zone external&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --policy int2ext --set-target ACCEPT&amp;lt;br&amp;gt;&lt;br /&gt;
firewall-cmd --reload&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89437</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89437"/>
		<updated>2025-07-15T10:25:40Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
; 40MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5180-5220) O, 5220(5200-5240) X&lt;br /&gt;
&lt;br /&gt;
; 20MHz일 때&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200(5190-5210) O, 5220(5210-5230) O&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89436</id>
		<title>사용자:Cerulean/메모장/hostapd</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/hostapd&amp;diff=89436"/>
		<updated>2025-07-15T10:24:09Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 새 문서: 장치에서 지원하는 주파수 확인 &amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt; iw phy1 info  # (disabled) =&amp;gt; 사용 불가능 # (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음.  # https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html .. 			* 5180.0 MHz [36] (18.0 dBm) 			* 5200.0 MHz [40] (18.0 dBm) 			* 5220.0 MHz...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;장치에서 지원하는 주파수 확인&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;plaintext&amp;quot; line&amp;gt;&lt;br /&gt;
iw phy1 info&lt;br /&gt;
&lt;br /&gt;
# (disabled) =&amp;gt; 사용 불가능&lt;br /&gt;
# (radar detection) =&amp;gt; 근처 레이더 시설에서 5GHz 대의 레이더가 작동하면 잠시 WIFI가 중단되고 재연결이 될 수 있음. &lt;br /&gt;
# https://www.cisco.com/c/ko_kr/support/docs/wireless-mobility/80211/213882-radar-detection-in-dynamic-frequency-sel.html&lt;br /&gt;
..&lt;br /&gt;
			* 5180.0 MHz [36] (18.0 dBm)&lt;br /&gt;
			* 5200.0 MHz [40] (18.0 dBm)&lt;br /&gt;
			* 5220.0 MHz [44] (18.0 dBm)&lt;br /&gt;
			* 5240.0 MHz [48] (17.0 dBm)&lt;br /&gt;
			* 5260.0 MHz [52] (18.0 dBm) &lt;br /&gt;
			* 5280.0 MHz [56] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5300.0 MHz [60] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5320.0 MHz [64] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5500.0 MHz [100] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5520.0 MHz [104] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5540.0 MHz [108] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5560.0 MHz [112] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5580.0 MHz [116] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5600.0 MHz [120] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5620.0 MHz [124] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5640.0 MHz [128] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5660.0 MHz [132] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5680.0 MHz [136] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5700.0 MHz [140] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5720.0 MHz [144] (18.0 dBm) (radar detection)&lt;br /&gt;
			* 5745.0 MHz [149] (18.0 dBm)&lt;br /&gt;
			* 5765.0 MHz [153] (18.0 dBm)&lt;br /&gt;
			* 5785.0 MHz [157] (18.0 dBm)&lt;br /&gt;
			* 5805.0 MHz [161] (18.0 dBm)&lt;br /&gt;
			* 5825.0 MHz [165] (18.0 dBm)&lt;br /&gt;
			* 5845.0 MHz [169] (disabled)&lt;br /&gt;
			* 5865.0 MHz [173] (disabled)&lt;br /&gt;
			* 5885.0 MHz [177] (disabled)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
iw reg set KR&lt;br /&gt;
iw reg get&lt;br /&gt;
&lt;br /&gt;
현지에서 사용 가능한 주파수 대역&lt;br /&gt;
&lt;br /&gt;
global&lt;br /&gt;
country KR: DFS-JP&lt;br /&gt;
	(2400 - 2483 @ 40), (N/A, 23), (N/A)&lt;br /&gt;
	(5150 - 5230 @ 40), (N/A, 23), (N/A), AUTO-BW&lt;br /&gt;
	(5230 - 5250 @ 20), (N/A, 17), (N/A), AUTO-BW&lt;br /&gt;
	(5250 - 5350 @ 80), (N/A, 20), (0 ms), DFS, AUTO-BW&lt;br /&gt;
	(5470 - 5725 @ 160), (N/A, 20), (0 ms), DFS&lt;br /&gt;
	(5725 - 5850 @ 80), (N/A, 23), (N/A)&lt;br /&gt;
	(5925 - 7125 @ 160), (N/A, 15), (N/A), NO-OUTDOOR&lt;br /&gt;
	(57000 - 66000 @ 2160), (N/A, 43), (N/A)&lt;br /&gt;
&lt;br /&gt;
phy#0&lt;br /&gt;
country 99: DFS-UNSET&lt;br /&gt;
	(2402 - 2472 @ 40), (N/A, 20), (N/A)&lt;br /&gt;
	(2457 - 2482 @ 40), (N/A, 20), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5140 - 5360 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
	(5715 - 5860 @ 80), (N/A, 30), (N/A), PASSIVE-SCAN&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
iw phy1 info에서 확인한 채널이 위의 범위에 포함되면 사용 가능&lt;br /&gt;
&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200 @ 40(5180-5220) O, 5220 @ 40(5200-5240) X&lt;br /&gt;
(5150 - 5230 @ 40) -&amp;gt; 5200 @ 20(5190-5210) O, 5220 @ 20(5210-5230) O&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89435</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89435"/>
		<updated>2025-07-06T10:52:22Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# IM_METHOD=nimf|ibus|fcitx5&lt;br /&gt;
&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS=&amp;quot;@im=$IM_METHOD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
case $IM_METHOD in&lt;br /&gt;
        nimf)&lt;br /&gt;
                nimf&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        ibus)&lt;br /&gt;
                ibus-daemon -rdx&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        fcitx5)&lt;br /&gt;
                fcitx5 -d&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89434</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89434"/>
		<updated>2025-07-06T10:48:44Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot;&amp;gt;&lt;br /&gt;
echo '\&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
# IM_METHOD=nimf|ibus|fcitx5&lt;br /&gt;
&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS='@im=$IM_METHOD'&lt;br /&gt;
&lt;br /&gt;
case $IM_METHOD in&lt;br /&gt;
        nimf)&lt;br /&gt;
                nimf&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        ibus)&lt;br /&gt;
                ibus-daemon -rdx&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        fcitx5)&lt;br /&gt;
                fcitx5 -d&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
' &amp;gt;&amp;gt; /etc/xprofile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89433</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89433"/>
		<updated>2025-07-06T10:46:46Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;&lt;br /&gt;
echo '#!/bin/sh&lt;br /&gt;
# IM_METHOD=nimf|ibus|fcitx5&lt;br /&gt;
&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS='@im=$IM_METHOD'&lt;br /&gt;
&lt;br /&gt;
case $IM_METHOD in&lt;br /&gt;
        nimf)&lt;br /&gt;
                nimf&lt;br /&gt;
                echo nimf&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        ibus)&lt;br /&gt;
                ibus-daemon -rdx&lt;br /&gt;
        ;;&lt;br /&gt;
&lt;br /&gt;
        fcitx5)&lt;br /&gt;
                fcitx5 -d&lt;br /&gt;
        ;;&lt;br /&gt;
esac&lt;br /&gt;
' &amp;gt;&amp;gt; /etc/xprofile&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89432</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89432"/>
		<updated>2025-07-04T12:11:32Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;#!/bin/sh&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;\&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS='@im=$IM_METHOD'&lt;br /&gt;
&amp;quot; &amp;gt;&amp;gt; /etc/xprofile&lt;br /&gt;
&lt;br /&gt;
nimf인 경우 nimf &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ibus인 경우 ibus-daemon -rdx&lt;br /&gt;
&lt;br /&gt;
fcitx5인 경우 fcitx5 -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89431</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89431"/>
		<updated>2025-07-04T11:50:05Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;console&amp;quot; line&amp;gt;#!/bin/sh&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS=&amp;quot;@im=$IM_METHOD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nimf인 경우 nimf &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ibus인 경우 ibus-daemon -rdx&lt;br /&gt;
&lt;br /&gt;
fcitx5인 경우 fcitx5 -d&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89430</id>
		<title>사용자:Cerulean/메모장/linux keyboard settings</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/%EB%A9%94%EB%AA%A8%EC%9E%A5/linux_keyboard_settings&amp;diff=89430"/>
		<updated>2025-07-04T11:49:44Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: 새 문서: GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)  startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)  #!/bin/sh IM_METHOD=&amp;quot;nimf&amp;quot;  export GTK_IM_MODULE=$IM_METHOD export QT4_IM_MODULE=$IM_METHOD export QT_IM_MODULE=$IM_METHOD export XMODIFIERS=&amp;quot;@im=$IM_METHOD&amp;quot;  nimf인 경우 nimf &amp;amp;  ibus인 경우 ibus-daemon -rdx  fcitx5인 경우 fcitx5 -d&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GDM, LightDM, SDDM과 같은 그래픽 디스플레이 관리자를 사용하는 경우: .xprofile (개인), /etc/xprofile (전역)&lt;br /&gt;
&lt;br /&gt;
startx나 SLiM을 사용하는 경우: .xinitrc (개인), /etc/X11/xinit/xinitrc.d (전역)&lt;br /&gt;
&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
IM_METHOD=&amp;quot;nimf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export GTK_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT4_IM_MODULE=$IM_METHOD&lt;br /&gt;
export QT_IM_MODULE=$IM_METHOD&lt;br /&gt;
export XMODIFIERS=&amp;quot;@im=$IM_METHOD&amp;quot;&lt;br /&gt;
&lt;br /&gt;
nimf인 경우 nimf &amp;amp;&lt;br /&gt;
&lt;br /&gt;
ibus인 경우 ibus-daemon -rdx&lt;br /&gt;
&lt;br /&gt;
fcitx5인 경우 fcitx5 -d&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Yicg4yu1fawfoas1&amp;topic_revId=yuhm823xyfw055ld&amp;action=single-view</id>
		<title>주제:Yicg4yu1fawfoas1</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Yicg4yu1fawfoas1&amp;topic_revId=yuhm823xyfw055ld&amp;action=single-view"/>
		<updated>2025-07-04T11:40:09Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean&quot; class=&quot;mw-userlink&quot; title=&quot;사용자:Cerulean&quot;&gt;&lt;bdi&gt;Cerulean&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:Cerulean&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;사용자토론:Cerulean&quot;&gt;토론&lt;/a&gt; | &lt;a href=&quot;/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Cerulean&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;특수:기여/Cerulean&quot;&gt;기여&lt;/a&gt;)&lt;/span&gt;님이 &lt;a rel=&quot;nofollow&quot; class=&quot;external text&quot; href=&quot;https://bigforest.a2hosted.com/wiki/%EC%A3%BC%EC%A0%9C:Yicg4yu1fawfoas1&quot;&gt;주제&lt;/a&gt; &quot;좌하단 네비게이션 관련&quot;을(를) 해결됨으로 표시했습니다 (&lt;em&gt;해결한 것으로 표시함&lt;/em&gt;)&lt;/span&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/todo&amp;diff=89429</id>
		<title>사용자:Cerulean/todo</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/todo&amp;diff=89429"/>
		<updated>2025-07-03T10:23:17Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* 2025년 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* ArticleButtons.js&lt;br /&gt;
&lt;br /&gt;
* randomPageList.js&lt;br /&gt;
&lt;br /&gt;
* https://bigforest.a2hosted.com/wiki/%ED%8A%B9%EC%88%98:%EA%B0%80%EB%A6%AC%ED%82%A4%EB%8A%94%EB%AC%B8%EC%84%9C/%ED%8B%80:%EC%B2%A0%EB%8F%84%EC%97%AD_%EC%A0%95%EB%B3%B4/%EB%81%9D&lt;br /&gt;
&lt;br /&gt;
* 대전 버스 노선 위키: api 이용&lt;br /&gt;
&lt;br /&gt;
* 배경색 변경&lt;br /&gt;
&lt;br /&gt;
https://bigforest.a2hosted.com/wiki/%ED%8B%80:%EC%A0%95%EB%B3%B4%EC%83%81%EC%9E%90_%EC%A0%9C%EB%AA%A9%EC%B9%B8&lt;br /&gt;
&lt;br /&gt;
한국사 정리&lt;br /&gt;
&lt;br /&gt;
nested shell string&lt;br /&gt;
&lt;br /&gt;
위에 것 못할 수도 있음&lt;br /&gt;
&lt;br /&gt;
== 2025년 ==&lt;br /&gt;
* 틀 구현 교체 작업: 도우미 스크립트를 이용하여 작업한다. 단순 정규식 텍스트 교체.&lt;br /&gt;
* OSM 기반 SVG 생성 서버 제작, 버스 노선도 자동 생성을 맡길 수 있음. (SVG 지도 생성 부분은 완료)&lt;br /&gt;
** json 데이터로 query 요청과 스타일 지정 기능&lt;br /&gt;
** 보안 기능 없음 (보안 공격 방어 방법들을 학습하고 적용). DDOS 방지 필수.&lt;br /&gt;
* OSM 버스 노선 뷰어. 버스 노선도 자동 생성 기능. 오류 수정 기능. 자동 노선 데이터 수정. 버스 정류장 번호 수정.&lt;br /&gt;
&lt;br /&gt;
* SVG export&lt;br /&gt;
* Fix wrong path&lt;br /&gt;
* Edit busstop id&lt;br /&gt;
* 버스 운행 시간 수정 기능&lt;br /&gt;
&lt;br /&gt;
== 2026년 ==&lt;br /&gt;
모듈 없는 인용 틀.&lt;br /&gt;
&lt;br /&gt;
== 문서 등재 ==&lt;br /&gt;
* [[코어 파킹]] https://m.blog.naver.com/achenev/40187616029 코어 파킹을 이용해 전력을 아껴보자.&lt;br /&gt;
* [[윷놀이]]&lt;br /&gt;
* 암호 블록 운용 모드 https://webstone.tistory.com/134&lt;br /&gt;
&lt;br /&gt;
https://m.inven.co.kr/board/black/3584/56025&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Yn6udxorb7vtd3f5&amp;topic_showPostId=yn6udxorb7vtd3f5#flow-post-yn6udxorb7vtd3f5</id>
		<title>주제:Yn6udxorb7vtd3f5</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Yn6udxorb7vtd3f5&amp;topic_showPostId=yn6udxorb7vtd3f5#flow-post-yn6udxorb7vtd3f5"/>
		<updated>2025-07-03T10:16:25Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean&quot; class=&quot;mw-userlink&quot; title=&quot;사용자:Cerulean&quot;&gt;&lt;bdi&gt;Cerulean&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:Cerulean&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;사용자토론:Cerulean&quot;&gt;토론&lt;/a&gt; | &lt;a href=&quot;/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Cerulean&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;특수:기여/Cerulean&quot;&gt;기여&lt;/a&gt;)&lt;/span&gt;님이 &quot;위키 db 덤프 관련&quot;의 &lt;a rel=&quot;nofollow&quot; class=&quot;external text&quot; href=&quot;https://bigforest.a2hosted.com/wiki/%EC%A3%BC%EC%A0%9C:Yn6udxorb7vtd3f5&quot;&gt;주제&lt;/a&gt;를 숨겼습니다 (&lt;em&gt;나중에의 문제&lt;/em&gt;)&lt;/span&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Ymbmrhpcj6vt1y1d&amp;topic_postId=yuf96jgm5kh97t01&amp;topic_revId=yuf9bx4pif4a7gy9&amp;action=single-view</id>
		<title>주제:Ymbmrhpcj6vt1y1d</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Ymbmrhpcj6vt1y1d&amp;topic_postId=yuf96jgm5kh97t01&amp;topic_revId=yuf9bx4pif4a7gy9&amp;action=single-view"/>
		<updated>2025-07-03T10:15:47Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean&quot; class=&quot;mw-userlink&quot; title=&quot;사용자:Cerulean&quot;&gt;&lt;bdi&gt;Cerulean&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:Cerulean&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;사용자토론:Cerulean&quot;&gt;토론&lt;/a&gt; | &lt;a href=&quot;/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Cerulean&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;특수:기여/Cerulean&quot;&gt;기여&lt;/a&gt;)&lt;/span&gt;님이 &quot;근황입니다&quot;의 &lt;a rel=&quot;nofollow&quot; class=&quot;external text&quot; href=&quot;https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Ymbmrhpcj6vt1y1d&amp;amp;topic_showPostId=yuf96jgm5kh97t01#flow-post-yuf96jgm5kh97t01&quot;&gt;게시글&lt;/a&gt;을 편집했습니다&lt;/span&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Ymbmrhpcj6vt1y1d&amp;topic_postId=yuf96jgm5kh97t01&amp;topic_revId=yuf96jgm5kh97t01&amp;action=single-view</id>
		<title>주제:Ymbmrhpcj6vt1y1d</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Ymbmrhpcj6vt1y1d&amp;topic_postId=yuf96jgm5kh97t01&amp;topic_revId=yuf96jgm5kh97t01&amp;action=single-view"/>
		<updated>2025-07-03T10:13:06Z</updated>

		<summary type="html">&lt;span class=&quot;plainlinks&quot;&gt;&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean&quot; class=&quot;mw-userlink&quot; title=&quot;사용자:Cerulean&quot;&gt;&lt;bdi&gt;Cerulean&lt;/bdi&gt;&lt;/a&gt; &lt;span class=&quot;mw-usertoollinks&quot;&gt;(&lt;a href=&quot;/wiki/%EC%82%AC%EC%9A%A9%EC%9E%90%ED%86%A0%EB%A1%A0:Cerulean&quot; class=&quot;mw-usertoollinks-talk&quot; title=&quot;사용자토론:Cerulean&quot;&gt;토론&lt;/a&gt; | &lt;a href=&quot;/wiki/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/Cerulean&quot; class=&quot;mw-usertoollinks-contribs&quot; title=&quot;특수:기여/Cerulean&quot;&gt;기여&lt;/a&gt;)&lt;/span&gt;님이 &quot;근황입니다&quot;에 &lt;a rel=&quot;nofollow&quot; class=&quot;external text&quot; href=&quot;https://bigforest.a2hosted.com/w/index.php?title=%EC%A3%BC%EC%A0%9C:Ymbmrhpcj6vt1y1d&amp;amp;topic_showPostId=yuf96jgm5kh97t01#flow-post-yuf96jgm5kh97t01&quot;&gt;댓글을 남겼습니다&lt;/a&gt; (&lt;em&gt;취업 준비 때문에 2025년 1분기 때까지 처럼은 활동을 계속 못하게 될 수 있을 것 같습니다. 그래도 3~7일에 한번은 위키에 방문할 수 있을 정돈 됩니다..&lt;/em&gt;)&lt;/span&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/todo&amp;diff=89428</id>
		<title>사용자:Cerulean/todo</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean/todo&amp;diff=89428"/>
		<updated>2025-07-03T10:05:03Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* 2025년 1분기 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* ArticleButtons.js&lt;br /&gt;
&lt;br /&gt;
* randomPageList.js&lt;br /&gt;
&lt;br /&gt;
* https://bigforest.a2hosted.com/wiki/%ED%8A%B9%EC%88%98:%EA%B0%80%EB%A6%AC%ED%82%A4%EB%8A%94%EB%AC%B8%EC%84%9C/%ED%8B%80:%EC%B2%A0%EB%8F%84%EC%97%AD_%EC%A0%95%EB%B3%B4/%EB%81%9D&lt;br /&gt;
&lt;br /&gt;
* 대전 버스 노선 위키: api 이용&lt;br /&gt;
&lt;br /&gt;
* 배경색 변경&lt;br /&gt;
&lt;br /&gt;
https://bigforest.a2hosted.com/wiki/%ED%8B%80:%EC%A0%95%EB%B3%B4%EC%83%81%EC%9E%90_%EC%A0%9C%EB%AA%A9%EC%B9%B8&lt;br /&gt;
&lt;br /&gt;
한국사 정리&lt;br /&gt;
&lt;br /&gt;
nested shell string&lt;br /&gt;
&lt;br /&gt;
위에 것 못할 수도 있음&lt;br /&gt;
&lt;br /&gt;
== 2025년 ==&lt;br /&gt;
* 틀 구현 교체 작업: 도우미 스크립트를 이용하여 작업한다. 단순 정규식 텍스트 교체.&lt;br /&gt;
* OSM 기반 SVG 생성 서버 제작, 버스 노선도 자동 생성을 맡길 수 있음. (완료)&lt;br /&gt;
** json 데이터로 query 요청과 스타일 지정 기능&lt;br /&gt;
** 보안 기능 없음&lt;br /&gt;
* OSM 버스 노선 뷰어. 버스 노선도 자동 생성 기능. 오류 수정 기능. 자동 노선 데이터 수정. 버스 정류장 번호 수정.&lt;br /&gt;
&lt;br /&gt;
== 2026년 ==&lt;br /&gt;
모듈 없는 인용 틀.&lt;br /&gt;
&lt;br /&gt;
== 문서 등재 ==&lt;br /&gt;
* [[코어 파킹]] https://m.blog.naver.com/achenev/40187616029 코어 파킹을 이용해 전력을 아껴보자.&lt;br /&gt;
* [[윷놀이]]&lt;br /&gt;
* 암호 블록 운용 모드 https://webstone.tistory.com/134&lt;br /&gt;
&lt;br /&gt;
https://m.inven.co.kr/board/black/3584/56025&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
	<entry>
		<id>https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean&amp;diff=89427</id>
		<title>사용자:Cerulean</title>
		<link rel="alternate" type="text/html" href="https://bigforest.a2hosted.com/w/index.php?title=%EC%82%AC%EC%9A%A9%EC%9E%90:Cerulean&amp;diff=89427"/>
		<updated>2025-07-03T10:00:51Z</updated>

		<summary type="html">&lt;p&gt;Cerulean: /* 상태 메시지 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 바로가기 ==&lt;br /&gt;
* [[사용자:Cerulean/관리자_링크|관리자 링크]]&lt;br /&gt;
* [[{{FULLPAGENAME}}/역사|역사]]&lt;br /&gt;
* [[사용자:Cerulean/todo|todo]]&lt;br /&gt;
&lt;br /&gt;
== 하위문서 ==&lt;br /&gt;
&amp;lt;inputbox&amp;gt;&lt;br /&gt;
type=create&lt;br /&gt;
prefix={{FULLPAGENAME}}/&lt;br /&gt;
&amp;lt;/inputbox&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{하위문서 목록}}&lt;br /&gt;
&lt;br /&gt;
== 상태 메시지 ==&lt;br /&gt;
* 2024년 리브레 위키 활동 중단.&lt;br /&gt;
* 2025년 osm 상의 버스 노선 뷰어 제작&lt;br /&gt;
* 한능검 토익 준비.&lt;br /&gt;
&lt;br /&gt;
== 장비 ==&lt;br /&gt;
=== 1호기 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
주변 기기&lt;br /&gt;
!구분&lt;br /&gt;
!제품&lt;br /&gt;
!구입&lt;br /&gt;
|-&lt;br /&gt;
|모니터&lt;br /&gt;
|필립스 242E 144hz&lt;br /&gt;
|2021&lt;br /&gt;
|-&lt;br /&gt;
|키보드&lt;br /&gt;
|조이트론 기계식 적축 쿠팡 7,000원&lt;br /&gt;
|2024&lt;br /&gt;
|-&lt;br /&gt;
|마우스&lt;br /&gt;
|로지텍 g102 light sync 타 회사로 교체 예정&lt;br /&gt;
|2022&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+본체&lt;br /&gt;
|-&lt;br /&gt;
! 구분 !! 제품 !! 구입&lt;br /&gt;
|-&lt;br /&gt;
| CPU || i5-11500 || 2021&lt;br /&gt;
|-&lt;br /&gt;
| MB || ASUS B560M TUF Gaming WiFi || 2021&lt;br /&gt;
|-&lt;br /&gt;
| SSD || nvme SK Hynix 500gb || 2021&lt;br /&gt;
|-&lt;br /&gt;
| SSD || nvme 500gb || 2025?&lt;br /&gt;
|-&lt;br /&gt;
| HDD || &amp;lt;del&amp;gt;Seagate 1TB&amp;lt;/del&amp;gt; || &amp;lt;del&amp;gt;2012&amp;lt;/del&amp;gt;&amp;lt;ref&amp;gt;물리 배드섹터로 폐기&amp;lt;/ref&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| HDD || WD 500GB &amp;lt;s&amp;gt;똥컴 적출&amp;lt;/s&amp;gt; || 2010&lt;br /&gt;
|-&lt;br /&gt;
| RAM || HP 3600mhz 16gb 8gb 추가하고 존버? || 2021&lt;br /&gt;
|-&lt;br /&gt;
| VGA || XFX rx5500xt 8gb || 2020&lt;br /&gt;
|-&lt;br /&gt;
|파워서플라이&lt;br /&gt;
|마이크로닉스 Coolmax vision 600W 가성비 but 팬속도↑&lt;br /&gt;
|2021&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+2기 본체&lt;br /&gt;
|-&lt;br /&gt;
! 구분 !! 제품 !! 구입&lt;br /&gt;
|-&lt;br /&gt;
| CPU || 라이젠5 내장 그래픽 有 ||&lt;br /&gt;
|-&lt;br /&gt;
| MB || 15만원 예산 B550 ||&lt;br /&gt;
|-&lt;br /&gt;
| SSD || nvme SK Hynix 500gb (OS) || 2021&lt;br /&gt;
|-&lt;br /&gt;
| SSD || nvme 1TB (게임 저장용) ||&lt;br /&gt;
|-&lt;br /&gt;
| HDD || WD 500GB || 2010&lt;br /&gt;
|-&lt;br /&gt;
| HDD || 2TB &amp;lt;s&amp;gt;SSD 1TB 사면 안 넣을 듯.&amp;lt;/s&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| RAM || DDR5 ???mhz 16GB*2 ||&lt;br /&gt;
|-&lt;br /&gt;
| VGA || Arc/엔비디아 VRAM은 많으면 좋겠음. 30~40만원 (돈있으면 70만원까지 확장) ||&lt;br /&gt;
|-&lt;br /&gt;
|파워서플라이&lt;br /&gt;
|700~800W 최소 80+인증은 있으면서 적당히 저렴하고 &amp;lt;s&amp;gt;팬 소음은 적은 걸로..&amp;lt;/s&amp;gt; &lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
* 소프트웨어&lt;br /&gt;
** 운영체제: 윈도우 11, opensuse&lt;br /&gt;
** 브라우저: 비발디, 파이어폭스, 엣지&lt;br /&gt;
** 코드 작성: vscode, visual studio, vim&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;del&amp;gt;차기 1호기 PC: 라이젠+엔비디아, 혹은 라이젠+인텔&amp;lt;/del&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2호기 겸 서버 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+노트북&lt;br /&gt;
|-&lt;br /&gt;
! 구분 !! 제품 &lt;br /&gt;
|-&lt;br /&gt;
| CPU || i5-13500H &lt;br /&gt;
|-&lt;br /&gt;
| SSD || 마이크론 500GB &lt;br /&gt;
|-&lt;br /&gt;
| RAM || 24gb 32gb 예정 &lt;br /&gt;
|-&lt;br /&gt;
|VGA || RTX 4050 Mobile&lt;br /&gt;
|-&lt;br /&gt;
|모니터 || 1920*1200 120hz&lt;br /&gt;
|}&lt;br /&gt;
* 소프트웨어&lt;br /&gt;
** 윈도우 11, 만자로&lt;br /&gt;
** Stable Diffusion Comfyui, 도커 마인크래프트 서버&lt;br /&gt;
&lt;br /&gt;
&amp;lt;del&amp;gt;팬이 하나라 발열 제어가 잘....&amp;lt;/del&amp;gt; 선반에 120mm 팬 달고 쓰고 있는 중.. 플라스틱 하판에 바람을 불어주는 것에 불과해 효과가 없다&lt;br /&gt;
&lt;br /&gt;
=== 서버 ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! 구분 !! 제품 &lt;br /&gt;
|-&lt;br /&gt;
| CPU || 펜티엄 2117u &lt;br /&gt;
|-&lt;br /&gt;
| SSD || 120GB &lt;br /&gt;
|-&lt;br /&gt;
| RAM || 8gb &lt;br /&gt;
|}&lt;br /&gt;
* 도커 운용 중&lt;br /&gt;
&lt;br /&gt;
=== 확장 계획 ===&lt;br /&gt;
* N100, N250, N5095 서버 계획 중. &amp;lt;del&amp;gt;만성 예산 부족.&amp;lt;/del&amp;gt;&lt;br /&gt;
* 라이젠 4코어/8스레드 서버.&lt;br /&gt;
* {{ㅊ|자작 랙 마운트}}.&lt;/div&gt;</summary>
		<author><name>Cerulean</name></author>
	</entry>
</feed>