한 데이터베이스 내의 여러 테이블의 레코드를 조합하여 하나의 열로 표현하는 것

 

 

 

Inner Join

내부조인

두 테이블의 교집합

 

가장 흔한 조인

// 명시적 조인
select A.*, B.*
from A inner join B
on A.a=B.b

// 암시적 조인
select A.*, B.*
from a, b
where A.a=B.b

 

 

 

Natural Join

자연 조인

 

중복되는 컬럼명을 하나의 컬럼으로만 표현

 

select *
from A natural join B

 

 

 

 

Outer Join

외부조인

 

Inner join 은 겹치는 데이터를 가지고 있는 레코드만 조회

Outer Join 은 겹치지 않는 데이터를 가지고 있는 레코드도 모두 조회

 

Left outer join

Right outer join

 

어떤 테이블을 대상으로 모든 레코드를 뽑아 낼 것인가를 정하는 것

 

full outer join 

두 테이블의 모든 레코드를 가져오는 것

 

selet *
from A left outer join B
on A.a = B.a


selet *
from A right outer join B
on A.a = B.a


selet *
from A full outer join B
on A.a = B.a

 

'기타' 카테고리의 다른 글

축제정보 홈페이지 프로젝트  (0) 2023.09.18
git commit 규칙  (0) 2023.09.14

 

축제 정보 홈페이지 프로젝트

 

 

ERD

 

 

 

사용 기술

Front

HTML

CSS

SCSS
JavaScript

Thymeleaf

BootStrap

JQuery

Ajax

 

 

Back

Spring boot

Spring data Jpa

Jpa (Java persistence jpa)

Oracle DB

SQL

 

 

 

동작 과정

 

 

 

 

 

발생한 문제

JPA N+1

1. FetchType.Lazy 시도

쿼리의 조회 순서만 변경

ex)

Post 와 Favorite 은 OneToMany 관계인데, 

Favorite 을 조회할 때, 모든 Post 를 하나하나 조회하는 경우 발생

 

 

2. Jpql fetch join

@Query

어노테이션으로 직접 jpql 작성하여 쿼리로 조인하여 결과 호출

 

 

 

카테고리 추가

구현 당시에는 카테고리를 Member 객체의 문자열 필드로 저장

데이터 활용할 때, split 으로 문자열 해제하여 사용

 

ex) "1, 3, 5"

1번, 3번, 5번 카테고리를 선호한다는 뜻의 문자열을 저장

 

이는 1정규형 위배

 

어떻게 바꿨어야 할까?

 

category_index

category_name

을 가지는 테이블을 따로 만들고, 카테고리 정보를 미리 DB에 저장

 

 

MEMBER_CATEGORY

테이블을 따로 만들고

 

CATEGORY -< MEMBER_CATEGORY >- MEMBER

이런 형태로 category, member 테이블과 다대일 관계를 형성

member_index 로 조회 시, 선호하는 카테고리 목록 확인 가능하도록 구성했어야

 

 

 

시큐리티 Jwt 인증 미구현

Spring Security + JWT 인증 구현하고 싶었으나, 기간 압박으로 못함

HttpSession 의 Attribute 에 인증 정보를 담아 저장함으로써 로그인, 일반회원/관리자 구분

 

Spring Security + JWT 방식 인증은 후에 따로 프로젝트 생성해서 구현

 

 

 

 

 

 

 

'기타' 카테고리의 다른 글

SQL Join  (0) 2023.09.19
git commit 규칙  (0) 2023.09.14
{타입}: {메세지}

{본문}

 

타입

  • feat: 새로운 기능 추가
  • fix: 버그 수정
  • docs: 문서 수정
  • style: 코드 문법, 포맷팅
  • refactor: 코드 리팩토링
  • test: 테스트 코드

 

메세지

  • 해당 커밋에 대한 설명문
  • 보통 현재형 동사와 함께 명령어로 작성
  • 첫 글자는 대문자, 나머지는 소문자로 작성
    • ex) feat{타입}: Add google-oauth{메세지}
  • 메세지를 통해 최대한 해당 커밋에 대해 파악이 가능하도록 작성

 

본문

  • {타입}: {메세지} 로 표현할 수 없는 상세 내용을 적는 부분
  • 따라서, {타입}: {메세지} 로 표현이 가능하다면 생략 가능

 

좋은 Commit을 위한 7가지 약속(영어 기준)

제목과 본문을 한 줄 띄워 분리하기
제목은 영문 기준 50자 이내로
제목 첫글자를 대문자로
제목 끝에 . 금지
제목은 명령조로
본문은 영문 기준 72자마다 줄 바꾸기
본문은 어떻게 보다 무엇을,  에 맞춰서 작성하기
좋은 git 커밋 메시지를 작성하기 위한 7가지 약속

'기타' 카테고리의 다른 글

SQL Join  (0) 2023.09.19
축제정보 홈페이지 프로젝트  (0) 2023.09.18

+ Recent posts