티스토리 뷰

728x90
반응형

데이터베이스 면접 단골질문

데이터베이스의 특징에 대해 설명해주세요.

  • 실시간 접근성
  • 생성, 수정, 삭제를 통한 최신 데이터 유지
  • 사용자들 간의 동시 공유
  • 사용자가 원하는 데이터를 주소가 아닌 내용에 따라 참조 가능
  • 데이터 논리적 독립성

데이터베이스 언어(DDL, DML, DCL)에 대해 설명해주세요.

  • DDL: 데이터를 정의 하는 언어이다.테이블, 스키마를 생성, 삭제,  수정 할수 있는 언어라고 보면된다.
  • DML: 데이터를 조작 하는 언어이다. 테이블의 데이터를 추가, 조회, 수정, 삭제를 할수있는 언어이다.
  • DCL: 사용자 접근, 권한, 무결성, 회복을 관리하는 언어이다. 데이터를 보호하고 데이터를 전체적으로 관리하는 목적으로 사용하는 언어이다.

트랜잭션이란 무엇인지 설명해주세요.

 트랜잭션이란 작업 단위를 말한다. 즉 데이터를 생성, 조회, 삭제, 수정을 실행 하는 작업이 한번이상일 경우 단위를 말한다. 이론적으로 최소한의 더 이상 분리할수 없는 단위라고 말하는데 DB관점에서 보면 데이터를 추가 한번만 실행 하는 작업이 있다고 하면 추가 작업을 동시가 N개 작업을 하거나 아니면 추가하면서 다른 테이블에 수정이나 삭제 하는 작업이 동시에 이뤄줘야 하는 작업이 있는데. 이 작업 단위를 트랜잭션이라고 보면 된다. 실무에서는 작업단위중 오류가 날경우에는 데이터를 원복시키는 목적으로 많이 사용한다.

 

sql문 연습하기

MySQL 세팅하기

 여기 스터디와 MySQL 설치해서 하는것이 아니라 AWS 서버에 띄우는 방식으로 작업할것이다. 

AWS에서는 RDS라는 플래품을 지원하는데 로컬에서 따로 관 관리 안해도 되서 좋은 점이 있어서 AWS RDS로 진행 할것이다. 세팅하는 방법은 아래사이트에서 참조하면된다.

https://jih3508.tistory.com/167

 

[AWS] RDS설정 하는 방법

들어가기 전에.... 백엔드/서버 개발자, DevOps, DBA 같은 직군은 데이터베이스를 다뤄야 하는 경우가 많다. 하지만 사내서버에 세팅하기에는 하드웨어 비용이나 관리 비용이 많이 들어가기고 하고

jih3508.tistory.com

sql문으로 아래 조건을 만족하는 student 테이블 생성하기 (workbench로 실습)

스키마를 test로 한다.

create table student
(
    id    bigint auto_increment
        primary key,
    name  varchar(100)                 not null,
    class varchar(100) default 'basic' null
);

programmers에서 sql 코딩테스트 문제 중 level1 문제들 풀기 (5문제 이상)

 

student entity로 연결하기

일단 기본적인 세팅 환경 구성은 아래와 같다.

  •  DB: MySQL:8.0.32
  • JPA

AWS 인스턴스에 구성에 보면 엔진 버전과 DB이름이 있다. 버전과 DB 이름까지 확인은 필수로 해야 패키지 불러올때 오류가 안난ㄷ.

build.gradle

implementation 'mysql:mysql-connector-java:8.0.32'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'

 여기서 중요한것이 있는데 모그님이 올린글은 'mysql:mysql-connector-java' 이것이지만 뒤에 버전을 안 붙이면 오류가 나오니 DB엔진 버전을 붙어 주도록 하자.

application.properties

DB URL은 인스턴스의 엔드포인트 url을 갖고 오면된다. 그 뒤에 /db이름을 작성 하면된다.

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

# DB Source URL
spring.datasource.url=jdbc:mysql://testmysql.cuoxftayhz1d.ap-northeast-2.rds.amazonaws.com:3306/study_mySQL

# DB username
spring.datasource.username= user id

# DB password
spring.datasource.password= password

# true 설정 시 실행되는 쿼리문 로그로 확인 가능
spring.jpa.show-sql=true

# DDL(create, alter, drop) 자동 실행 기능
spring.jpa.hibernate.ddl-auto=update

# JPA의 구현체인 Hibernate가 동작하면서 발생한 SQL의 가독성을 높여준다.
spring.jpa.properties.hibernate.format_sql=true

# JPA 데이터베이스 플랫폼 지정 (현재 MYSQL InnoDB를 사용중)
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect

 

Entity

그 다음에는 JPA의 엔티티 설정에 들어가자 엔티티랑 DB의 테이블라고 보면된다. JPA의 특징이 DB랑 자바 객체의 매핑을 해야 하기 때문에 자바 코드단에서 Student를 맵핑할 객체과 테이블을 작성 하자

ClassCode.java

 일단 먼저 student의 보면 class인데 들어 올수 있는 값이 한정이 있어서 Enum타입의로 먼저 정의를 하자

public enum ClassCode {

    BASIC("basic", "기본"),
    MIDDLE("middle", "중금"),
    HARD("hard", "고급");


    private final String codeName;
    private final String description;

    private ClassCode(String name, String description){
        this.codeName = name;
        this.description = description;
    }
}

Student

 그 다음에 Student 테이블에 맞는 객체를 작성하자.

import com.example.test.storage.code.ClassCode;

import javax.persistence.*;

@Table(name = "student", schema = "test")
@Entity
public class Student {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "class")
    @Enumerated(EnumType.STRING)
    private ClassCode Class;

}
  • @Table: 테이블과 엔티티 맵핑할것을 지정한다.
    • name: 맵핑할 테이블명
    • schema: 맵핑할 스키마
  • @Entity: 테이블과 Student class를 지정한다.
  • @Id: 기본키
  • @GeneratedValue: 기본 키를 생성하는 방법을 지정한다.
    • GenerationType.IDENTITY: 기본키를 DB Table에서 지정하는 방식으로 한다. (MySQL일때 깂이 자동 증가 한다.)
  • @Column: 테이블의 컬럼이랑 매핑할때 사용한다.
    • name: 컬럼이랑 매핑할 이름
    • nullable: Not null인지 여부, false 일때 Not null 임
  • Enumerated: Enum Type으로 관리

이렇게 하고 돌리면 아래와 같이 나오면 성공이다.

마무리

 JPA는 SI에서는 많이 사용 못한다. 그 이유는 DBA가 없기도 하고 JPA를 개발할려면 시간과 공수작업이 많이 들어가는데 그 SI에서는 기간이 넉넉하게 주지도 않고 기획이 자주 바뀌어 버려서 원하는 기간안에 개발하기가 힘들다. 현업에서는 개발자 DB설계에 개발까지 할려고 하니까 제대로 된 정규화 과정도 이루어지지 않아서 JPA는 다룰일이 많이 없지만 IT서비스업체 네카라쿠배에서는 성능이나 유지보수측관점에서 좋기 때문에 괜찮은 회사에 갈려면 JPA는 다룰줄 알아야 한다. 소스코드는 아래에서 확인 해보면된다.

https://github.com/JSCODE-EDU/spring_class_IkHyun/tree/main/5%ED%9A%8C%EC%B0%A8/storage

궁금한점

  •  객체지향과 RDMS에 대한 개념
  • ORM, Hibernate
  • JPA에서 많이 나오는 이슈
  • SQL 기초부터 튜닝까지의 책 추천
728x90
반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함