<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>굿민의 데이터 설계</title>
    <link>https://goodmean.tistory.com/</link>
    <description>프로그램 화면 및 데이터 설계하는 goodmean 입니다.</description>
    <language>ko</language>
    <pubDate>Sun, 31 May 2026 08:03:11 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>goodmean</managingEditor>
    <image>
      <title>굿민의 데이터 설계</title>
      <url>https://tistory1.daumcdn.net/tistory/4639807/attach/f5ff2d1a96114fba9f80566acb1cf024</url>
      <link>https://goodmean.tistory.com</link>
    </image>
    <item>
      <title>우리는 같은 세상을 보고 있을까?</title>
      <link>https://goodmean.tistory.com/189</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;div data-app=&quot;{&amp;quot;type&amp;quot;:&amp;quot;cover&amp;quot;,&amp;quot;kind&amp;quot;:&amp;quot;cover_half&amp;quot;,&amp;quot;align&amp;quot;:&amp;quot;left&amp;quot;,&amp;quot;style&amp;quot;:{&amp;quot;backgroundImage&amp;quot;:&amp;quot;http://t1.daumcdn.net/brunch/service/user/dThT/image/NVY_8iCbFExFmz8yQeADaW8Iad8.jpg&amp;quot;},&amp;quot;title&amp;quot;:{&amp;quot;text&amp;quot;:&amp;quot;우리는 같은 세상을 보고 있을까?&amp;quot;,&amp;quot;style&amp;quot;:{},&amp;quot;data&amp;quot;:[{&amp;quot;text&amp;quot;:&amp;quot;우리는 같은 세상을 보고 있을까?&amp;quot;,&amp;quot;style&amp;quot;:{&amp;quot;textColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;isBold&amp;quot;:false,&amp;quot;isUnderline&amp;quot;:false,&amp;quot;isStrike&amp;quot;:false,&amp;quot;fontFamily&amp;quot;:&amp;quot;&amp;quot;}}]},&amp;quot;titleSub&amp;quot;:{&amp;quot;text&amp;quot;:&amp;quot;모두가 다른 색을 보며 살아간다는 나의 가설&amp;quot;,&amp;quot;style&amp;quot;:{},&amp;quot;data&amp;quot;:[{&amp;quot;text&amp;quot;:&amp;quot;우리는 같은 세상을 보고 있을까?&amp;quot;,&amp;quot;style&amp;quot;:{&amp;quot;textColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;backgroundColor&amp;quot;:&amp;quot;&amp;quot;,&amp;quot;isBold&amp;quot;:false,&amp;quot;isUnderline&amp;quot;:false,&amp;quot;isStrike&amp;quot;:false,&amp;quot;fontFamily&amp;quot;:&amp;quot;&amp;quot;}}]},&amp;quot;data&amp;quot;:[],&amp;quot;width&amp;quot;:&amp;quot;3024&amp;quot;,&amp;quot;height&amp;quot;:&amp;quot;4032&amp;quot;}&quot;&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;p style=&quot;color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; letter-spacing: 0px;&quot;&gt;길을 걷다 문득,&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;ArticleView&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;빨간 장미 한 송이를 바라보며 이런 생각이 들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;ldquo;나는 이 장미를 정말 빨갛다고 느끼고 있는 걸까?&lt;/span&gt;&lt;br /&gt;&lt;span&gt;혹시 내 눈에 보이는 이 색이,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다른 사람에겐 전혀 다른 색으로 보이고 있는 건 아닐까?&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;우리는 모두 장미를 빨갛다고 말하지만,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;정말 &amp;lsquo;같은 빨강&amp;rsquo;을 보고 있는 걸까?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;5&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-shown=&quot;false&quot; data-block-index=&quot;6&quot; data-app=&quot;{&amp;quot;type&amp;quot;:&amp;quot;BrunchLogo&amp;quot;}&quot;&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;8&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;뇌는 색을 &amp;lsquo;보는&amp;rsquo; 것이 아니라, &amp;lsquo;만든다&amp;rsquo;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;9&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;10&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;색은 과학적으로 말하면 빛의 파장이다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;빨간색은 약 620~750nm의 파장을 가지며,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이 빛이 눈의 망막에 도달하면,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;우리는 그것을 &amp;lsquo;빨강&amp;rsquo;이라는 감각으로 인식한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;11&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 이 감각은 눈에서 만들어지는 게 아니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;빛을 해석하는 건 뇌다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;눈은 정보를 전달할 뿐,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;12&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;lsquo;빨강&amp;rsquo;이라는 감정은 뇌가 만들어낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;13&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-shown=&quot;false&quot; data-block-index=&quot;14&quot; data-app=&quot;{&amp;quot;type&amp;quot;:&amp;quot;PlainShort&amp;quot;}&quot;&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;15&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;그러니까, 당신이 보는 &amp;lsquo;&lt;/span&gt;&lt;span style=&quot;color: #ec4c6a;&quot;&gt;&lt;b&gt;빨강&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;rsquo;은&lt;/span&gt;&lt;/h3&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;16&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;나의 &amp;lsquo;&lt;/span&gt;&lt;span style=&quot;color: #5c5cb2;&quot;&gt;&lt;b&gt;보라&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;rsquo; 일 수도 있다.&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;17&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;18&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;당신의 뇌와 나의 뇌는 다르게 작동한다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;19&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사람마다 눈 속 원추세포의 구조나 분포,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그리고 시각 피질의 반응 방식은 미묘하게 다르다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;20&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그 차이는 우리가 알지 못한 채 존재한다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;왜냐하면 모두가 그 색을&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&amp;ldquo;빨강&amp;rdquo;이라고 부르기로 약속&lt;/b&gt;&lt;/span&gt;&lt;span&gt;했기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;21&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그래서 나는 빨간 장미를 보고,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;22&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;당신은 보랏빛 장미를 보았을지도 모르는데도,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;우리는 둘 다 &amp;ldquo;빨간 장미&amp;rdquo;라고 말한다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;말은 같지만, 감각은 다를 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;23&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-shown=&quot;false&quot; data-block-index=&quot;24&quot; data-app=&quot;{&amp;quot;type&amp;quot;:&amp;quot;PlainShort&amp;quot;}&quot;&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;25&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;하지만 이 가설은, 과학적으로 증명할 수 없다&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;26&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;27&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 모든 생각은 결국 하나의 가설이다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;color: #666666; text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;28&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&amp;ldquo;사람은 모두 다르게 색을 지각하며,&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #666666;&quot;&gt;그 차이는 언어로 덮여 있을 뿐이다.&amp;rdquo;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;29&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 가설은 매력적이지만,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;30&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;과학적으로는 증명할 수 없다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;우리는 서로의 뇌를 &amp;lsquo;감각의 관점&amp;rsquo;으로&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;31&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;비교할 수 없기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;32&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이런 종류의 명제를 철학에서는&lt;/span&gt;&lt;br /&gt;&lt;span&gt;검증 불가능한 가설(non-falsifiable statement)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;33&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이라고 부른다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그러니 이건 결국,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;논증할 수는 없지만 계속해서 상상할 수 있는 이야기다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;34&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-shown=&quot;false&quot; data-block-index=&quot;35&quot; data-app=&quot;{&amp;quot;type&amp;quot;:&amp;quot;PlainShort&amp;quot;}&quot;&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;36&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;색약, 색맹이 근거가 될 수 있지 않을까?&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;37&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;38&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;반은 맞고 반은 틀리다고 할 수 있다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;왜냐하면 그것은 색을 &amp;lsquo;다르게 보는 것&amp;rsquo;이 아니라,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;lsquo;일부 색을 구분하지 못하는 것&amp;rsquo;이기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;39&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;예를 들어, 적록색약의 경우&lt;/span&gt;&lt;br /&gt;&lt;span&gt;빨강과 초록이 같은 색처럼 보이거나, 잘 구별되지 않는다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;이건 뇌의 해석 차이라기보다,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;망막의 특정 수용기 기능 부족에서 비롯된&lt;/span&gt;&lt;br /&gt;&lt;span&gt;생물학적 한계에 가깝다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;false&quot; data-block-index=&quot;40&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그럼에도 불구하고 이러한 사례는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;41&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;우리가 생각보다 더 다양하게 세상을 인식하고 있다는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;42&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하나의 단서가 되어준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;43&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;즉, 색약은 이 가설을 완전히 뒷받침하진 못하지만,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;ldquo;감각은 결코 절대적이지 않다&amp;rdquo;는 점을 상기시켜 주는&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;44&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;유의미한 예라 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;45&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div data-shown=&quot;true&quot; data-block-index=&quot;46&quot; data-app=&quot;{&amp;quot;type&amp;quot;:&amp;quot;PlainShort&amp;quot;}&quot;&gt;
&lt;div&gt;&lt;hr data-ke-style=&quot;style1&quot; /&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;47&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;그래서, 이건 나의 색으로 본 세상에 대한 이야기다&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;48&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;49&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 글은 하나의 과학 이론도, 실험 보고서도 아니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;그저 내가 살아가며 문득 떠올린,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;작은 물음에서 시작된 사유의 조각이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;하지만 그 물음 하나로,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;나는 세상이 조금 더 신비롭게 느껴졌고,&lt;/span&gt;&lt;br /&gt;&lt;span&gt;다른 사람의 시선을 상상하는 일이&lt;/span&gt;&lt;br /&gt;&lt;span&gt;조금 더 따뜻하게 다가왔다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;51&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-shown=&quot;true&quot; data-block-index=&quot;52&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #000000; color: #333333; text-align: center;&quot; data-shown=&quot;true&quot; data-block-index=&quot;53&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;&amp;nbsp; 당신은 지금, 어떤 색의 세상을 살고 있나요?&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>N의 상상</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/189</guid>
      <comments>https://goodmean.tistory.com/189#entry189comment</comments>
      <pubDate>Wed, 15 Oct 2025 18:01:13 +0900</pubDate>
    </item>
    <item>
      <title>전체url주소 데이터 저장 타입 크기</title>
      <link>https://goodmean.tistory.com/188</link>
      <description>&lt;h2 data-end=&quot;80&quot; data-start=&quot;63&quot; data-ke-size=&quot;size26&quot;&gt;결론 [Inference]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;688&quot; data-start=&quot;81&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;688&quot; data-start=&quot;81&quot;&gt;&lt;b&gt;전체 URL(풀 URL) 저장 추천 규격&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;688&quot; data-start=&quot;112&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;156&quot; data-start=&quot;112&quot;&gt;&lt;b&gt;일반 권장:&lt;/b&gt; VARCHAR(2048) 이상(UTF-8 기준)&lt;/li&gt;
&lt;li data-end=&quot;323&quot; data-start=&quot;159&quot;&gt;&lt;b&gt;서버/프레임워크가 긴 URL을 허용하거나 내부 리다이렉트&amp;middot;서명 URL이 많은 경우:&lt;/b&gt; VARCHAR(4096) 또는 &lt;b&gt;무제한 가변 문자열&lt;/b&gt;(예: PostgreSQL TEXT, MySQL TEXT/LONGTEXT, SQL Server NVARCHAR(MAX))&lt;/li&gt;
&lt;li data-end=&quot;688&quot; data-start=&quot;326&quot;&gt;&lt;b&gt;DB별 실무 가이드(안전값)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;688&quot; data-start=&quot;356&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;462&quot; data-start=&quot;356&quot;&gt;&lt;b&gt;PostgreSQL:&lt;/b&gt; TEXT (길이 제한 없음; 성능상 VARCHAR(n)과 실질 차이 거의 없음) &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-character.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;PostgreSQL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;574&quot; data-start=&quot;468&quot;&gt;&lt;b&gt;MySQL/MariaDB:&lt;/b&gt; VARCHAR(2048~4096) 또는 TEXT (행 크기&amp;middot;문자집합 고려) &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.3/en/char.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;MySQL&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;688&quot; data-start=&quot;580&quot;&gt;&lt;b&gt;SQL Server:&lt;/b&gt; NVARCHAR(2048~4096) 또는 NVARCHAR(MAX) (유니코드 필요 시) &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-ver17&amp;amp;utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-end=&quot;797&quot; data-start=&quot;690&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-end=&quot;797&quot; data-start=&quot;692&quot; data-ke-size=&quot;size16&quot;&gt;한 줄 권고: &lt;b&gt;&amp;ldquo;호환성과 인덱싱 편의&amp;rdquo;가 필요하면 VARCHAR(2048~4096), &amp;ldquo;최대 유연성&amp;rdquo;이 필요하면 무제한 가변형(TEXT/NVARCHAR(MAX))을 사용.&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;hr data-end=&quot;802&quot; data-start=&quot;799&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;829&quot; data-start=&quot;804&quot; data-ke-size=&quot;size26&quot;&gt;이유 [Official/Academic]&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-end=&quot;2035&quot; data-start=&quot;830&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li data-end=&quot;1077&quot; data-start=&quot;830&quot;&gt;&lt;b&gt;표준에는 URL 길이 상한이 없습니다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1077&quot; data-start=&quot;864&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;948&quot; data-start=&quot;864&quot;&gt;URI 일반 문법(RFC 3986)은 &lt;b&gt;최대 길이를 정의하지 않습니다.&lt;/b&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3986?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;IETF Datatracker&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1077&quot; data-start=&quot;952&quot;&gt;HTTP 표준(RFC 9110/9112)도 &lt;b&gt;요청라인/헤더에 대한 구체 상한을 규정하지 않고&lt;/b&gt;, 구현체가 &amp;ldquo;합리적 한도&amp;rdquo;를 둘 수 있음을 전제합니다. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc9110?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;IETF Datatracker&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1535&quot; data-start=&quot;1079&quot;&gt;&lt;b&gt;그러나 웹서버(구현체) 기본값이 사실상의 한도를 만듭니다.&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1441&quot; data-start=&quot;1124&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1232&quot; data-start=&quot;1124&quot;&gt;&lt;b&gt;Apache httpd&lt;/b&gt;: 요청라인 허용 기본값 LimitRequestLine 8190 바이트(약 8 KB). &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://httpd.apache.org/docs/2.4/mod/core.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;httpd.apache.org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1337&quot; data-start=&quot;1236&quot;&gt;&lt;b&gt;Nginx&lt;/b&gt;: 요청라인은 **클라이언트 헤더 버퍼 하나의 크기(기본 8 KB)**를 초과할 수 없음. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://nginx.org/en/docs/http/ngx_http_core_module.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;nginx.org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1441&quot; data-start=&quot;1341&quot;&gt;&lt;b&gt;IIS&lt;/b&gt;: maxUrl 기본 4096바이트, maxQueryString 기본 2048바이트. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/requestlimits/?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&amp;rArr; 실무에서는 &lt;b&gt;2 KB~8 KB&lt;/b&gt; 수준이 &amp;ldquo;안전권&amp;rdquo;이며, 보수적으로는 &lt;b&gt;2 KB(&amp;asymp;2048)&lt;/b&gt;, 여유를 보려면 **4 KB(&amp;asymp;4096)**를 택합니다.&lt;/li&gt;
&lt;li data-end=&quot;2035&quot; data-start=&quot;1537&quot;&gt;&lt;b&gt;DBMS 선택 관점(문자열 타입과 길이 제약)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2035&quot; data-start=&quot;1575&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1726&quot; data-start=&quot;1575&quot;&gt;&lt;b&gt;PostgreSQL&lt;/b&gt;: TEXT와 VARCHAR(n)은 &lt;b&gt;성능 차이가 사실상 없고&lt;/b&gt;(길이검사 정도만 추가), TEXT는 **&amp;ldquo;임의 길이&amp;rdquo;**를 저장 가능. 설계 단순화에 유리. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-character.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;PostgreSQL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1871&quot; data-start=&quot;1730&quot;&gt;&lt;b&gt;MySQL&lt;/b&gt;: VARCHAR는 행 크기(최대 65,535바이트)와 **문자집합 바이트 수(UTF-8 가변)**의 영향을 받음. 긴 URL이 빈번하면 TEXT도 고려. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.3/en/char.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;MySQL&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2035&quot; data-start=&quot;1875&quot;&gt;&lt;b&gt;SQL Server&lt;/b&gt;: NVARCHAR(MAX)는 대용량(최대 2 GB) 저장 가능하나, &lt;b&gt;행당 고정 오버헤드&lt;/b&gt; 등 운영 특성 고려. 일반 필드는 NVARCHAR(2048~4096)가 실무 균형. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-ver17&amp;amp;utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;2040&quot; data-start=&quot;2037&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2075&quot; data-start=&quot;2042&quot; data-ke-size=&quot;size26&quot;&gt;출처 [Official/Academic/News 구분]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2923&quot; data-start=&quot;2076&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2161&quot; data-start=&quot;2076&quot;&gt;[Official] &lt;b&gt;RFC 3986 (URI)&lt;/b&gt;: 길이 상한 미규정. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3986?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;IETF Datatracker&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2262&quot; data-start=&quot;2162&quot;&gt;[Official] &lt;b&gt;RFC 9110/9112 (HTTP)&lt;/b&gt;: 구체 상한 대신 구현체 재량 언급. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc9110?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;IETF Datatracker&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2370&quot; data-start=&quot;2263&quot;&gt;[Official] &lt;b&gt;Apache httpd 2.4&lt;/b&gt;: LimitRequestLine 기본 8190바이트. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://httpd.apache.org/docs/2.4/mod/core.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;httpd.apache.org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2474&quot; data-start=&quot;2371&quot;&gt;[Official] &lt;b&gt;Nginx core 모듈 문서&lt;/b&gt;: 요청라인=단일 버퍼(기본 8 KB) 초과 불가. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://nginx.org/en/docs/http/ngx_http_core_module.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;nginx.org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2610&quot; data-start=&quot;2475&quot;&gt;[Official] &lt;b&gt;Microsoft IIS&lt;/b&gt; requestLimits: maxUrl=4096, maxQueryString=2048(바이트) 기본. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/requestlimits/?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2720&quot; data-start=&quot;2611&quot;&gt;[Official] &lt;b&gt;PostgreSQL 문서(문자형)&lt;/b&gt;: text와 varchar 성능 차이 거의 없음. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-character.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;PostgreSQL&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2822&quot; data-start=&quot;2721&quot;&gt;[Official] &lt;b&gt;MySQL 문서&lt;/b&gt;: VARCHAR 최대 길이와 행 크기 제약, 저장 방식. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://dev.mysql.com/doc/refman/9.3/en/char.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;MySQL&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2923&quot; data-start=&quot;2823&quot;&gt;[Official] &lt;b&gt;SQL Server 문서&lt;/b&gt;: nvarchar(max)/용량&amp;middot;행 오버헤드 등. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/sql/t-sql/data-types/nchar-and-nvarchar-transact-sql?view=sql-server-ver17&amp;amp;utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;2928&quot; data-start=&quot;2925&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;2949&quot; data-start=&quot;2930&quot; data-ke-size=&quot;size26&quot;&gt;요약 표 [Inference]&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;쓰임새권장 타입/크기비고
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;3545&quot; data-start=&quot;2951&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;3545&quot; data-start=&quot;2989&quot;&gt;
&lt;tr data-end=&quot;3109&quot; data-start=&quot;2989&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3007&quot; data-start=&quot;2989&quot;&gt;일반 웹서비스(호환성 중시)&lt;/td&gt;
&lt;td data-end=&quot;3025&quot; data-start=&quot;3007&quot; data-col-size=&quot;md&quot;&gt;VARCHAR(2048)&lt;/td&gt;
&lt;td data-end=&quot;3109&quot; data-start=&quot;3025&quot; data-col-size=&quot;md&quot;&gt;IIS 기본한계(4 KB URL, 2 KB 쿼리스트링)를 고려한 보수값. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/iis/configuration/system.webserver/security/requestfiltering/requestlimits/?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3231&quot; data-start=&quot;3110&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3134&quot; data-start=&quot;3110&quot;&gt;긴 서명 URL/프록시/리다이렉트 많음&lt;/td&gt;
&lt;td data-end=&quot;3152&quot; data-start=&quot;3134&quot; data-col-size=&quot;md&quot;&gt;VARCHAR(4096)&lt;/td&gt;
&lt;td data-end=&quot;3231&quot; data-start=&quot;3152&quot; data-col-size=&quot;md&quot;&gt;Apache/Nginx의 8 KB 선을 일부 반영한 실무 타협. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://httpd.apache.org/docs/2.4/mod/core.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;httpd.apache.org&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3437&quot; data-start=&quot;3232&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3253&quot; data-start=&quot;3232&quot;&gt;길이 예측이 어려움, 최대 유연성&lt;/td&gt;
&lt;td data-end=&quot;3332&quot; data-start=&quot;3253&quot; data-col-size=&quot;md&quot;&gt;PostgreSQL TEXT / MySQL TEXT(또는 LONGTEXT) / SQL Server NVARCHAR(MAX)&lt;/td&gt;
&lt;td data-end=&quot;3437&quot; data-start=&quot;3332&quot; data-col-size=&quot;md&quot;&gt;포스트그레스는 TEXT가 가장 단순&amp;middot;권장에 가깝고, MySQL/SQL Server는 운영정책에 따라 선택. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/datatype-character.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;PostgreSQL&lt;/span&gt;&lt;span&gt;+2&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;MySQL&lt;/span&gt;&lt;span&gt;+2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;3545&quot; data-start=&quot;3438&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;3459&quot; data-start=&quot;3438&quot;&gt;인덱싱 필요(프리픽스 인덱스 등)&lt;/td&gt;
&lt;td data-end=&quot;3498&quot; data-start=&quot;3459&quot; data-col-size=&quot;md&quot;&gt;VARCHAR(2048~4096) + 필요 시 프리픽스 인덱스&lt;/td&gt;
&lt;td data-end=&quot;3545&quot; data-start=&quot;3498&quot; data-col-size=&quot;md&quot;&gt;DB/엔진별 인덱스 길이 한도 고려(엔진 문서별 상이). [Inference]&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;3550&quot; data-start=&quot;3547&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;3574&quot; data-start=&quot;3552&quot; data-ke-size=&quot;size26&quot;&gt;추가 실무 팁 [Inference]&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;3964&quot; data-start=&quot;3575&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;3681&quot; data-start=&quot;3575&quot;&gt;&lt;b&gt;문자집합&lt;/b&gt;: URL은 퍼센트인코딩으로 길이가 늘어납니다(UTF-8 멀티바이트 포함). 가급적 &lt;b&gt;UTF-8&lt;/b&gt;로 통일하고 &lt;b&gt;바이트 기준 한도&lt;/b&gt;를 감안해 여유 길이를 잡으세요.&lt;/li&gt;
&lt;li data-end=&quot;3837&quot; data-start=&quot;3682&quot;&gt;&lt;b&gt;검증&lt;/b&gt;: 애플리케이션 레벨에서 &lt;b&gt;RFC 3986 문법 검증&lt;/b&gt;과 &lt;b&gt;최대 길이 검증&lt;/b&gt;을 함께 두고, &lt;b&gt;서버 한도(Apache/Nginx/IIS)와 DB 길이&lt;/b&gt;를 일치시켜 예외를 줄이세요. &lt;span data-state=&quot;closed&quot;&gt;&lt;span data-testid=&quot;webpage-citation-pill&quot;&gt;&lt;a href=&quot;https://datatracker.ietf.org/doc/html/rfc3986?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;Microsoft Learn&lt;/span&gt;&lt;span&gt;+3&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;IETF Datatracker&lt;/span&gt;&lt;span&gt;+3&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;httpd.apache.org&lt;/span&gt;&lt;span&gt;+3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;3964&quot; data-start=&quot;3838&quot;&gt;&lt;b&gt;인덱스 전략&lt;/b&gt;: 전체 URL에 인덱스가 꼭 필요하지 않다면, **정규화된 핵심 키(도메인, 경로 해시 등)**에 인덱스를 두고 &lt;b&gt;원문 URL은 비인덱스 컬럼&lt;/b&gt;으로 저장하는 설계가 효율적입니다. [Inference]&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;3969&quot; data-start=&quot;3966&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;3999&quot; data-start=&quot;3971&quot; data-ke-size=&quot;size26&quot;&gt;신뢰도(Verification Summary)&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;4289&quot; data-start=&quot;4000&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;4085&quot; data-start=&quot;4000&quot;&gt;&lt;b&gt;표준(RFC)&amp;middot;공식 제품 문서 기반&lt;/b&gt; 권고이며, &lt;b&gt;상한 부재(표준) + 구현체 기본값(웹서버) + DB 타입 특성&lt;/b&gt;을 교차 확인했습니다.&lt;/li&gt;
&lt;li data-end=&quot;4289&quot; data-start=&quot;4086&quot;&gt;수치형 &amp;ldquo;기본값&amp;rdquo;은 &lt;b&gt;제품 버전/설정에 따라 달라질 수 있으므로&lt;/b&gt;, 운영 환경의 실제 설정값(Apache LimitRequestLine, Nginx large_client_header_buffers, IIS requestLimits)을 &lt;b&gt;최종 확인&lt;/b&gt;하는 것이 안전합니다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DB</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/188</guid>
      <comments>https://goodmean.tistory.com/188#entry188comment</comments>
      <pubDate>Wed, 15 Oct 2025 17:57:18 +0900</pubDate>
    </item>
    <item>
      <title>프롬프트 잘 작성하는 방법</title>
      <link>https://goodmean.tistory.com/187</link>
      <description>&lt;p id=&quot;SE-d9cf945c-fbe7-4324-b9d6-b7fc1bd6a12f&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;프롬프트 잘 작성하는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e3644568-4ed5-4082-9bb8-1eb389ab5461&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;​&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6a610823-a6cf-45cb-8e50-1a6d3635abfa&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 질문이 명확하고 구체적이어야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ad455c7e-9d49-40aa-aa25-dbd5d0fd065d&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5483bdb2-af89-4baa-9b53-9c4df5812d25&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;내일 어때?&quot; : 뭘 물어보는건지 모른다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8d68ebac-6bfa-46ed-abd5-47d8f1ea5160&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;내일 주식시장 어때?&quot; : 뭘 물어보는 건지는 알겠다. 질문은 조금 더 명확해졌다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d997712d-c75c-4666-a2ab-2b68112161cd&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;내일 주식시장에 영향을 줄만한 주요 이벤트는 뭐가 있지?&quot; : 좀더 구체적이다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-90d9f9f5-498b-4af4-bd57-59fe9df33384&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;내일 주식시장 관련 주요 이벤트를 시간 순서대로 정리해줘.&quot; : 원하는게 조금 더 구체적이 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-518a9c35-e150-41f4-936d-0786e69a2a08&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a3d924af-f603-4a55-9f20-502cdea4e1cd&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 배경 정보를 포함하면 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1f413a7a-0201-49df-aff3-433d7d0f0cee&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-afd14eae-02cf-4702-93d5-e619709775e5&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;참고할만한 자료가 있는지를 알려주면 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-850d3dc4-4445-4fc8-a211-dfa659def98c&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;Investing.com의 이벤트 캘린더를 기반으로 내일 주식시장 관련 이벤트를 정리해줘&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2d126ccc-16f2-41b5-89ed-9916d0771cb9&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d7dc5802-95ab-4d57-8c0a-d5f254e3e064&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 간결함&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3053c1e1-f130-4aa7-b9af-a3fc1094e96e&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-34e5681f-b9e0-426b-b96c-fc08676af53f&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프롬프트가 너무 길어지면 끊어서 요구하면 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c96bc6f5-9a40-4070-8a7b-272e817f8c0a&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-59f3e281-0bf9-4927-9b47-025f1b18223b&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;이벤트 캘린더에서 내일 주식시장 관련 이벤트를 정리하고 그 다음 시간 순서대로 나열해줘&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c786a280-2140-4c5f-ae6b-48f717fe5ce3&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4518d668-453f-4f3f-97eb-3cb9f8973226&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보다는&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-05e28db4-931d-44cd-9864-fae67871da07&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a130ec02-2a2a-4057-87c3-7a417b2f6b66&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-66dae347-31bc-4aa4-8481-e1e420b3a42b&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Investing.com에서 이벤트 캘린더의 정보를 수집해달라. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c3a949d8-e3f8-42a7-8aeb-715d721ee3a0&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;내일 이벤트만 정리해달라.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6c1d030d-22eb-4210-ba6e-77c4337495a4&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;시간 순서대로 나열해달라.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3f2cc2e2-ec32-45f8-bb4b-22b824962fa5&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이걸 순차적으로 수행해달라.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-547d0b9c-f689-4417-9260-9df3cae23fe5&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ebe0d208-ab91-4649-9abc-6e941e25840b&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-def79d47-afa5-4561-be6c-d5ae728ae308&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 열린 질문을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bcc8eab8-8553-48f2-a82a-6b35c7ec0d7a&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-18766644-8a75-4e58-aeed-9bb55c5f9a9b&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단순히 '예', '아니오'로 대답할수 있는 질문 보다는 많은 정보를 제공할수 있는 질문을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1e6ba64b-ba25-43a7-9b56-a76aef135622&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-26bbf565-3425-4237-8be2-74c314441a20&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 명확한 목표를 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e92d1407-d866-465a-9de5-4b607a0b5e43&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c212d431-91af-40f6-ab77-b24b2bebb70e&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;주식시장 이벤트의 결과에 따라 주식시장에 미칠 영향을 요약하여 설명해주세요.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eecaba56-e0a1-49b9-8696-d75628e44b0e&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-165bf7e7-9462-4d0d-becf-48a5d171b7f9&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 언어와 문체&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ed1ab157-979e-4bca-ab26-1bdc964b2ab9&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-05553c93-566d-42d1-9f47-fe5300e152c4&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;용도에 맞는 적합한 언어와 문체를 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-739b5047-23a5-45ae-b8a0-6052ad3798be&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1e158029-7c0d-4fe1-8a72-2c499cffb3e7&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;애널리스트 처럼 알려주세요.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eaed84d7-1e39-4bb9-9079-5ccfbd0f5764&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot;친구에게 이야기 하듯이 설명해주세요&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ddf402b3-8d66-41de-8b44-5f4a68ae0ce5&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot; OO 보고서에 대한 전문적인 요약을 해준다고 가정하고 답변해주세요.&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-98808081-1484-4a6b-8427-fa9f8fbfb071&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-74f43a03-0baf-468a-b1b4-e904be9895aa&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그외에도 팁은 정말 많이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f9873428-d326-417e-9391-97ede41a1d34&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-419be5f9-ac37-442f-af88-10b54222c0a9&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 분야에서 가장 잘 정리된 글은 '인지적 프롬프팅'에 있으니 읽어 볼것&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a89a1a00-d7d9-4c4a-941d-f9450c87c4f0&quot; style=&quot;background-color: #ffffff; color: #444444; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://docs.google.com/presentation/d/1kayepoiTVT838Tetk02nxeqVmmS9BDc9O7n-4OzJdL8/edit?pli=1&quot;&gt;https://docs.google.com/presentation/d/1kayepoiTVT838Tetk02nxeqVmmS9BDc9O7n-4OzJdL8/edit?pli=1&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>AI</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/187</guid>
      <comments>https://goodmean.tistory.com/187#entry187comment</comments>
      <pubDate>Thu, 19 Sep 2024 20:32:08 +0900</pubDate>
    </item>
    <item>
      <title>[Axure] 드롭박스 값에 따라 액션 주기</title>
      <link>https://goodmean.tistory.com/186</link>
      <description>&lt;script src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3145536515814165&quot;&gt;&lt;/script&gt;
&lt;!-- 디스플레이, 최상단 고 --&gt;
&lt;p&gt;&lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-client=&quot;ca-pub-3145536515814165&quot; data-ad-slot=&quot;1457034086&quot; data-ad-format=&quot;auto&quot; data-full-width-responsive=&quot;true&quot;&gt;&lt;/ins&gt;&lt;/p&gt;
&lt;script&gt;
     (adsbygoogle = window.adsbygoogle || []).push({});
&lt;/script&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;드롭박스 선택 후 인터렉션 SELECTION CHANGED 선택&lt;/li&gt;
&lt;li&gt;SELECTION CHANGED 옆의 Enable Cases 클릭&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btI76H/btsH3k9hM7V/UChxphF2zZjU8j103k1vok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btI76H/btsH3k9hM7V/UChxphF2zZjU8j103k1vok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btI76H/btsH3k9hM7V/UChxphF2zZjU8j103k1vok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtI76H%2FbtsH3k9hM7V%2FUChxphF2zZjU8j103k1vok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;254&quot; height=&quot;123&quot; data-origin-width=&quot;254&quot; data-origin-height=&quot;123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 3. Add Rogic 클릭 후 원하는 값 선택&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;421&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PhWpN/btsH3kVJGNX/szG1id3fpyKYXJ5Uy70xf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PhWpN/btsH3kVJGNX/szG1id3fpyKYXJ5Uy70xf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PhWpN/btsH3kVJGNX/szG1id3fpyKYXJ5Uy70xf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPhWpN%2FbtsH3kVJGNX%2FszG1id3fpyKYXJ5Uy70xf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;809&quot; height=&quot;421&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;421&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 4. 그 후 아래와 같이 조건문이 걸렸다면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJHzTM/btsH1kwaPy1/NW7a4BPpRv4PkdYFklgexK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJHzTM/btsH1kwaPy1/NW7a4BPpRv4PkdYFklgexK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJHzTM/btsH1kwaPy1/NW7a4BPpRv4PkdYFklgexK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJHzTM%2FbtsH1kwaPy1%2FNW7a4BPpRv4PkdYFklgexK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;265&quot; height=&quot;38&quot; data-origin-width=&quot;265&quot; data-origin-height=&quot;38&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; 5. 원하는 액션을 설정하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;299&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzqtXh/btsH2QHtHLx/6icrrt3rY82Qa52cMKyPm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzqtXh/btsH2QHtHLx/6icrrt3rY82Qa52cMKyPm1/img.png&quot; data-alt=&quot;ex ) 메일 드롭리스트로 선택 시 해당 값을 그대로 입력(Set Text) 하게 해주는 조건문.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzqtXh/btsH2QHtHLx/6icrrt3rY82Qa52cMKyPm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzqtXh%2FbtsH2QHtHLx%2F6icrrt3rY82Qa52cMKyPm1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;299&quot; height=&quot;409&quot; data-origin-width=&quot;299&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ex ) 메일 드롭리스트로 선택 시 해당 값을 그대로 입력(Set Text) 하게 해주는 조건문.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>설계/Axure</category>
      <category>Axure</category>
      <category>selection changed</category>
      <category>드롭박스</category>
      <category>액션</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/186</guid>
      <comments>https://goodmean.tistory.com/186#entry186comment</comments>
      <pubDate>Tue, 18 Jun 2024 11:12:45 +0900</pubDate>
    </item>
    <item>
      <title>여부 컬럼의 개요/표준</title>
      <link>https://goodmean.tistory.com/185</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여부 칼럼 #1: 개요/표준&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터 모델을 작성시 많이 나타나는 속성 중에 하나가 여부속성 즉 여부컬럼이다.&lt;br /&gt;여부 컬럼은 테이블상에 보통 _YN, _FLAG 로 끝나는 컬럼이다.&lt;br /&gt;모델링을 할 때 마다 여부 컬럼을 어떻게 구현할까 항상 고민 거리가 되는 부분이다.&lt;br /&gt;심한 경우 한 테이블에 여부 컬럼이 백여 개 이상인 것들도 존재 한다.&lt;br /&gt;상황에 따라 모델 구성이 제 각각으로 이루어 질 수 있다고 하지만, 가만히 그 내부를 살펴보면 몇 가지 규칙및 패턴이 있을 것이다.&lt;br /&gt;이제 모델링 프로젝트에 투입시에 매번 똑 같은 고민을 하지 말고 패턴을 잘 적용하여 좀 더 알차게 적용해 보자.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여부 컬럼 예시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&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;당일배송체크여부 / 유료배송추가여부 / 지정택배시행여부 / 교환반품유료여부&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1)중복 속성&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 다른 테이블의 결과만을 요약형태로 갖는 경우 (처리여부)&lt;br /&gt;배치처리 및 후속 처리의 결과 값으로 활용된다.&lt;br /&gt;- 부모테이블에 자식테이블 데이터가 있다 없다 표기하는 경우 (존재여부/예약여부)&lt;br /&gt;- 동일테이블의 컬럼에 대한 이중 표현&lt;br /&gt;승인일시의 값이 있다, 없다 로 표현할 수 있지만 여부컬럼을 부수적으로 사용할 수 있다.&lt;br /&gt;(요일상품여부 + 적용요일코드) (승인여부 + 승인일시) (원본여부 + 원본코드)&lt;br /&gt;(전송여부+ 전송일시)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2) 데이터 분류용, 데이터 개체의 정의로 사용되는 속성&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 서브타입 역할을 하는 것 (품목여부/해외상품여부,거래처여부,판매처여부)&lt;br /&gt;- 테이블의 구성을 알려주는 역할 (복사된상품여부 / 삭제여부)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) 제어용 속성으로서 로직 처리 하기 위함&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 어플리케이션에서 특정 데이터만을 위한 예외 처리 (사용여부/무료여부)&lt;br /&gt;- 제한 및 제약을 두기 위한 처리 (특판제한여부, 반품불가여부,카드가능여부 )&lt;br /&gt;가능, 불가를 표현하기 위한 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) 성능을 위한 속성&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 이벤트 및 거래 액션의 결과 중에서 마크가 필요한 것 : 품절여부&lt;br /&gt;- 요약용 컬럼 : 프로모션중여부, 사은품있음여부&lt;br /&gt;중복속성과 유사한 성격이라고 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;5) 코드를 여부로 나열한 속성&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- M개의 값을 YN으로 표기 하는 경우 (취미코드 : 바둑여부, 게임여부, 스포츠여부,..)&lt;br /&gt;- 정규화에 의해서 다른 테이블로 분리가능 한 속성들.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;6) 기타&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 아주 다양한 사연을 담고 있는 여부 컬럼들이 있겠다&amp;hellip;&lt;br /&gt;&lt;br /&gt;여부 컬럼 하나 하나의 사례는 기회가 되면 작성해 보도록 하고&lt;br /&gt;여기서는 여부 컬럼들을 모델에 표현 하는 방법을 생각해 보고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여부 컬럼의 표준화&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여부 컬럼들은 실제 데이터 모델에서는 어떻게 사용되고 있을까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;1) 표준화된 명칭&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 일반적으로 속성분류어로서 일관성 있게 사용한다. 여부, 플래그, 유무라고 표현된다.&lt;br /&gt;&lt;br /&gt;OO여부-&amp;gt;00_YN&lt;br /&gt;00플래그 -&amp;gt;00_FLAG&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;2) 물리적 세팅&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- NOT NULL 화 시키고, 디폴트 값을 부여한다.&lt;br /&gt;&lt;br /&gt;&amp;lt; 의견 &amp;gt;&lt;br /&gt;여부 컬럼은 NULL 컬럼 많고, 디폴트 값을 부여하지 않은 시스템들이 많다.&lt;br /&gt;하지만 본인은 DB에서 강제하는 것을 선호한다.&lt;br /&gt;시간이 흘러 여러 담당자가 바뀌다 보면 해당 컬럼의 초기값과 의미를 프로그램 소스를 열어 보아야만 알 수 있는 상황이 온다. 누구나 테이블에 세팅된 값을 보고 직관적으로 이해 할 수 있도록 DB에 세팅하는 것이 좋겠다.&lt;br /&gt;&lt;br /&gt;- 물론 운영중에 추가되는 여부 컬럼은 NULL 허용이 많다.&lt;br /&gt;기존 데이터는 영향 받지 않고 신규 데이터 혹은 특정 조건 일때만 사용되기 때문이다.&lt;br /&gt;또한 NOT NULL 처리시 데이터 사이즈가 클 경우 디폴트 값을 세팅하는데 오랜 시간이 걸릴 수 있다.&lt;br /&gt;&lt;br /&gt;- 프로젝트 진행시 초기에 모델표준에서 여부 컬럼에 대한 사용을 정의해 놓지 않으면 , 개발 및 이행단계에서는 NOT NULL 화 처리 하지 못하고 NULL 허용으로 그대로 가는 경우가 있다.&lt;br /&gt;또 NOT NULL 처리는 입력 및 수정 프로그램의 수정이 필요하기 때문에 영향도 파악이 쉽지 않을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) NOT NULL 화 할 수 없는 여부 컬럼&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모든 여부 컬럼을 NOT NULL 화 시켜야 할까 특정 컬럼은 NULL이 올 수 밖에 없는가&lt;br /&gt;&lt;br /&gt;[상품테이블][카드가능여부] 컬럼의 값을 보자&lt;br /&gt;&lt;br /&gt;Y:100건&lt;br /&gt;N:200건&lt;br /&gt;NULL :700건&lt;br /&gt;&lt;br /&gt;업무규칙은 Y이면 상품 구매시 카드를 사용할 수 있다.&lt;br /&gt;N이면 카드 사용 불가 이다.&lt;br /&gt;NULL이면 아직 세팅된 값이 없지만 카드 사용 불가 이다.&lt;br /&gt;N 과 NULL은 동일 업무 규칙을 따른다.&lt;br /&gt;단지 판단 할 수 있는 것은 값이 변경 이력인데 처음에 여부 값은 [ NULL ] 이였다가 카드사용이 가능해 졌을때 [ Y ]로 변경되고 이후 다시 [ N ] 로 변경되었음을 짐작 할 수 있다.&lt;br /&gt;컬럼값의 변경을 위한 추적이라면 이력 혹은 로그 관리를 해야 한다.&lt;br /&gt;&lt;br /&gt;변경이 한번도 없었던 값이라는 의미로서의 NULL 값을 유지 할 필요성이 많지 않다.&lt;br /&gt;&lt;br /&gt;모델 내린다는 것은 위험한 일이지만 생각을 단순화하는 차원에서 NOT NULL 화 시키고, 예외가 되는 부분은 NULL 허용이라는 규칙을 가져가는 것이 좋겠다.&lt;br /&gt;&lt;br /&gt;( 예외 : YN에 인덱스를 생성하는 경우,데이터 사이즈를 조금이라고 줄이려는 경우 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) 테이터 값 검증&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여부 컬럼의 데이터 값은 어떻게 세팅 되는가&lt;br /&gt;&lt;br /&gt;가) Y/N : 긍정의 의미로서 Y, 부정의 의미로서 N&lt;br /&gt;일반적인 데이터 세팅이다. 표준은 YN으로 세팅하는 것이 좋겠다.&lt;br /&gt;&lt;br /&gt;나) 1/0 : 긍정의 의미로서 1, 부정의 의미로서 0&lt;br /&gt;고전적인 표기법이라고 할 수 있으며 비트연산을 고려해서 만들 수도 있겠다.&lt;br /&gt;추천하지는 않는다.&lt;br /&gt;&lt;br /&gt;다) NULL : NULL은 가급적 없애자. 특히 핵심/메인/마스터 테이블에서는.&lt;br /&gt;마스터 테이블의 NULL값을 여러 시스템, 서로 다른 개발자가 다른 값으로 치환하는 경우를 간혹 볼 수있다.A프로그램에서는 NVL(카드가능여부,&amp;rsquo;Y&amp;rsquo;)B프로그램에서는 NVL(카드가능여부,&amp;rsquo;N&amp;rsquo;)로 작성 할 오류 가능성도 존재한다.&lt;br /&gt;&lt;br /&gt;라)1/2 : 이건 모죠&lt;br /&gt;혹 Y/N을 1/2로 표현한 사이트도 있지 않을까 싶어서 만들어 보았다 (웃으시고&amp;hellip;)&lt;br /&gt;&lt;br /&gt;마)Y/N/Y/Z : 허억, 이건 또 모냐&lt;br /&gt;여부 컬럼에 왜 이리 값이 많은 것일까&lt;br /&gt;컬럼이 미쳤어 ~ 미쳤어.. 에고 돌아 보려 ~~~&lt;br /&gt;추측 1 ) Y/Z는 오류 값이다. YN이어야 만 한다. 이런 데이터는 클린징이 필요하다.&lt;br /&gt;추측 2 ) 여부 컬럼의 개념이 확장 되었다. 처음에는 YN 값만 있었는데, 세월이 지나고 시스템이 성장하면서 의미가 확장 될 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;[ 사용여부 ]&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Y : 사용&lt;br /&gt;N : 미사용&lt;br /&gt;Y : 삭제a 미사용은 화면에 보이는데 아예 삭제된 데이터를 표기하고자 함&lt;br /&gt;Z : 검토중a 주요 속성이라서 검토/승인 프로세스 진행이라는 것을 표기&lt;br /&gt;&lt;br /&gt;물론 이렇게 개념이 확장 된 것은 이제 컬럼명은 사용여부 이지만 도메인은 사용유형코드로 변경되어야 한다. 여부컬럼이 코드컬럼으로 진화한 경우라고 볼 수 있겠다.&lt;br /&gt;( 컬럼명은 변경하기 어려울 것이다. 이미 모든 프로그램에 적용되어 있을 테니&amp;hellip;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;5) 이해가 편한 한글속성 표기&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여부 컬럼도 한글속성명과 영문컬럼명을 잘 만들어 주어야 한다.&lt;br /&gt;이름이 너무 어려우면 매번 머리에서 2번 고민을 해야 의미를 알 수 있는 컬럼 들이 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;- 무검사여부 : YN&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Y : 제품에 대한 정밀검사를 하지 않았다는 의미. 즉 검사하지 않아도 되는 제품이다.&lt;br /&gt;N : 제룸에 대한 정밀검사를 하지 않으면 안된다는 의미. 즉 검사를 반드시 해야하는 제품&lt;br /&gt;&lt;br /&gt;위 컬럼은 몇 일 지나면 반드시 또 헷갈린다.&lt;br /&gt;&lt;br /&gt;컬럼을 이렇게 바꾼다 e 검사여부 : YN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;- 신용카드사용불가여부 : YN&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Y : 신용카드를 사용할 수 없는 제품이다&lt;br /&gt;N : 신용카드를 사용할 수 있는 제품이다&lt;br /&gt;&lt;br /&gt;성공과 행복의 원천은 긍정적인 마음자세라고 한다&lt;br /&gt;. 컬럼도 마찬가지다. 긍적적인 표현을 사용하자&lt;br /&gt;&lt;br /&gt;컬럼을 이렇게 바꾼다 e 신용카드가능여부 : YN&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #f0f0f0; color: #222222; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;- 적립금제한여부 : YN&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot;&gt;Y : 적립금을 줄 수 없는 상품이다&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot;&gt;N : 적립금을 줄 수 있는 상품이다&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot;&gt;컬럼을 이렇게 바꾼다 e 적립금가능여부 : YN&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot;&gt;사람마다 다르겠지만 혹 제한의 의미를 더욱 강조해야만 하는 경우에는 제한여부를 사용할 수도 있겠다. 판단은 모델러에게 &amp;gt; 다른 관련자들의 합의하에 결정하면 된다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음은 NOT NULL화 되지 않는 컬럼들에서 나타나는 NVL() 처리 예시이다&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT C.PRD_CD&lt;br /&gt;,C.PRD_NM AS PRD_NM&lt;br /&gt;,NVL(C.CHR_DLV_YN, 'N') AS CHARGE_FLAG========&amp;gt; 여부가 NULL 처리 : N으로 바뀐다&lt;br /&gt;. ,CASE WHEN NVL(C.CHR_DLVC_CD, 0) &amp;gt; 0 THEN&lt;br /&gt;,NVL(B.SALE_PRC, 0) AS KHS_PRICE========&amp;gt; 금액 NULL 처리 0으로 바뀐다.&lt;br /&gt;FROM배송 D&lt;br /&gt;,상품 C&lt;br /&gt;,가격 B&lt;br /&gt;WHEREA.PRD_CD = B.PRD_CD&lt;br /&gt;ANDA.PRD_CD = C.PRD_CD&lt;br /&gt;ANDC.SUP_CD = D.SUP_CD&lt;br /&gt;ANDVALID_STR_DTM &amp;lt;= SYSDATE AND VALID_END_DTM &amp;gt; SYSDATE&lt;br /&gt;ANDA.GUBUN = 'L'&lt;br /&gt;ANDA.RANKING &amp;lt;= 20&lt;br /&gt;ANDNVL(C.REP_YN,'N') &amp;lt;&amp;gt; 'Y'========&amp;gt; 여부가 NULL 처리 N으로 바뀐다.&lt;br /&gt;ANDNVL(C.CARD_USE_LIMIT_YN, 'Y') &amp;lt;&amp;gt; 'N'========&amp;gt; 여부가 NULL 처리 Y로바뀐다.&lt;br /&gt;ANDC.GBN_CD &amp;lt;&amp;gt; '10')&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;행여 여부 컬럼이 인덱스 대상 컬럼이라면 NVL()로 인한 가공으로 인하여 인덱스를 최적으로 사용하지 못할 수도 있겠다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #444444; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;출처 : &lt;a href=&quot;https://dataonair.or.kr/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://dataonair.or.kr/&lt;/a&gt;&lt;/p&gt;</description>
      <category>DB</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/185</guid>
      <comments>https://goodmean.tistory.com/185#entry185comment</comments>
      <pubDate>Fri, 8 Mar 2024 11:51:12 +0900</pubDate>
    </item>
    <item>
      <title>일반회원 테이블과 휴면회원 테이블을 따로 만드는 이유</title>
      <link>https://goodmean.tistory.com/184</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;일반회원 테이블과 휴면회원 테이블의 컬럼은 완전히 동일한데 따로 만드는 이유가 무엇일까요?&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Serif KR'; color: #333333; text-align: center;&quot;&gt;상태값만 바꿔주면 편하지 않을까요?&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;결론부터 말하자면 지금은 따로 만들 필요가 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5zymE/btsBUaTouF2/pKTJX5KDh7t3nSAKP46ZWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5zymE/btsBUaTouF2/pKTJX5KDh7t3nSAKP46ZWK/img.png&quot; data-alt=&quot;2020년 2월 4일 부로 정보통신망법 제29조가 사라졌기 때문입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5zymE/btsBUaTouF2/pKTJX5KDh7t3nSAKP46ZWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5zymE%2FbtsBUaTouF2%2FpKTJX5KDh7t3nSAKP46ZWK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;235&quot; height=&quot;54&quot; data-origin-width=&quot;235&quot; data-origin-height=&quot;54&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2020년 2월 4일 부로 정보통신망법 제29조가 사라졌기 때문입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이전에 테이블을 분리했던 이유는 정보통신망법 제 29조에 있었습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;② 정보통신서비스 제공자등은 정보통신서비스를 1년의 기간 동안 이용하지 아니하는 이용자의 개인정보를 보호하기 위하여 대통령령으로 정하는 바에 따라 개인정보의 파기 등 필요한 조치를 취하여야 한다. 다만, 그 기간에 대하여 다른 법령 또는 이용자의 요청에 따라 달리 정한 경우에는 그에 따른다.&amp;nbsp;&amp;nbsp;&amp;lt;신설 2012.2.17, 2015.12.1&amp;gt;&lt;br /&gt;③ 정보통신서비스 제공자등은 제2항의 기간 만료 30일 전까지 개인정보가 파기되는 사실, 기간 만료일 및 파기되는 개인정보의 항목 등 대통령령으로 정하는 사항을 전자우편 등 대통령령으로 정하는 방법으로 이용자에게 알려야 한다.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1년 이상 서비스 이용 기록이 없는 이용자의 회원가입 정보는&lt;b&gt; 정보통신망법 제29조&lt;/b&gt;에 따라 일반 이용자의 회원가입 정보와 분리하여 별도로 저장 및 관리되며, 휴면회원으로 전환되기전 30일 전까지도 알려야 했죠.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 해당 법조항이 사라진 이후엔 법적으로 분리하지 않아도 되고, 현재도 분리하고 있는 이유는 회원가입 정책에 회사가 해당내용을 기재했을 가능성이 높습니다.&lt;/p&gt;</description>
      <category>DB</category>
      <category>일반회원</category>
      <category>정보통신망법제29조</category>
      <category>휴면회원</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/184</guid>
      <comments>https://goodmean.tistory.com/184#entry184comment</comments>
      <pubDate>Wed, 13 Dec 2023 17:11:08 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 날짜 차이 구하기</title>
      <link>https://goodmean.tistory.com/183</link>
      <description>&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;함수&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;내용&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;DATEDIFF(날짜1, 날짜2)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;날짜1 - 날짜2 차이를 일수로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;TIMESTAMPDIFF(단위, 날짜1, 날짜2)&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;날짜1 - 날짜2 차이를 선택한 단위로 반환&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 28.3721%; height: 313px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style8&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;SECOND&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;초&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;MINUTE&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;분&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;HOUR&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;시&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;DAY&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;일&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;WEEK&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;주&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;MONTH&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;월&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;QUARTER&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;분기&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;YEAR&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;년&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DATEDIFF&lt;/p&gt;
&lt;pre id=&quot;code_1676436105631&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;쿼리 : SELECT DATEDIFF('2021-01-16', '2017-03-01');
결과 : 1417&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TIMESTAMPDIFF&lt;/p&gt;
&lt;pre id=&quot;code_1676436118947&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;쿼리 : SELECT TIMESTAMPDIFF(QUARTER, '2021-09-22', '2020-03-28');
결과 : -5&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래밍/SQL</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/183</guid>
      <comments>https://goodmean.tistory.com/183#entry183comment</comments>
      <pubDate>Wed, 15 Feb 2023 13:42:01 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] IF, CASE, IFNULL</title>
      <link>https://goodmean.tistory.com/182</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;IF&lt;/p&gt;
&lt;pre id=&quot;code_1676435886029&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IF (조건문, 참일때 값, 거짓일 때 값)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CASE&lt;/p&gt;
&lt;pre id=&quot;code_1676435928339&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CASE
	WHEN 조건1 THEN '조건1 반환값'
    WHEN 조건2 THEN '조건2 반환값'
    ELSE '충족되는 조건 없을 때 반환값'
END&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IFNULL&lt;/p&gt;
&lt;pre id=&quot;code_1676435970230&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;IFNULL( 값1, 값1이 NULL이면 출력하는 값 )&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래밍/SQL</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/182</guid>
      <comments>https://goodmean.tistory.com/182#entry182comment</comments>
      <pubDate>Wed, 15 Feb 2023 13:39:35 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 암,복호화 함수</title>
      <link>https://goodmean.tistory.com/181</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;mysql에서 제공하는 함수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;암호화 &amp;amp; 인코딩&lt;/h3&gt;
&lt;pre id=&quot;code_1676435677821&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#암호화
AES_ENCRYPT({암호화 할 값},{암호화 키})

#인코딩
TO_BASE64(AES_ENCRYPT({암호화 할 값},{암호화 키}))  #BASE64로 인코딩
HEX(AES_ENCRYPT({암호화 할 값},{암호화 키})) #hexadecimal string으로 인코딩

#EXAMPLE
UPDATE MEMBER
   SET MEM_NAME_ENC = TO_BASE64(AES_ENCRYPT(MEM_NAME,'testkey123'));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;복호화 &amp;amp; 디코딩&lt;/h3&gt;
&lt;pre id=&quot;code_1676435690056&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#디코딩
FROM_BASE64({암호화된 값})
HEX({암호화된 값})

#복호화
AES_DECRYPT(FROM_BASE64({암호화된 값}), {암호화 키}) # 암호화 할 때 사용했던 키 사용

#EXAMPLE
SELECT CAST(AES_DECRYPT(FROM_BASE64(MEM_NAME_ENC), 'testkey123') AS CHAR(50)) AS MEM_NAME
  FROM MEMBER;

SELECT CONVERT(AES_DECRYPT(FROM_BASE64(MEM_NAME_ENC), 'testkey123') using UTF-8) AS MEM_NAME
  FROM MEMBER;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시&lt;/p&gt;
&lt;pre id=&quot;code_1676435709192&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;## 1. hex 테스트 - 숫자
SELECT HEX(AES_ENCRYPT(123,'testkey123')) AS '암호화';
# 8DA6C1BCE3FC76CE3BA5DCF2AE0C6C71

SELECT AES_DECRYPT(unhex('8DA6C1BCE3FC76CE3BA5DCF2AE0C6C71'), 'testkey123') as '복호화';
# 123


## 2. hex 테스트 - 문자열
SELECT HEX(AES_ENCRYPT('abc-가나다','testkey123')) AS '암호화';
# 34B7FC91EA42901201A23730EDA93B8E

# 한글을 포함하는 문자열은 추가적인 변환 작업이 필요하다.
SELECT CONVERT(AES_DECRYPT(UNHEX('34B7FC91EA42901201A23730EDA93B8E'), 'testkey123') USING UTF8) AS '복호화';
SELECT CAST(AES_DECRYPT(UNHEX('34B7FC91EA42901201A23730EDA93B8E'), 'testkey123') AS CHAR(50)) AS '복호화';
# abc-가나다


## 3. BASE64 테스트 - 숫자
SELECT TO_BASE64(AES_ENCRYPT(123,'testkey123')) AS '암호화';
# jabBvOP8ds47pdzyrgxscQ==

SELECT AES_DECRYPT(FROM_BASE64('jabBvOP8ds47pdzyrgxscQ=='), 'testkey123') AS '복호화';
# 123


## 4. BASE64 테스트 - 문자열
SELECT TO_BASE64(AES_ENCRYPT('abc-가나다','testkey123')) AS '암호화';
# NLf8kepCkBIBojcw7ak7jg==

# 한글을 포함하는 문자열은 추가적인 변환 작업이 필요하다. 
SELECT CONVERT(AES_DECRYPT(FROM_BASE64('NLf8kepCkBIBojcw7ak7jg=='), 'testkey123') USING UTF8) AS '복호화';
# abc-가나다


# 5. table 조회 예시
SELECT AES_DECRYPT(FROM_BASE64(MEM_BIRTHDAY_ENC), 'testkey123') AS '생년월일'
     , CONVERT(AES_DECRYPT(FROM_BASE64(MEM_NAME_ENC), 'testkey123') USING UTF8) AS '이름1'
     , CAST(AES_DECRYPT(FROM_BASE64(MEM_ADDRESS_ENC), 'testkey123') AS CHAR(50) ) AS '이름21'
  FROM MEMBER;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프로그래밍/SQL</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/181</guid>
      <comments>https://goodmean.tistory.com/181#entry181comment</comments>
      <pubDate>Wed, 15 Feb 2023 13:35:22 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 날짜, 시간 간의 차이 함수</title>
      <link>https://goodmean.tistory.com/180</link>
      <description>&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;두 날짜간의 차이를 가져올 때 사용하는 함수가 두 가지가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순히 일 차이를 가져올 때 사용하는 것이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;DATEDIFF&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외에도 차이를 연, 분기, 월, 주, 일, 시, 분, 초를 지정하여 가져올 때&amp;nbsp;사용하는 함수가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;TIMESTAMPDIFF&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;▶사용법&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DATEDIFF&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;DATEDIFF(날짜1, 날짜2);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 간단히 말하자면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;날짜1 - 날짜2&lt;/b&gt;&amp;nbsp;동작입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF&lt;/h3&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;TIMESTAMPDIFF(단위, 날짜1, 날짜2);&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;단위&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SECOND : 초&lt;/li&gt;
&lt;li&gt;MINUTE : 분&lt;/li&gt;
&lt;li&gt;HOUR : 시&lt;/li&gt;
&lt;li&gt;DAY : 일&lt;/li&gt;
&lt;li&gt;WEEK : 주&lt;/li&gt;
&lt;li&gt;MONTH : 월&lt;/li&gt;
&lt;li&gt;QUARTER : 분기&lt;/li&gt;
&lt;li&gt;YEAR : 연&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;▶예제 쿼리 (Example Query)&lt;/h2&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DATEDIFF 예제1&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;lsl&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(QUARTER, '2017-03-01', '2018-03-28');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;392&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;DATEDIFF 예제2&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;SELECT DATEDIFF('2018-03-28 23:59:59', '2017-03-01 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;392&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 초&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(SECOND, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(SECOND, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;33868800&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 분&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(MINUTE, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(MINUTE, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;564480&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 시&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(HOUR, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(HOUR, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9408&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 일&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(DAY, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(DAY, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;div&gt;392&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 주&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(WEEK, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(WEEK, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;div&gt;56&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 월&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(MONTH, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(MONTH, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 분기&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(QUARTER, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(QUARTER, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;TIMESTAMPDIFF : 연&lt;/h3&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;쿼리&lt;/h4&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;SELECT TIMESTAMPDIFF(YEAR, '2017-03-01', '2018-03-28');
-- SELECT TIMESTAMPDIFF(YEAR, '2017-03-01 00:00:00', '2018-03-28 00:00:00');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결과&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>프로그래밍/SQL</category>
      <author>goodmean</author>
      <guid isPermaLink="true">https://goodmean.tistory.com/180</guid>
      <comments>https://goodmean.tistory.com/180#entry180comment</comments>
      <pubDate>Mon, 6 Feb 2023 11:50:34 +0900</pubDate>
    </item>
  </channel>
</rss>