Stack, DB

calis_ws·2023년 5월 17일
0

Stack

스택(Stack) → 티슈, 감자칩 Last In First Out
나중에 들어온것이 먼저 빠지는 자료구조(후입선출)

  • .push(item) : Stack에 객체 item을 저장한다.

  • .pop() : Stack의 맨 위에 저장된 객체를 꺼낸다. (비었을 때는 EmptyStackException 발생)

  • .isEmpty() : Stack이 비어있는지 알려준다.

  • .peek() : Stack의 맨 위에 저장된 객체를 반환한다. pop()과 달리 Stack에서 객체를 꺼내지는 않는다.

push(1, 2, 3) → pop(3, 2, 1)

큐(Queue) → 대기 줄 First In First Out
먼저 온 것이 먼저 빠지는 자료구조(선입선출)

public class Stack1 {
    int[] arr = new int[10000];
    int pointer = 0;

    public void push(int value) {
        arr[pointer++] = value;
    }

    public int pop() {
        if (isEmpty()) throw new RuntimeException("스택이 비었습니다.");
        return arr[--pointer];
    }

    public boolean isEmpty() {
        return pointer == 0;
    }

    public int peek() {
        if (isEmpty()) throw new RuntimeException("스택이 비었습니다.");
        return this.arr[pointer - 1];
    }

    public static void main(String[] args) {
        Stack1 st = new Stack1();
        System.out.println(st.peek());
    }
}

DB

DB란 한 마디로 정의하면 데이터를 저장해주는 어플리케이션이다.
데이터베이스를 사용하는 가장 중요한 이유는 데이터를 효율적으로 관리하기 위해서다.
DB를 사용하게 되면 데이터를 중앙 집중적으로 저장할 수 있고, 여러 사용자가 동시에 접근하여 데이터를 공유하고 활용할 수 있다.

학습목표

  • CourseStudent에 준하는 게시판의 DB 를 설계 할 수 있다.

  • 논리적 모델링을 할 수 있다.

  • 물리적 모델링을 할 수 있다.

  • Group By, Having을 이용해 통계를 낼 수 있다.

파일 대신 DB에 저장하는 이유

  • 한 파일에 대해서 동시에 여러 사람이 수정하려고 할 때 충돌이 생길 수 있다.

  • 파일에서는 데이터를 검색하려면 모든 파일을 차례대로 읽어야 하므로 속도가 느리다.

DB로 해결할 수 있는 문제들

데이터 관리, 데이터 분석, 데이터 보안 등과 같은 다양한 문제를 해결할 수 있는 강력한 도구가 될 수 있다.

ex) "게시판" 사례

  • DB 내의 사람들이 작성하는 모든 글 중에서 원하는 주제의 글을 쉽게 검색 할 수 있다.
  • 데이터베이스에 저장된 게시글의 데이터들도 사용자들이 동시에 접근하고 공유할 수 있게 된다.

데이터의 중복문제

동일한 데이터의 중복은 데이터의 일관성을 해칠 뿐만 아니라 데이터 저장 공간의 비효율성도 초래할 수 있다.
또한, 중복 데이터가 수정될 경우 해당 데이터에 대해 일관성을 유지하기 위한 노력이 필요해진다.

데이터베이스의 '정규화'

Table(표)을 나눈다, Key로 연결

데이터 중복 문제를 해결하기 위해서 '출판사', '도서 테이블'을 분리하고 도서 테이블과 출판사를 Key를 통해 연결해준다.

데이터베이스 내의 테이블을 적절한 형태로 분리하고, 각 테이블이 특정 규칙을 따르도록 만들어서 데이터 중복을 방지하게 하는 것이다.

Foreign Key

Book 테이블 에서는 출판사_ID, 저자_ID가 Foreign Key

ERD로 표현한 관계

데이터 모델링에서 개체(Entity)와 개체 간의 관계(Relationship)를 그림으로 표현한 것을 ERD(Entity-Relationship Daigram)라고 한다.

데이터 모델링

현실 세계의 데이터를 컴퓨터 즉 데이터베이스에서 다룰 수 있는 형태로 변환하는 과정이다.

  1. DB에 담을 현실 세계의 대상을 가지고 요구사항을 정리하고 분석한다.

  2. 이 중 중요 개념을 구분한다. (개념적 모델링)

  3. 각 개념을 구체화한다. (논리적 모델링)

  4. 최종적으로 데이터베이스 생성을 하고 모델링한 결과에 따라 개체, 인덱스 등을 생성한다. (물리적 모델링)

DB 입문

인스턴스 시작 ~ mysql 접속

Create Database : 스키마 생성

Table 생성 book

DDL(Data Definition Language)란 테이블과 같은 데이터 구조를 정의하는데 사용하는 명령어다.
ex) CREATE, ALTER, DROP, RENAME, TRUNCATE

테이블을 만들때는 꼭 Primary Key(PK)를 지정해야 한다.

DROP

데이터베이스 내 만든 특정 테이블을 삭제하고 싶은 경우 DROP구문을 사용할 수 있다.

“book” 테이블 삭제

DROP TABLE book;

Drop now

new sql 생성

Ctrl + Enter

DML

DML(Data Manipulation Language)란 정의된 데이터베이스에 입력된 레코드를 조회하거나 수정, 삭제하는 등의 역할을 하는 언어다.

ex) select(데이터 조회), insert(데이터 삽입), update(데이터 수정), delete(데이터 삭제)

Insert

데이터베이스에서 새로운 레코드를 추가하기 위해서는 Insert 명령어를 사용한다.
“Insert into” 문법을 사용하여 특정 테이블에 새로운 레코드를 추가할 수 있다.

INSERT INTO book VALUES(1, '축구의 역사', '굿스포츠', 7000);
INSERT INTO book VALUES(2, '모두의 축구', '멋사출판사', 8000);

Delete, Update

DELETE 명령어와 WHERE 절을 사용하여 삭제할 레코드를 조건으로 지정할 수 있다.
UPDATE 명령어와 WHERE 절을 사용해서 업데이트할 레코드를 조건으로 지정할 수 있다.

use `likelion`;
delete from likelion.book
where bookid = 1;				// 1번 리스트 삭제

select * from book limit 10;	// 10번까지 불러오기

update book			 
set publisher = '글빛'	
where bookid = 2;				// 2번 publisher 업데이트

Join

JOIN을 사용해서 두 테이블 간의 공통된 값을 연결하고, 이를 기반으로 새로운 결과 테이블을 생성할 수 있다.

publisher Table 생성

book Table의 publisherid 기입

publisherid Table Join

Join한 Table에서 Query

인사이트 타임

프로그래머스 '특이한 정렬' 문제 풀이

16:10 ~ 17:20
https://school.programmers.co.kr/learn/courses/30/lessons/120880

어려워서 풀지 못 했다. 절댓값과 Comparator 공부한 다음 재도전!

AWS 결제 대시보드 이슈

팀원분들의 AWS 결제 가격이 각각 다르다는 이야기를 나눴다. 정확한 이유는 나오지 않았다.

오늘까지 누계 잔액은 한화 약 324원

인스턴스 잊지 말고 중지 혹은 종료 할 것

review

오전 알고리즘 시간은 스택에 대해서 배워보았다. 하지만 어제 git VCS 사건 때문인지 아침부터 깃때문에 1시간이나 애를 먹었다. 문제는 인텔리에서 푸시가 안되는 것이었는데 구글링을 해보니 강제푸시를 추천하길래 결국 해결을 하긴 했다. 그동안 커밋푸시를 안해놔서 그런지 2주치 분량을 허겁지겁 다 푸시 때려버렸다. 어쨌든 스택을 놓쳐버려서 저녁에 백엔드 위키를 보며 복습했다.

오후에는 DB에 대해서 다뤄보았다. 새로운걸 배워서 그런건지 문제 없이 잘 따라가서 그런건지 이번 주는 상당히 재밌다.
mysql 명령어도 외울 생각에 살짝 골치 아프긴 하지만 어쩔 수 없지 뭐 공부해야지.

내일은 벌써 백엔드 위키 작성날이 다가오지만 내일만 버티면 바로 황금 휴일이니 조금만 힘내보자 ㅍㅇㅌ!!

profile
반갑습니다람지

0개의 댓글