<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>조젤리의 개발일기</title>
    <link>https://jojelly.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 5 Jul 2026 10:32:01 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jojelly</managingEditor>
    <item>
      <title>[JPA] Table 'mysql.hibernate_seq' doesn't exist  오류 해결</title>
      <link>https://jojelly.tistory.com/187</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Entity Table생성시 @Id생성 컬럼에&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;@GeneratedValue(strategy = GenerationType.Auto)&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;를&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot;&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;@GeneratedValue(strategy = GenerationType.IDENTITY)&lt;/code&gt;&lt;/pre&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;&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;&lt;a href=&quot;https://mkyong.com/spring-boot/spring-boot-mysql-table-db_name-hibernate_sequence-doesnt-exist/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://mkyong.com/spring-boot/spring-boot-mysql-table-db_name-hibernate_sequence-doesnt-exist/&lt;/a&gt;&lt;/p&gt;</description>
      <category>JPA</category>
      <category>Entity Table</category>
      <category>GenerationType.AUTO</category>
      <category>GenerationType.IDENTITY</category>
      <category>jpa</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/187</guid>
      <comments>https://jojelly.tistory.com/187#entry187comment</comments>
      <pubDate>Mon, 4 Mar 2024 17:55:34 +0900</pubDate>
    </item>
    <item>
      <title>[intellj]git ignore 넣기  파일 컬러별 설명</title>
      <link>https://jojelly.tistory.com/186</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 값에 따라서 자동으로 gitignore 파일에 들어갈 스트링을 생성해주는 사이트이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원하는 운영체제나 언어를 넣어 생성하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나는 여기에 &quot;intelliJ&quot;, &quot;Java&quot;, &quot;Gradle&quot; 을 검색해주었다.&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;a href=&quot;https://www.toptal.com/developers/gitignore/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.toptal.com/developers/gitignore/&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1706111048287&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;gitignore.io&quot; data-og-description=&quot;Create useful .gitignore files for your project&quot; data-og-host=&quot;www.toptal.com&quot; data-og-source-url=&quot;https://www.toptal.com/developers/gitignore/&quot; data-og-url=&quot;https://www.toptal.com/developers/gitignore&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/y9cw1/hyVb1uCRwV/eVeZJKvIbw3OOwlA8zCNdK/img.png?width=2400&amp;amp;height=1254&amp;amp;face=0_0_2400_1254&quot;&gt;&lt;a href=&quot;https://www.toptal.com/developers/gitignore/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.toptal.com/developers/gitignore/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/y9cw1/hyVb1uCRwV/eVeZJKvIbw3OOwlA8zCNdK/img.png?width=2400&amp;amp;height=1254&amp;amp;face=0_0_2400_1254');&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;gitignore.io&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Create useful .gitignore files for your project&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.toptal.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;b&gt;인텔리제이에 파일목록을 살펴보면 컬러별로 구분을 할 수 있도록 되어있다.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #ececec; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;흰색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저장소에 올라간 후에 어떠한 수정도 없는 상태. (저장소에 올라간 파일과 똑같은 상태)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;노란색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;.gitignore 파일을 통해 제외한 파일들&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;빨간색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저장소에 존재하지 않는 파일.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파란색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저장소와 내 컴퓨터에 있는 파일인데 &quot;수정&quot;된 상태. (즉, 저장소에 올라간 파일과 내 컴퓨터에 있는 파일의 내용이 다른 상태)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;초록색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Git에 commit만 하고 push는 하지 않은 상태. (push하면 흰색으로 바뀐다.)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;141&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c5F4J7/btsDQ1nkMer/ksf0RNyUvCcsrLTbVamJn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c5F4J7/btsDQ1nkMer/ksf0RNyUvCcsrLTbVamJn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c5F4J7/btsDQ1nkMer/ksf0RNyUvCcsrLTbVamJn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc5F4J7%2FbtsDQ1nkMer%2Fksf0RNyUvCcsrLTbVamJn0%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;124&quot; height=&quot;141&quot; data-origin-width=&quot;124&quot; data-origin-height=&quot;141&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Github &amp;amp; 시스템설정</category>
      <category>git ignore</category>
      <category>intellj</category>
      <category>파일 컬러</category>
      <category>파일 컬러별 설명</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/186</guid>
      <comments>https://jojelly.tistory.com/186#entry186comment</comments>
      <pubDate>Thu, 25 Jan 2024 00:45:58 +0900</pubDate>
    </item>
    <item>
      <title>[오류해결] To address all issues (including breaking changes), run:  npm audit fix --force</title>
      <link>https://jojelly.tistory.com/185</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;200&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdnkxU/btsDKaiE5p6/K3ct4dSOQQp5CQ9M7q64K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdnkxU/btsDKaiE5p6/K3ct4dSOQQp5CQ9M7q64K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdnkxU/btsDKaiE5p6/K3ct4dSOQQp5CQ9M7q64K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdnkxU%2FbtsDKaiE5p6%2FK3ct4dSOQQp5CQ9M7q64K1%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;441&quot; height=&quot;200&quot; data-origin-width=&quot;441&quot; data-origin-height=&quot;200&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;react를 최신버전으로 업데이트를 하기위해&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1705662530687&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm install react@latest react-dom@latest&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;입력했더니 해당 문제가 발생했다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;설치하려는 폴더에 설치가 되어있어 발생할 가능성이 높다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;폴더에 있는 node_modules, package-lock.json 삭제 후 재설치 하자&lt;/p&gt;</description>
      <category>Front/react</category>
      <category>address all issues</category>
      <category>react</category>
      <category>react address all issues</category>
      <category>react 업데이트</category>
      <category>업데이트</category>
      <category>최신버전으로</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/185</guid>
      <comments>https://jojelly.tistory.com/185#entry185comment</comments>
      <pubDate>Fri, 19 Jan 2024 20:28:27 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] CountDownLatch</title>
      <link>https://jojelly.tistory.com/183</link>
      <description>&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;CountDownLatch 는 Thread를 멀티로 병렬처리시&amp;nbsp;&amp;nbsp;간단하게 관리해줄수있는 기능이다.&lt;/h4&gt;&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;/h4&gt;&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;1. 사용이유&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt; 여러개의 쓰레드를 생성 후 병렬로 작업처리시 각각의 쓰레드들은 다른 쓰레드의 작업을 기다리지 않고 수행하게 된다.&lt;br&gt;이 때 countDownLatch를 사용하면 일정 개수의 thread가 끝나야만 특정 thread를 실행시켜 통제 해준다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h4 style=&quot;text-align: justify;&quot; data-ke-size=&quot;size20&quot;&gt;2.사용방법&lt;/h4&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: justify;&quot;&gt;[A라는 mainThread에서 B,C Thread가 실행된 후 B,C가 종료되고 난 후에 A Thread에서 남은 작업을&lt;br&gt;하도록 만들겠다. &lt;br&gt;&lt;br&gt;1.Main Thread에 CounterDownLatch 초기화시 정수값count를 넣어준다.&amp;nbsp;&amp;nbsp;&lt;br&gt;2. B,C Thread 마지막에 countDown()를 호출한다.&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;gt; count를 1씩 줄인다.&lt;br&gt;3. MainThread에 어느 시점에 await() 메서드를 넣어준다. &lt;br&gt;4. CountDown시 1씩 줄어들며&amp;nbsp;&amp;nbsp;count값이 0이라는 숫자가 되면 Latch(게이트)역할을 하면서&amp;nbsp;&amp;nbsp;await상태가 열린다. &lt;br&gt;+await()Time메서드는 만약 B,C등에서 오류가 생기면 await가 무한대기할 수 있기때문에 대기시간을 지정하는 방법이다.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;/p&gt;</description>
      <category>CountdownKLathch</category>
      <category>java</category>
      <category>JAVA Thread</category>
      <category>Java thread count</category>
      <category>thread 기다리고 시작</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/183</guid>
      <comments>https://jojelly.tistory.com/183#entry183comment</comments>
      <pubDate>Wed, 1 Nov 2023 13:47:57 +0900</pubDate>
    </item>
    <item>
      <title>자바스크립트 함수, 타입,  키워드</title>
      <link>https://jojelly.tistory.com/181</link>
      <description>&lt;h1 style=&quot;background-color: #ffffff; color: #2d3748; text-align: start;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;자바스크립트에서 함수란?&lt;/b&gt;&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #4a5568; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수를 우선 어떤 목적을 가진 작업들을 수행하는 코드들이 모인 블럭으로 이해하면 된다.&lt;/li&gt;
&lt;li&gt;함수를 우선 지시사항들의 묶음(과정)으로 이해하면 된다.&lt;/li&gt;
&lt;li&gt;함수는 재사용 가능한 영역을 정의하고, 정보영역을 캡슐화하는데 사용되는 구문이다. (여러번 호출 가능)&lt;/li&gt;
&lt;li&gt;일반적으로 (입력 &amp;ndash; &amp;gt; 함수 &amp;ndash; &amp;gt; return &amp;ndash; &amp;gt; 출력) 형태를 갖는다.&lt;/li&gt;
&lt;li&gt;함수 선언을 위해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Keyword, name, paramenter, body&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1695655843503&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Keyword    -&amp;gt; function
// Name       -&amp;gt; hello
// Paramenter -&amp;gt; ()
// Body       -&amp;gt; {}
function hello() {
}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #4a5568; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;함수는 function 키워드로 시작하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;실제로는 객체&lt;/b&gt;&lt;/span&gt;이다.&lt;/li&gt;
&lt;li&gt;함수는 정의/생성할 수 있으며, 출력할 수도 있다.&lt;/li&gt;
&lt;li&gt;객체의 특성 덕분에 함수를 변수나 배열에 배정할 수 있다.&lt;/li&gt;
&lt;li&gt;다른 함수를 호출할 때, 인자를 넘겨 줄 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;ndash; 함수 호출&lt;/b&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #4a5568; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;선언 (매개변수 parameter)&lt;/li&gt;
&lt;li&gt;호출 (전달인자 argument)&lt;/li&gt;
&lt;/ul&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #4a5568; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;선언적이고 명시적인 function 키워드 사용&lt;/li&gt;
&lt;li&gt;함수를 객체 혹은 리터럴(함수식=함수 표현식)로 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 명시적 함수의 선언 &amp;ndash; 함수 선언식&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1695655985533&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 함수 선언식(선언문)이라고 한다.
function hello() {
  return 'hllo!';
}
// 함수 호출
hello();&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;background-color: #ffffff; color: #2d3748; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 함수를 객체 혹은 리터럴(함수식=함수 표현식)로 사용된다.&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1695656016853&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 함수 리터럴(함수 표현식)이라고 한다.
const hello = function() {
  return 'hllo!';
}
// 변수 hello는 함수 리터럴로 변수를 함수처럼 실행할 수 있다.
hello();&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h1 style=&quot;background-color: #ffffff; color: #2d3748; text-align: start;&quot;&gt;&lt;b&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;자바스크립트에서 타입이란?&lt;/b&gt;&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트의&amp;nbsp;기본 타입은 크게&amp;nbsp;원시 타입과&amp;nbsp;객체 타입으로&amp;nbsp;구분할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;원시 타입(primitive type)은 다음과 같습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;1. 숫자(number)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;2. 문자열(string)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;3. 불리언(boolean)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;4. 심볼(symbol) :&amp;nbsp;ECMAScript 6부터 제공됨&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;5. undefined&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;객체 타입(object type)은 다음과 같습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;6. 객체(object)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;1. 숫자(number)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;자바스크립트는 다른 언어와는 달리 정수와 실수를 따로 구분하지 않고, 모든 수를 실수 하나로만 표현&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;2. 문자열(string)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;자바스크립트에서 문자열은 큰따옴표(&quot;&quot;)나 작은따옴표('')로 둘러싸인 문자의 집합을&amp;nbsp;의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;3. 불리언(boolean)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;불리언 값은 참(true)과 거짓(false)을 표현합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;4. 심볼(symbol) :&amp;nbsp;ECMAScript 6부터 제공됨&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;심볼은 유일하고 변경할 수 없는 타입으로, 객체의 프로퍼티를&amp;nbsp;위한 식별자로&amp;nbsp;사용할&amp;nbsp;수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;5. undefined&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 null이란 object 타입이며,&amp;nbsp;아직 '값'이 정해지지 않은 것을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;또한, undefined란 null과는 달리 '타입'이 정해지지 않은 것을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 자바스크립트에서 undefined는 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot;&gt;6. 객체(object)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트의 기본 타입은 객체(object)입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;객체(object)란 실생활에서 우리가 인식할 수 있는 사물로 이해할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;객체는 여러&amp;nbsp;프로퍼티(property)나 메소드(method)를 같은 이름으로 묶어놓은 일종의 집합체입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #575757; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;키워드&lt;/b&gt;&lt;/span&gt;&lt;/h2&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: #000000; text-align: start;&quot;&gt; 자바스크립트에서 특정한 목적을 위해 사용하는 단어이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할을 하는 단어들이라고 생각하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1695658159539&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;break
case
catch
continue
** default : 사용자가 특별히 명령을 내리지 않으면 시스템이 자동으로 적용하는 미리 정해진 값이나 조건.
** delete : 피연산자로 지정된 객체 프로퍼티, 배열원소, 변수의 삭제를 시도하는 단항연산자이다.
** do : while의 변형인 do~while 문을 의미한다. 내용을 먼저 실행한 후에 조건을 비교한다.
else
** finally : catch절 다음에 finally 블록이 이어지는데, 앞서 try 블록에서 일어난 일에 관계없이 항상 실행이 보장되어야 할 뒷정리용 코드가 포함된다.
for
function
if
in
** instanceof : A instanceof B의 형식으로 사용하며, A가 B의 인스턴스가 맞는지 판단한다.
new
return
switch
** this : 함수 내에서 함수 호출 맥락(context)를 의미한다. 함수를 어떻게 호출하냐에 따라서 대상이 달라진다.
throw
try
typeof
var
void
while
** with : 객체를 제어하는 명령어로, 특정 객체를 여러번 사용할 경우 생략할 수 있도록 해준다.

with(document){
  	write(&quot;document.write에서 document 생략&quot;)
}&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;1-키워드-keyword&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;</description>
      <category>Front/js</category>
      <category>자바스크립트</category>
      <category>자바스크립트 키워드</category>
      <category>자바스크립트 함수</category>
      <category>키워드</category>
      <category>타입</category>
      <category>함수</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/181</guid>
      <comments>https://jojelly.tistory.com/181#entry181comment</comments>
      <pubDate>Tue, 26 Sep 2023 01:11:31 +0900</pubDate>
    </item>
    <item>
      <title>JPA -  복합키와 식별 관계 맵핑</title>
      <link>https://jojelly.tistory.com/180</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JPA 는 영속성 컨텍스트에 보관할 때 식별자를 키로 사용한다고 했다. 식별자 구분시에는 equals 와 hashCode 를 사용하므로 식별자 필드가 2 개 이상이면 별도의 식별자 클래스를 만들어서 equals 와 hashCode 를 구현해야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; 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;600&quot; data-origin-height=&quot;241&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEsUR6/btshHNiGN3o/arWD42SmVC7DtBz3Hk6ka0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEsUR6/btshHNiGN3o/arWD42SmVC7DtBz3Hk6ka0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEsUR6/btshHNiGN3o/arWD42SmVC7DtBz3Hk6ka0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEsUR6%2FbtshHNiGN3o%2FarWD42SmVC7DtBz3Hk6ka0%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;600&quot; height=&quot;241&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;241&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;JPA 에는 복합 키 지원을 위해 @IdClass 와 @EmbeddedId 를 지원한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;05-29 21 46 19.png&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vUbNq/btshG7BDlis/Akk2lhjZmCVMuQZr0gn330/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vUbNq/btshG7BDlis/Akk2lhjZmCVMuQZr0gn330/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vUbNq/btshG7BDlis/Akk2lhjZmCVMuQZr0gn330/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvUbNq%2FbtshG7BDlis%2FAkk2lhjZmCVMuQZr0gn330%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;455&quot; height=&quot;339&quot; data-filename=&quot;05-29 21 46 19.png&quot; data-origin-width=&quot;455&quot; data-origin-height=&quot;339&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 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;복합키를 사용하는 Characters클래스&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;05-29 21 44 53.png&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;272&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dA7WQv/btshRyL0Pd5/SOAlUZHcii8UB5SFJO076K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dA7WQv/btshRyL0Pd5/SOAlUZHcii8UB5SFJO076K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dA7WQv/btshRyL0Pd5/SOAlUZHcii8UB5SFJO076K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdA7WQv%2FbtshRyL0Pd5%2FSOAlUZHcii8UB5SFJO076K%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;442&quot; height=&quot;272&quot; data-filename=&quot;05-29 21 44 53.png&quot; data-origin-width=&quot;442&quot; data-origin-height=&quot;272&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;복합키 사용시 @IdClass 를 이용하여 식별자 클래스로 맵핑하였다. 식별자 클래스의 특징을 다시한번 살펴보자면 &lt;b&gt;Serializable&lt;/b&gt; 을 구현해야 하고, hashCode 와 equals 를 오버라이드 해야한다. 또한 식별자 클래스의 속성명과 엔티티의 속성명이 같아야 한다.&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;05-29 21 45 55.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;112&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLdFOo/btshHNXjY1y/KrLiOiJYH2DH03Ml7fmCY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLdFOo/btshHNXjY1y/KrLiOiJYH2DH03Ml7fmCY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLdFOo/btshHNXjY1y/KrLiOiJYH2DH03Ml7fmCY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLdFOo%2FbtshHNXjY1y%2FKrLiOiJYH2DH03Ml7fmCY0%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;773&quot; height=&quot;112&quot; data-filename=&quot;05-29 21 45 55.png&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;112&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;위의Collection 엔티티는 Character 엔티티를 외래키로 참조한다. 다중성은 &lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;Character&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; : &lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;Collection&lt;/span&gt;= 1 : N 이므로 @ManyToOne 을 사용한다. 그리고 조인 컬럼이 2 개 이상이기 때문에 @JoinColumn 이 아닌 @JoinColumns 를 사용한다.&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1685364570585&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public static void save(EntityManager em) {
	
	EntityTransaction tx = em.getTransaction();
	tx.begin();
	
	Characters characters = new Characters();
	characters.setCharacId(&quot;character_id#1&quot;);
	characters.setCharacStage(&quot;charac_stage#2&quot;);
	em.persist(characters);
	
	tx.commit();
	em.close();
}

................

public static void find(EntityManager em) {
	
	EntityTransaction tx = em.getTransaction();
	tx.begin();
	
	CharacterPK characterPK = new CharacterPK(&quot;character_id#1&quot;, &quot;charac_stage#2&quot;);
	Characters characters = em.find(characters.class, characterPKcharacterPK);
	System.out.println(&quot;characters: &quot; + characters);
	
	tx.commit();
	em.close();
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복합키 엔티티를 저장할 때에는 식별자 클래스를 이용하여 저장하지 않아도 된다. 영속성 컨텍스트에 등록하기 전 내부에서 &lt;span style=&quot;background-color: #9feec3; color: #000000; text-align: start;&quot;&gt;CharacterPK&lt;/span&gt;를 생성하여 키로 사용한다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조회코드에서는 식별자 클래스인 &lt;span style=&quot;background-color: #9feec3; color: #000000; text-align: start;&quot;&gt;CharacterPK &lt;/span&gt;를 이용하여 조회한다. 이때 복합키를 생성자인자로 받는 생성자를 별도로 생성했는데, 필요 생성자를 별도로 구현시 기본생성자도 구현해주어야 한다.&lt;/p&gt;</description>
      <category>JPA</category>
      <category>jpa</category>
      <category>JPA PK 연관관계</category>
      <category>PK 식별 매핑</category>
      <category>PK두개 매핑방법</category>
      <category>고급맵핑</category>
      <category>복합키 맵핑</category>
      <category>복합키와 식별 관계 맵핑</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/180</guid>
      <comments>https://jojelly.tistory.com/180#entry180comment</comments>
      <pubDate>Mon, 29 May 2023 22:12:56 +0900</pubDate>
    </item>
    <item>
      <title>[jquery] 여러 요소 한번에 동일하게 이벤트 생성</title>
      <link>https://jojelly.tistory.com/179</link>
      <description>&lt;script async src=&quot;https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-3951729020814745&quot;
     crossorigin=&quot;anonymous&quot;&gt;&lt;/script&gt;

&lt;pre class=&quot;arcade&quot;&gt;&lt;code&gt;$('.class1').click(function() {
   some_function();
});

$('.class2').click(function() {
   some_function();
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt;&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;$('.class1, .class2').on('click', some_function);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;$('.class1').add('.class2').on('click', some_function);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;$(document).on(&quot;click touchend&quot;, &quot;.class1, .class2, .class3&quot;, function () {
     some_function();
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front/JQuery</category>
      <category>.add(.class)</category>
      <category>JQuery 여러 요소</category>
      <category>Jquery 여러개</category>
      <category>jQuery묶음</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/179</guid>
      <comments>https://jojelly.tistory.com/179#entry179comment</comments>
      <pubDate>Mon, 22 Aug 2022 15:55:10 +0900</pubDate>
    </item>
    <item>
      <title>[JQuery] closest(), parant(), siblings(), children()</title>
      <link>https://jojelly.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;JQuery에는 선택함수가 여러개 있다. closest(), parant(), siblings(), children()가 사용되는 방법에 대해 알아볼것이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(this)는 #me를 기준으로 하겠다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660800225290&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;div id=&quot;grandmom&quot;&amp;gt;
	&amp;lt;div id=&quot;mom&quot;&amp;gt;
    	&amp;lt;div id=&quot;me&quot;&amp;gt;
        	&amp;lt;div id=&quot;son&quot;&amp;gt;
            	&amp;lt;div id=&quot;grandson&quot;&amp;gt;&amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;    
            &amp;lt;input type=&quot;text&quot; id=&quot;brother&quot;/&amp;gt;
            &amp;lt;a id=&quot;sister&quot;/&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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.parent()&lt;/p&gt;
&lt;pre id=&quot;code_1660800397375&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(document).on(&quot;click&quot;,&quot;#me&quot;, function(){
	$(this).parent().css(&quot;background-color&quot;, &quot;red&quot;);
 });&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;==&amp;gt; grandmom, mom 의 div 색이 red로&amp;nbsp; 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부모들을 호출한다. 만약 grandmom만 호출하고자 한다면 $(this).parent().parent()로 호출하는 방법이 있다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.closest()&lt;/p&gt;
&lt;pre id=&quot;code_1660800547220&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(document).on(&quot;click&quot;,&quot;#me&quot;,function(){
	$(this).closest().css(&quot;background&quot;,&quot;red&quot;);
    });&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;==&amp;gt;mom의 div 색이 red로 변경됨&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1 siblings()&lt;/p&gt;
&lt;pre id=&quot;code_1660800782968&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(document).on(&quot;click&quot;,function(){
	$(this).sibling();
    
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt;brother, sister이 선택된다.&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;만약 바로 옆 형제만 선택하고 싶다면 next()함수를 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(this).next(&quot;input&quot;)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; brother&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;3.2&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;siblings()&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1660801029027&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(document).on(&quot;click&quot;, &quot;#me&quot;, function(){
	$(this).siblings(#sister).after('&amp;lt;button type=&quot;button&quot; id=&quot;sister_2&quot;&amp;gt; 시스터2&amp;lt;/button&amp;gt;')
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt;a태그 sister 다음에 버튼 태그가 생긴다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.children()&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660801157614&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$(document).on(&quot;click&quot;,function(){
	$(this).children();
    
});&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;==&amp;gt;son&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;직계자식을 선택한다.&amp;nbsp; son아래 grandson도 있지만 이 요소는 선택되지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grandson까지 찾고자 할때는 find()함수를 사용하면 된다 .&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://jojelly.tistory.com/176&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2022.08.18 - [Front/JQuery] - find/ td:eq(0)/ not /closest/ toFixed 요소 찾기&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;find는 depth에 상관없이 하위 자손들을 모두 선택하며 jQuery에서는 자손과 자식은 다른의미로 쓰이고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자손: depth 하위의 자식들도 포관&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Front/JQuery</category>
      <category>children()</category>
      <category>closest()</category>
      <category>parant()</category>
      <category>siblings()</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/177</guid>
      <comments>https://jojelly.tistory.com/177#entry177comment</comments>
      <pubDate>Fri, 19 Aug 2022 15:44:55 +0900</pubDate>
    </item>
    <item>
      <title>find/ td:eq(0)/ not /closest/ toFixed 요소 찾기</title>
      <link>https://jojelly.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;find= 요소를 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;not=요소를 제외한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;val=값을 넣거나 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;closest=&lt;span style=&quot;background-color: #ffffff; color: #5c5c5c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;가장 가까운 요소를 찾기(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;해당 라인 또는 같은 라인에 있는 정보를 찾고 싶을때&lt;span&gt; 사용한다.)&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find(&quot;td:wq(0)&quot;)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-0번째 &amp;lt;td&amp;gt;요소를 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;not(&quot;td:wq(0)&quot;)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-0번째 &amp;lt;td&amp;gt;요소를 제외한다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;find(&quot;input&quot;)val(&quot;벨류추가&quot;);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-input태그의 value값을 &quot;벨류추가&quot;로 바꾼다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.toFixed(1)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Number 인스턴스의 소수 부분 자릿수를 전달받은 값으로 고정한 후 , 그 값을 문자열로 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-소수점 첫자리까지 나타낸다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #1c1818; color: #fefefe;&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #dbb84a;&quot;&gt;'#parent&amp;nbsp;li:last-child'&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #fefefe;&quot;&gt;).closest(&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #dbb84a;&quot;&gt;'ul'&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #fefefe;&quot;&gt;).find(&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #dbb84a;&quot;&gt;'li'&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #fefefe;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #8ac7fd;&quot;&gt;length&lt;/span&gt;&lt;span style=&quot;background-color: #1c1818; color: #fefefe;&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;id가 parent인곳에서 마지막 li인 요소의&amp;nbsp; 상위 ul을 찾아 ul안의li의 갯수를 구한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EX.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;$(#trld1).find(&quot;td:eq(0)&quot;).find(&quot;input&quot;).val(&quot;ID추가);&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-id 값이 &quot;trd1&quot;을 찾고 , 첫번째 &amp;lt;td&amp;gt;요소를 찾고 ,&amp;lt;input&amp;gt;태그의 value값을 &quot;ID추가&quot;로 바꾼다.&lt;/p&gt;
&lt;pre id=&quot;code_1660786707200&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;tr id=&quot;trd1&quot; class=&quot;trClass1&quot;&amp;gt;

&amp;lt;th&amp;gt;ID&amp;gt;

&amp;lt;td&amp;gt;

&amp;lt;input type=&quot;text&quot; id=&quot;trinput1&quot; value=&quot;&quot; readonly=&quot;true&quot;&amp;gt;

&amp;lt;/td&amp;gt;

&amp;lt;td&amp;gt;

&amp;lt;input type=&quot;button&quot;&amp;gt;

&amp;lt;/td&amp;gt;

&amp;lt;/tr&amp;gt;





&amp;lt;tr id=&quot;trd2&quot; class=&quot;trClass2&quot;&amp;gt;

&amp;lt;th&amp;gt;ID&amp;gt;

&amp;lt;td&amp;gt;

&amp;lt;input type=&quot;text&quot; id=&quot;trinput2&quot; value=&quot;&quot; readonly=&quot;true&quot;&amp;gt;

&amp;lt;/td&amp;gt;

&amp;lt;td&amp;gt;

&amp;lt;input type=&quot;button&quot;&amp;gt;

&amp;lt;/td&amp;gt;

&amp;lt;/tr&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EX2.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;td 의 두번째에 있는 텍스트를 수정하기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660789261760&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;   &amp;lt;table&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;1번&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;노랭이&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;&amp;lt;button class='edit'&amp;gt;수정&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;2번&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;파랭이&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;&amp;lt;button class='edit'&amp;gt;수정&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;3번&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;초랭이&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;&amp;lt;button class='edit'&amp;gt;수정&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
        &amp;lt;tr&amp;gt;
            &amp;lt;td&amp;gt;4번&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;검둥이&amp;lt;/td&amp;gt;
            &amp;lt;td&amp;gt;&amp;lt;button class='edit'&amp;gt;수정&amp;lt;/button&amp;gt;&amp;lt;/td&amp;gt;
        &amp;lt;/tr&amp;gt;
    &amp;lt;/table&amp;gt;&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660797442348&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
    $(function(){
        var _td,first_v;
        var btn = '&amp;lt;button class=&quot;edit&quot;&amp;gt;수정&amp;lt;/button&amp;gt;'
    
        $(document).on('click','.edit',function(e){
        
            _td = $(this).closest('tr').find('td');
            
            // 취소시 리턴값
            first_v = _td[1].innerText; 
            
            var editform = &quot;&amp;lt;input type='text' value='&quot;+_td[1].innerText+&quot;' size='10' /&amp;gt;&quot;;
            var editbtn = &quot;&amp;lt;button class='editDo'&amp;gt;완료&amp;lt;/button&amp;gt;&quot;+
                          &quot;&amp;lt;button class='cancel'&amp;gt;취소&amp;lt;/button&amp;gt;&quot;+
                          &quot;&amp;lt;button class='delDo'&amp;gt;삭제&amp;lt;/button&amp;gt;&quot;;
                          
            $(_td[1]).html(editform);
            $(_td[2]).html(editbtn);
        })
        
        $(document).on('click','.editDo',function(){
            var el = $(_td[1]).find('input').val();
            $(_td[1]).text(el);
            $(_td[2]).html(btn);
        })
        
        $(document).on('click','.cancel',function(){
            $(_td[1]).text(first_v);
            $(_td[2]).html(btn);
        })
        
        $(document).on('click','.delDo',function(){
            $(_td).remove();
        })
    })
&amp;lt;/script&amp;gt;&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;&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;
&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;
&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>Front/JQuery</category>
      <category>.closest</category>
      <category>.not</category>
      <category>find</category>
      <category>find/ td:eq(0)/ not /closest/ toFixed</category>
      <category>jquery속성찾기</category>
      <category>td:eq(0)</category>
      <category>toFixed</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/176</guid>
      <comments>https://jojelly.tistory.com/176#entry176comment</comments>
      <pubDate>Thu, 18 Aug 2022 14:21:08 +0900</pubDate>
    </item>
    <item>
      <title>@RequestParam과 @PathVariable</title>
      <link>https://jojelly.tistory.com/175</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring을 사용하다 보면 Controller 단에서 클라이언트에서 URL에 파라메터를 같이 전달하는 경우가 있습니다.&lt;br /&gt;주로 사용하는 형태는 아래의 두 가지가 대표적인 케이스가 있습니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Type 1 =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://127.0.0.1/?index=1&amp;amp;page=2&quot;&gt;http://127.0.0.1?index=1&amp;amp;page=2&lt;/a&gt;&lt;br /&gt;Type 2 =&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://127.0.0.1/index/1&quot;&gt;http://127.0.0.1/index/1&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type 1&lt;/b&gt;의 경우 파라메터의 값과 이름을 함께 전달하는 방식으로 게시판 등에서 페이지 및 검색 정보를 함께 전달하는 방식을 사용할 때 많이 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;b&gt;Type 2&lt;/b&gt;의 경우 Rest api에서 값을 호출할 때 주로 많이 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Spring에서는 이러한 전달인자를 처리하는데 두 가지 방법을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;RequestParam-사용하기&quot; data-ke-size=&quot;size26&quot;&gt;@RequestParam 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type 1&lt;/b&gt;의 URL을 처리할 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;@RequestParam&lt;/b&gt;을 사용하게 됩니다.&lt;br /&gt;아래의 예제와 같이 Controller 단에서 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660105771504&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@GetMapping(/&quot;read&quot;)
public ModelAndView getFactoryRead( int factroyId, SearchCriteria criteria) 
{
  //...    
}&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;/read ?no=1&lt;/b&gt;와 같이 url이 전달될 때 no 파라메터를 받아오게 됩니다.&lt;br /&gt;@RequestParam 어노테이션의 괄호 안의 경우 전달인자 이름(실제 값을 표시)입니다.&lt;br /&gt;이렇게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;@RequestParam&lt;/b&gt;의 경우 url 뒤에 붙는 파라메터의 값을 가져올 때 사용을 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;PathVariable-사용하기&quot; data-ke-size=&quot;size26&quot;&gt;@PathVariable 사용하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type 2&lt;/b&gt;의 URL을 처리할 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;@PathVariable&lt;/b&gt;을 사용하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660105641450&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@PostMapping(&quot;/delete/{idx}&quot;)
@ResponsBody
public JsonResultVo postDeleteFactory( int factoryIdx) {
	return factoryService.deleteFacotryData(factoryIdx);
}​&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위에 예제 코드처럼&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;PathVariable&lt;/b&gt;의 경우 url에서 각 구분자에 들어오는 값을 처리해야 할 때 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;실제로-사용은&quot; data-ke-size=&quot;size26&quot;&gt;실제로 사용은?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;@RequestParam&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;@PathVariable&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;하나만 사용하는 것이 아닌 복합적으로 사용을 하기도 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1660105711704&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@GetMapping/{userIdx}/invoices
public List&amp;lt;Invoice&amp;gt; listUsersInvoices(
	 int user,
	 Date dateOrNull
)	
{ }​&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;&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;
&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;
&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>spring</category>
      <category>@pathvariable</category>
      <category>@RequestParam</category>
      <category>@RequestParam과 @PathVariable</category>
      <category>@RequestParam과 @PathVariable 사용방법</category>
      <category>@RequestParam과 @PathVariable차이</category>
      <author>jojelly</author>
      <guid isPermaLink="true">https://jojelly.tistory.com/175</guid>
      <comments>https://jojelly.tistory.com/175#entry175comment</comments>
      <pubDate>Thu, 11 Aug 2022 14:30:06 +0900</pubDate>
    </item>
  </channel>
</rss>