[수강생회고]백엔드 개발 캠프 8기 3주차 회고

플레이데이터 백엔드 8기 김수영님의 3주차 회고
자바와 데이터베이스 학습일지


📌 학습내용

1. 예외 처리(exception)

예외 처리는 에러를 직접 해결하는 것이 아니다! 
프로그램에 문제가 될 만한 부분을 예상하여 사전에 문제가 발생하면 이렇게 처리하라! 라고 프로그래밍 하는 것을 예외 처리라고 한다.


대표적인 실행 예외의 종류

  • NullPointerException
  • ArrayIndexOutOfBoundsException
  • NumberFormatException
  • ClassCastException

✔️ 1-1 try와 catch

  • try 블록에는 예외 발생 가능성이 있는 코드를 작성. try 블록의 코드가 예외 발생 없이 정상 실행되면 catch 블록은 실행되지 않음.
  • try 내부에서 예외가 발생하면 즉시 실행을 멈추고 catch 블록으로 이동하여 예외 처리 코드를 실행.


✔️ 1-2 다중 catch와 Multi catch

  • 다중 catch문은 실제로 에러가 발생하면 위에서부터 순서대로 catch문을 검색하면서 내려오기 때문에 부모 타입의 예외를 자식 타입의 예외보다 위에 작성하시면 안됨.
  • catch 옆에 괄호에 예외 타입을 여러 개 작성하고 싶은 경우는 기호를 사용하여 타입을 나열해 주면, 하나의 catch 블록으로 여러 타입의 예외를 동시에 처리할 수 있음. (java 7버전부터 가능한 문법)

 

✔️ 1-3 예외 떠넘기기 (throws)

  • 예외 처리를 직접 수행하지 않고 메서드 호출자에게 예외를 던지는 방법.
  • throws는 예외의 원인이 메서드 선언부가 아닌 호출부에 있을 경우 예외 처리를 메서드의 호출부로 떠넘기는 방식.
  • throws는 생성자에서도 선언이 가능하며, 메서드나 생성자를 호출 시 예외 처리를 강요하고 싶을 때 사용.
  • 또한, 원하는 영역으로 예외를 모아서 한번에 처리하는 것도 가능.

❗ main도 throws를 사용할 수 있지만, main에 throws를 붙이는 것은 예외 처리를 안하겠다는 것과 동일하기 때문에 웬만하면 붙이지 말자.

2. 자바 표준 API

  • 자바 표준 API(Java Standard API)는 Java SE(Standard Edition)에서 제공하는 API로서, 기본적인 자바 프로그래밍을 위해 제공되는 라이브러리 집합.
  • 자바 표준 API에는 자바 언어 자체의 기능과 라이브러리, 그리고 가상 머신과 관련된 라이브러리 등이 포함.
  • java.lang 패키지의 Object, String 클래스
  • java.util 패키지의 List, Set, Map 인터페이스 등

✔️ 2-1 Object 클래스

  • 자바의 최상위 클래스, 모든 클래스는 Object의 자식.
  • 자바의 모든 클래스는 Object의 메서드를 상속받고 있다는 것.
  1. equals(Object obj): 두 객체가 같은지 비교.
  2. hashCode(): 객체의 해시 주소값을 반환.
  3. toString(): 객체를 문자열로 변환하여 반환.
  4. clone(): 객체를 복제하여 반환.
  5. getClass(): 객체의 클래스를 반환.
  6. finalize(): 객체의 소멸자 역할. 이 메서드는 GC(Garbage Collector)에 의해 호출.

✔️ 2-2 System 클래스

  • 자바라는 언어 특성상 윈도우에서 자체적으로 제공하는 언어가 아니기 때문에 시스템의 정보를 그냥 얻기는 힘든 부분이 많음.
  • System 클래스를 사용하면 프로그램 종료, 키보드로 입력, 모니터로 출력, 메모리 정리, 현재 시간 읽기 등이 가능함.
  • System 클래스의 모든 멤버는 static으로 구성되어 있어 객체 생성 없이 바로 사용이 가능함.
  1. exit(): 현재 실행하고 있는 프로세스를 강제 종료시킨다.
    정상 종료일경우 매개값으로 0을 주고, 비정상 종료인경우 0 이외에 다른 값을 줌.
  2. currentTimeMillis(), nanoTime(): 1970년 1월 1일 자정을 기준으로 현재까지 흐른 유닉스 시간을 밀리세컨드(1/1000초) 단위와 나노세컨드(1/10^9초)단위의 long값으로 리턴.
    주로 프로그램의 실행 소요 시간 측정으로 성능을 테스트할 때 사용.
  3. getProperty(): JVM이 시작할 때 자동 설정되는 시스템의 속성값을 보여줌.
  4. gc(): Garbage Collector를 실행. 하지만 가비지 컬렉터가 언제 실행될 지는 보장해 주지 않음.

✔️ 2-3 String 클래스
1. length() 메서드: 문자열의 길이를 반환.
2. charAt() 메서드: 지정된 위치의 문자를 반환.
3. substring() 메서드: 지정된 시작 위치에서부터 지정된 끝 위치까지의 문자열을 반환.
4. toUpperCase() 메서드: 모든 문자를 대문자로 변환.
5. toLowerCase() 메서드: 모든 문자를 소문자로 변환.
6. indexOf() 메서드: 지정된 문자나 문자열이 처음으로 나타나는 위치를 반환.
7. replace() 메서드: 지정된 문자나 문자열을 다른 문자나 문자열로 바꿈.
8. split() 메서드: 지정된 문자열을 기준으로 문자열을 나눔.


✔️ 2-4 String Builder

  • tring 클래스는 아주 많이 쓰이고 좋은 기능들을 많이 가지고 있지만 메모리를 과소비한다는 문제점이 있음.
  • 문자열의 빈번한 변경 시에는 객체가 무분별하게 생성되면서 속도도 굉장히 느려지게 됨.
    그래서 단점을 극복하기 위해 String Builder를 사용.

1. 문자열을 맨 끝에 추가하는 메서드: append(문자열)

2. 문자열을 특정 인덱스에 삽입하는 메서드: insert(인덱스. 문자열)

3. 특정 인덱스 범위의 문자열을 교체하는 메서드: replace(begin, end, 문자열)

4. 문자열 내의 특정 단어를 삭제하는 메서드 delete(begin, end)

5. 문자열을 역순으로 배치


✔️ 2-5 Math 클래스
1. abs(): 절대값을 구함.
2. ceil(): 올림값을 구함.
3. floor(): 내림값을 구함.
4. max(): 수를 비교하여 최대값을 구함.
5. min(): 수를 비교하여 최소값을 구함.
6. random(): 랜덤값을 구함(0.0 <= 값 < 1.0)
7. rint(): 현재 수에서 가까운 정수를 실수형태로 구함.
8. round(): 반올림값을 구함.

 

✔️ 2-6 Wrapper 클래스

  • 자바의 자료형은 크게 기본 타입(primitive type)과 참조 타입(reference type)으로 나누어짐.
  • 프로그래밍을 하다 보면 기본 타입의 데이터를 객체로 표현해야 하는 경우가 종종 있음.
  • 기본 자료타입(primitive type)을 객체로 다루기 위해서 사용하는 클래스들을 래퍼 클래스(wrapper class)라고 함.

✔️ 2-7 LocalDate, LocalTime, LocalDateTime 클래스
1. now(): 현재 날짜와 시간 정보를 가지는 LocalDateTime 객체를 반환.
2. of(): 지정한 날짜와 시간 정보를 가지는 LocalDateTime 객체를 생성.
3. getXXX(): LocalDateTime 객체에서 지정한 필드의 값을 반환.
(ex: getYear(), getMonthValue(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond())
4. plusXXX(): LocalDateTime 객체에 지정한 시간을 더한 새로운 LocalDateTime 객체를 생성. (ex: plusDays(), plusHours(), plusMinutes(), plusSeconds())
5. minusXXX(): LocalDateTime 객체에서 지정한 시간을 뺀 새로운 LocalDateTime 객체를 생성. (ex: minusDays(), minusHours(), minusMinutes(), minusSeconds())
6. format(): LocalDateTime 객체를 지정한 형식으로 변환하여 문자열로 반환.
(ex: "yyyy-MM-dd HH:mm:ss"), DateTimeFomatter 객체를 활용.



3. 관계형 데이터베이스 개요

  • 관련된 데이터들을 체계적으로 저장하고 관리할 수 있도록 구성된 데이터의 집합.
  • 데이터를 중복 최소화, 데이터 무결성 및 일관성 유지, 효율적인 데이터 접근 및 검색을 위한 목적으로 설계.

✔️ 3-1 DBMS (데이터베이스 관리 시스템)
1. 데이터 정의: 데이터베이스 스키마를 생성, 수정, 삭제할 수 있음.
2. 데이터 조작: 데이터를 삽입, 수정, 삭제 및 검색할 수 있음.
3. 데이터 보안: 데이터 접근 권한을 관리하여 민감한 정보를 보호.
4. 데이터 무결성: 데이터베이스 내의 데이터가 정확하고 일관성이 유지되도록 함.
5. 트랜잭션 관리: 여러 작업이 동시에 수행될 때 데이터의 일관성을 유지하고, 시스템 장애가 발생했을 때 데이터를 복구할 수 있음.


✔️ 3-2 SQL (Structured Query Language)
1. DDL (Data Definition Language): 데이터베이스 스키마를 생성, 변경, 삭제하기 위한 명령어들.
2. DML (Data Manipulation Language): 데이터를 검색, 삽입, 수정, 삭제하기 위한 명령어들.
3. DCL (Data Control Language): 데이터베이스 사용자의 권한을 관리하기 위한 명령어들.
4. TCL (Transaction Control Language): 데이터베이스 트랜잭션을 관리하기 위한 명령어들.


✔️ 3-3 데이터베이스 테이블의 개념

  • 행 (Row): 행은 데이터베이스 테이블에서 개별 레코드를 나타냄. 한 행은 테이블의 모든 열에 대한 값을 포함하며, 각각의 행은 고유한 식별자(예: 기본 키)를 가질 수 있음.
  • 열 (Column): 열은 데이터베이스 테이블에서 특정 속성을 나타냄. 각 열은 이름과 데이터 타입을 가지며, 제약 조건이나 기본값 등 추가 속성을 설정할 수 있음.
  • 기본 키 (Primary Key): 기본 키는 테이블에서 각 행을 고유하게 식별하는 열. 기본 키로 설정된 열은 NULL 값을 가질 수 없고, 각 행에 대해 고유한 값을 가져야 함.
  • 외래 키 (Foreign Key): 외래 키는 다른 테이블의 기본 키를 참조하는 열. 외래 키를 사용하면 서로 다른 테이블 간의 관계를 정의하고, 데이터 무결성을 유지할 수 있음.

✔️ 3-4 SELECT

  • ELECT [컬럼명(여러 개 가능)] FROM [테이블 이름]
  • 컬럼을 조회하는 위치에서 산술 연산이 가능
  • alias (컬럼명, 테이블명의 이름을 변경해서 조회)
  • NULL값의 확인 (숫자 0이나 공백과는 다른 개념)
  • 오라클은 홑따옴표로 문자를 표현하고, 문자열 안에 홑따옴표 특수기호를 표현하고 싶다면 ''를 두 번 연속으로 쓰면 됨
  • 문자열 연결기호는 || , 문자열의 덧셈 연산을 허용하지 않음
  • DISTINCT (중복 행의 제거)


✔️ 3-5 WHERE

  • WHERE절 비교 (데이터 값은 대/소문자를 구분)
  • 데이터의 행 제한 (BETWEEN, IN, LIKE)
  • IN 연산자 (특정 값들과 비교할 때 사용)
  • LIKE 연산자 (지정 문자열 포함 여부)
  • %는 어떠한 문자든, _는 데이터의 자리(위치)를 표현할 때
  • IS NULL: null값을 찾음
  • AND, OR (AND가 OR보다 연산 순서가 빠름)
  • 데이터의 정렬 (SELECT 구문의 가장 마지막에 재피)
    • ASC: 오름차 (ascending)
    • DESC: 내림차 (descending)

✔️ 3-6 문자열함수

  • lower(소문자), initcap(앞글자만 대문자), upper(대문자)
  • dual이라는 테이블은 sys가 소유하는 오라클의 표준 테이블로서, 오직 한 행에 한 컬럼만 담고 있는 dummy 테이블
  • 일시적인 산술 연산이나 날짜 연산 등에 주로 사용
  • 모든 사용자가 접근할 수 있음
  • length(길이), instr(문자 찾기, 없으면 0을 반환, 있으면 인덱스 값)
  • SUBSTR(자를 문자열, 시작인덱스, 길이)
  • CONCAT(문자 연결)
  • LTRIM(), RTRIM()
  • TRIM() -> 양쪽 공백 제거
  • LTRIM(param1, param2) -> param2의 값을 param1에서 찾아서 제거 (왼쪽부터)
  • RTRIM(param1, param2) -> param2의 값을 param1에서 찾아서 제거 (오른쪽부터)
  • LPAD(), RPAD(): 좌, 우측을 지정한 문자열로 채우기
  • REPLACE(str, old, new)

✔️ 3-7 숫자날짜함수
🔸 숫자함수

  • ROUND(반올림): 원하는 반올림 위치를 매개값으로 지정. 음수를 주는 것도 가능
  • TRUNC(절사): 정해진 소수점 자리수까지 잘라냄
  • ABS (절대값)
  • CEIL(올림), FLOOR(내림)

🔸 날짜 함수

  • sysdate: 컴퓨터의 현재 날짜, 시간 정보를 가져와서 제공하는 키워드 함수 -> 시간 있음
  • 날짜 타입과 날짜 타입은 서로 뺄셈 연산이 가능, 덧셈은 허용하지 않음


✔️ 3-8 형변환함수

  • 날짜를 문자로 TO_CHAR(값, 형식)
  • 날짜를 문자로 형 변환할 때 원하는 형식으로 날짜를 표현할 수 있음
  • 날짜 포맷형식: Y - 연도, MM - 두자리 월, D - 일수 DY - 요일
  • 시간 포맷형식: HH12 - 시(1~12), HH24 (0-23), MI - 분, SS - 초
  • 서식 문자와 함께 사용하고 싶으 일반 문자는 ""로 감싸서 전달
  • 숫자를 문자로 TO_CHAR(값, 형식)
  • 형식에서 사용하는 '9'SMS 실제 숫자 9가 아니라 자리수를 표현하기 위한 기호
  • 문자를 숫자로 변환 TO_NUMBER(값, 형식)
  • 문자를 날짜로 TO_DATE(값, 형식)
  • NULL 형태를 변환하는 함수 NVL (컬럼 혹은 값, 변환할 타겟값)
  • NULL 형태를 변환하는 함수 NVL2(타겟, null이 아닌 경우, null 경우)
    • 연산 중간에 NULL이 있으면 전체 결과가 NULL이 됨!
  • COALESCE(expr1, ...)
    • 전달된 표현식 중 NULL이 아닌 값이 최초로 발견되면 그 값을 리턴
  • DECODE(컬럼 혹은 표현식, 항목1, 결과1, 항목2, 결과2 ... default)
    • 오라클 전용 함수. 동등 비교만 가능.
  • CASE문 WHEN THEN END

✔️ 3-9 집합연산자

  • 서로 다른 쿼리 결과의 행들을 하나로 결합, 비교, 차이를 구할 수 있게 해 주는 연산자.
  • UNION(합집합 중복x), UNION ALL(합집합 중복 o), INTERSECT(교집합), MINUS(차집합)
  • 위 아래 column 개수와 데이터 타입이 정확히 일치해야 함.

✔️ 3-10 그룹함수 (GROUP BY, HAVING)

  • 여러 행을 묶어서 한 번에 함수를 적용. (그룹화를 따로 하지 않으면 그룹은 테이블 전체가 됨)
  • 부서별로 그룹화, 집계함수 사용.
  • 그룹 함수는 단독적으로 사용할 때는 테이블 전체가 그룹의 대상이 되지만 일반 컬럼과 동시에 출력할 수 없음.
  • 일반 컬럼을 그룹화 해야 함.
  • GROUP BY절을 사용할 때 GROUP절에 묶이지 않은 컬럼은 조회할 수 없음.
  • GROUP BY를 통해 그룹화 할 때, 조건을 지정할 경우 HAVING을 사용.
  • WHERE은 일반 조건절. GROUP BY보다 먼저 진행.

4. 표준 조인

🔸 JOIN의 개념

  • 서로 다른 테이블 간에 설정된 관계가 결합하여 1개 이상의 테이블에서 데이터를 조회하기 위해서 사용.
  • SELECT 컬럼리스트 FROM 조인대상이 되는 테이블 (1개 이상)
    WHERE 조인 조건 (오라클 조인 문법)


✔️ 4-1 ANSI 조인의 종류
1. INNER JOIN: 두 테이블 간의 일치하는 행만 결과에 포함.
2. LEFT OUTER JOIN: 왼쪽 테이블의 모든 행을 결과에 포함하고, 오른쪽 테이블에서 일치하는 행이 없는 경우 NULL 값을 사용.
3. RIGHT OUTER JOIN: 오른쪽 테이블의 모든 행을 결과에 포함하고, 왼쪽 테이블에서 일치하는 행이 없는 경우 NULL 값을 사용.
4. FULL OUTER JOIN: 두 테이블의 모든 행을 결과에 포함하고, 일치하는 행이 없는 경우 NULL 값을 사용.
5. CROSS JOIN: 조인 대상이 되는 테이블 한 행마다 모든 데이터가 붙어서 조회, 조인 조건이 존재하지 않으며, 테이블에 존재하는 행의 개수를 곱한 만큼의 결과값이 반환. (거의 사용하지 않음)
6. SELF JOIN: 동일한 테이블을 대상으로 조인.


✔️ 4-2 오라클 조인의 종류
1. 오라클 INNER JOIN: 두 테이블 간의 일치하는 행만 결과에 포함. 이 경우, WHERE 절에서 두 테이블의 컬럼이 일치하는 조건을 명시.
2. 오라클 OUTER JOIN: 왼쪽 테이블의 모든 행을 결과에 포함하며, 오른쪽 테이블에서 일치하는 행이 없는 경우 NULL 값을 사용. 이 경우, WHERE 절에서 (+) 기호를 사용하여 조인 조건을 명시.

 

✔️ 4-3 NATURAL JOIN

  • 동일한 이름을 갖는 컬럼들에 대해 자동으로 조인조건을 생성하는 기법.
  • 즉, 자동으로 2개 이상의 테이블에서 같은 이름을 가진 컬럼을 찾아 INNER JOIN을 수행.
  • 조인되는 동일 이름의 컬럼은 타입이 같아야 하며, ALIAS나 테이블명을 자동 조인 컬럼 앞에 표기하면 안됨.
  • 조회하려는 컬럼에 *을 붙이면, 공통 컬럼은 한 번만 표기.

✔️ 4-4 USING JOIN

  • NATURAL JOIN과는 다르게, USING을 사용하면 원하는 컬럼에 대해서만 선택적 조인조건을 부여할 수 있음.
  • USING절에서도 조인 컬럼에 대해 ALIAS나 테이블명을 표기하시면 안됨.

5. 서브쿼리 (Subquery)

🔸 SQL 문장 안에 또다른 SQL을 포함하는 방식.
🔸 여러 개의 질의를 동시에 처리할 수 있습니다.
🔸 WHERE, SELECT, FROM 절에 작성이 가능합니다.

  • 서브쿼리의 사용방법은 () 안에 명시함. 서브쿼리절의 리턴행이 1줄 이하여야 함.
  • 서브쿼리 절에는 비교할 대상이 하나 반드시 들어가야 함.
  • 해석할 때는 서브쿼리절 부터 먼저 해석하면 됨.

✔️ 5-1 스칼라 서브쿼리
1. 간단한 상황에서 사용하면 쿼리가 직관적이고 간결.
2. 단일 값을 반환하는 서브쿼리에서 유용.
3. 대량 데이터가 아닌 경우나, 서브쿼리의 복잡도가 낮은 경우 적합.


✔️ 5-2 LEFT JOIN
1. 대량 데이터를 처리하거나, 여러 컬럼을 붙여야 할 때 유리.
2. 여러 테이블을 한 번에 조인해야 할 경우.
3. 다중값 처리 및 중복 데이터가 있는 경우 성능상 좀 더 유리.


✔️ 5-3 FROM절 서브쿼리 (인라인 뷰)

  • 특정 테이블 전체가 아닌 SELECT를 통해 일부 데이터를 조회한 것을 가상 테이블로 사용하고 싶을 때.
  • 순번을 정해놓은 조회 자료를 범위를 지정해서 가지고 오는 경우.

❗ SQL의 실행 순서
FROM(JOIN) -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY


6. INSERT

  • INSERT의 첫번째 방법 (모든 컬럼 데이터를 한 번에 지정해서 삽입)
    • 컬럼을 지정하지 않고 값만 주는 경우에는 모든 값을 다줘야 함.
  • INSERT의 두번째 방법 (직접 컬럼을 지정해서 저장, NOT NULL 컬럼 확인!)

🔸 INSERT (서브쿼리)


7. UPDATE

  • UPDATE 테이블이름 SET 컬럼=값, 컬럼=값 ..... WHERE 누구를 수정할지(조건)

🔸 UPDATE 서브쿼리


8. DELETE

  • DELETE도 WHERE 지정하지 않으면 테이블 전체 행이 대상이 됨.

🔸 DELETE (서브쿼리)


9. TCL

🔸 트랜잭션의 개념과 ACID

  • 하나 이상의 데이터베이스 연산이 묶여서 하나의 논리적인 작업 단위로 처리되는 것.
  • 일련의 연산 중 하나라도 실패하면 전체 연산이 취소되는 원자성(Atomicity)을 갖음.

✔️ 9-1 트랜잭션 특성
1. 원자성(Atomicity): 트랜잭션은 일련의 연산 중 하나라도 실패하면 전체 연산이 취소.
2. 일관성(Consistency): 트랜잭션이 완료되면 데이터베이스의 일관성이 유지.
3. 격리성(Isolation): 여러 개의 트랜잭션이 동시에 수행될 때 각각의 트랜잭션이 서로에게 영향을 미치지 않음.
4. 지속성(Durability): 트랜잭션이 완료되면 그 결과가 영구적으로 반영.


✔️ 9-2 오라클에서 제공하는 TCL 명령어
1. COMMIT: 현재까지 수행한 트랜잭션의 결과를 데이터베이스에 저장. COMMIT 명령어를 실행하면 트랜잭션이 종료되고, 데이터베이스의 일관성이 유지.
2. ROLLBACK: 현재까지 수행한 트랜잭션의 결과를 취소하고, 트랜잭션을 초기 상태로 되돌림. 3. 3. ROLLBACK 명령어를 실행하면 트랜잭션이 종료되고, 데이터베이스의 일관성이 유지.
4. SAVEPOINT: 현재 트랜잭션 내에서 중간에 SAVEPOINT를 설정하여, 해당 지점까지의 작업을 롤백할 수 있도록 함. SAVEPOINT를 설정하면 ROLLBACK TO SAVEPOINT를 사용하여 해당 지점까지의 작업을 취소할 수 있음.
5. ROLLBACK TO SAVEPOINT: SAVEPOINT 지점까지 수행한 작업을 취소하고, SAVEPOINT 이후의 작업은 유지.


10. DDL

✔️ 10-1 CREATE TABLE문
데이터 타입설명예시

CHAR(n)고정 길이 문자열 (n: 1~2000)CHAR(10)
VARCHAR2(n)가변 길이 문자열 (n: 1~4000)VARCHAR2(50)
NUMBER(p, s)숫자형 (p: 전체 자릿수, s: 소수점 자릿수)NUMBER(10, 2)
DATE날짜와 시간DATE
TIMESTAMP날짜와 시간 (나노초 정밀도)TIMESTAMP
BLOB이진 데이터 (최대 4GB)BLOB
CLOB문자 데이터 (최대 4GB)CLOB
  • NUMBER(2) -> 정수를 2자리까지 저장할 수 있는 숫자형 타입.
  • NUMBER(5, 2) -> 정수부, 실수부를 합친 총 자리수 5자리, 소수점 2자리
  • NUMBER -> 괄호를 생략할 시 (38, 0)으로 자동 지정.
  • VARCHAR2(byte) -> 괄호 안에 들어올 문자열의 최대 길이를 지정. (4000byte까지)
  • CLOB -> 대용량 텍스트 데이터 타입 (최대 4Gbyte)
  • BLOB -> 이진형 대용량 객체 (이미지, 파일 저장 시 사용)
  • DATE -> BC 4712년 1월 1일 ~ AD 9999년 12월 31일까지 지정 가능
  • 시, 분, 초 지원 가능.

✔️ 10-2 제약조건 (constraints)

데이터베이스 테이블의 열에 적용되어 데이터의 무결성을 유지하는데 도움을 줌. 제약 조건을 사용하면, 데이터베이스에 저장되는 값들이 특정 규칙에 부합하도록 강제할 수 있음.

제약조건설명예시

PRIMARY KEY테이블의 각 행을 고유하게 식별할 수 있는 키PRIMARY KEY (id)
UNIQUE열의 모든 값이 고유한지 확인UNIQUE (email)
FOREIGN KEY다른 테이블의 기본 키에 대한 참조를 설정하여 관계를 정의FOREIGN KEY (department_id) REFERENCES departments(department_id)
CHECK열의 값이 특정 조건을 만족하는지 확인CHECK (salary > 0)
NOT NULL열의 값이 NULL이 아닌지 확인NOT NULL



✔️ 10-3 ALTER문
오라클 데이터베이스에서 기존의 데이터베이스 객체를 수정하는데 사용

  • 테이블 생성 이후 제약조건 추가 및 변경, 삭제
  • 제약조건은 추가, 삭제만 가능. 변경은 안됨.
  • 변경하려면 삭제하고 새로운 내용으로 추가하면 됨.

✔️ 10-4 DROP TABLE과 TRUNCATE TABLE의 차이점
1. 복구 가능성: DROP TABLE은 테이블 자체를 삭제하므로 복구할 수 없음. TRUNCATE TABLE은 테이블의 데이터만 삭제하므로 테이블 구조는 복구 가능.
2. 영향 받는 객체: DROP TABLE은 테이블과 관련된 인덱스, 제약 조건, 트리거, 권한 등 모든 객체를 삭제. TRUNCATE TABLE은 오직 데이터만 삭제하고, 다른 객체는 그대로 둠.
3. 속도: TRUNCATE TABLE은 테이블의 모든 데이터를 빠르게 삭제하는 데 반해, DROP TABLE은 테이블 자체를 삭제하므로 시간이 다소 걸릴 수 있음.
4. 트랜잭션 및 롤백: TRUNCATE TABLE은 트랜잭션을 사용하지 않으며 롤백이 불가능. 반면, DROP TABLE은 트랜잭션을 사용하며 롤백이 가능. (단, 오라클에서는 롤백이 불가능)
5. 용도: DROP TABLE은 테이블을 완전히 제거할 때 사용되며, TRUNCATE TABLE은 테이블의 데이터만 빠르게 삭제하려는 경우 사용.


11. View

🔸 View(뷰)는 실제 데이터를 저장하지 않고, 테이블이나 다른 뷰의 데이터를 조회하는 SQL 쿼리의 결과를 미리 저장한 가상 테이블

  • 단순 뷰: 하나의 테이블을 이용해서 생성한 뷰
    • 뷰의 컬럼명은 함수 호출문, 연산식 등 가상 표현식이면 안됨!
  • 복합 뷰: 두 개 이상의 테이블을 조인해서 필요한 데이터만 생성한 뷰
    • 복잡한 쿼리를 반복사용하지 않고 빠른 조회를 위해 사용. (생산성 증가)
  • 뷰의 수정 (CREATE OR REPLACE)
    • 동일 이름으로 해당 구문을 사용하면 데이터가 변경되면서 새롭게 생성되고, 기존에 존재하지 않았다면 새로 CREATE 됨.

✔️ 11-1 View의 사용 목적

  • 데이터 보안: 민감한 데이터를 감추거나 일부만 조회할 수 있도록 제한할 수 있음.
  • 복잡한 쿼리 단순화: 복잡한 SQL 쿼리를 단순한 형태로 재사용할 수 있음.
  • 데이터의 일관성 유지: 여러 테이블의 데이터를 통합하여 하나의 논리적 테이블처럼 사용할 수 있음.
  • 논리적 데이터 독립성: 테이블 구조가 변경되더라도 View를 통해 일관성 있는 데이터 액세스를 제공할 수 있음.

✔️ 11-2 단일 뷰와 복합 뷰의 차이점

구분단일 뷰복합 뷰

기반 테이블 수하나의 테이블두 개 이상의 테이블 혹은 집계함수 포함
수정 가능 여부데이터 수정 원활(상대적)데이터 수정 거의 불가능
연산 포함 여부단순 조회만 포함조인, 함수, 서브쿼리 등을 포함



12. 시퀀스

  • 시퀀스 (순차적으로 증가, 감소하는 값을 만들어 주는 객체)
  • 괄호 x


13. 계정생성 및 권한관리

DCL: GRANT(권한 부여), REVOKE(권한 회수)

  • CREATE USER -> 데이터베이스 유저 생성 권한
  • CREATE SESSION -> 데이터베이스 접속 권한
  • CREATE TABLE -> 테이블 생성 권한
  • CREATE VIEW -> 뷰 생성 권한
  • CREATE SEQUENCE -> 시퀀스 생성 권한
  • ALTER ANY TABLE -> 어떠한 테이블도 수정할 수 있는 권한
  • INSERT ANY TABLE -> 어떠한 테이블에도 데이터를 삽입하는 권한.
  • SELECT ANY TABLE...
  • SELECT ON [테이블 이름] TO [유저 이름] -> 특정 테이블만 조회할 수 있는 권한.
    • INSERT ON....
    • UPDATE ON....


14. 오라클 계층형 쿼리

  • START WITH : 계층의 첫 단계를 어디서 시작할 것인지의 대한 조건
  • CONNECT BY PRIOR 자식 = 부모 -> 순방향 탐색
  • CONNECT BY 자식 = PRIOR 부모 -> 역방향 탐색
  • ORDER SIBLINGS BY : 같은 레벨끼리의 정렬을 정함.


15. 그룹함수 심화

1. ROLLUP(arg1, arg2) -> arg1과 arg2로 그룹화. -> 각 그룹별 SUM(salary) -> arg1 그룹의 SUM(salary) -> 마지막에는 전체 SUM(salary)

  • 특정 컬럼들의 단계적 합계를 계산.
  • 부서별 급여 합계
  • 부서와 직무 조합별 급여 합계
  • 전체 급여 합계

2. CUBE(arg1, arg2): 모든 가능한 조합을 고려하여 집계.

  • 직무별 급여 합계
  • 부서별 급여 합계
  • 부서와 직무 조합별 급여 합계
  • 전체 급여 합계

3. GROUPING SETS(arg1, arg2): 주어진 그룹 집합에 대해서만 집계

  • 직무별 급여 합계
  • 부서별 급여 합계

4.GROUPING(): 이 함수가 직접 그룹 집계를 하지는 않음.

  • 결과에서 특정 열이 집계가 되었는지의 여부를 확인하여 값을 임의로 집어 넣을 때 사용
  • ROLLUP, CUBE, GROUPING SETS에서 모두 사용 가능



📌전반적인 느낀 점 (일주일 동안 한 일)

데이터베이스 배우는데 진짜 어려웠다.
그래서 데이터베이스 관리하는 직업이 돈을 잘버는 건가 싶었다.
강사님은 세세하게 설명하시는데 나는 제대로 알아들은게 없는 느낌이었다. 따라가기 벅차고 그리고 강사님 타자가 너무 빠르시다...


📌좋았던 점

데이터베이스를 좀 더 자세히 알아가는 점은 좋았다. 근데 너무 어려워서 크게 뭐가 좋았던거는 없었던거 같다.


📌아쉬웠던 점

기본정도는 좀 하면 알아가면서 할 수 있을꺼 같은데 데이터베이스는 단계가 없다고 느낄만큼 그냥 확 뛰어버리는 거 같다.
집에와서 문제를 풀려고 했는데 개인 노트북이 계속 이상해서 문제를 제대로 못풀어 봤다는 점이 많이 아쉬웠다.


📌개선할 점

체력을 좀 길러야 될꺼같다. 수업 듣는데 자꾸 졸음과 싸우느라 바쁜 거 같았다. 그리고 공부를 좀만 더 열심히 해야될꺼 같다.


📌다음 주 계획

  • 데이터베이스 공부
  • 코딩테스트 공부


수영님의 더 많은 이야기가 궁금하다면?
👉플레이데이터 백엔드 8기 김수영님의 블로그에서 확인해보세요!🚀 [ 블로그 바로가기 ]