같이 일하던 사수가 나에게 컨벤션에 가본적이 있냐고 질문을 했었다.

가본적이 있어야 업무에 도움이 되기 때문에 받은 질문이었다.

 

본인은 블록체인 컨벤션에 참석해본적이 있다.

그곳에 컨벤션이 있었고 컨퍼런스가 있었고 컨퍼런스마다 컨퍼런스명이 있었던 것 같다.

회사별로 부스 등등이 있었다.

 

자바 클래스 설계(추상화 모델링) 하듯이 테이블설계시에도 컨퍼런스에 대한 속성들을 파악해서 설계를 해야 했고

간단한 개념들 보다 실무에서 접근했던 것들을 논하고

그 외의 테이블들이 더 있지만 오늘은 컨퍼런스 테이블에 대해 얘기해보려고 한다.

 

설계시 유의해야 했던 것들

1) 기획서를 파악하기

2) 일반적인 컨퍼런스의 구조

3) 비대면으로 컨퍼런스가 진행됨을 기억해야 한다.

4) 컨퍼런스가 하나가 아닌 여러 컨퍼런스의 데이터가 쌓일 것을 염두에 두어야 한다.

5) 자료형을 넉넉히 하되 너무 넉넉히 설정하진 말자.

 

 

실제와 동일하게 하지 않고 정리형태로 작성한거라 테이블생성시 어떠한 형태로 작성했는지만 봐주었으면 한다.

 

컨퍼런스ID  varchar(20) NOT NULL (PK)

컨벤션ID  varchar(20) NOT NULL (FK)

컨퍼런스제목 varchar(50) NOT NULL,

컨퍼런스내용작성 varchar(100) NULL

판매자 ID varchar(20) NOT NULL

컨퍼런스이미지파일경로 varchar(200) DEFAULT NULL

등록일시 datetime DEFAULT current_timestamp()

수정일시 `UPDT_DT` datetime DEFAULT current_timestamp()

컨퍼런스 시작일 date NOT NULL

컨퍼런스 종료일 date NOT NULL

생방송, 녹화방송 varchar(20) NOT NULL

내부URL-컨퍼런스자료, 파일 업로드 varchar(100) NULL

외부URL-링크(유튜브) varchar(100) NULL

스트리밍 화질 선택 varchar(20) NULL

스트리밍 인원 수 선택 int(20) NULL

스트리밍 파일저장 여부 varchar(1) NOT NULL DEFAULT 'Y'

컨퍼런스 입장 요금 설정(감면 또는 비감면) varchar(20) NOT NULL

컨퍼런스저장여부(텍스트 채팅 포함) varchar(1) NOT NULL DEFAULT 'Y'

채팅지원여부(텍스트 채팅 포함(1:N)) varchar(1) NOT NULL DEFAULT 'Y'

컨퍼런스활성화여부 varchar(1) NOT NULL DEFAULT 'Y'

컨퍼런스강사 사진

컨퍼런스강사 이름

컨퍼런스강사 이력

 

 

여기에서 ERD설계에서 가장 중요한 것을 꼽으라면 단연코 컨퍼런스와 컨벤션 아이디이다.

컨벤션 아이디는 컨벤션과의 테이블을 외래키(FK)로 걸어주고

컨퍼런스 아이디는 추후 실제 바이어의 컨퍼런스 참석여부를 알려주는 테이블에 FK 연결시켜주어

데이터무결성을 높여주는 역할을 한다.

첫 프로젝트는 비대면 컨벤션을 개발하는 프로젝트.

개발환경은 스프링부트, MariaDB, Mybatis 이었다.

 

 

최고관리자, 관리자, 바이어, 셀러에 따라 다르게 데이터를 조회하는 부분이 있었고

공통으로 데이터를 조회하는 부분을 위해 적용한 동적쿼리가 주 업무이었다.

먼저 정적쿼리와 동적쿼리 간단하게 차이점 부터 보자.

 

정적쿼리(Static SQL)

-어떤 조건 또는 상황에도 변경되지 않으면 정적쿼리

 

동적쿼리(Dynamic SQL)

-특정 조건들이나 상황에 따라 변경되면 동적쿼리

 

검색해서 컨벤션 관련 데이터 가져오는 동적쿼리를 작성하는 2가지 방법 중에 후자로 적용했다.

무조건적일 때보다 flexible하기 때문에 선택적으로 데이터가 검색이 가능한 if문이 동반된 동적쿼리를 적용했다.

 

1. 무조건적으로 시작일 종료일에 해당되는 조건을 통해서 검색이 가능하도록 표기

 

<sql id="sql_select컨벤션">

               SELECT *

                 FROM 컨벤션테이블

                WHERE 컨벤션아이디 = #{컨벤션아이디}           

               AND 컨벤션시작일 BETWEEN {컨벤션시작일} AND {컨벤션종료일}

               --컨벤션 시작일 종료일 사이에 시작일만 가져오는 쿼리

               AND 컨벤션종료일 BETWEEN {컨벤션시작일} AND {컨벤션종료일}

               --컨벤션 시작일 종료일 사이에 종료일만 가져오는 쿼리

 

                ORDER BY 컨벤션등록일 DESC, 컨벤션업데이트일DESC

</sql>

 

 

2. 선택적으로 시작일 종료일에 해당되는 조건을 통해서 검색이 가능하도록 표기를 해주는 쿼리문

 

<sql id="sql_select컨벤션">

               SELECT *

                 FROM 컨벤션테이블

                WHERE 컨벤션아이디 = #{컨벤션아이디}

<if test="@패키지명@isNotEmpty(컨벤션아이디)">

               AND 컨벤션시작일 BETWEEN {컨벤션시작일} AND {컨벤션종료일}

</if>           

//선택적으로 컨벤션 시작일 및 종료일 사이에 시작일만 검색해서 가져오는 쿼리

`      

<if test="@패키지명@isNotEmpty(컨벤션아이디)">

                AND 컨벤션종료일 BETWEEN {컨벤션시작일} AND {컨벤션종료일}

</if>           

//선택적으로 컨벤션 시작일 및 종료일 사이에 종료일만 검색해서 가져오는 쿼리

 

                ORDER BY 컨벤션등록일DESC, 컨벤션업데이트일DESC

</sql>

팀장님에게 메모를 잘한다고 칭찬 받았다...

 

정말 기억을 잘하고 천재라면 모든 것을 기억하겠지만,

어느 순간 기억을 못하는 상황이 오고, 명확하게 전달을 하지 못하는 상황이 온다.

그때 다시 한번 서랍장에서 사진 꺼내듯이 내가 했던 업무내용들을 돌아보고

다시 한번 상기시키는 역할을 하기 때문에 업무를 했다면 히스토리나 했던 과정들을 기록을 한다.

 

그런 의미에서 그동안 정리해 두었던 글들을 하나씩 올리려 한다.

+ Recent posts