<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JPA on j2234's log</title><link>https://log.j2234.cc/tags/jpa/</link><description>Recent content in JPA on j2234's log</description><generator>Hugo -- gohugo.io</generator><language>en</language><copyright>© 2026</copyright><lastBuildDate>Sun, 05 Apr 2026 06:10:56 +0000</lastBuildDate><atom:link href="https://log.j2234.cc/tags/jpa/index.xml" rel="self" type="application/rss+xml"/><item><title>JPQL-중급</title><link>https://log.j2234.cc/posts/velog/019-jpql-%EC%A4%91%EA%B8%89/</link><pubDate>Sun, 08 Oct 2023 17:11:21 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/019-jpql-%EC%A4%91%EA%B8%89/</guid><description>&lt;h2 class="relative group"&gt;경로 표현식
 &lt;div id="경로-표현식" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b2%bd%eb%a1%9c-%ed%91%9c%ed%98%84%ec%8b%9d" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;.&lt;/code&gt;으로 객체 그래프를 탐색&lt;/p&gt;
&lt;/blockquote&gt;&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt;	 &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;상태필드&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;	&lt;/span&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; 	&lt;/span&gt;&lt;span class="k"&gt;join&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;단일&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;값&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;연관&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;필드&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;join&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;orders&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;컬렉션&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;값&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;연관&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;필드&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;where&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TEAM_A&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;상태 필드 : 단순히 값을 저장하기 위한 필드 -&amp;gt; 경로 탐색의 끝이므로 탐색 ❌&lt;/li&gt;
&lt;li&gt;연관 필드 : 연관관계를 위한 필드 -&amp;gt; 묵시적 내부 조인 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;단일값 : &lt;code&gt;@ManyToOne&lt;/code&gt;, &lt;code&gt;@OneToOne&lt;/code&gt;, 엔티티(&lt;code&gt;m.team&lt;/code&gt;) -&amp;gt; 탐색 ⭕️&lt;/li&gt;
&lt;li&gt;컬렉션 : &lt;code&gt;@OneToMany&lt;/code&gt;, 대상이 컬렉션 (m.orders) -&amp;gt; 탐색 ❌&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;실무에선 묵시적 내부조인이 최대한 발생하지 않는 쪽으로 하자&lt;/em&gt; =&amp;gt; 무조건 명시적 조인 사용&lt;/p&gt;</description></item><item><title>JPQL-기본1</title><link>https://log.j2234.cc/posts/velog/021-jpql-%EA%B8%B0%EB%B3%B81/</link><pubDate>Sat, 07 Oct 2023 22:59:00 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/021-jpql-%EA%B8%B0%EB%B3%B81/</guid><description>&lt;h2 class="relative group"&gt;JPQL이란?
 &lt;div id="jpql이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#jpql%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;SQL을 추상화한 객체 지향 쿼리 언어&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JPQL은 엔티티 객체를 대상으로 쿼리&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;SQL은 DB 테이블 대상으로 쿼리&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;네이티브 SQL
 &lt;div id="네이티브-sql" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%84%a4%ec%9d%b4%ed%8b%b0%eb%b8%8c-sql" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;em.createNativeQuery&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;JPA가 제공하는 SQL을 직접 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;특정 DB에 의존적인 기능을 사용할때 (오라클 CONNECT BY 등)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;기본문법
 &lt;div id="기본문법" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b8%b0%eb%b3%b8%eb%ac%b8%eb%b2%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;엔티티와 속성은 대소문자 구분함 (키워드는 구분안함)&lt;/li&gt;
&lt;li&gt;엔티티 이름 사용, 별칭(m)은 필수 as는 생략가능&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;Select_문 :: =&lt;/p&gt;</description></item><item><title>값 타입</title><link>https://log.j2234.cc/posts/velog/022-%EA%B0%92-%ED%83%80%EC%9E%85/</link><pubDate>Sat, 07 Oct 2023 13:29:53 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/022-%EA%B0%92-%ED%83%80%EC%9E%85/</guid><description>&lt;blockquote&gt;&lt;p&gt;JPA의 값 타입은 Entity와 값 타입이 있다.&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;Entity : &lt;code&gt;@Entity&lt;/code&gt;로 정의하며, 식별자로 추적 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;값 타입 : &lt;code&gt;String&lt;/code&gt;처럼 단순히 값으로 사용 =&amp;gt; 변경시 완전히 다른 값으로 대체됨(추적불가)
&lt;code&gt;equals()&lt;/code&gt;사용 (&lt;code&gt;equals()&lt;/code&gt;,&lt;code&gt;hashcode()&lt;/code&gt; 필요할수도)&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;임베디드 타입
 &lt;div id="임베디드-타입" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9e%84%eb%b2%a0%eb%94%94%eb%93%9c-%ed%83%80%ec%9e%85" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;@Embeddable&lt;/code&gt;,&lt;code&gt;@Embedded&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;기본 값 타입입을 모아 만든 복합 값 타입&lt;/li&gt;
&lt;li&gt;엔티티가 아닌 그냥 값임 =&amp;gt; 엔티티에 생명주기를 의존 =&amp;gt; 테이블은 변화없음&lt;/li&gt;
&lt;li&gt;또다른 임베디드타입이나 Entity를 내부에 가질 수 있음&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;재사용이 가능하고, 응집도가 높아짐&lt;/li&gt;
&lt;li&gt;객체와 테이블을 세밀하게 매핑 가능&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Embedded&lt;/code&gt; 는 필요없지만 쓰는걸 권장&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;한 엔티티에서 같은 타입을 사용한다면, &lt;code&gt;@AttributeOverride()&lt;/code&gt;사용 가능&lt;/em&gt;&lt;/p&gt;</description></item><item><title>CASCADE, 고아</title><link>https://log.j2234.cc/posts/velog/023-cascade-%EA%B3%A0%EC%95%84/</link><pubDate>Sat, 07 Oct 2023 00:23:05 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/023-cascade-%EA%B3%A0%EC%95%84/</guid><description>&lt;h2 class="relative group"&gt;CASCADE란?
 &lt;div id="cascade란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cascade%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;연관관계, 지연로딩 등과 아무 관계 ❌
A를 영속 상태로 만들 때, 편리하게 연관된 B도 같이 영속 상태로 만들고 싶을 때&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;CascadeType&lt;/code&gt; 종류&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;ALL : 모두&lt;/li&gt;
&lt;li&gt;PERSIST : 영속&lt;/li&gt;
&lt;li&gt;
&lt;details&gt;&lt;summary&gt;이외&lt;/summary&gt;REMOVE &lt;br&gt; MERGE &lt;br&gt; DETACH &lt;/details&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;A와 B의라이프사이클이 같거나, A만 B를 관리할때만 사용&lt;/p&gt;

&lt;h2 class="relative group"&gt;고아 ?
 &lt;div id="고아-" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b3%a0%ec%95%84-" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;del&gt;부모가 버린 자식 죽이기?&lt;/del&gt; 부모 엔티티와 연관관계가 끊어진 자식 엔티티 삭제하기&lt;/p&gt;</description></item><item><title>프록시, 지연로딩</title><link>https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/</link><pubDate>Fri, 06 Oct 2023 23:50:14 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/</guid><description>&lt;h2 class="relative group"&gt;프록시
 &lt;div id="프록시" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9d%ec%8b%9c" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;em.find &lt;span style="color:red"&gt;VS&lt;/span&gt; em.getRefrence
 &lt;div id="emfind-vs-emgetrefrence" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#emfind-vs-emgetrefrence" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;em.find() : 실제 DB에서 가져옴&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;em.getReference() : DB 조회를 미루는 가짜(프록시 extends 실제) 를 가져옴&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;프록시 객체를 호출하면, 실제 객체의 메소드 호출
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1034"
 height="580"
 src="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01_hu_bb58604c6a805af0.webp"
 srcset="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01_hu_bb58604c6a805af0.webp 800w, https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;프록시의 특징
 &lt;div id="프록시의-특징" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%94%84%eb%a1%9d%ec%8b%9c%ec%9d%98-%ed%8a%b9%ec%a7%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;처음 한번만 초기화&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;초기화할때, 실제 Entity로 바뀌지 않음 =&amp;gt; 프록시를 통해 실제에 접근하는것&lt;/li&gt;
&lt;li&gt;원본 엔티티를 상속받음 (비교시 &lt;code&gt;instance of&lt;/code&gt; )&lt;/li&gt;
&lt;li&gt;영속성 컨텍스트에 찾는 엔티티가 있으면, &lt;code&gt;em.getReference()&lt;/code&gt;는 실제 엔티티 반환&lt;/li&gt;
&lt;li&gt;준영속 상태일때, 초기화시 문제 발생&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;지연로딩
 &lt;div id="지연로딩" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a7%80%ec%97%b0%eb%a1%9c%eb%94%a9" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;지연로딩&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/024-%ED%94%84%EB%A1%9D%EC%8B%9C-%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9/featured.webp"/></item><item><title>상속관계 매핑</title><link>https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/</link><pubDate>Fri, 06 Oct 2023 22:00:53 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/</guid><description>&lt;h2 class="relative group"&gt;상속관계 매핑이란?
 &lt;div id="상속관계-매핑이란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%83%81%ec%86%8d%ea%b4%80%ea%b3%84-%eb%a7%a4%ed%95%91%ec%9d%b4%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;객체 지향 프로그래밍에서의 상속 개념을 데이터베이스 스키마에 매핑
(객체) 상속구조 &amp;lt;=&amp;gt; (DB)슈퍼-서브타입&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;구현방법&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;각각 테이블로 (조인)&lt;/li&gt;
&lt;li&gt;통합 테이블로 (단일 테이블)&lt;/li&gt;
&lt;li&gt;&lt;del&gt;서브타입 테이블로 (구현 클래스마다 테이블로)&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;@Inheritance(strategy = ? )&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h3 class="relative group"&gt;조인 전략
 &lt;div id="조인-전략" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%a1%b0%ec%9d%b8-%ec%a0%84%eb%9e%b5" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;InheritanceType.JOINED&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;정석적인 방법
&lt;figure&gt;&lt;img
 class="my-0 rounded-md"
 loading="lazy"
 decoding="async"
 fetchpriority="auto"
 alt=""
 width="1060"
 height="354"
 src="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01_hu_d5b59a25132ec618.webp"
 srcset="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01_hu_d5b59a25132ec618.webp 800w, https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01.webp 1280w"
 sizes="(min-width: 768px) 50vw, 65vw"
 data-zoom-src="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/img/image-01.webp"&gt;&lt;/figure&gt;
&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/025-%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84-%EB%A7%A4%ED%95%91/featured.webp"/></item><item><title>엔티티 매핑-기본키</title><link>https://log.j2234.cc/posts/velog/027-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91-%EA%B8%B0%EB%B3%B8%ED%82%A4/</link><pubDate>Tue, 03 Oct 2023 23:23:52 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/027-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91-%EA%B8%B0%EB%B3%B8%ED%82%A4/</guid><description>&lt;p&gt;직접할당 :&lt;code&gt;@Id&lt;/code&gt;만 사용
자동생성 : &lt;code&gt;@GeneratedValue&lt;/code&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;@GeneratedValue(strategy= ? )
 &lt;div id="generatedvaluestrategy--" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generatedvaluestrategy--" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;&lt;code&gt;GenerationTpye.Identity&lt;/code&gt;: 전략을 DB에 위임
 &lt;div id="generationtpyeidentity--전략을-db에-위임" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtpyeidentity--%ec%a0%84%eb%9e%b5%ec%9d%84-db%ec%97%90-%ec%9c%84%ec%9e%84" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;DB에 들어간 후에, ID값을 알 수 있음 =&amp;gt; &lt;code&gt;persist()&lt;/code&gt; 후 바로 쿼리 날라감&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;AUTO_INCREMENT 생각&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;GenerationTpye.Sequence
 &lt;div id="generationtpyesequence" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtpyesequence" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;DB의 Sequence 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;persist()&lt;/code&gt; 후 Sequence값만 가져왔다가, 끝날때 날림&lt;/li&gt;
&lt;li&gt;&lt;code&gt;allocationSize&lt;/code&gt; 등을 통해 성능향상 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-java" data-lang="java"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Entity&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@SequenceGenerator&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;MEMBER_SEQ_GENERATOR&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s"&gt;sequenceName=“MEMBER_SEQ&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;//시퀀스이름&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;initialValue&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;allocationSize&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;50&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;//한번에 50개 가져오고,그동안은 메모리에서 가져옴&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Member&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@Id&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nd"&gt;@GeneratedValue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;strategy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;GenerationType&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SEQUENCE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;generator&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MEMBER_SEQ_GENERATOR&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;private&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Long&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;h3 class="relative group"&gt;GenerationType.TABLE
 &lt;div id="generationtypetable" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtypetable" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;Sequence 역활을 하는 테이블 사용 정략&lt;/li&gt;
&lt;li&gt;Sequence 없는 DB도 가능하지만, 성능 이슈&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;GenerationType.UUID
 &lt;div id="generationtypeuuid" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#generationtypeuuid" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;ul&gt;
&lt;li&gt;강의에는 없는데 추가된거같음&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;말그대로 UUID 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;권장 식별자 전략
 &lt;div id="권장-식별자-전략" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b6%8c%ec%9e%a5-%ec%8b%9d%eb%b3%84%ec%9e%90-%ec%a0%84%eb%9e%b5" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Long + 대체키 + 생성전략&lt;/p&gt;</description></item><item><title>엔티티 매핑</title><link>https://log.j2234.cc/posts/velog/028-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91/</link><pubDate>Tue, 03 Oct 2023 20:42:44 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/028-%EC%97%94%ED%8B%B0%ED%8B%B0-%EB%A7%A4%ED%95%91/</guid><description>&lt;h2 class="relative group"&gt;객체와 테이블 매핑
 &lt;div id="객체와-테이블-매핑" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ea%b0%9d%ec%b2%b4%ec%99%80-%ed%85%8c%ec%9d%b4%eb%b8%94-%eb%a7%a4%ed%95%91" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;

&lt;h3 class="relative group"&gt;@Entity
 &lt;div id="entity" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#entity" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;@Entity&lt;/code&gt;가 붙은 클래스는 JPA가 관리&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;주의 : 기본생성자(public | protected) 필요&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;@Table
 &lt;div id="table" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#table" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;p&gt;엔티티와 매핑할 테이블 지정&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;속성&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;name&lt;/code&gt; : 테이블명&lt;/li&gt;
&lt;li&gt;&lt;code&gt;catalog&lt;/code&gt; : DB 카탈로그&lt;/li&gt;
&lt;li&gt;&lt;code&gt;schema&lt;/code&gt; : 스키마&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unique&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;

&lt;h2 class="relative group"&gt;스키마 자동 생성
 &lt;div id="스키마-자동-생성" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%8a%a4%ed%82%a4%eb%a7%88-%ec%9e%90%eb%8f%99-%ec%83%9d%ec%84%b1" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;JPA에서는, 로딩 시점에 DDL 자동 생성 지원 &lt;del&gt;&lt;span style="color:red"&gt; 운영에서 쓸때 조심 &lt;/span&gt;&lt;/del&gt;&lt;/p&gt;</description></item><item><title>영속성 컨텍스트</title><link>https://log.j2234.cc/posts/velog/029-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8/</link><pubDate>Tue, 03 Oct 2023 18:49:53 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/029-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8/</guid><description>&lt;h2 class="relative group"&gt;JPA에서 가장 중요한 2가지
 &lt;div id="jpa에서-가장-중요한-2가지" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#jpa%ec%97%90%ec%84%9c-%ea%b0%80%ec%9e%a5-%ec%a4%91%ec%9a%94%ed%95%9c-2%ea%b0%80%ec%a7%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;ORM, 영속성 컨텍스트&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 class="relative group"&gt;영속성 컨텍스트란?
 &lt;div id="영속성-컨텍스트란" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%98%81%ec%86%8d%ec%84%b1-%ec%bb%a8%ed%85%8d%ec%8a%a4%ed%8a%b8%eb%9e%80" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;&lt;code&gt;Entity를 영구 저장하는 환경&lt;/code&gt;
엔티티 객체의 생명주기 관리, 캐싱, 트랜잭션 처리 등을 담당하는 핵심 컴포넌트&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 class="relative group"&gt;이점
 &lt;div id="이점" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%9d%b4%ec%a0%90" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;1차캐시, 동일성보장, 변경 감지(dirty checking), 지연 로딩(lazy loading) 등&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;엔티티의 생명주기
 &lt;div id="엔티티의-생명주기" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ec%97%94%ed%8b%b0%ed%8b%b0%ec%9d%98-%ec%83%9d%eb%aa%85%ec%a3%bc%ea%b8%b0" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;
&lt;li&gt;비영속&lt;code&gt;new&lt;/code&gt; (전혀 관계가 없음)&lt;/li&gt;
&lt;li&gt;영속&lt;code&gt;managed&lt;/code&gt; (관리되는 상태)&lt;/li&gt;
&lt;li&gt;준영속&lt;code&gt;detached&lt;/code&gt; (저장되었다가 분리된 상태 )&lt;/li&gt;
&lt;li&gt;삭제&lt;code&gt;removed&lt;/code&gt; (삭제된 상태)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 class="relative group"&gt;flush
 &lt;div id="flush" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#flush" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;저장&lt;/strong&gt;&lt;/p&gt;</description><media:content xmlns:media="http://search.yahoo.com/mrss/" url="https://log.j2234.cc/posts/velog/029-%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8/featured.webp"/></item><item><title>JPA 강의 시작</title><link>https://log.j2234.cc/posts/velog/030-jpa-%EA%B0%95%EC%9D%98-%EC%8B%9C%EC%9E%91/</link><pubDate>Mon, 02 Oct 2023 21:10:02 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/030-jpa-%EA%B0%95%EC%9D%98-%EC%8B%9C%EC%9E%91/</guid><description>&lt;h2 class="relative group"&gt;INIT
 &lt;div id="init" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#init" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;추석할인으로 &lt;a href="https://www.inflearn.com/course/ORM-JPA-Basic" target="_blank" rel="noreferrer"&gt;김영한님 JPA 강의&lt;/a&gt; 득템!!&lt;/p&gt;
&lt;p&gt;최소한 하루에 한 챕터씩은 공부할 예정이다.&lt;/p&gt;</description></item><item><title>3. 도메인 개발</title><link>https://log.j2234.cc/posts/velog/032-3.-%EB%8F%84%EB%A9%94%EC%9D%B8-%EA%B0%9C%EB%B0%9C/</link><pubDate>Fri, 29 Sep 2023 22:26:02 +0000</pubDate><guid>https://log.j2234.cc/posts/velog/032-3.-%EB%8F%84%EB%A9%94%EC%9D%B8-%EA%B0%9C%EB%B0%9C/</guid><description>&lt;p&gt;이 강의에서는 따로 적을게 별로없다. &lt;del&gt;그냥 개발하는 내용이 다임&lt;/del&gt;&lt;/p&gt;

&lt;h2 class="relative group"&gt;테스트 환경설정
 &lt;div id="테스트-환경설정" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%ed%85%8c%ec%8a%a4%ed%8a%b8-%ed%99%98%ea%b2%bd%ec%84%a4%ec%a0%95" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;테스트를 할때, 기본적으로 &lt;code&gt;/test/resources/application.yml&lt;/code&gt;에 있는 설정 파일을 먼져 읽는다. (없으면 기본 파일읽음)
따라서, 이곳에 테스트에서의 설정을 생성할 수 있다.&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;또한, 스프링부트는 아무 설정이 안되어있는 경우, 기본적으로 메모리DB(H2)로 설정을 한다.
따라서, 빈 application.yml을 만들기만 하면, 기본적으로 메모리DB가 설정된다.&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
&lt;h2 class="relative group"&gt;동적쿼리
 &lt;div id="동적쿼리" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#%eb%8f%99%ec%a0%81%ec%bf%bc%eb%a6%ac" aria-label="Anchor"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;blockquote&gt;&lt;p&gt;JPA에서 기본적인 동적쿼리는 지원하지만, 코드가 진짜 끔찍해진다.
따라서 QueryDsl과의 동작이 잘 어울린다.&lt;/p&gt;</description></item></channel></rss>