[JSCODE] Spring Data JPA 세팅하기

노을·2023년 3월 24일
0

JSCODE

목록 보기
4/7

공부 자료

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

🔥 실제 면접 질문에서 자주 물어보는 내용이다. 아래와 같은 내용의 면접 질문을 받았을 때, 어떻게 대답할 건지 정리해봐라.

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

    데이터베이스는 여러 사용자가 공유할 수 있는 데이터를 구조화하여 저장하는 시스템이다. 데이터베이스 특징은 다음과 같다.
  • 데이터베이스는 언제든지 실시간으로 접근 간으하다.
  • 데이터베이스는 지속적으로 변화한다. 새로운 데이터를 추가하거나 기존 데이터를 수정할 수 있다.
  • 여러 사용자가 동시에 공유할 수 있다. (동시에 이용해서 데이터의 일관성과 무결성 보장)
  • 데이터의 내용에 따라 검색 가능하다.
  • 백업과 복구 기능을 제공한다.
  • 데이터의 중복을 최소하하여 데이터의 일관성과 효율성을 유지한다.

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

    데이터베이스 언어는 데이터베이스를 생성, 수정, 조회, 삭제 등을 하기 위해 사용되는 언어다.

    DDL : DDL은 데이터베이스 객체를 생성, 수정, 삭제하기 위한 언어입니다.
    대표적으로 CREATE, ALTER, DROP 등이 있습니다.
    CREATE 문은 테이블, 인덱스, 뷰 등의 객체를 생성합니다.
    ALTER 문은 객체의 구조를 변경합니다.
    DROP 문은 객체를 삭제합니다.

    DML : DML은 데이터를 조작하기 위한 언어입니다.
    대표적으로 SELECT, INSERT, UPDATE, DELETE 등이 있습니다.
    SELECT 문은 데이터를 조회합니다.
    INSERT 문은 데이터를 추가합니다.
    UPDATE 문은 데이터를 수정합니다.
    DELETE 문은 데이터를 삭제합니다.

    DCL : DCL은 데이터베이스에 접근하는 권한을 제어하기 위한 언어입니다. 대표적으로 GRANT, REVOKE 등이 있습니다.
    GRANT 문은 데이터베이스 사용자에게 권한을 부여하고 REVOKE 문은 권한을 회수합니다.

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

    트랜잭션은 데이터베이스(Database)에서 하나의 작업 또는 논리적인 작업 단위를 말한다. 주의해야 할 점은 트랜잭션이 작업의 단위는 질의어 한문장이 아니라는 점이다.
    트랜잭션은 다음과 같은 특징을 갖는다.
  • 원자성 : 트랜잭션은 모두 성공하거나, 모두 실패해야 한다. 트랜잭션 내에 포함된 모든 작업이 완료되지 않으면 이전 상태로 롤백된다.
  • 일관성 : 트랜잭션의 시작 상태와 종료 상태가 데이터베이스의 일관성을 유지해야 한다.
  • 격리성 : 트랜잭션은 다른 트랜잭션의 영향을 받지 않는다. 즉, 동시에 실행되는 다른 트랜잭션으로 인해 결과가 변경되지 않는다.
  • 지속성 : 트랜잭션이 완료된 후에는 결과가 영구적으로 저장된다. 시스템 장애나 다른 문제로 인해 발생한 손실을 방지하기 위해 이러한 결과는 롤백할 수 없다.



✅ sql문 연습하기 (생략가능)

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

    컬럼명데이터타입조건
    idbigintprimaray key, not null, auto increment
    namevarcharnot null
    classvarchar미입력 시 default값인 ‘basic’으로 저장되도록

    • 테이블 생성하기

    • 데이터 추가 하기

    • 데이터 보기

      idAUTO_INCREMENT 방식으로 자동으로 들어갔고
      class는 직접 설정하지 않아 디폴트 값 basic로 잘 들어간 것을 확인할 수 있다.



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

     select animal_id
      from animal_ins
      where name is not null
      order by animal_id
    select max(price) as max_price
     from product
    select animal_id, name
     from animal_ins
     order by animal_id
    select flavor
     from first_half
     order by total_order desc, shipment_id
    select book_id, date_format(published_date, "%Y-%m-%d") as publish_date
     from book
     where category='인문'
     and year(published_date) = 2021
     order by published_date



✅ student entity로 연결하기

@DynamicInsert
@Entity
@Table
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(nullable = false)
    private String name;

    @Column(name = "class")
    @ColumnDefault("'basic'")
    private String classes;


}

  • 이렇게 만들면 되는데, 처음에 "basic"을 기본값으로 설정했더니 인텔리제이가 table이 만들어지지 않는다고 "basic" 근처에서 문제를 찾아보라고 말해줬다. (인텔리제이는 참 똑똑하다.)
    "basic"이 아니라 "'basic'"으로 해줘야 하는 이유는 string이기 때문인 것이다...
    자세한 건 팀원들과 모그님한테 물어봐야겠다,,,
  • 그리고 처음에 기본생성자를 만들지도 않았는데 꼭 만들어야 한다. (프록시 생성을 위해)
    나는 protected 레벨로 만들었다. (public/protected 둘 중 하나여야 함)



✅ 블로그 글 쓰기

이제 블로그 글을 쓰면서 ‘기록하는 습관’을 들여볼겁니다. 블로그 글에 작성해야 되는 내용은 아래와 같습니다.

  • 배운 내용, 깨달은 점

    • spring data jpa로 테이블 만들기, 칼럼의 기본 값 설정 방법
    • spring data jpa는 영한님 입문 강의에서 맛보고 그 뒤로 써본 적이 없는데 새롭게 시작하는 프로젝트에서 적용해보고 싶다. 꼭 제대로 공부하고 사용하자. 편한만큼 대충 공부하고 쓰면 정말 위험할 것 같다.
    • 나는 sql을 오라클로 처음 배워서 mySql 프로그래머스 문제를 잘 안풀어봤는데 이번 기회에 풀어봐서 좋았다!! 그리고 내가 얼마나 sql 작성을 못하는지도 알게 되었다. 심심할 때 마다 풀어야지..
  • 어려웠던 점, 반성하고 싶은 점 / 개선할 방법

    • basic으로 기본 값 설정하는 것 -> 해결함!
profile
진짜를 알면 곁가지를 몰라도 된다

0개의 댓글

관련 채용 정보