<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>toy-project on 오늘도 개발을 한다.</title>
    <link>https://cloudsoswift.github.io/post/develop/toy-project/</link>
    <description>오늘도 개발을 한다. (toy-project)</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ko-kr</language>
    
    <atom:link href="https://cloudsoswift.github.io/post/develop/toy-project/index.xml" rel="self" type="application/rss+xml" />
    
    
    <item>
      <title>[podoR] 1. 프로젝트 개요 및 DB 설계 하기</title>
      <link>https://cloudsoswift.github.io/post/develop/toy-project/podor/01-project-summary-and-db-structure/</link>
      <pubDate>Tue, 10 Mar 2026 15:52:49 +0900</pubDate>
      
      <guid>https://cloudsoswift.github.io/post/develop/toy-project/podor/01-project-summary-and-db-structure/</guid>
      <description>&lt;h2 id=&#34;서론&#34; &gt;서론
&lt;span&gt;
    &lt;a href=&#34;#%ec%84%9c%eb%a1%a0&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;미루고 미뤄왔던 &amp;lsquo;토이프로젝트를 하나정돈 스스로 해봐야 하지 않을까?&amp;lsquo;라는 생각의 실천을 하기 위해, &lt;a href=&#34;https://github.com/cloudsoswift/podoR&#34;&gt;podoR&lt;/a&gt;이라는 서비스를 구상했다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;podoR&lt;/code&gt;은 영상을 실시간 스트리밍할 수 있는 서비스를 제공하며, 해당 &amp;lsquo;스트리밍의 시청권&amp;rsquo; 및 &amp;lsquo;(가상이지만) 실제 공연의 좌석&amp;rsquo;을 티켓팅할 수 있는 서비스를 제공한다.
&lt;ul&gt;
&lt;li&gt;실시간 스트리밍 서비스를 처리하며 &lt;code&gt;FFMpeg&lt;/code&gt;의 코덱 처리, &lt;code&gt;RTMP&lt;/code&gt;/&lt;code&gt;HLS&lt;/code&gt; 통신 처리 등의 작업을 처리해보고 싶었고, 티켓팅 서비스를 통해 &lt;code&gt;단기간에 집중되는 고밀도의 트래픽&lt;/code&gt;을 처리해보는 경험 역시 해보고 싶었기 때문에 이 두가지를 결합한 서비스를 구상했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;해당 프로젝트에서 다룰 핵심 요소들이 다소 기술적 난도가 있기 때문에, 기술 스택은 비교적 익숙한 &lt;code&gt;React.js&lt;/code&gt;와 &lt;code&gt;Spring Boot&lt;/code&gt;를 사용하기로 했다.
&lt;ul&gt;
&lt;li&gt;다만, 그래도 프론트엔드에서도 비교적 새로운걸 사용해 학습하는게 좋을것 같아 &lt;code&gt;Next.js&lt;/code&gt;를 사용하기로 했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;추가로, 애초에 서비스 구상을 시작할때부터 서비스를 MSA로 쪼개고, webflux와 같은 비동기적 요소들을 도입하는 방안도 생각했으나, 일단 &lt;code&gt;모놀리식&lt;/code&gt;하게 구현하고 이후에 시간이 된다면 이를 쪼개는 쪽으로 가는게 &lt;em&gt;레거시 서비스를 MSA화 하는 추가적인 경험&lt;/em&gt;을 할 수 있다 판단해 보류하였다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;대략적인-개발-스텝&#34; &gt;대략적인 개발 스텝
&lt;span&gt;
    &lt;a href=&#34;#%eb%8c%80%eb%9e%b5%ec%a0%81%ec%9d%b8-%ea%b0%9c%eb%b0%9c-%ec%8a%a4%ed%85%9d&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;기능 설계 및 &lt;code&gt;React.js&lt;/code&gt;/&lt;code&gt;Next.js&lt;/code&gt;를 사용한 화면 개발&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Spring&lt;/code&gt; 서버 구축 및 인증/인가에 필요한 기능 설계, 구현&lt;/li&gt;
&lt;li&gt;RTMP/HLS Request/Response 핸들링하는 서버 구현&lt;/li&gt;
&lt;li&gt;RTMP/HLS Request/Response 처리시 인증/인가 정보 사용하도록 확장&lt;/li&gt;
&lt;li&gt;티켓팅 서비스 구현&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Locust&lt;/code&gt; 등 부하 테스트 진행하며 동시 요청 처리 성능 확장 시키기&lt;/li&gt;
&lt;li&gt;백엔드 서비스들 Microservices로 쪼갠 뒤, &lt;code&gt;Redis&lt;/code&gt;를 통해 인증/인가 정보 공유하도록 확장&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;서비스-기능&#34; &gt;서비스 기능
&lt;span&gt;
    &lt;a href=&#34;#%ec%84%9c%eb%b9%84%ec%8a%a4-%ea%b8%b0%eb%8a%a5&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;대략적으로 서비스 기능들이 무엇이 있을지, 예상되는 서비스 사용자를 기준으로 설계했다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;공통&#34; &gt;공통
&lt;span&gt;
    &lt;a href=&#34;#%ea%b3%b5%ed%86%b5&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&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;h3 id=&#34;공연-주최자-관련&#34; &gt;공연 주최자 관련
&lt;span&gt;
    &lt;a href=&#34;#%ea%b3%b5%ec%97%b0-%ec%a3%bc%ec%b5%9c%ec%9e%90-%ea%b4%80%eb%a0%a8&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;콘서트 등록/수정/삭제(CUD)&lt;/li&gt;
&lt;li&gt;좌석 구매 현황 조회&lt;/li&gt;
&lt;li&gt;라이브 공연 영상 업로드&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;공연-소비자-관련&#34; &gt;공연 소비자 관련
&lt;span&gt;
    &lt;a href=&#34;#%ea%b3%b5%ec%97%b0-%ec%86%8c%eb%b9%84%ec%9e%90-%ea%b4%80%eb%a0%a8&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;공연 좌석 조회&lt;/li&gt;
&lt;li&gt;공연 좌석 선택&lt;/li&gt;
&lt;li&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 id=&#34;erd-설계&#34; &gt;ERD 설계
&lt;span&gt;
    &lt;a href=&#34;#erd-%ec%84%a4%ea%b3%84&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;&lt;p&gt;&lt;img src=&#34;podor.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;위에서 구상한 서비스 기능들을 바탕으로, 필요한 ERD를 설계했으며, 다음과 같이 9개의 테이블이 일단은 만들어졌다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;user&#34; &gt;user
&lt;span&gt;
    &lt;a href=&#34;#user&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;email&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;NOT NULL, UNIQUE&lt;/td&gt;
&lt;td&gt;이메일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;nickname&lt;/td&gt;
&lt;td&gt;VARCHAR(100)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;닉네임&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;provider&lt;/td&gt;
&lt;td&gt;VARCHAR(20)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;OAuth 제공자 (&amp;lsquo;GOOGLE&amp;rsquo;, &amp;lsquo;KAKAO&amp;rsquo;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;provider_id&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;OAuth 제공자 고유 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;role&lt;/td&gt;
&lt;td&gt;VARCHAR(50)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;역할 (&amp;lsquo;USER&amp;rsquo;, &amp;lsquo;ADMIN&amp;rsquo;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;phone&lt;/td&gt;
&lt;td&gt;VARCHAR(50)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;전화번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;birthday&lt;/td&gt;
&lt;td&gt;DATE&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;생년월일&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;profile_image&lt;/td&gt;
&lt;td&gt;VARCHAR(500)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;프로필 이미지 URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;created_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;생성일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;updated_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;수정일시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;사용자 관련 정보를 담는 테이블로, &lt;code&gt;email&lt;/code&gt;, &lt;code&gt;nickname&lt;/code&gt;과 같은 사용자별 정보와 &lt;code&gt;create_at&lt;/code&gt;, &lt;code&gt;updated_at&lt;/code&gt;과 같은 일자 정보들을 담고 있다.&lt;/li&gt;
&lt;li&gt;또한, &lt;code&gt;podoR&lt;/code&gt; 서비스에서는 &lt;code&gt;Oauth&lt;/code&gt;만 사용해서 로그인 및 회원가입을 처리할 예정이므로, OAuth Provider 관련 컬럼인 &lt;code&gt;provider&lt;/code&gt;, &lt;code&gt;provider_id&lt;/code&gt;를 담는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;follow&#34; &gt;follow
&lt;span&gt;
    &lt;a href=&#34;#follow&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;follower_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;PK, FK, NOT NULL&lt;/td&gt;
&lt;td&gt;팔로워 일련번호 (User FK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;performer_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;PK, FK, NOT NULL&lt;/td&gt;
&lt;td&gt;공연자 일련번호 (User FK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;followed_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;팔로우 일시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;사용자의 팔로우 정보&lt;/code&gt;를 담는 테이블로, &lt;code&gt;유저(follower_seq)&lt;/code&gt;와 &lt;code&gt;팔로우한 공연자(performer_seq)&lt;/code&gt;의 일련번호 정보를 담고있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;performance&#34; &gt;performance
&lt;span&gt;
    &lt;a href=&#34;#performance&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;performer_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;공연자 일련번호 (User FK)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;performance_id&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;UNIQUE, NOT NULL&lt;/td&gt;
&lt;td&gt;공연 ID (UUID)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;title&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;제목&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;content&lt;/td&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;내용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;created_date&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;생성일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;deleted_date&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;삭제일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;perform_date&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;공연 일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ticketing_date&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;티켓팅 오픈 일시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;공연 관련 정보를 담는 테이블로, &lt;code&gt;performer_seq&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;content&lt;/code&gt; 등 공연 관련 정보와 각 공연을 고유하게 식별하는 UUID인 &lt;code&gt;performance_id&lt;/code&gt;을 담고있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;concert_hall&#34; &gt;concert_hall
&lt;span&gt;
    &lt;a href=&#34;#concert_hall&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;공연장 이름&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;address&lt;/td&gt;
&lt;td&gt;VARCHAR(1000)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;description&lt;/td&gt;
&lt;td&gt;TEXT&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;concert_hall_image&lt;/td&gt;
&lt;td&gt;VARCHAR(500)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;공연장 이미지 URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;created_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;생성일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;updated_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;수정일시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;각 공연장(콘서트 홀)에 대한 정보를 담는 테이블로, &lt;code&gt;name&lt;/code&gt;, &lt;code&gt;address&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt; 등 공연장의 간단한 정보를 담고있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;seat&#34; &gt;seat
&lt;span&gt;
    &lt;a href=&#34;#seat&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;hall_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;공연장 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;section&lt;/td&gt;
&lt;td&gt;VARCHAR(20)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;구역&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;row_number&lt;/td&gt;
&lt;td&gt;VARCHAR(10)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;열 번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;seat_number&lt;/td&gt;
&lt;td&gt;INTEGER&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;좌석 번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;is_available&lt;/td&gt;
&lt;td&gt;BOOLEAN&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;사용 가능 여부&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;각 &lt;code&gt;공연장의 좌석&lt;/code&gt;에 대한 정보를 담는 테이블로, 좌석들의 &lt;code&gt;구역(section)&lt;/code&gt;, &lt;code&gt;열번호(row_number)&lt;/code&gt;, &lt;code&gt;좌석 번호(seat_number)&lt;/code&gt; 등을 담고있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;performance_seat&#34; &gt;performance_seat
&lt;span&gt;
    &lt;a href=&#34;#performance_seat&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;performance_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;공연 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;seat_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;좌석 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;seat_grade&lt;/td&gt;
&lt;td&gt;VARCHAR(10)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;좌석 등급&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;price&lt;/td&gt;
&lt;td&gt;INTEGER&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;가격&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;status&lt;/td&gt;
&lt;td&gt;BOOLEAN&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;상태&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;공연별 좌석 정보&lt;/code&gt;를 담는 테이블로, &lt;em&gt;좌석별로 각 공연에 대해&lt;/em&gt;  어떠한 &lt;code&gt;등급(seat_grade)&lt;/code&gt;과 &lt;code&gt;가격(price)&lt;/code&gt;을 갖는지, 선점되었는지(&lt;code&gt;status&lt;/code&gt;) 여부를 담고있다.
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;공연별 좌석 정보를 분리한 이유&lt;/em&gt;는 같은 공연장의 같은 좌석이라도 공연 별로 &lt;code&gt;좌석 등급별 구획&lt;/code&gt;을 나누는 방법이 다르기 때문에 이들을 처리하기 위해 별도 테이블로 분리하였다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ticketing_order&#34; &gt;ticketing_order
&lt;span&gt;
    &lt;a href=&#34;#ticketing_order&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;performance_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;공연 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;user_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;사용자 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;order_number&lt;/td&gt;
&lt;td&gt;VARCHAR(100)&lt;/td&gt;
&lt;td&gt;UNIQUE, NOT NULL&lt;/td&gt;
&lt;td&gt;주문번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;total_price&lt;/td&gt;
&lt;td&gt;INTEGER&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;총 금액&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;status&lt;/td&gt;
&lt;td&gt;VARCHAR(20)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;상태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ordered_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;주문일시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;cancelled_at&lt;/td&gt;
&lt;td&gt;TIMESTAMP&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;취소일시&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;티켓 주문 내역&lt;/code&gt;에 대한 정보를 담는 테이블로, &lt;code&gt;어떤 공연(performance_seq)&lt;/code&gt;에 &lt;code&gt;누가(user_seq)&lt;/code&gt; 티켓을 예매한건지, &lt;code&gt;주문 처리 상태(status)&lt;/code&gt;는 어떤지, &lt;code&gt;주문 시각(ordered_at)&lt;/code&gt; 및 &lt;code&gt;취소 시각(cancelled_at)&lt;/code&gt;은 언젠지 등의 정보를 담고있다.
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;ticketing_order&lt;/code&gt;는 바로 아래 설명할 &lt;code&gt;ticketing_item&lt;/code&gt;을 하나로 아우르기 위한 일종의 부모 테이블이라고 할 수 있다.
&lt;ul&gt;
&lt;li&gt;원래는 &lt;em&gt;&lt;code&gt;단일 테이블&lt;/code&gt;로 ticketing 내역을 처리하려 했으나&lt;/em&gt;, 그렇게 할 경우 시중 서비스들처럼 한 번의 예매에서 &lt;code&gt;두 좌석 이상 예매&lt;/code&gt;하는게 불가능하기 때문에 두 개의 테이블로 분리하였다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;ticketing_item&#34; &gt;ticketing_item
&lt;span&gt;
    &lt;a href=&#34;#ticketing_item&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ticketing_order_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;티켓팅 주문 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;performance_seat_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;공연별 좌석 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;티켓 주문 내 상세 정보&lt;/code&gt;를 담는 테이블로, &lt;code&gt;한 번의 예매(ticketing_order)&lt;/code&gt;에 포함된 각 좌석 예매 내역에 대한 정보를 담고있다.&lt;/li&gt;
&lt;li&gt;따라서 &lt;code&gt;티켓 주문 식별번호(ticketing_order_seq)&lt;/code&gt;와 &lt;code&gt;공연별 좌석 일련번호(performance_seat_seq)&lt;/code&gt;를 갖는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;payment&#34; &gt;payment
&lt;span&gt;
    &lt;a href=&#34;#payment&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h3&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;컬럼명&lt;/th&gt;
&lt;th&gt;타입&lt;/th&gt;
&lt;th&gt;제약조건&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;seq&lt;/td&gt;
&lt;td&gt;BIGSERIAL&lt;/td&gt;
&lt;td&gt;PK&lt;/td&gt;
&lt;td&gt;일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ticketing_order_seq&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;FK, NOT NULL&lt;/td&gt;
&lt;td&gt;티켓팅 주문 일련번호&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;payment_method&lt;/td&gt;
&lt;td&gt;VARCHAR(50)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;결제 수단&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pg_order_id&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;PG사 주문 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pg_transaction_id&lt;/td&gt;
&lt;td&gt;VARCHAR(255)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;PG사 거래 ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;payment_amount&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;결제 금액&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;payment_status&lt;/td&gt;
&lt;td&gt;VARCHAR(50)&lt;/td&gt;
&lt;td&gt;NOT NULL&lt;/td&gt;
&lt;td&gt;결제 상태 (&amp;lsquo;PENDING&amp;rsquo;, &amp;lsquo;IN_PROGRESS&amp;rsquo;, &amp;lsquo;COMPLETED&amp;rsquo;, &amp;lsquo;FAILED&amp;rsquo;, &amp;lsquo;CANCELLED&amp;rsquo;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;discount_type&lt;/td&gt;
&lt;td&gt;VARCHAR(50)&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;할인 유형&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;discount_amount&lt;/td&gt;
&lt;td&gt;BIGINT&lt;/td&gt;
&lt;td&gt;NULL&lt;/td&gt;
&lt;td&gt;할인 금액&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;결제 내역&lt;/code&gt;에 대한 정보를 담는 테이블로, &lt;code&gt;어떤 티켓 주문의 결제 정보인지(ticketing_order_seq)&lt;/code&gt;, &lt;code&gt;어떤 결제 방법(payment_method)&lt;/code&gt;을 사용했는지, &lt;code&gt;결제 상태(payment_status)&lt;/code&gt;는 어떤지, &lt;code&gt;할인 관련 정보&lt;/code&gt;(&lt;code&gt;discount_type&lt;/code&gt;, &lt;code&gt;discount_amount&lt;/code&gt;)에 대해서도 담고있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;이어서&#34; &gt;이어서
&lt;span&gt;
    &lt;a href=&#34;#%ec%9d%b4%ec%96%b4%ec%84%9c&#34;&gt;
        &lt;svg viewBox=&#34;0 0 28 23&#34; height=&#34;100%&#34; width=&#34;19&#34; xmlns=&#34;http://www.w3.org/2000/svg&#34;&gt;&lt;path d=&#34;M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;path d=&#34;M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71&#34; fill=&#34;none&#34; stroke-linecap=&#34;round&#34; stroke-miterlimit=&#34;10&#34; stroke-width=&#34;2&#34;/&gt;&lt;/svg&gt;
    &lt;/a&gt;
&lt;/span&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;이어서 이를 바탕으로, 대응되는 Spring의 &lt;code&gt;JPA Entity&lt;/code&gt;를 구현하고, 가장 먼저 소셜 로그인 기능을 구현하고자 한다.&lt;/li&gt;
&lt;li&gt;따라서 그에 필요한 Oauth 서비스 신청 및 API 발급, 화면 설계 및 구현과 백엔드 비즈니스 로직 구현을 진행할 예정이다.&lt;/li&gt;
&lt;/ul&gt;
</description>
    </item>
    
  </channel>
</rss>
