<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>무인도</title>
    <link>https://deonggi.tistory.com/</link>
    <description>무인도의 피난처</description>
    <language>ko</language>
    <pubDate>Tue, 18 Aug 2026 09:28:20 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>deonggi</managingEditor>
    <image>
      <title>무인도</title>
      <url>https://tistory1.daumcdn.net/tistory/3334193/attach/7ad377b9e66243c2999ac5167546ea97</url>
      <link>https://deonggi.tistory.com</link>
    </image>
    <item>
      <title>[unity6] New Input System - 02. 단순 구현하기</title>
      <link>https://deonggi.tistory.com/190</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;저는 심플한 게임을 만들어 보려고 합니다. 이번에 필요한 것은 키 입력 시 캐릭터를 이동하는 겁니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 Input Action은 초보이므로 제공하는걸 사용합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 Player Input 컴포넌트의 Behavior는 쉬운 Send Messages (기본값) 와 Invoke Unity Events (입문자 권장) 를 사용해 보려 합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처음의 생각은 아주 순진하게도 특정키를 입력하면 이벤트 트리거 같은 것이 캐치하는 걸 생각 했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 이젠 권장하지 않는다고 해서 New Input System 이라는 먼 길을 돌아왔습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;( &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;이전글&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://deonggi.tistory.com/189&quot;&gt;[unity6] New Input System - 01. 기본 가이드&lt;/a&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt; &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #0070d1; text-align: start;&quot; href=&quot;https://youtu.be/dsLBzrbo-Vs?si=336nQHmkWgL9GPUQ&quot;&gt;가이드 영상&lt;/a&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;참조&lt;/span&gt;&lt;/span&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용된 캐릭터 오브젝트에 적용된 C# 스크립트 파일은 Player.cs 입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1. 캐릭터 오브젝트에 Player Input 컴포넌트 추가 (Actions 에는 이미 제공되어 있는 Input Action 파일이 자동으로 들어감)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bd2iBS/dJMcabwT0FY/iuAElKQgye0RONXKxyiLLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bd2iBS/dJMcabwT0FY/iuAElKQgye0RONXKxyiLLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bd2iBS/dJMcabwT0FY/iuAElKQgye0RONXKxyiLLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbd2iBS%2FdJMcabwT0FY%2FiuAElKQgye0RONXKxyiLLK%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;1452&quot; height=&quot;484&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Actions에 파일을 더블 클릭하면 Input Action이 작성된 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기에 작성된 정보는 &quot;Player는 이런 액션을 사용할 수 있는데 각 액션에는 어떤 입력을 바인딩 한다.&quot; 라고 정의해 둔 것 입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 이미지의 노란색 박스가 Behavior를 설정하는 부분입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-1. Behavior를 Send Messages 사용시&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;액션이 Move 라고 정의되어 있다면 C# 코드의 OnMove 함수를 호출하게 됩니다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;50&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;51&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;52&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;53&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;54&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;55&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;56&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;using&lt;/span&gt;&amp;nbsp;UnityEngine;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;using&lt;/span&gt;&amp;nbsp;UnityEngine.InputSystem;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Player&amp;nbsp;:&amp;nbsp;MonoBehaviour&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Vector2&amp;nbsp;inputDirection;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;입력받은&amp;nbsp;방향을&amp;nbsp;저장할&amp;nbsp;변수&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;Action&amp;nbsp;Input&amp;nbsp;&amp;gt;&amp;nbsp;Behavior&amp;nbsp;&amp;gt;&amp;nbsp;Send&amp;nbsp;Message&amp;nbsp;사용시&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;:&amp;nbsp;이동&amp;nbsp;입력을&amp;nbsp;받았을&amp;nbsp;때&amp;nbsp;호출되는&amp;nbsp;함수&amp;nbsp;(이름이&amp;nbsp;정해져&amp;nbsp;있음:&amp;nbsp;On&amp;nbsp;+&amp;nbsp;Action이름)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&quot;value&quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;OnMove(InputValue&amp;nbsp;value)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.Log(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;Call&amp;nbsp;OnMove()&quot;&lt;/span&gt;,&amp;nbsp;LogLevel.Debug);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;키&amp;nbsp;입력&amp;nbsp;방향&amp;nbsp;세팅&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;value.Get&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;Vector2&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MoveAction(inputDirection);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;Move&amp;nbsp;액션에&amp;nbsp;대한&amp;nbsp;상세&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&quot;inputDirection&quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;MoveAction(Vector2&amp;nbsp;inputDirection)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.Log($&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;현재&amp;nbsp;입력&amp;nbsp;방향:&amp;nbsp;{inputDirection}&quot;&lt;/span&gt;,&amp;nbsp;LogLevel.Debug);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;타일만큼&amp;nbsp;이동시&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;키를&amp;nbsp;누르는&amp;nbsp;순간(값이&amp;nbsp;0이&amp;nbsp;아닐&amp;nbsp;때)에만&amp;nbsp;이동&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;Vector2.zero)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;이동거리&amp;nbsp;(타일사이즈)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;float&lt;/span&gt;&amp;nbsp;tileSize&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;1f;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;대각선&amp;nbsp;입력을&amp;nbsp;방지하고&amp;nbsp;상하좌우&amp;nbsp;중&amp;nbsp;가장&amp;nbsp;큰&amp;nbsp;값만&amp;nbsp;취함&amp;nbsp;(선택&amp;nbsp;사항)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;WASD를&amp;nbsp;같이&amp;nbsp;눌러&amp;nbsp;(0.7,&amp;nbsp;0.7)이&amp;nbsp;되는&amp;nbsp;것을&amp;nbsp;방지합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(Mathf.Abs(inputDirection.x)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;Mathf.Abs(inputDirection.y))&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;Vector2(Mathf.Abs(inputDirection.x)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;/&lt;/span&gt;&amp;nbsp;inputDirection.x,&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;else&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;Vector2(&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;,&amp;nbsp;Mathf.Abs(inputDirection.y)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;/&lt;/span&gt;&amp;nbsp;inputDirection.y);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;2.&amp;nbsp;현재&amp;nbsp;위치&amp;nbsp;+&amp;nbsp;(방향&amp;nbsp;*&amp;nbsp;타일&amp;nbsp;사이즈)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector3&amp;nbsp;targetPosition&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;transform.position&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;Vector3(inputDirection.x&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;tileSize,&amp;nbsp;inputDirection.y&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;tileSize,&amp;nbsp;0f);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;3.&amp;nbsp;위치&amp;nbsp;업데이트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform.position&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;targetPosition;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.Log($&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;이동 방향: {inputDirection}, 목표 좌표: {targetPosition}&quot;&lt;/span&gt;,&amp;nbsp;LogLevel.Debug);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;코드를 간단히 리뷰하면 아래와 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-1-1. 방향키 입력시 Move에 정의된 Input에 의해 OnMove를 호출&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-1-2. 매개변수에서 Vector2 값을 가져와 inputDirection에 방향에 해당되는 값을 적용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-1-3. MoveAction을 호출하여 실제 캐릭터의 포지션을 이동&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ Logger.Log()는 Debug.Log()로 대체해도 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1-2. Behavior를 Invoke Unity Events 사용시&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 사용할 코드를 아래와 같이 작성합니다.&lt;/p&gt;
&lt;div style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;...&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Player&amp;nbsp;:&amp;nbsp;MonoBehaviour&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Action&amp;nbsp;Input&amp;nbsp;&amp;gt;&amp;nbsp;Behavior&amp;nbsp;&amp;gt;&amp;nbsp;Invoke&amp;nbsp;Unity&amp;nbsp;Events&amp;nbsp;사용시&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;OnMoveInvokeEvent(InputAction.CallbackContext&amp;nbsp;context)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;오직&amp;nbsp;'완전히&amp;nbsp;눌렸을&amp;nbsp;때(Performed)'만&amp;nbsp;로직을&amp;nbsp;실행하도록&amp;nbsp;제한&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;context.performed)&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.Log(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;Call&amp;nbsp;OnMoveInvokeEvent()&quot;&lt;/span&gt;,&amp;nbsp;LogLevel.Debug);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;키&amp;nbsp;입력&amp;nbsp;방향&amp;nbsp;세팅&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;context.ReadValue&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;Vector2&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;value.Get&amp;lt;Vector2&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;MoveAction(inputDirection);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;...&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;해당 코드에서 주의할 점은 13번 라인입니다. 해당 코드가 없는 경우 키를 누를때, 뗄때 총 2번 이벤트가 발생되어 의도한 것 보다 2배 이동합니다.&lt;/span&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;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;이제 작성한 코드를 액션에 연결 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;1-2-1. Player Input 컨포넌트에서 Events 항목에서 사용할 Action Map을 열기 (여기서는 Player)&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8JRlV/dJMcaf0mGGf/vvggtUE7eOqSyX1Fl4WmxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8JRlV/dJMcaf0mGGf/vvggtUE7eOqSyX1Fl4WmxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8JRlV/dJMcaf0mGGf/vvggtUE7eOqSyX1Fl4WmxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8JRlV%2FdJMcaf0mGGf%2FvvggtUE7eOqSyX1Fl4WmxK%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;403&quot; height=&quot;372&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;372&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;1-2-2. Events &amp;gt; Player &amp;gt; Move 액션에 추가 (추가 전은 List is Empty) &amp;gt; 액션에 대한 C# 코드를 가진 오브젝트를 넣기 (여기서는 자기 자신인 캐릭터 오브젝트) &amp;gt; No function &amp;gt; C# 코드 &amp;gt; 코딩한 액션 함수 (함수명은 개발자가 임의로 지정해도 됨)&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beIOLn/dJMcabwT2Ba/f4zNrVIejTl4Hx8cNbljeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beIOLn/dJMcabwT2Ba/f4zNrVIejTl4Hx8cNbljeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beIOLn/dJMcabwT2Ba/f4zNrVIejTl4Hx8cNbljeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeIOLn%2FdJMcabwT2Ba%2Ff4zNrVIejTl4Hx8cNbljeK%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;386&quot; height=&quot;199&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;452&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvIxAd/dJMb996WzSr/C17nQtXi9Pc7a8UCwEeKT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvIxAd/dJMb996WzSr/C17nQtXi9Pc7a8UCwEeKT0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvIxAd/dJMb996WzSr/C17nQtXi9Pc7a8UCwEeKT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvIxAd%2FdJMb996WzSr%2FC17nQtXi9Pc7a8UCwEeKT0%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;469&quot; height=&quot;452&quot; data-origin-width=&quot;469&quot; data-origin-height=&quot;452&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;&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;2. 키보드를 누르고 있는 만큼 이동&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예시는 키를 누르고 있어서 1번 지정된 만큼만 이동됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 누르고 있는 만큼 거리를 계속해서 이동하는 코드의 예시입니다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;43&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;44&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;45&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;46&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;47&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;48&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;49&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;...&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;Player&amp;nbsp;:&amp;nbsp;MonoBehaviour&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Vector2&amp;nbsp;inputDirection;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;입력받은&amp;nbsp;방향을&amp;nbsp;저장할&amp;nbsp;변수&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;float&lt;/span&gt;&amp;nbsp;moveSpeed&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;1f;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Update&amp;nbsp;is&amp;nbsp;called&amp;nbsp;once&amp;nbsp;per&amp;nbsp;frame&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;Update()&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;부드러운&amp;nbsp;이동시&amp;nbsp;사용할&amp;nbsp;셈플&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;방향&amp;nbsp;*&amp;nbsp;속도&amp;nbsp;*&amp;nbsp;프레임보정(deltaTime)을&amp;nbsp;계산합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;현재&amp;nbsp;2D&amp;nbsp;기준(x,&amp;nbsp;y)으로&amp;nbsp;작성하셨으므로&amp;nbsp;그대로&amp;nbsp;유지합니다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Vector3&amp;nbsp;moveAmount&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;Vector3(inputDirection.x,&amp;nbsp;inputDirection.y,&amp;nbsp;0f)&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;moveSpeed&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;*&lt;/span&gt;&amp;nbsp;Time.deltaTime;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;2.&amp;nbsp;최종&amp;nbsp;위치&amp;nbsp;이동&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;transform.position&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;moveAmount;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;Action&amp;nbsp;Input&amp;nbsp;&amp;gt;&amp;nbsp;Behavior&amp;nbsp;&amp;gt;&amp;nbsp;Send&amp;nbsp;Message&amp;nbsp;사용시&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;:&amp;nbsp;이동&amp;nbsp;입력을&amp;nbsp;받았을&amp;nbsp;때&amp;nbsp;호출되는&amp;nbsp;함수&amp;nbsp;(이름이&amp;nbsp;정해져&amp;nbsp;있음:&amp;nbsp;On&amp;nbsp;+&amp;nbsp;Action이름)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;///&amp;nbsp;&amp;lt;param&amp;nbsp;name=&quot;value&quot;&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;OnMove(InputValue&amp;nbsp;value)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.Log(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;Call&amp;nbsp;OnMove()&quot;&lt;/span&gt;,&amp;nbsp;LogLevel.Debug);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;키&amp;nbsp;입력&amp;nbsp;방향&amp;nbsp;세팅&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;value.Get&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;Vector2&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;Action&amp;nbsp;Input&amp;nbsp;&amp;gt;&amp;nbsp;Behavior&amp;nbsp;&amp;gt;&amp;nbsp;Invoke&amp;nbsp;Unity&amp;nbsp;Events&amp;nbsp;사용시&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;OnMoveInvokeEvent(InputAction.CallbackContext&amp;nbsp;context)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;오직&amp;nbsp;'완전히&amp;nbsp;눌렸을&amp;nbsp;때(Performed)'만&amp;nbsp;로직을&amp;nbsp;실행하도록&amp;nbsp;제한&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//if&amp;nbsp;(!context.performed)&amp;nbsp;return;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Logger.Log(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;Call&amp;nbsp;OnMoveInvokeEvent()&quot;&lt;/span&gt;,&amp;nbsp;LogLevel.Debug);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;키&amp;nbsp;입력&amp;nbsp;방향&amp;nbsp;세팅&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;inputDirection&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;context.ReadValue&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;Vector2&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;();&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;value.Get&amp;lt;Vector2&amp;gt;();&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단히 리뷰하면 아래와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1. Update 매소드는 프레임 마다 실행됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-2. 각 프레임마다 실행되므로 누르고 있는 동안 계속해서 이동합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-3. 실행되는 기기마다 성능이 달라서 이동 값 Vector3 * moveSpeed * Time.deltaTime 를 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-4. 40번 라인을 주석처리 하지 않으면 키 입력이 종료될 때를 감지하지 못해서 계속해서 이동합니다.&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;오늘은 여기까지... OTL&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;&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;### 목차 ###&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://deonggi.tistory.com/189&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[unity6]&amp;nbsp;New&amp;nbsp;Input&amp;nbsp;System&amp;nbsp;-&amp;nbsp;01.&amp;nbsp;기본&amp;nbsp;가이드&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[unity6]&amp;nbsp;New&amp;nbsp;Input&amp;nbsp;System&amp;nbsp;-&amp;nbsp;02.&amp;nbsp;단순&amp;nbsp;구현하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>input system</category>
      <category>unity</category>
      <category>캐릭터 컨트롤</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/190</guid>
      <comments>https://deonggi.tistory.com/190#entry190comment</comments>
      <pubDate>Wed, 1 Apr 2026 15:13:03 +0900</pubDate>
    </item>
    <item>
      <title>[unity6] New Input System - 01. 기본 가이드</title>
      <link>https://deonggi.tistory.com/189</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;유니티의 New Input System이 탄생한 근본적인 이유는 입력의 '추상화'에 있습니다. 기존 시스템이 특정 키보드나 마우스 같은 하드웨어에 종속적이었다면, 새로운 시스템은 하드웨어와 로직 사이에 '액션(Action)'이라는 가상화 계층을 둡니다. 이를 통해 개발자는 장치에 상관없이 액션 단위로만 코드를 작성하면 되며, 멀티 플랫폼 대응과 키 바인딩 교체가 이전에 비해 비약적으로 쉬워지게 되었습니다.&lt;/span&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이글은 버젓이 공개되어 모두를 위한 거처럼 썼지만 ^^; 제가 나중에 찾아보기 위한 가이드&amp;nbsp;&lt;/span&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;&lt;span style=&quot;color: #333333;&quot;&gt;저는 unity6를 설치해서 자동 적용되어 있지만 이전 버전이라면 1,2번을 진행해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;(Input System은 Unity6에서 기본으로 적용되고 합니다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;패키지 설치 : Window &amp;gt; Package Manager &amp;gt; Input System을 설치 &amp;gt; 완료 후 unity 재시작&lt;/span&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dna/dU6lMf/dJMcaibKTUR/AAAAAAAAAAAAAAAAAAAAAJyKKSL2v_XMwjWPqjYYRXBy0NMcvTBqPj8T-tUpv7r3/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=R9apHZbM3kH%2FqWEEmYSqNRyHdmE%3D&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;494&quot; data-origin-width=&quot;882&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boEREA/dJMcaadImTW/IOI2otKlh3sVL7Beyqu3Uk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boEREA/dJMcaadImTW/IOI2otKlh3sVL7Beyqu3Uk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boEREA/dJMcaadImTW/IOI2otKlh3sVL7Beyqu3Uk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboEREA%2FdJMcaadImTW%2FIOI2otKlh3sVL7Beyqu3Uk%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;1015&quot; height=&quot;603&quot; data-origin-width=&quot;1015&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;Action Input Handling 설정 : Edit &amp;gt; Project Setting &amp;gt; Playe &amp;gt; Other Setting &amp;gt; Configuration &amp;gt; &lt;b&gt;Active Input Handing을 Input System Package (New)&amp;nbsp;&lt;/b&gt;&amp;gt; 완료 후 재시작&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Input System Package (New)로 변경시 기존의 Input.GetKeyDown 코드는 작동하지 않음&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Both : 기존 시스템과 새 시스템을 동시에 지원. 마이그레이션 중이거나 외부 에셋을 함께 사용하는 경우 권장&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Active Input Handing을 찾을 수 없는 경우 좌측 상단의 검색 영역에서 검색&lt;/span&gt;&lt;img style=&quot;color: #333333; text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dna/b3I8Es/dJMcacbv6uo/AAAAAAAAAAAAAAAAAAAAABGhKaBHUIxS6v9kxYcCCg87lmj38PRl5hApnuAav26O/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=hKNaX6e8I1niOIPUogA8LfcF%2FL0%3D&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;674&quot; data-origin-width=&quot;415&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1478&quot; data-origin-height=&quot;574&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c6ZYDx/dJMcabDGErF/ckZQW6rsk2SHsOzyAUL0ck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c6ZYDx/dJMcabDGErF/ckZQW6rsk2SHsOzyAUL0ck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c6ZYDx/dJMcabDGErF/ckZQW6rsk2SHsOzyAUL0ck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc6ZYDx%2FdJMcabDGErF%2FckZQW6rsk2SHsOzyAUL0ck%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;1478&quot; height=&quot;574&quot; data-origin-width=&quot;1478&quot; data-origin-height=&quot;574&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cE31kM/dJMcaaENmf8/dpFVc9Kj0OcZrkxvXwJXc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cE31kM/dJMcaaENmf8/dpFVc9Kj0OcZrkxvXwJXc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cE31kM/dJMcaaENmf8/dpFVc9Kj0OcZrkxvXwJXc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcE31kM%2FdJMcaaENmf8%2FdpFVc9Kj0OcZrkxvXwJXc1%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;1476&quot; height=&quot;640&quot; data-origin-width=&quot;1476&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Input Action 에셋 생성 및 설정&amp;nbsp;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2021 LTS 이후 URP 템플릿으로 프로젝트 생성 하고 Input System을 설치하면 unity가 기본적으로 이동(Move), 시야(Look), 점프(Jump) 등이 매핑된 .inputactions 파일을 생성하거나 라이브러리를 가져와 연결해 준다.&amp;nbsp;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이미 생성되어 있는 Input System을 사용하는 경우 아래 2번는 참고만 할것.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;직접 Input Action 생성시&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Projectject 창 &amp;gt; Create &amp;gt; Input Action &amp;gt; 생성된 &lt;span style=&quot;text-align: start;&quot;&gt;Input Action&lt;/span&gt; 파일 선택 &amp;gt; Inspacter에서 Edit Asset (또는 파일 더블클릭) &amp;gt; 플러스 버튼을 추가 &amp;gt; Scheme 정의 &amp;gt; Action 정의 &amp;gt; 우측 상단의 Save Asset 버튼을 눌러 저장&lt;/span&gt;&lt;img style=&quot;color: #333333; text-align: center; caret-color: transparent; letter-spacing: 0px;&quot; src=&quot;https://blog.kakaocdn.net/dna/cLMzGo/dJMb990b9Ki/AAAAAAAAAAAAAAAAAAAAAAhW28UNxI6A3jXxmp0FT5ywnfpnmiggpCQpeRmYf3-X/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=6GgG6YlInOMwiOb5p%2FBdVYk4498%3D&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;642&quot; data-is-animation=&quot;false&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;232&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bz6SDE/dJMcagLL6lg/ihbuhP2a1sbB79z1Sy5u71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bz6SDE/dJMcagLL6lg/ihbuhP2a1sbB79z1Sy5u71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bz6SDE/dJMcagLL6lg/ihbuhP2a1sbB79z1Sy5u71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbz6SDE%2FdJMcagLL6lg%2FihbuhP2a1sbB79z1Sy5u71%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;402&quot; height=&quot;232&quot; data-origin-width=&quot;402&quot; data-origin-height=&quot;232&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;img src=&quot;https://blog.kakaocdn.net/dna/dBIeeh/dJMcabDGH3b/AAAAAAAAAAAAAAAAAAAAAEu-S9sxG1ylca1xndcGYUSTdVTb6IeXoZstl4Nl9TZK/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=%2FsMV0jjo5uZiLMdgnn1Aqedc%2FMc%3D&quot; data-is-animation=&quot;false&quot; data-origin-height=&quot;405&quot; data-origin-width=&quot;1449&quot; /&gt;&lt;img style=&quot;color: #000000; text-align: start;&quot; src=&quot;https://blog.kakaocdn.net/dna/dOI8HJ/dJMcagE0Y9n/AAAAAAAAAAAAAAAAAAAAAA8rMIbHGu1TovLJvwxgnf95aVZLiK7xKKqGeNKsqFFJ/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&amp;amp;expires=1777561199&amp;amp;allow_ip=&amp;amp;allow_referer=&amp;amp;signature=pCBorvsELu7EOjBYYXrsjT6vxjI%3D&quot; data-origin-width=&quot;334&quot; data-origin-height=&quot;206&quot; data-is-animation=&quot;false&quot; /&gt;&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;423&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qjlJd/dJMcagSw5LT/43MMjAqTjfrdteYhqWKkV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qjlJd/dJMcagSw5LT/43MMjAqTjfrdteYhqWKkV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qjlJd/dJMcagSw5LT/43MMjAqTjfrdteYhqWKkV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqjlJd%2FdJMcagSw5LT%2F43MMjAqTjfrdteYhqWKkV0%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;1057&quot; height=&quot;423&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;423&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;C# Class 자동화 스크립트 생성 : 작성한 &lt;span style=&quot;text-align: start;&quot;&gt;Input Action&lt;/span&gt; 파일 선택 &amp;gt; Inspacter &amp;gt; Generate C# Class 체크 &amp;gt; C# Class File의 우측 ... 버튼 클릭 &amp;gt; 파일 생성(파일명은 Input Action 파일과 동일하게 작성됨) &amp;gt; Apply&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDOjtv/dJMcadBp0OR/iz8N2f9bTSGZi9LwY1CX80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDOjtv/dJMcadBp0OR/iz8N2f9bTSGZi9LwY1CX80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDOjtv/dJMcadBp0OR/iz8N2f9bTSGZi9LwY1CX80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDOjtv%2FdJMcadBp0OR%2Fiz8N2f9bTSGZi9LwY1CX80%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;1342&quot; height=&quot;603&quot; data-origin-width=&quot;1342&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;작성되는 C# 파일은 Input Action으로 정의한 모든 Action을 스크립트 파일을 자동 작성하는 것으로 개발자는 별도 작업은 없음&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;캐릭터 오브젝트 (Action이 필요한 오브젝트)에 Player Input 컴포넌트 추가 :&amp;nbsp;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;자동 생성된 Input System을 사용시&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;448&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBVKJR/dJMb99MBuNv/F60uPl2LYI4IMmHthV6Jb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBVKJR/dJMb99MBuNv/F60uPl2LYI4IMmHthV6Jb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBVKJR/dJMb99MBuNv/F60uPl2LYI4IMmHthV6Jb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBVKJR%2FdJMb99MBuNv%2FF60uPl2LYI4IMmHthV6Jb0%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;398&quot; height=&quot;448&quot; data-origin-width=&quot;398&quot; data-origin-height=&quot;448&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;직접 생성한 Input System을 사용시 : Actions 에서 이전에 생성한 Input Action 파일을 추가 &amp;gt; Behavior 설정&lt;/span&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;330&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FcLjc/dJMcabjpnN2/mFThPBR9gQ8AmKYskwLzdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FcLjc/dJMcabjpnN2/mFThPBR9gQ8AmKYskwLzdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FcLjc/dJMcabjpnN2/mFThPBR9gQ8AmKYskwLzdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFcLjc%2FdJMcabjpnN2%2FmFThPBR9gQ8AmKYskwLzdK%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;407&quot; height=&quot;330&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;330&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Behavior 옵션&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Send Messages (기본값) : 가장 설정이 간편, 대규모 프로젝트에서는 성능과 유지보수 면에서 권장하지 않음&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Input System에 작성된 Action명이 Move인 경우 OnMove를 찾아 연결하여 실행&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Broadcast Message : 본인 오브젝트만이 아니라 자식 오브젝트에 붙은 모든 컴포넌트의 관련 함수까지 호출&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Invoke Unity Events (입문자 권장) : 유니티 UI의 Button Click 이벤트와 동일한 방&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인스펙터 창에 Events 섹션이 생기며, 각 액션마다 실행할 함수를 드래그 앤 드롭 하여 연결&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Invoke C Shar Events (숙련자 권장) : 순수 C#코드로 이벤트를 구독하는 방식&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;코드내에서 playerInput.onActionTrigger += MyFuntion; 과 같이 이벤트를 직접 연결&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;가장 성능이 빠르고 코드의 가독성이 높아 모든 입력처리를 코드 한 곳에서 관리할 수 있어 대규모 프로젝트에 적합&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;딜리게이트와 이벤트 프로그래밍에 대한 이해 필요&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;table style=&quot;background-color: #000000; color: #1f1f1f; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-path-to-node=&quot;17&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;
&lt;td style=&quot;background-color: #efefef; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;옵션&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #efefef; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;연결 방식&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #efefef; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;성능&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #efefef; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;권장 상황&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;tbody style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;
&lt;tr style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,1,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,1,0,0&quot;&gt;Send Messages&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,1,1,0&quot;&gt;함수 이름 매칭 (OnJump)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,1,2,0&quot;&gt;낮음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,1,3,0&quot;&gt;빠르게 프로토타입을 만들 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,2,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,2,0,0&quot;&gt;Broadcast Messages&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,2,1,0&quot;&gt;자식까지 이름 매칭&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,2,2,0&quot;&gt;매우 낮음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,2,3,0&quot;&gt;부모-자식 간 계층적 입력 처리가 필요할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,3,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,3,0,0&quot;&gt;Invoke Unity Events&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,3,1,0&quot;&gt;인스펙터 드래그 앤 드롭&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,3,2,0&quot;&gt;보통&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,3,3,0&quot;&gt;디자이너/기획자와 협업하거나 시각적 관리가 필요할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,4,0,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,4,0,0&quot;&gt;Invoke C# Events&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,4,1,0&quot;&gt;코드에서 스크립팅&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,4,2,0&quot;&gt;&lt;b data-index-in-node=&quot;0&quot; data-path-to-node=&quot;17,4,2,0&quot;&gt;높음&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #000000; color: #1f1f1f;&quot;&gt;&lt;span style=&quot;background-color: #000000; color: #333333;&quot; data-path-to-node=&quot;17,4,3,0&quot;&gt;성능 최적화 및 체계적인 코드 구조가 중요할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스크립트 작성 및 로직 구현&lt;/span&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스크립트를 통해 액션에 대한 액션에 대한 처리 작성 (예 : 특정 자표로 이동, 아이템 사용)&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&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;&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;&lt;span style=&quot;color: #333333;&quot;&gt;이걸 몇시간 동안 작성한거여! 아우 지쳐!!&lt;/span&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;### 목차 ###&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[unity6]&amp;nbsp;New&amp;nbsp;Input&amp;nbsp;System&amp;nbsp;-&amp;nbsp;01.&amp;nbsp;기본&amp;nbsp;가이드&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://deonggi.tistory.com/190&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;[unity6]&amp;nbsp;New&amp;nbsp;Input&amp;nbsp;System&amp;nbsp;-&amp;nbsp;02.&amp;nbsp;단순&amp;nbsp;구현하기&lt;/a&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;&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;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>input system</category>
      <category>unity</category>
      <category>캐릭터 컨트롤</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/189</guid>
      <comments>https://deonggi.tistory.com/189#entry189comment</comments>
      <pubDate>Wed, 1 Apr 2026 11:58:50 +0900</pubDate>
    </item>
    <item>
      <title>ubuntu : docker Container에서 GUI firefox 실행</title>
      <link>https://deonggi.tistory.com/177</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;docker.JPG&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVboat/btrTltB9yuJ/e2TVm8WGagnMtWrVDQhqi0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVboat/btrTltB9yuJ/e2TVm8WGagnMtWrVDQhqi0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVboat/btrTltB9yuJ/e2TVm8WGagnMtWrVDQhqi0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVboat%2FbtrTltB9yuJ%2Fe2TVm8WGagnMtWrVDQhqi0%2Fimg.jpg&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;494&quot; height=&quot;329&quot; data-filename=&quot;docker.JPG&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;600&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;docker Container에서 GUI firefox 실행을 해봅시다.&lt;/u&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;&lt;b&gt;환경정보&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ubuntu 20.04.5&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker 20.10.19&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;주의! 컨테이너 생성부터 모두 docker host의 GUI 데스크톱에서 진행해야 합니다.&lt;/b&gt;&lt;/span&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;&lt;b&gt;1. GUI사용을 위한 컨테이너 생성&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670815901589&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run -d -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY --name con_test ubuntu:focal&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 GUI와 관련하여 중요한 포인트는 &lt;b&gt;-v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY&lt;/b&gt;&amp;nbsp;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--name con_test는 컨테이너명 지정한 것이고,&amp;nbsp;ubuntu:focal은 ubuntu의 버전을 명시한 것입니다.&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;&lt;b&gt;2. docker의 host에서 인증쿠키 확인&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670816689783&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;xauth list&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;edited_인증쿠키.JPG&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;76&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1LeUV/btrTjFWQh77/FHu1wTdFHFgXbPj2BlpiG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1LeUV/btrTjFWQh77/FHu1wTdFHFgXbPj2BlpiG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1LeUV/btrTjFWQh77/FHu1wTdFHFgXbPj2BlpiG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1LeUV%2FbtrTjFWQh77%2FFHu1wTdFHFgXbPj2BlpiG1%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;676&quot; height=&quot;76&quot; data-filename=&quot;edited_인증쿠키.JPG&quot; data-origin-width=&quot;676&quot; data-origin-height=&quot;76&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 GUI 연결 시 마다 인증쿠키가 변경됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p 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;div class=&quot;revenue_unit_wrap&quot;&gt;
  &lt;div class=&quot;revenue_unit_item adsense responsive&quot;&gt;
    &lt;div class=&quot;revenue_unit_info&quot;&gt;반응형&lt;/div&gt;
    &lt;script src=&quot;//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;
    &lt;ins class=&quot;adsbygoogle&quot; style=&quot;display: block;&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot; data-ad-client=&quot;ca-pub-1890743325702346&quot; data-ad-format=&quot;auto&quot;&gt;&lt;/ins&gt;
    &lt;script&gt;(adsbygoogle = window.adsbygoogle || []).push({});&lt;/script&gt;
  &lt;/div&gt;
&lt;/div&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;b&gt;3. 컨테이너에 접속 후 업데이트 및 필요한 패키지 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670817383968&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;apt-get update -y
apt-get install xauth -y
apt-get install firefox -y&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;b&gt;4. GUI 사용을 위해 인증쿠키 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670817509878&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;xauth add 복사한인증쿠키&lt;/code&gt;&lt;/pre&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. firefox 실행&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670817534325&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;firefox&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어를 입력하면 해당 컨테이너의 firefox가 GUI로 실행됩니다.&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;참고로 이 단계에서 겼었던 에러 2가지가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) ubuntu 20.04.5 (focal)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670819978798&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Unable to init server: Broadway display type not supported: unix
Error: cannot open display: unix&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CLI 모드에서 컨테이너를 생성한 경우입니다. GUI에서 생성해서 해결 되었습니다.&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;&lt;b&gt;2) ubuntu 22.04.1&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1670819989008&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ommand '/usr/bin/firefox' requires the firefox snap to be installed.
Please install it with:

snap install firefox&lt;/code&gt;&lt;/pre&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;* 참고한 글&lt;/p&gt;
&lt;figure id=&quot;og_1670819643214&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Container 내에서 GUI Application(firefox, 계산기) 실행하기&quot; data-og-description=&quot;&amp;lt;선결 조건&amp;gt; docker host를 반드시 GUI 버전으로 설치한다(Server with GUI 설치) container를 실행할 때도 GUI Desktop으로 액세스하여 Terminal을 띄워서 해야 한다 (즉, ssh로 접속하여 GUI Package를 실행해서는 안&quot; data-og-host=&quot;cloudsns.wordpress.com&quot; data-og-source-url=&quot;https://cloudsns.wordpress.com/2018/12/19/container-%EB%82%B4%EC%97%90%EC%84%9C-gui-applicationfirefox-%EA%B3%84%EC%82%B0%EA%B8%B0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0/&quot; data-og-url=&quot;https://cloudsns.wordpress.com/2018/12/19/container-%eb%82%b4%ec%97%90%ec%84%9c-gui-applicationfirefox-%ea%b3%84%ec%82%b0%ea%b8%b0-%ec%8b%a4%ed%96%89%ed%95%98%ea%b8%b0/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cOgYR1/hyQRNOOtkz/d0Xdb1bAbKBPyo6WSqRhkK/img.jpg?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/b1Dsqo/hyQRSo3cA0/Nn0jiPWID8F4x9CIhkgnL0/img.jpg?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240&quot;&gt;&lt;a href=&quot;https://cloudsns.wordpress.com/2018/12/19/container-%EB%82%B4%EC%97%90%EC%84%9C-gui-applicationfirefox-%EA%B3%84%EC%82%B0%EA%B8%B0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://cloudsns.wordpress.com/2018/12/19/container-%EB%82%B4%EC%97%90%EC%84%9C-gui-applicationfirefox-%EA%B3%84%EC%82%B0%EA%B8%B0-%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cOgYR1/hyQRNOOtkz/d0Xdb1bAbKBPyo6WSqRhkK/img.jpg?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/b1Dsqo/hyQRSo3cA0/Nn0jiPWID8F4x9CIhkgnL0/img.jpg?width=240&amp;amp;height=240&amp;amp;face=0_0_240_240');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Container 내에서 GUI Application(firefox, 계산기) 실행하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;선결 조건&amp;gt; docker host를 반드시 GUI 버전으로 설치한다(Server with GUI 설치) container를 실행할 때도 GUI Desktop으로 액세스하여 Terminal을 띄워서 해야 한다 (즉, ssh로 접속하여 GUI Package를 실행해서는 안&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;cloudsns.wordpress.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1670819647300&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;docker와 GUI 환경 연결&quot; data-og-description=&quot;docker container에서 GUI 애플리케이션을 수행할 필요가 있는 경우가 많다. 이를테면 vscode를 실행시킨다던지, 심심하니까 xeyes를 실행시켜 놓는다던지.. 아래 설명한 방법을 사용하면 docker container가 &quot; data-og-host=&quot;driz2le.tistory.com&quot; data-og-source-url=&quot;https://driz2le.tistory.com/257&quot; data-og-url=&quot;https://driz2le.tistory.com/257&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bHVNIq/hyQRNnJ17X/69jIGSS42yX5H8LPdVgNG1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cR9FWg/hyQRNnJ18s/r1AVgr36BxXJtHKvflGlSK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://driz2le.tistory.com/257&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://driz2le.tistory.com/257&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bHVNIq/hyQRNnJ17X/69jIGSS42yX5H8LPdVgNG1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cR9FWg/hyQRNnJ18s/r1AVgr36BxXJtHKvflGlSK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;docker와 GUI 환경 연결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;docker container에서 GUI 애플리케이션을 수행할 필요가 있는 경우가 많다. 이를테면 vscode를 실행시킨다던지, 심심하니까 xeyes를 실행시켜 놓는다던지.. 아래 설명한 방법을 사용하면 docker container가&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;driz2le.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;번외&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;그래도 하나 알았으니.. 위안을..&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>docker</category>
      <category>GUI로 firefox 실행</category>
      <category>ubuntu</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/177</guid>
      <comments>https://deonggi.tistory.com/177#entry177comment</comments>
      <pubDate>Mon, 12 Dec 2022 13:41:55 +0900</pubDate>
    </item>
    <item>
      <title>[spring, java, logback] 특정 로그를 별도로 관리할때</title>
      <link>https://deonggi.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;로그를 별도로 관리,&amp;nbsp; logback에서 propreties 값 사용, logback으로 exception 기록&lt;/b&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;&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;그래서 매번 로컬에서 테스트 한다는 것은 현실성이 없었기 때문에 로컬환경과 같이 이클립스의 console창에 표시되는 정보를 운영서버에서도 바로바로 얻어 확인할 필요성이 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 상황에서 적당한 것이 logback 이다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 관리 페이지에 테스터를 만들었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 console 창 로그를 가져오고 싶은데 어떻게 해야 할까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버에 기본으로 남기는 로그를 가져와야 하나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본으로 남기는 로그는 자칫 사막에서 바늘을 찾아야 하는 상황이 될 가능성이 크다.&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;혹시나 싶어 logback에 대해 알아보기로 했다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 나는 logback에서 로그를&amp;nbsp;어떤 것을 남길 것이냐, 어느 레벨로 남기냐 정도로 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 이번에 logback을 보면서 이외에 많은 부가적인 기능이 있음을 알게 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 spring logback에 대한 자세한 정보는 구글에서 검색하자.&lt;/p&gt;
&lt;p 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 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 data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. logback.xml&lt;/b&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0px; padding: 0px; border: none; background-color: #272727; border-radius: 4px; height: 819px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 819px;&quot;&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f; height: 819px; width: 16.5px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;33&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;34&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;35&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;36&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;37&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;38&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;39&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;40&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;41&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;42&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0px; text-align: left; height: 819px; width: 1389.19px;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;include&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;resource&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;org/springframework/boot/logging/logback/defaults.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;서버&amp;nbsp;환경별&amp;nbsp;properties를&amp;nbsp;읽기&amp;nbsp;위한&amp;nbsp;방법&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;resource&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;application.properties&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;resource&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;application-${spring.profiles.active}.properties&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;logging&amp;nbsp;패턴&amp;nbsp;정의&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;appender&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;INFO_LOG_OVER&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;ch.qos.logback.core.rolling.RollingFileAppender&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;${my.log.write.path}/${my.tester.log.file.name}.log&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;파일을&amp;nbsp;저장할&amp;nbsp;경로를&amp;nbsp;정한다&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;filter&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;ch.qos.logback.classic.filter.LevelFilter&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;level&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;INFO&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;level&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;onMatch&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;ACCEPT&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;onMatch&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;해당&amp;nbsp;레벨만&amp;nbsp;기록한다.&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;onMismatch&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;ACCEPT&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;onMismatch&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;DENY&amp;nbsp;다른&amp;nbsp;수준의&amp;nbsp;레벨은&amp;nbsp;기록하지&amp;nbsp;않는다.(상위&amp;nbsp;레벨도&amp;nbsp;기록&amp;nbsp;안함),&amp;nbsp;ACCEPT&amp;nbsp;:&amp;nbsp;상위&amp;nbsp;수준의&amp;nbsp;레벨에&amp;nbsp;대한&amp;nbsp;기록된다.&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;filter&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;레벨별&amp;nbsp;필터링이&amp;nbsp;필요없을&amp;nbsp;경우&amp;nbsp;filter&amp;nbsp;class&amp;nbsp;관련된&amp;nbsp;부분을&amp;nbsp;삭제하면&amp;nbsp;됨--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;rollingPolicy&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;ch.qos.logback.core.rolling.TimeBasedRollingPolicy&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;rollover&amp;nbsp;daily&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;fileNamePattern&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;${my.log.write.path}/${my.tester.log.file.name}-%d{yyyy-MM-dd}.%i.log&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;fileNamePattern&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;해당&amp;nbsp;패턴&amp;nbsp;네이밍으로&amp;nbsp;이전&amp;nbsp;파일이&amp;nbsp;기록됨&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;timeBasedFileNamingAndTriggeringPolicy&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;maxFileSize&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;10MB&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;maxFileSize&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;한&amp;nbsp;파일의&amp;nbsp;최대&amp;nbsp;용량&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;timeBasedFileNamingAndTriggeringPolicy&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;maxHistory&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;2&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;maxHistory&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;한&amp;nbsp;파일의&amp;nbsp;최대&amp;nbsp;저장&amp;nbsp;기한&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;rollingPolicy&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;encoder&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;pattern&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;%d{yyyyMMdd&amp;nbsp;HH:mm:ss.SSS}&amp;nbsp;[%thread]&amp;nbsp;%-3level&amp;nbsp;%logger{5}&amp;nbsp;-&amp;nbsp;%msg&amp;nbsp;%n&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;pattern&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;해당&amp;nbsp;패턴&amp;nbsp;네이밍으로&amp;nbsp;현재&amp;nbsp;로그가&amp;nbsp;기록됨&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;encoder&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;appender&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;name&amp;nbsp;:&amp;nbsp;콘솔에&amp;nbsp;출력된&amp;nbsp;패키지&amp;nbsp;파일에서&amp;nbsp;남긴것&amp;nbsp;에&amp;nbsp;대해서&amp;nbsp;아래&amp;nbsp;작업을&amp;nbsp;실행한다.&amp;nbsp;additivity&amp;nbsp;:&amp;nbsp;false는&amp;nbsp;로그&amp;nbsp;파일로만,&amp;nbsp;true는&amp;nbsp;콘솔도--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;logger&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;packagename.utils.DataUtil&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;additivity&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;INFO&amp;nbsp;레벨&amp;nbsp;이상에서만&amp;nbsp;실행한다.&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;level&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;INFO&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;appender-ref&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;ref&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;INFO_LOG_OVER&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;logger&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;packagename.admin.TesterService&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;additivity&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;level&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;INFO&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;appender-ref&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;ref&lt;/span&gt;=&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;INFO_LOG_OVER&quot;&lt;/span&gt;&lt;span style=&quot;color: #a8ff58;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a8ff58;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;logger&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;중략&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;configuration&lt;/span&gt;&lt;span style=&quot;color: #f0f0f0;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0px 2px 4px 0px; height: 819px; width: 13px;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4~6번줄 : 환경변수를 사용하기 위해 properties을 읽는다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본은 logback.properties 또는&amp;nbsp;application.properties에&amp;nbsp;logging.file.path, logging.file.name를 설정해서 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 나의 경우 로컬과 테스트, 운영 서버의 환경이 달라 패스가 달라지는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이에 맞게 설정하려고 하니&amp;nbsp;logging.file.path, logging.file.name를 사용할 수 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 4~6번줄과 같이 서버 환경에 따른 properties 파일의 값을 가져오는 방법을 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(6번 라인의 spring.profiles.active를 모른다면 구글 검색)&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;환경별 properties 파일에 아래와 같이 설정값을 추가해 준다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;##&amp;nbsp;logback&amp;nbsp;설정값&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;my.log.write.path=C:/logs&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;my.tester.log.file.name=tester&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logback.xml 내에서는 읽어온 변수값은 10번, 18번 줄과 같이 ${변수명}으로 사용하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(&lt;u&gt;주의! properties&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일에서&amp;nbsp;&lt;/span&gt;패스에서 역슬러시(\)는 사용할 수 없다&lt;/u&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;&lt;b&gt;9~27번줄 : 로그패턴을 정의한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10번줄 : 로그파일 패스와 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;18번줄 : 백업 파일 패스와 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;20번줄 : 1개 로그 파일의 최대 용량&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22번줄 : 로그 보유기간(일)&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;&lt;b&gt;30~38번줄 : 로그패턴을 어디서 어떻게 사용할 것인지 설정한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;30번줄 : name은 &lt;span&gt;로그패턴을&lt;span&gt; &lt;/span&gt;&lt;/span&gt;사용할 메소드의 패키지 위치, additivity는 false인 경우 지정한 로그파일로만 기록, true는 console(메인로그)도 기록&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;이제 지정된 패키지에서 남기는 로그가 별도로 기록되고 된다.&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;&lt;b&gt;2. exception이 기록되지 않는다?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 확인해 보니 1번 소스 30~38번줄에서 excetion이 일어났지만 로그파일에는 기록되지 않고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;logback의 설정이 필요한가? 검색해 봤는데&amp;nbsp;&lt;span&gt;원인은 catch 문 안에서 로그를 표시하는 방법에 문제가 있었다.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;......&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;catch&lt;/span&gt;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;e.printStackTrace();&amp;nbsp;//&amp;nbsp;logback으로&amp;nbsp;관리되지&amp;nbsp;않음&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logger.error(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;&quot;&lt;/span&gt;,&amp;nbsp;e);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&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;p 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 data-ke-size=&quot;size16&quot;&gt;* 참고한 글&lt;/p&gt;
&lt;figure id=&quot;og_1665377112772&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Logback 으로 쉽고 편리하게 로그 관리를 해볼까요? ⚙️&quot; data-og-description=&quot;Spring Boot&amp;hellip;&quot; data-og-host=&quot;tecoble.techcourse.co.kr&quot; data-og-source-url=&quot;https://tecoble.techcourse.co.kr/post/2021-08-07-logback-tutorial/&quot; data-og-url=&quot;https://post/2021-08-07-logback-tutorial/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xhfiN/hyP4C2SfU1/UVhR1FfC4j321CDLNfS6nk/img.jpg?width=670&amp;amp;height=269&amp;amp;face=0_0_670_269&quot;&gt;&lt;a href=&quot;https://tecoble.techcourse.co.kr/post/2021-08-07-logback-tutorial/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://tecoble.techcourse.co.kr/post/2021-08-07-logback-tutorial/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xhfiN/hyP4C2SfU1/UVhR1FfC4j321CDLNfS6nk/img.jpg?width=670&amp;amp;height=269&amp;amp;face=0_0_670_269');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Logback 으로 쉽고 편리하게 로그 관리를 해볼까요? ⚙️&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Spring Boot&amp;hellip;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;tecoble.techcourse.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1665377119493&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Spring-boot Logback을 활용한 로그저장&quot; data-og-description=&quot; Spring-boot의 로그를 파일로 저장해보자!! &quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@rivernine/Spring-boot-Logback%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B7%B8%EC%A0%80%EC%9E%A5&quot; data-og-url=&quot;https://velog.io/@rivernine/Spring-boot-Logback을-활용한-로그저장&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ex9rS/hyP6wzWCNg/2uNBMRTKB9k6K4ZEhpViDk/img.png?width=259&amp;amp;height=140&amp;amp;face=0_0_259_140,https://scrap.kakaocdn.net/dn/bB94Cj/hyP6zwFKLK/iz8lKlocO8Vid1WMuWK1Zk/img.png?width=259&amp;amp;height=140&amp;amp;face=0_0_259_140,https://scrap.kakaocdn.net/dn/geE3R/hyP4HwkrjE/7DLykuJQGTlTsj5i3hiCl1/img.png?width=659&amp;amp;height=367&amp;amp;face=0_0_659_367&quot;&gt;&lt;a href=&quot;https://velog.io/@rivernine/Spring-boot-Logback%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B7%B8%EC%A0%80%EC%9E%A5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@rivernine/Spring-boot-Logback%EC%9D%84-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%A1%9C%EA%B7%B8%EC%A0%80%EC%9E%A5&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ex9rS/hyP6wzWCNg/2uNBMRTKB9k6K4ZEhpViDk/img.png?width=259&amp;amp;height=140&amp;amp;face=0_0_259_140,https://scrap.kakaocdn.net/dn/bB94Cj/hyP6zwFKLK/iz8lKlocO8Vid1WMuWK1Zk/img.png?width=259&amp;amp;height=140&amp;amp;face=0_0_259_140,https://scrap.kakaocdn.net/dn/geE3R/hyP4HwkrjE/7DLykuJQGTlTsj5i3hiCl1/img.png?width=659&amp;amp;height=367&amp;amp;face=0_0_659_367');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Spring-boot Logback을 활용한 로그저장&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt; Spring-boot의 로그를 파일로 저장해보자!! &lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1665377124824&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;blog&quot; data-og-title=&quot;Dveamer&quot; data-og-description=&quot;현실에서 살고 있지만 이상에 대한 꿈을 버리지 못한 몽상가의 홈페이지 입니다. 개인적인 기록을 주 목적으로 하며 일상과 프로그래밍 관련 글을 포스팅합니다.&quot; data-og-host=&quot;dveamer.github.io&quot; data-og-source-url=&quot;http://dveamer.github.io/backend/HowToUseSlf4j.html&quot; data-og-url=&quot;https://dveamer.github.io&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/K0XoZ/hyP4ysDprZ/qj3287kItvr8FacfAxZMh0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/dNgUEm/hyP4FyuMvQ/EGTgZ0gc8SCTeAe7d3IEs1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/KgoPe/hyP4FL3RmO/sRy1oL8ipP2JCCksXswoD1/img.png?width=1672&amp;amp;height=935&amp;amp;face=0_0_1672_935&quot;&gt;&lt;a href=&quot;http://dveamer.github.io/backend/HowToUseSlf4j.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://dveamer.github.io/backend/HowToUseSlf4j.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/K0XoZ/hyP4ysDprZ/qj3287kItvr8FacfAxZMh0/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/dNgUEm/hyP4FyuMvQ/EGTgZ0gc8SCTeAe7d3IEs1/img.png?width=512&amp;amp;height=512&amp;amp;face=0_0_512_512,https://scrap.kakaocdn.net/dn/KgoPe/hyP4FL3RmO/sRy1oL8ipP2JCCksXswoD1/img.png?width=1672&amp;amp;height=935&amp;amp;face=0_0_1672_935');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Dveamer&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;현실에서 살고 있지만 이상에 대한 꿈을 버리지 못한 몽상가의 홈페이지 입니다. 개인적인 기록을 주 목적으로 하며 일상과 프로그래밍 관련 글을 포스팅합니다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;dveamer.github.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>java</category>
      <category>logback.xml</category>
      <category>logback.xml에 서버환경별 propreties 값 사용하기</category>
      <category>logback과 exception</category>
      <category>spring</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/176</guid>
      <comments>https://deonggi.tistory.com/176#entry176comment</comments>
      <pubDate>Mon, 10 Oct 2022 14:11:09 +0900</pubDate>
    </item>
    <item>
      <title>[java, Jsoup] 크롤링으로 본문 가져오기</title>
      <link>https://deonggi.tistory.com/175</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;크롤링으로 본문을 수집할 때 순수한 본문 내용만을 수집하고자 하지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;포스팅되는 많은 글들은 내부 링크, 좋아요 또는 댓글, 광고 등 많은 것들이 붙어 있어&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;사실 이 글의 내용은 기존에 포스팅 한 Selenium의 연장선에서 작업한 내용이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 Selenium 포스팅은 아래 글 참조.&lt;/p&gt;
&lt;figure id=&quot;og_1665364900778&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[java, selenium] web crawling (웹 크롤링)&quot; data-og-description=&quot;최근 좀 길게 웹 크롤링에 대해 작업을 했다. 넓은 범위로 크롤링 중인지라 길어지게 되었고, 어느정도 정리가 되어가고 있어 내용을 정리해 보고자 한다. 참고로 나는 docker에 ubuntu + tomcat + seleni&quot; data-og-host=&quot;deonggi.tistory.com&quot; data-og-source-url=&quot;https://deonggi.tistory.com/162&quot; data-og-url=&quot;https://deonggi.tistory.com/162&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cOaI4P/hyP4KzJGDf/6NICoh3b6jHVi7BhuoUkp0/img.jpg?width=668&amp;amp;height=484&amp;amp;face=0_0_668_484,https://scrap.kakaocdn.net/dn/ciqkgq/hyP6qfjMDb/mdVCAgcyeXmnh8MhsjYnw0/img.jpg?width=668&amp;amp;height=484&amp;amp;face=0_0_668_484,https://scrap.kakaocdn.net/dn/RcsXO/hyP6Eq51nA/OPWtCQeG4QSOboUXIOnEY0/img.jpg?width=1312&amp;amp;height=793&amp;amp;face=0_0_1312_793&quot;&gt;&lt;a href=&quot;https://deonggi.tistory.com/162&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://deonggi.tistory.com/162&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cOaI4P/hyP4KzJGDf/6NICoh3b6jHVi7BhuoUkp0/img.jpg?width=668&amp;amp;height=484&amp;amp;face=0_0_668_484,https://scrap.kakaocdn.net/dn/ciqkgq/hyP6qfjMDb/mdVCAgcyeXmnh8MhsjYnw0/img.jpg?width=668&amp;amp;height=484&amp;amp;face=0_0_668_484,https://scrap.kakaocdn.net/dn/RcsXO/hyP6Eq51nA/OPWtCQeG4QSOboUXIOnEY0/img.jpg?width=1312&amp;amp;height=793&amp;amp;face=0_0_1312_793');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[java, selenium] web crawling (웹 크롤링)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;최근 좀 길게 웹 크롤링에 대해 작업을 했다. 넓은 범위로 크롤링 중인지라 길어지게 되었고, 어느정도 정리가 되어가고 있어 내용을 정리해 보고자 한다. 참고로 나는 docker에 ubuntu + tomcat + seleni&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;deonggi.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Selenium의 연장선이라면서 Jsoup을 쓰고 있는 이유가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1차 결과물을 수집해 보았더니 원하지 않는 내용들도 딸려 들어오고 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 것들을 제거하는 기능이 필요했으나 작업하던 당시&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Selenium에서는 이런 레퍼런스를 찾을 수 없었기 때문에 Jsoup을 섞어서 쓰게 되었다.&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;이러한 결과로 만들어진 결과를 기록해 본다.&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;1. html에서 필요하지 않는 텍스트를 태그 단위로 제거한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 얻고자 했던 것은 본문 내용 부분이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 본문 영역의 html에 대한 텍스트를 모두 가져온다면 필요하지 않은 텍스트들이 의외로 많이 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 나는 이런 것들의 제거가 필요하다고 생각했고 태그 단위로 제거하길 원했다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*&amp;nbsp;jsoup을&amp;nbsp;이용하여&amp;nbsp;element&amp;nbsp;제거&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;strHtml&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt; *&amp;nbsp;@param&amp;nbsp;removeSelectorList&amp;nbsp;제거할&amp;nbsp;셀렉터&amp;nbsp;리스트&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*&amp;nbsp;@return&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;removeElementByJsoup(&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;strHtml,&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;removeSelectorList)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(removeSelectorList&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;removeSelectorList.size()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;String&amp;nbsp;형태의&amp;nbsp;html&amp;nbsp;문서를&amp;nbsp;html로&amp;nbsp;변경한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.jsoup.nodes.Document&amp;nbsp;html&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;org.jsoup.Jsoup.parseBodyFragment(strHtml);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;selector&amp;nbsp;:&amp;nbsp;removeSelectorList)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;html에서&amp;nbsp;제거할&amp;nbsp;태그를&amp;nbsp;찾아&amp;nbsp;제거한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.jsoup.select.Elements&amp;nbsp;els&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;html.select(selector);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(els&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;els.size()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #ff3399;&quot;&gt;for&lt;/span&gt;&amp;nbsp;(org.jsoup.nodes.Element&amp;nbsp;el&amp;nbsp;:&amp;nbsp;els)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;el.remove();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;제거된&amp;nbsp;html을&amp;nbsp;스트링으로&amp;nbsp;리턴한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;html.&lt;span style=&quot;color: #4be6fa;&quot;&gt;toString&lt;/span&gt;().&lt;span style=&quot;color: #4be6fa;&quot;&gt;trim&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;strHtml.&lt;span style=&quot;color: #4be6fa;&quot;&gt;trim&lt;/span&gt;();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 소스에서 removeSelectorList에는 이러한 제거할 &lt;span&gt;태그에 대한 셀렉터다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;(ex : &lt;/span&gt;&lt;span&gt;&lt;/span&gt;내부 글 링크, 구글 광고와 같은 것, SNS 공유 버튼 텍스트, 좋아요 댓글 버튼 텍스트 등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 메소드의 리턴 값은 html 태그를 가지고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로 이제 html 태그를 제거하고 텍스트만 가져오면 된다.&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;2. html에서 태그를 제거하고 텍스트만 남긴다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*&amp;nbsp;jsoup을&amp;nbsp;이용하여&amp;nbsp;태그를&amp;nbsp;제거한&amp;nbsp;text만&amp;nbsp;수집&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;strHtml&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*&amp;nbsp;@return&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;getElementTextByJsoup(&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;strHtml)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;StringUtils.isBlank(strHtml))&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;REGEX_NEW_LINE&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;(\r\n|\r|\n)&quot;&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;NEW_LINE&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;System&lt;/span&gt;.getProperty(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;line.separator&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;1.&amp;nbsp;p,&amp;nbsp;br&amp;nbsp;태그와&amp;nbsp;텍스트를&amp;nbsp;남긴다.&amp;nbsp;(이외&amp;nbsp;개행상태&amp;nbsp;유지)&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;2.&amp;nbsp;br&amp;nbsp;태그를&amp;nbsp;개행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;3.&amp;nbsp;남은&amp;nbsp;태그를&amp;nbsp;제거한다.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;cleanText&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;org.jsoup.Jsoup.clean(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;org.jsoup.Jsoup.clean(&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;strHtml.&lt;span style=&quot;color: #4be6fa;&quot;&gt;replace&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;&amp;amp;nbsp;&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;&amp;nbsp;&quot;&lt;/span&gt;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;공백&amp;nbsp;태그&amp;nbsp;변경&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;&quot;&lt;/span&gt;,&amp;nbsp;org.jsoup.safety.Whitelist.none().addTags(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;br&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;p&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;org.jsoup.nodes.Document.OutputSettings().prettyPrint(&lt;span style=&quot;color: #c10aff;&quot;&gt;true&lt;/span&gt;))&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;1.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.&lt;span style=&quot;color: #4be6fa;&quot;&gt;replace&lt;/span&gt;(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;&amp;lt;br&amp;gt;&quot;&lt;/span&gt;,&amp;nbsp;NEW_LINE)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;2.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;&quot;&lt;/span&gt;,&amp;nbsp;org.jsoup.safety.Whitelist.none(),&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;org.jsoup.nodes.Document.OutputSettings().prettyPrint(&lt;span style=&quot;color: #c10aff;&quot;&gt;false&lt;/span&gt;));&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;3.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;개행문자&amp;nbsp;통일&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cleanText&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;cleanText.replaceAll(REGEX_NEW_LINE,&amp;nbsp;NEW_LINE);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;StringEscapeUtils.unescapeHtml4(cleanText.&lt;span style=&quot;color: #4be6fa;&quot;&gt;trim&lt;/span&gt;());&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;html&amp;nbsp;특수문자&amp;nbsp;제거&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 소스에서는 몇가지 포인트가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 개행문자가 os에 따라 다르므로 한가지로 변경하면 차후 작업에 유리하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) br, p에 대한 태그는 개행으로 유지한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) html 특수문자는 &amp;amp;nbsp;는 공백으로 변경하고, 나머지는 제거한다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자세한 설명은 부족하겠으나 많은 테스트 후 나온 결과물이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제거할 대상 태그들에 대한 셀렉터들은 다소 사전 조사가 필요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;눈에 보이는 것들도 있겠으나 눈에 보이지 않는 요소들도 상당히 많다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러므로&amp;nbsp;2번째 소스를 먼저 사용해서 정보를 수집하고 1번 소스를 사용하면 될 것 같다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>java</category>
      <category>jsoup</category>
      <category>본문 크롤링</category>
      <category>크롤링</category>
      <category>크롤링 결과의 태그 제거</category>
      <category>크롤링 결과의 텍스트만 수집</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/175</guid>
      <comments>https://deonggi.tistory.com/175#entry175comment</comments>
      <pubDate>Mon, 10 Oct 2022 11:58:16 +0900</pubDate>
    </item>
    <item>
      <title>[spring, java, mysql] com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException: Lock wait timeout exceeded</title>
      <link>https://deonggi.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;몇일만에 서버 스케줄 작동 결과를 확인 했는데 빈 스케줄이 발견 되었다.&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;Cause:&amp;nbsp;co&lt;a href=&quot;http://m.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;m.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:&lt;/a&gt;&amp;nbsp;Lock&amp;nbsp;wait&amp;nbsp;timeout&amp;nbsp;exceeded;&amp;nbsp;try&amp;nbsp;restarting&amp;nbsp;transaction &lt;br /&gt;;&amp;nbsp;Lock&amp;nbsp;wait&amp;nbsp;timeout&amp;nbsp;exceeded;&amp;nbsp;try&amp;nbsp;restarting&amp;nbsp;transaction;&amp;nbsp;nested&amp;nbsp;exception&amp;nbsp;is&amp;nbsp;co&lt;a href=&quot;http://m.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;m.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException:&lt;/a&gt;&amp;nbsp;Lock&amp;nbsp;wait&amp;nbsp;timeout&amp;nbsp;exceeded;&amp;nbsp;try&amp;nbsp;restarting&amp;nbsp;transaction&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응급조치로 문제가 되는 스케줄을 정지시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 이게 완벽한 해결책이 될수 없는 것이 문제.....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;너무 촘촘히 서버가 돌아가고 있는게 문제인 건데... 어떻게 해야하지? =ㅅ=;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이게 문제가 된다면 준비 중인 것도 문제가 되겠다. 고민 좀 해보자.&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException</category>
      <category>java</category>
      <category>Lock wait timeout exceeded</category>
      <category>spring</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/174</guid>
      <comments>https://deonggi.tistory.com/174#entry174comment</comments>
      <pubDate>Mon, 8 Aug 2022 21:17:13 +0900</pubDate>
    </item>
    <item>
      <title>[java] FileOutputStream java.io.FileNotFoundException: Invalid file path</title>
      <link>https://deonggi.tistory.com/173</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;문제 없이 작동하던 메소드에서 에러가 난다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원인은 파일명 또는 패스에 공백 또는 사용할 수없는 문자 포함하는 경우.&lt;/p&gt;
&lt;figure id=&quot;og_1657606954085&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;java.io.IOException: Invalid file path while creating and writing in a File&quot; data-og-description=&quot;I am trying to create a file inside a directory but when the code executes it brings back the error 'java.io.IOException: Invalid file path'. And the code does create the directory called 'ServerU...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/55197609/java-io-ioexception-invalid-file-path-while-creating-and-writing-in-a-file&quot; data-og-url=&quot;https://stackoverflow.com/questions/55197609/java-io-ioexception-invalid-file-path-while-creating-and-writing-in-a-file&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cag4GC/hyO3n6AD44/KccELnMpGGGATJPJ7VgsIk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/55197609/java-io-ioexception-invalid-file-path-while-creating-and-writing-in-a-file&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/55197609/java-io-ioexception-invalid-file-path-while-creating-and-writing-in-a-file&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cag4GC/hyO3n6AD44/KccELnMpGGGATJPJ7VgsIk/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;java.io.IOException: Invalid file path while creating and writing in a File&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am trying to create a file inside a directory but when the code executes it brings back the error 'java.io.IOException: Invalid file path'. And the code does create the directory called 'ServerU...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;java.io.FileNotFoundException: Invalid file path&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.io.FileOutputStream.(FileOutputStream.java:229)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.io.FileOutputStream.(FileOutputStream.java:184)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.common.utils.Utils.writeFile(Utils.java:496)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.common.utils.Utils.getWEList(Utils.java:416)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.common.utils.Utils.run(Utils.java:236)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService.commonUWorking(ScheduleService.java:648)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService.startTUWorking(ScheduleService.java:589)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService$$FastClassBySpringCGLIB$$5a06c0f7.invoke()&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService$$EnhancerBySpringCGLIB$$397471ba.startTUWorking()&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.web.BaseController.getTest(BaseController.java:115)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.lang.reflect.Method.invoke(Method.java:568)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.lang.Thread.run(Thread.java:833)&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;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>FileOutputStream</category>
      <category>java</category>
      <category>java.io.FileNotFoundException: Invalid file path</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/173</guid>
      <comments>https://deonggi.tistory.com/173#entry173comment</comments>
      <pubDate>Tue, 12 Jul 2022 15:23:24 +0900</pubDate>
    </item>
    <item>
      <title>[java, mybatis] java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 1</title>
      <link>https://deonggi.tistory.com/172</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;이 에러는 왜 나오는지 모르겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 소스의 19번 라인에서 발생된 에러이다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;22&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;23&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;24&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;25&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;26&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;27&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;28&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;29&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;30&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;31&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;32&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Transactional(rollbackOn&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;{Exception.&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;})&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;void&lt;/span&gt;&amp;nbsp;workingProcess()&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;스케줄&amp;nbsp;로그를&amp;nbsp;남기기&amp;nbsp;위한&amp;nbsp;DTO&amp;nbsp;선언&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SchdScheduleLogReqDTO&amp;nbsp;logReqDTO&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;SchdScheduleLogReqDTO(Thread.currentThread().getStackTrace()[&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;].getMethodName());&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Integer&amp;nbsp;instCnt&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Integer&amp;nbsp;updCnt&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Integer&amp;nbsp;delCnt&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;try&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;pathList&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;mapperClass.getPathList();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(pathList&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;pathList.size()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;row&amp;nbsp;insert,&amp;nbsp;update&amp;nbsp;작업&amp;nbsp;진행.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;logReqDTO&amp;nbsp;=&amp;nbsp;callMethod(pathList,&amp;nbsp;logReqDTO);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;if&lt;/span&gt;&amp;nbsp;(logReqDTO&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;logReqDTO.getInstCnt()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;!&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;null&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;amp;&lt;/span&gt;&amp;nbsp;logReqDTO.getInstCnt()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;0&lt;/span&gt;)&amp;nbsp;{&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;break&amp;nbsp;point&amp;nbsp;instCnt에&amp;nbsp;11로&amp;nbsp;수정&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SearchSchdUReqDTO&amp;nbsp;reqDTO&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;new&lt;/span&gt;&amp;nbsp;SearchSchdUReqDTO();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reqDTO.setUseYn(&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;Y&quot;&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reqDTO.setNotNullWrtUpdDt(&lt;span style=&quot;color: #c10aff;&quot;&gt;true&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reqDTO.setLastUpdHours(&lt;span style=&quot;color: #c10aff;&quot;&gt;1&lt;/span&gt;);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;reqDTO.setDList(pathList);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;SchdUResDTO&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;newUList&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;mapperClass.getUList(reqDTO);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;exception&amp;nbsp;발생&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/*&amp;nbsp;....&amp;nbsp;중간&amp;nbsp;작업&amp;nbsp;생략&amp;nbsp;....&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logReqDTO.setInstCnt(logReqDTO.getInstCnt()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;instCnt);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logReqDTO.setUpdCnt(logReqDTO.getUpdCnt()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;updCnt);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;logReqDTO.setDelCnt(logReqDTO.getDelCnt()&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;+&lt;/span&gt;&amp;nbsp;delCnt);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mapperClass.insertScheduleLog(logReqDTO);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;catch&lt;/span&gt;&amp;nbsp;(Exception&amp;nbsp;e)&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;e.printStackTrace();&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러를 재현하면 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 테스트를 위해 12번 라인은 주석 처리 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 14번 부터 실행하기 위해 13번 라인에서 break point를 잡고 logReqDTO의 instCnt를 11로 변경했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 19번에서 해당 에러가 발생한다.&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;해당 부분의 Array 형태라고는&amp;nbsp; 18번 라인의 &lt;b&gt;reqDTO.setDList(pathList);&lt;/b&gt; 부분 뿐이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 동일한 값으로 해당 mybatis를 실행하기 위해서 별도의 메소드에서 따로 실행했을때는 문제가 없었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로 java.lang.ArrayIndexOutOfBoundsException: Index 11 out of bounds for length 1 에서 11은&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내가 임의로 넣어준 instCnt의 값과 동일하게 변하면서 에러가 난다.&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;당황해서 1시간 이상 삽질을 했는데.. 결론은 사용하지도 않는 값이 index로 값으로 사용한다는 것이다. (왜?)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 값을 19번 라인에서 사용되는 reqDTO에서는 쓰지도 않는데... 왜일까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러가 발생한 상황은 테스트를 위한 것으로 정상 실행시는 문제가 없다.&lt;/p&gt;
&lt;p 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 data-ke-size=&quot;size16&quot;&gt;참고로 java.lang.ArrayIndexOutOfBoundsException:&amp;nbsp;Index&amp;nbsp;11&amp;nbsp;out&amp;nbsp;of&amp;nbsp;bounds&amp;nbsp;for&amp;nbsp;length&amp;nbsp;1&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같은 에러는 일반적으로 Array에서 없는 index를 사용하려고 할 발생한다.&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;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 에러 전문 ===================================================================================&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;java.lang.ArrayIndexOutOfBoundsException: Index &lt;span style=&quot;color: #ee2323;&quot;&gt;11&lt;/span&gt; out of bounds for length 1&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.ibatis.reflection.ParamNameResolver.getNamedParams(ParamNameResolver.java:115)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.ibatis.binding.MapperMethod$MethodSignature.convertArgsToSqlCommandParam(MapperMethod.java:309)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:142)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:80)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.ibatis.binding.MapperProxy$PlainMethodInvoker.invoke(MapperProxy.java:144)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at jdk.proxy2/jdk.proxy2.$Proxy136.getUrlList(Unknown Source)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService.workingProcess(ScheduleService.java:107)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService$$FastClassBySpringCGLIB$$efabd1f.invoke()&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:779)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:750)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:692)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.core.schedule.service.ScheduleService$$EnhancerBySpringCGLIB$$20ec79ba.getPostInfoFromTistoryBlog()&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.web.BaseController.testPost9(BaseController.java:121)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.lang.reflect.Method.invoke(Method.java:568)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.lang.Thread.run(Thread.java:833)&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;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>java</category>
      <category>java.lang.ArrayIndexOutOfBoundsException</category>
      <category>mybais</category>
      <category>spring</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/172</guid>
      <comments>https://deonggi.tistory.com/172#entry172comment</comments>
      <pubDate>Mon, 11 Jul 2022 14:24:24 +0900</pubDate>
    </item>
    <item>
      <title>ubuntu 서버 메모리 사용량 관리</title>
      <link>https://deonggi.tistory.com/171</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;결론적으로 현재 상황을 정리하면 docker 환경의 메모리 증가에 대해 난감해 졌다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이슈 시작을 간단히 설명하면,&lt;br /&gt;기존에 사용하던 docker에 kernel 에러가 발생해서 중단하고 host에 tomcat서버를 설치하여 사용하고 있었다.&lt;br /&gt;&lt;br /&gt;기능상 당장 큰 문제가 없기 때문에 크게 신경쓰지 않고 있었는데 어느날 확인해 보니 메모리 사용량이 급증해 있었다.&lt;br /&gt;아무 계획없이 확인했던 것인데 더 방치 했다면 아마도 50%를 바라봤을지도 모르겠다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUTcVq/btrGLfCBhhS/IXd7k70YPQBAjpHySI7P3k/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUTcVq/btrGLfCBhhS/IXd7k70YPQBAjpHySI7P3k/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUTcVq/btrGLfCBhhS/IXd7k70YPQBAjpHySI7P3k/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUTcVq%2FbtrGLfCBhhS%2FIXd7k70YPQBAjpHySI7P3k%2Fimg.jpg&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;798&quot; height=&quot;328&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;docker를 사용할 당시 컨테이너 3개가 돌아가고 있었고, 많아 봐야 메모리 사용량은 20% 정도였다.&lt;br /&gt;당시와 비교해도 특별한 소스 변동이 없었기 때문에 이 그래프의 흐름은 내게 메모리 관리가 별도로 필요성을 느끼게 했다.&lt;br /&gt;&lt;br /&gt;그래서 ubuntu의 메모리 사용량 관리에 대한 내용을 찾아서 스케줄로 등록했다.&lt;br /&gt;참고정보 : &lt;a href=&quot;https://oopaque.tistory.com/119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span&gt;https://oopaque.tistory.com/119&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;우분투 리눅스 메모리 사용량 캐쉬메모리 정리&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;우분투&amp;nbsp;리눅스&amp;nbsp;메모리&amp;nbsp;사용량&amp;nbsp;메모리&amp;nbsp;정리 1) 메모리 사용량 (KB 단위) $ free 2) 메모리 사용량 (MB 단위) $ free -m 3) 메모리 사용량 (사람이 보기 편한 단위) $ free -h 4) 현재 메모리 사용정보 $ c..&quot; data-og-host=&quot;oopaque.tistory.com&quot; data-og-source-url=&quot;https://oopaque.tistory.com/119&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dEhKNz/hyO2bKhVo1/joW4ead2iijKx8us2qpJ71/img.png?width=800&amp;amp;height=802&amp;amp;face=0_0_800_802,https://scrap.kakaocdn.net/dn/Xkj9G/hyO1Y5eKEn/L4mod9rxI339cfj6K04I7k/img.png?width=800&amp;amp;height=802&amp;amp;face=0_0_800_802,https://scrap.kakaocdn.net/dn/cKMSdY/hyO1WTTnAI/KbNxdUbwKzoi1jbgKh5vS1/img.png?width=1430&amp;amp;height=1214&amp;amp;face=0_0_1430_1214&quot; data-og-url=&quot;https://oopaque.tistory.com/119&quot;&gt;&lt;a href=&quot;https://oopaque.tistory.com/119&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://oopaque.tistory.com/119&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dEhKNz/hyO2bKhVo1/joW4ead2iijKx8us2qpJ71/img.png?width=800&amp;amp;height=802&amp;amp;face=0_0_800_802,https://scrap.kakaocdn.net/dn/Xkj9G/hyO1Y5eKEn/L4mod9rxI339cfj6K04I7k/img.png?width=800&amp;amp;height=802&amp;amp;face=0_0_800_802,https://scrap.kakaocdn.net/dn/cKMSdY/hyO1WTTnAI/KbNxdUbwKzoi1jbgKh5vS1/img.png?width=1430&amp;amp;height=1214&amp;amp;face=0_0_1430_1214');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;우분투 리눅스 메모리 사용량 캐쉬메모리 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;우분투&amp;nbsp;리눅스&amp;nbsp;메모리&amp;nbsp;사용량&amp;nbsp;메모리&amp;nbsp;정리 1) 메모리 사용량 (KB 단위) $ free 2) 메모리 사용량 (MB 단위) $ free -m 3) 메모리 사용량 (사람이 보기 편한 단위) $ free -h 4) 현재 메모리 사용정보 $ c..&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;oopaque.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 결과는 위 30일 그래프의 우측 부분이다.&lt;br /&gt;스케줄 추가 전과 비교하면 증가폭이 둔화되긴 했지만 여전히 조금씩 증가하고 있었다.&lt;br /&gt;&lt;br /&gt;이후 좀 흥미로운게 있었는데 docker를 사용하게 되면서 부터다.&lt;br /&gt;어찌어찌 kernel 문제가 해결(?) 되어서 다시 docker를 사용하게 되었다.&lt;br /&gt;아래는 도커 사용 전후다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coqZxd/btrGLdRQ6uF/eDuduBwqKDFfcgWu7jKGm1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coqZxd/btrGLdRQ6uF/eDuduBwqKDFfcgWu7jKGm1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coqZxd/btrGLdRQ6uF/eDuduBwqKDFfcgWu7jKGm1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoqZxd%2FbtrGLdRQ6uF%2FeDuduBwqKDFfcgWu7jKGm1%2Fimg.jpg&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;798&quot; height=&quot;328&quot; data-origin-width=&quot;798&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;환경의 차이는 아래와 같다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.651%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;docker 사용 전&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;docker 사용 후&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px; text-align: center;&quot;&gt;&lt;b&gt;공통점 특이점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.6666%; height: 20px; text-align: center;&quot; colspan=&quot;2&quot;&gt;host에서 메모리 관리 스케줄 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;차이점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: justify;&quot;&gt;tomcat 서버 1개만 운영(prod)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 17px; text-align: justify;&quot;&gt;총 3개의 컨테이너 운영중&lt;br /&gt;prod : docker 사용전 작업을 모두 수행&lt;br /&gt;dev : 단순 test용&lt;br /&gt;docker 관리를 위한 컨테이너&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;이러한 차이라면 오히려 docker를 사용한 후 메모리 사용량이 더 늘어야 하는게 아닌가?&lt;br /&gt;오히려 최저 사용량은 docker 사용 후에가 더 낮다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 3일간 모니터링 한 결과 조금씩 메모리 사용량이 증가하고 있다.&lt;br /&gt;구글을 검색해봐도 docker가 메모리 관리를 아주 잘 하는것 같지는 않은데 말이다. 흠 =ㄴ=ㅋ&lt;br /&gt;&lt;br /&gt;&lt;b&gt;docker 사용 6일 후 현재&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;docker사용현재.jpg&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L8a2o/btrGVkQsNX4/oL8eSxbFi7U8GY6qO74ark/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L8a2o/btrGVkQsNX4/oL8eSxbFi7U8GY6qO74ark/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L8a2o/btrGVkQsNX4/oL8eSxbFi7U8GY6qO74ark/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL8a2o%2FbtrGVkQsNX4%2FoL8eSxbFi7U8GY6qO74ark%2Fimg.jpg&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;779&quot; height=&quot;365&quot; data-filename=&quot;docker사용현재.jpg&quot; data-origin-width=&quot;1036&quot; data-origin-height=&quot;485&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;역시 구글 검색 결과가 맞는 모양이다.&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;아쉽게도 메모리 사용량은 점차 증가하고 있으며, &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;특정 머신시간(19~20시)에 대략 3%씩 증가하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;주기적으로 관리해 줄 방법 없나?&amp;nbsp;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>docker</category>
      <category>memory 관리</category>
      <category>memory 사용량</category>
      <category>ubuntu</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/171</guid>
      <comments>https://deonggi.tistory.com/171#entry171comment</comments>
      <pubDate>Fri, 8 Jul 2022 13:08:38 +0900</pubDate>
    </item>
    <item>
      <title>[spring, jpa]  Parameter value [8120] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [8120] did not match expected type [java.lang.String (n/a)]</title>
      <link>https://deonggi.tistory.com/170</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약 : 파라미터 8120은 String이 아니다. repository의 메소드에 사용하는 변수명을 정확히 맞춰줘야 한다.&lt;/b&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;문제가 된 entity는 아래와 같다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;6&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;7&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;8&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;9&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;10&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;11&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;12&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;13&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;14&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;15&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;16&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;17&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;18&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;19&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;20&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;21&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Data&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Entity(name&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;SPECIAL_MANAGE&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;class&lt;/span&gt;&amp;nbsp;SpecialManage&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;extends&lt;/span&gt;&amp;nbsp;UseYnModel&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;static&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;final&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;long&lt;/span&gt;&amp;nbsp;serialVersionUID&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;1L;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Id&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;SCHD_CD&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;50&lt;/span&gt;,&amp;nbsp;nullable&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;false&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;schdCd;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Id&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;TRG_SEQ&quot;&lt;/span&gt;,&amp;nbsp;nullable&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;false&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;Integer&amp;nbsp;trgSeq;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;TRG_TP&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;550&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;trgTp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Column(name&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ffd500;&quot;&gt;&quot;BS_DMN&quot;&lt;/span&gt;,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;length&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;256&lt;/span&gt;,&amp;nbsp;nullable&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #c10aff;&quot;&gt;false&lt;/span&gt;)&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;bsDmn;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 아래 repository 3번라인으로 실행시 에러가 발생된다.&lt;/p&gt;
&lt;div class=&quot;colorscripter-code&quot; style=&quot;color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; position: relative !important; overflow: auto;&quot;&gt;
&lt;table class=&quot;colorscripter-code-table&quot; style=&quot;margin: 0; padding: 0; border: none; background-color: #272727; border-radius: 4px;&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 6px; border-right: 2px solid #4f4f4f;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; word-break: normal; text-align: right; color: #aaa; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;1&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;2&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;3&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;4&lt;/div&gt;
&lt;div style=&quot;line-height: 130%;&quot;&gt;5&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;padding: 6px 0; text-align: left;&quot;&gt;
&lt;div style=&quot;margin: 0; padding: 0; color: #f0f0f0; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace !important; line-height: 130%;&quot;&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;@Repository&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;interface&lt;/span&gt;&amp;nbsp;SpecialManageRepository&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;extends&lt;/span&gt;&amp;nbsp;JpaRepository&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;lt;&lt;/span&gt;SpecialManage,&amp;nbsp;SpecialManagePK&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff3399;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;{&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//&amp;nbsp;public&amp;nbsp;SpecialManage&amp;nbsp;findBySchdCdAndTrgTpAndDelYn(String&amp;nbsp;schdCd,&amp;nbsp;Integer&amp;nbsp;trgTp,&amp;nbsp;String&amp;nbsp;delYn);&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #ff3399;&quot;&gt;public&lt;/span&gt;&amp;nbsp;SpecialCrawlerManage&amp;nbsp;findBySchdCdAndTrgSeqAndDelYn(&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;schdCd,&amp;nbsp;Integer&amp;nbsp;trgTp,&amp;nbsp;&lt;span style=&quot;color: #4be6fa;&quot;&gt;String&lt;/span&gt;&amp;nbsp;delYn);&lt;/div&gt;
&lt;div style=&quot;padding: 0 6px; white-space: pre; line-height: 130%;&quot;&gt;}&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right; margin-top: -13px; margin-right: 5px; font-size: 9px; font-style: italic;&quot;&gt;&lt;a style=&quot;color: #4f4f4ftext-decoration:none;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Colored by Color Scripter&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;vertical-align: bottom; padding: 0 2px 4px 0;&quot;&gt;&lt;a style=&quot;text-decoration: none; color: white;&quot; href=&quot;http://colorscripter.com/info#e&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 9px; word-break: normal; background-color: #4f4f4f; color: white; border-radius: 10px; padding: 1px;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;entity에서 trgTp는 String으로 선언되어 있으므로 repository에서 입력된 8120이 타입과 맞지 않아 에러가 발생되는 케이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5번 라인의 코드가 의도한 것으로 이대로 실행하면 정상처리 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;20220702 14:49:59.128 [http-nio-8091-exec-7] ERROR c.d.b.c.a.ExceptionControllerAdvice -&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;org.springframework.dao.InvalidDataAccessApiUsageException: Parameter value [8120] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [8120] did not match expected type [java.lang.String (n/a)]&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:374)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:235)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;at&lt;/b&gt;&lt;/span&gt; org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:551)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:61)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.dao.support.DataAccessUtils.translateIfNecessary(DataAccessUtils.java:242)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:152)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.support.CrudMethodMetadataPostProcessor$CrudMethodMetadataPopulatingMethodInterceptor.invoke(CrudMethodMetadataPostProcessor.java:145)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:97)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:215)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at jdk.proxy2/jdk.proxy2.$Proxy135.findBySchdCdAndTrgTpAndDelYn(Unknown Source)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.service.SpecialManageService.check(SpecialManageService.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at packagename.web.SpecialManageController.check(SpecialManageController.java:104)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.lang.reflect.Method.invoke(Method.java:568)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at java.base/java.lang.Thread.run(Thread.java:833)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;Caused by: java.lang.IllegalArgumentException: Parameter value [8120] did not match expected type [java.lang.String (n/a)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:54)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.spi.QueryParameterBindingValidator.validate(QueryParameterBindingValidator.java:27)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.internal.QueryParameterBindingImpl.validate(QueryParameterBindingImpl.java:90)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.internal.QueryParameterBindingImpl.setBindValue(QueryParameterBindingImpl.java:55)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:494)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.internal.AbstractProducedQuery.setParameter(AbstractProducedQuery.java:115)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.setParameter(CriteriaQueryTypeQueryAdapter.java:393)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.hibernate.query.criteria.internal.compile.CriteriaQueryTypeQueryAdapter.setParameter(CriteriaQueryTypeQueryAdapter.java:61)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.QueryParameterSetter$BindableQuery.setParameter(QueryParameterSetter.java:319)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.QueryParameterSetter$NamedOrIndexedQueryParameterSetter.lambda$setParameter$3(QueryParameterSetter.java:116)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.QueryParameterSetter$ErrorHandling$1.execute(QueryParameterSetter.java:141)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.QueryParameterSetter$NamedOrIndexedQueryParameterSetter.setParameter(QueryParameterSetter.java:116)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:82)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.ParameterBinder.bind(ParameterBinder.java:74)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.ParameterBinder.bindAndPrepare(ParameterBinder.java:95)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.invokeBinding(PartTreeJpaQuery.java:324)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.PartTreeJpaQuery$QueryPreparer.createQuery(PartTreeJpaQuery.java:243)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.doCreateQuery(PartTreeJpaQuery.java:106)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.AbstractJpaQuery.createQuery(AbstractJpaQuery.java:227)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.JpaQueryExecution$SingleEntityExecution.doExecute(JpaQueryExecution.java:196)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:88)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:155)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:143)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.repository.core.support.RepositoryMethodInvoker.doInvoke(RepositoryMethodInvoker.java:137)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.repository.core.support.RepositoryMethodInvoker.invoke(RepositoryMethodInvoker.java:121)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.doInvoke(QueryExecutorMethodInterceptor.java:152)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.repository.core.support.QueryExecutorMethodInterceptor.invoke(QueryExecutorMethodInterceptor.java:131)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:80)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:137)&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;... 59 more&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- userMessage: null&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- systemMessage: Parameter value [8120] did not match expected type [java.lang.String (n/a)]; nested exception is java.lang.IllegalArgumentException: Parameter value [8120] did not match expected type [java.lang.String (n/a)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- httpStatus: 500 INTERNAL_SERVER_ERROR&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;- code: null&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;&lt;/p&gt;</description>
      <category>코딩 삽질</category>
      <category>java.lang.IllegalArgumentException</category>
      <category>JPA</category>
      <category>Parameter value did not match expected type</category>
      <category>spring</category>
      <author>deonggi</author>
      <guid isPermaLink="true">https://deonggi.tistory.com/170</guid>
      <comments>https://deonggi.tistory.com/170#entry170comment</comments>
      <pubDate>Sun, 3 Jul 2022 11:54:35 +0900</pubDate>
    </item>
  </channel>
</rss>