North Korean dictionary order
JavaScript (ES6),  150 148  137 bytes
Saved 10 bytes thanks to @Grimy
I/O: arrays of characters.

a=&gt;a.map(c=&gt;&quot;ANBCODEFPGQSHRIJKLM&quot;[(n=c.charCodeAt()-44032)/588|0]+&quot;AKBLCMDNERTOFGSUPHIQJ&quot;[n/28%21|0]+~(n%28%18==2)+c).sort().map(s=&gt;s[4])

Try it online!
Splitting Hangul syllables
Given a Hangul character of code point 0xAC00 + \$n\$, the initial consonant \$I\$, vowel \$V\$ and final consonant \$F\$ are given by:
$$I=\left\lfloor\frac{n}{588}\right\rfloor,\ V=\left\lfloor\frac{n}{28}\right\rfloor\bmod 21,\ F=n\bmod 28$$
Commented
a =&gt; a.map(c =&gt;                  // for each character c in the input:
  &quot;ANBCODEFPGQSHRIJKLM&quot;[         //   start with a letter from 'A' to 'S'
    (n = c.charCodeAt() - 44032) //   for the initial consonant
    / 588 | 0                    //
  ] +                            //
  &quot;AKBLCMDNERTOFGSUPHIQJ&quot;[       //   append a letter from 'A' to 'U'
    n / 28 % 21 | 0              //   for the vowel
  ] +                            //
  ~(                             //   append &quot;-2&quot; for ㄲ or ㅆ (the only North
    n % 28 % 18 == 2             //   Korean final consonants that are sorted
  ) +                            //   differently) or &quot;-1&quot; otherwise
  c                              //   append the original character
)                                // end of map()
.sort()                          // sort in lexicographical order
.map(s =&gt; s[4])                  // isolate the original characters