2023.11.01(수) - Day 3.

  • 강의 주제: Database 1

실습 환경 세팅

  • 리눅스 컴퓨터에 IP 설정

    • 기존 리눅스 server1 점검
    • 새로운 리눅스 server2 추가
  • DB 서버 설치
    yum install -y mysql-server

    • 설치한 mysql 작동 여부 확인

      ps -ef | grep mysql
      
      netstat -anlp | grep 3306

    • centOS server2 추가

      • putty로 110.110.110.111(112) 접속 가능
        • 110.110.110.xx1 - port 22 → server1
        • 110.110.110.xx2 - port 22 → server2
    • mysql server

      • id, pw가 있어야 접속 가능
      • root 사용자 존재
        기본값으로 서버가 설치되어 있는 곳에서만 접속 가능

      mysql_secure_installation


  • window
    • 보이지 않는 곳에서 작동하는 것 → 서비스
  • linux
    • 위 서비스들을 linux에서는 systemctl로 다루고 있다.

mysql -u root -p

password: xxxxxxxx

// 사용자 생성
// CREATE USER 'ltw'@'110.110.110.%' identified by 'xxxxxxxx';
// 하지만 모든 사람들이 접속할 수 있게 아래로 설정.

CREATE USER 'ltw'@'%' IDENTIFIED BY 'xxxxxxxx';

// DB 생성
CREATE DATABASE web;

// 권한 설정
GRANT ALL PRIVILEGES ON web.* TO 'ltw'@'%';

// 종료
exit


→ mysql이 110.110.110.xx1:3306을 사용 중.

systemctl stop firewalld
방화벽을 일단 끄고 실습을 진행한다.

server1, server2 mysql server 연결 설정 완료.



이론

Database

  • 공통된 자료만 저장하겠다.
    = 자료 추상

관계형 데이터베이스가 아닌 db도 존재

  • 정답이 있는 것이 아님.
  • 추상적으로 정의해서 저장해야 함.

DB 설계


  • In 현업
    • 먼저 요구 사항 명세서 작성
      • 무엇을 만들고 싶은지 전부 서술해서 작성 ⇒ 요구 사항 분석하는 단계
    • 적색 선을 그려달라
      - 어떤 기능을 구현해달라
      - 회원 가입 기능이 필요하다
      - 100명이 동시에 진입해도 0.1초 내에 처리가 되어야 한다.
      ⇒ 기능적인 요구 사항
      → 말도 안되는 요구를 할 때도 있다. (잘 모르니까)

어떤 웹 사이트를 만들지 주제 생각해볼 것.
- 쇼핑몰
    - 당근 - 중고 거래 관련 주제
    - 직방 - 부동산 거래 관련 주제
    - 아이디어스
        - RESTful API 서버 설계(경력 2년 이상)

- 상품 기능
   - 상품 - 어떻게 정의할 것인가, 뭐가 필요할 것인가
        → 데이터를 대략적으로 추상화해야 함.
            ⇒ 식별 번호, 상품 이름, 판매자, 가격, 수량, 사진, 상품 설명, …. 
                 - 상품 : 판매자가 등록할 수 있다.
                 - 상품 : 구매자가 구매할 수 있다.
                 - 상품 : 판매자가 가격을 설정할 수 있다.  
   - 회원
        - 회원 번호, 이름, ID, PW, 연락처, 주소, 생년월일, 등급
   - 등급
        - ……

DB 설계 실습 (my demo ver)

  • 버스 좌석 예약 시스템 (Not 결제, Only 예약)
    • 10대의 버스 有. (더 이상 늘거나 줄지 않는다는 가정)
    • 버스 당 20개의 좌석 .
    • 회원 가입한 유저만 버스 예약 가능.
    • 모든 버스엔 오로지 1명의 버스 기사 배정.
    • 1명의 유저가 1개의 버스 좌석을 예약하면 해당 좌석 예약 불가.
    • 1명의 유저가 1개의 버스 좌석을 예약하면 다른 좌석 예약 불가.
    • 예약 취소 시 즉시 좌석의 예약 상태 update.
      • 예약 완료 - BusSeat.busSeat_status: 1 → User.user_status: 1로 함께 update
      • 예약 가능 - BusSeat.busSeat_status: 0 → User.user_status: 0으로 함께 update
    • 버스 기사도 유저.

  • Relation
    • Bus - BusSeat → 1 :
    • Bus - BusDriver → 1 : 1
    • BusSeat - User → 1 : 1
    • BusDriver - User → 1 : 1

  • PK - FK
    • Bus
      • Bus.busSeat_id (FK) = BusSeat.id (PK)
      • Bus.busDriver_id (FK) = BusDriver.id (PK)
    • BusSeat
      • BusSeat.bus_id (FK) = Bus.id (PK)
      • BusSeat.user_id (FK) = User.id (PK)
    • User
      • User.busSeat_id (FK) = BusSeat.id (PK)
    • BusDriver
      • BusDriver.bus_id (FK) = Bus.id (PK)
      • BusDriver.user_id (FK) = User.id (PK)

  • API
    • 좌석
      • 좌석 예약 완료 update API
      • 좌석 예약 취소 update API
      • 좌석 예약 정보 update API
    • 유저
      • 회원 가입
      • 회원 가입 API
      • 회원 탈퇴 API
      • 유저의 예약 좌석 조회 API
      • 단순 유저 조회 API
    • 예약
      • 전체 예약 가능 좌석 조회 API
      • 전체 예약 완료 좌석 조회 API
    • 버스
      • 버스의 예약 가능 좌석 조회 API
      • 버스의 예약 완료 좌석 조회 API

  • Table

    • Bus

      idPKint(8)
      busDriver_idFK버스 기사int(8)
      busSeat_idFK버스 좌석int(8)
      bus_name버스 이름varchar(20)
    • BusSeat

      idPKint(8)
      bus_idFK버스int(8)
      user_idFK예약 승객int(8)
      busSeat_name좌석 이름varchar(20)
      busSeat_status예약 여부
      • 0: 예약 가능
      • 1: 예약 완료 | int(8) |
    • User

      idPKint(8)
      busSeat_idFK예약 좌석int(8)
      user_name승객 이름varchar(20)
      user_age승객 나이int(8)
      user_sex승객 성별int(8)
      user_phone승객 전화번호int(11)
      user_status중복 예약 방지int(8)
      • 0: 예약 가능
      • 1: 예약 불가
    • BusDriver

      idPKint(8)
      bus_idFK배정된 버스int(8)
      user_idFK기사도 승객int(8)

    Bus, BusSeat, BusSeatGet 중간 테이블 따로 만들자.



  • ER Diagram

  • <수정 ver>


관계 데이터 모델

업로드중..


정규화

  • 제 1 NF
  • 제 2 NF
  • 제 3 NF
  • 제 4 NF

  • 제 5 NF
  • 제 6 NF

23.11.02(목) - 정규화 등 이론 수업 후 실습 진행 예정.



채용 공고 분석

cf.) 채용 공고

  • 아이디어스
    • RESTful API 서버 설계(경력 2년 이상)
    • Java 이해도
    • OOP
      • 자바를 문법적으로 사용하는 것과 객체 지향적으로 사용하는 것과는 다름.
    • Spring framework를 사용한 서버 개발 및 운영 경험 있는.
    • RDB, NoSQL 사용 경험 있는.
    • 대규모 트래픽 서비스 환경에서 개발 및 운영 경험 있는.
    • 대용량 배치 개발 및 운영 경험이 있는.
      • 일정 순간 어느 정도 쌓인 걸 처리하는 경험 있는.
        (웹의 경우 실시간으로 처리하기 때문에 해당 사항 X)

      • 100명이 모여야 처리 → 배치 처리
    • ORM(JPA, Hibernate) 활용한 개발 및 운영 경험 있는.
      Object - Relational DB를 연계한 개발 및 운영 경험 있는.
    • Docker 및 Kubernetes 이해와 개발 및 운영 경험 있는.
    • Elastic Search에 대한 이해와 개발 및 운영 경험 있는.
      • NoSQL 사용해서 검색 엔진 만들 때 사용.
    • AWS 등의 클라우스 서비스 사용 경험 있는.
    • MSA 환경에서 개발 및 운영 경험 있는.
      • 하나의 웹 페이지여도 서버가 분산되어 있음.
        • 여러 서버에서 분산 처리.
          • 그래서 한 기능이 중단되어도 그 페이지는 작동함.
    • PHP, Python 유경험자
      • 쉽고 빠르게 개발 가능
        • 일단 php, python으로 빠르게 개발한 후에 기능 및 서비스 확인
          기존에 만든 코드를 Java로 교체
          (legacy code를 Java로 교체하니까)


profile
Web Developer

0개의 댓글