📚 학습정리

SQL View

  1. view 에 대한 학습

    • 물리적으로는 미 존재, 단 논리적으로 존재
    • 하나 이상의 테이블을 조회한 결과 집합의 독립적인 데이터베이스 객체
    • 논리적(존재하는 table들에 종속적인 가상 table)
  2. 개념

    • 보안을 고려해야 하는 table의 특정 컬럼값 은닉
    • 또는 여러개의 table의 조인된 데이터를 다수 활용을 해야 할 경우 특정 컬럼 은닉, 다수 table 조인된 결과의 새로운 테이블 자체를 가상으로 db내에 생성시킬수 있는 기법
  3. 문법

    • create와 drop : create view/drop view
    • crud는 table과 동일
    CREATE VIEW view_name AS
    SELECT column1, column2, ...
    FROM table_name
    WHERE condition;

정보 은닉

  • emp의 comm 컬럼은 영업직원 이외는 존재 자체를 몰라야 할 때
  • 개발자의 comm 컬럼의 존재를 제공하지 않은 채로 테이블 정보를 개발자에게 제공하고자 한다 → comm 컬럼 제외한 table 정보를 개발자에게 제공

방식

  • 원본 테이블에서 comm 제외한 복제본
  • crud로 복제본에 반영 시 원본 테이블 데이터 동기화

생성

  • emp_dept : 원본 테이블
  • emp_dept_v : 원본 테이블에서 생성한 View
create view emp_dept_v as select * from emp_dept; 

데이터 변경

  • View의 데이터를 변경하면 원본 테이블 내용도 변경된다.
update emp_dept_v set deptno=10 where empno=7369;

select * from emp_dept_v;
select * from emp_dept;

삭제

원본 테이블의 내용을 삭제하면 View의 데이터도 삭제된다.

View 위치에 따른 구분

From 절에 적용 시 inline view라고 한다.

Oracle View

오라클은 기본적으로 일반 계정에게는 view 생성 권한을 부여하지 않는다.

해결

admin이 view 생성 및 관리 권한 부여

명령어

-- db에 일반 계정으로 접속된 상태에서 admin으로 전환
sql> connect system/oracle

-- scott 계정에게 view 사용 권한 부여하는 필수 명령어
sql> grant create view to scott;

-- admin 계정에서 scott 계정으로 갈아타기 명령어
sql> connect scott/tiger;

Auto Increment

새 데이터 저장시 고유 번호가 자동 생성 및 적용하게 하는 기술

활용

  • 게시물 글번호에 주로 사용
  • 가입된 회원수 카운팅

MySQL: auto_increment

  • auto_increment 키워드 적용
    • 별도의 설정이 없을 경우 시작 순번은 1부터임
  • 생성
    • 컬럼명 타입 auto_increment
  • 시작 값을 100으로 하려 할 경우
    • alter table table명 auto_increment = 100;

Oracle: sequence

독립적으로 생성 후 insert 시에 sequence 속성과 함께 적용

DROP SEQUENCE dept01_deptno_sq;
CREATE SEQUENCE dept01_deptno_sq;

-- insert 시에 반드시 sequence 명으로 명시
INSERT INTO dept01 VALUES (dept01_deptno_sq.**nextval**, '교육부', '상암');
  • sequence 적용 속성: nextval

참고

  1. 다중 테이블에 공유는 문법적으로는 가능하지만 논리적으로는 부적합하다.
    • 가급적 하나의 테이블 별로 관리 및 적용하는 것을 추천.
  2. 현재 sequence 값을 아는 방법
SELECT dept01_deptno_sq.**currval** FROM dual;

currval : from 절 생략 불가 → dual 더미 테이블 사용

@SequenceGenerator

Sequence 공유 문제 해결

@NoArgsConstructor
@AllArgsConstructor
@RequiredArgsConstructor

@Getter
@Setter
@ToString

**@SequenceGenerator(name = "team_seq", sequenceName = "team_seq_id",
				   initialValue = 1, allocationSize = 50)**
@Entity
public class Team2 { 

	@Id
	**@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "team_seq")**
	@Column(name = "team_id")
	private long teamId;
	
	@NonNull
	@Column(name="team_name", length = 20)
	private String teamName;
	
}

엔티티에 적용되는 시퀀스를 생성 및 적용.

사용하지 않았을 경우 모든 테이블에서 sequence가 공유되어 올바르지 않은 ID 값이 부여된다.

  • sequenceName = "team_seq_id" : DB에 생성되는 sequence 명
  • name = "team_seq" : Sequence를 Entity에서 사용하고자 할 때 사용하는 이름
    • @GeneratedValue 어노테이션의 generator= 속성에서 사용.
  • allocationSize : 한번에 50개의 sequence를 할당해놓겠다는 의미
    • insert 시에 sequence 생성이 아닌 사전에 50개 만들어놓고 배정 → 실행속도 고려

@GeneratedValue Strategy

  • strategy = GenerationType.SEQUENCE : Oracle Sequence
  • strategy = GenerationType.IDENTITY : MySQL Auto increment

JPA 학습 컨텐츠 프로젝트

https://github.com/Lisiant/Fisa3_JPAPractice

🤔 회고

👏 현직자 토크 콘서트

6-7년 경력의 현직자 분들과 자유롭게 대화를 나눌 수 있는 토크 콘서트 시간을 가졌다.
우리FIS 아카데미를 수강하면서 가장 좋다고 생각하는 부분 중 하나는 좋은 사람들과 많이 만날 수 있다는 점이다.
아카데미를 수료하고 기업에 취업한 분들, 현직자 분들의 이야기를 들으며 어떻게 취업을 준비해야할지 방향성이 잡히는 기분이다.

기억에 남았던 부분은 바로 도메인 지식이다.
커머스, 금융, 게임 등 다양한 기업에서 IT직무 개발자를 뽑을 때, 자신이 원하는 기업의 도메인 지식에 대해 어느 정도의 전문성이 필요하다는 말씀을 공통적으로 해 주셨다.

그런 이야기를 들으면서 나의 진로를 조금 더 구체적으로 설정해보고, 생각하는 계기가 되었다.

😋 맛집 추천

온돈부리 상암점 은 나의 최애 맛집에 등극했다.

부타동이 정말 맛있었다! 다음엔 사케동을 먹어볼 예정이지만 조금 비싸다...

4주차 리뷰 끝.

2개의 댓글

comment-user-thumbnail
2024년 11월 10일

안녕하세요 글 잘 봤습니다!! 저는 우리 FIS 아카데미 4기 지원을 고민하고 있는 취준생인데 혹시 교육 어땠는지 후기 알려주실 수 있나요?

1개의 답글