TIL : 221223

JINSEON YE·2022년 12월 23일

TIL

목록 보기
39/88
  • RDBMS란?
    • RDBMS(Relational DataBase Management System)은 컴퓨터에 정보를 저장하고 관리하는 기술입니다.
    • 성능/관리 면에서 매우 고도화된 엑셀 이라고 생각하셔도 좋습니다.

엑셀 파일 하나가 "데이터베이스"라면,
엑셀 시트 하나는 "테이블"이라고 부르고,
엑셀 행 하나는 "데이터"라고 부릅니다.

우리가 명령을 내린 Java 명령어를 SQL로 번역해주는 녀석이,
바로 다음 시간에 배울 Spring Data JPA 라는 녀석입니다!

  • JPA란?

    👉 JPA는, SQL을 쓰지 않고 데이터를 생성, 조회, 수정, 삭제할 수 있도록 해주는 번역기입니다.
  • DB를 이용하는데 핵심이었던 "테이블"과 "SQL"과 동일한 개념의 자바 용어가 있겠죠?

  • "테이블"은 Domain, "SQL"은 Repository 입니다.

  • Interface 란?

    • JPA는 Repository를 통해서만 사용할 수 있습니다.
    • 인터페이스는 클래스에서 멤버변수가 빠진, 메소드 모음집이라고 보시면 됩니다.

spring.jpa.show-sql=true // spring이 jap로 작동을 할 때 sql을 보여달라.
spring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL

-> 이렇게 내가 작성하지 않은 코드들을 사용할 수 있게 해주는 것이 JPA

repository.save(); //()안에 내가 저장할 것을 넣음.
repository.save(course1); //course1 저장.

  • 상속의 개념
    • "extends" 라는 단어를 Repository에서 보았어요. 이게 대체 뭘까요?
    • "클래스의 상속"이라는 개념인데요. "이미 만들어둔거 가져다 쓰자!" 라고 선언하는 것입니다.
👉 CRUD란? 정보관리의 기본 기능 → 생성 (Create) → 조회 (Read) → 변경 (Update) → 삭제 (Delete)

JPA로 위의 기능을 하는 방법을 익혀보겠습니다.

service의 개념

  • 스프링의 구조는 3가지 영역으로 나눌 수 있습니다.

    1. Controller : 가장 바깥 부분, 요청/응답을 처리함. 요청이들어오면 요청을 받아주는 자동응답기.

      → 2주차 후반부에 배울 녀석

    2. Service : 중간 부분, 실제 중요한 작동이 많이 일어나는 부분. db를 꺼내오는 녀석과 응답하는 녀석 사이에 연결고리가 service.
      update는 밖에서 요청이 들어옴. 그래서 repo까지 전달해줘야함. 서비스를 활용해서해야함.

      → 지금 배울 녀석
    3. Repo : 가장 안쪽 부분, DB와 맞닿아 있음.

      → 여태 배운 녀석 (Repository, Entity)

  • Update 는 Service 부분에 작성합니다.

  • Lombok 소개

    👉 코드 절약하기! Lombok(이하 롬복)은, 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메소드/생성자 등을 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리입니다.
  • DTO

    👉 테이블을 막 건드려도 될까? = read, update할 때 Course 클래스를 막 써도 될까? = 내가 아닌 다른 사람이 변경이라도 한다면?? 😱 완충재로 활용하는 것이 DTO(Data Transfer Object)입니다.
  • API

    👉 클라이언트 - 서버 간의 약속입니다. 클라이언트가 정한대로 서버에게 요청(Request)을 보내면, 서버가 요구사항을 처리하여 응답(Response)을 반환합니다.
  • REST

    👉 REST란, 주소에 명사, 요청 방식에 동사를 사용함으로써 의도를 명확히 드러냄을 의미합니다.
  • 여기에 쓰이는 동사는 우리가 JPA 시간에 배운 CRUD를 지칭합니다.

  • 즉 A에 대해 생성(POST)/조회(GET)/수정(PUT)/삭제(DELETE) 요청을 하는 것이죠.

  • 예시

    • GET /courses
      → 강의 전체 목록 조회 요청
    • GET /courses/1
      → ID가 1번인 녀석 조회 요청
    • POST /courses
      → 강의 생성 요청
    • PUT /courses/3
      → ID가 3번인 녀석 수정 요청
    • DELETE /courses/2
      → ID 2번인 녀석 삭제 요청

dto 언제썼나? 서비스에서 리포지토리 갈때, 컨트롤러에서 서비스나 리포지토리 갈때, 요청받을 때, 정보를 물고 다닐 때

엊그제까지만 해도 진심으로 포기할까했고 이 과정을 끝까지 하는 것 자체로도 대단하겠다고 생각이 들었다. 끝까지 임했다면 그것만으로 우선 칭찬하고 싶다!
더불어 느리더라도 성장을 했길 바라고 늘은 능력으로 취준 열심히 하고 있길!
2개월 정도 지났는데, 그 전보다 안게 많아졌고 앞으로 남은 2개월도 그럴 거고 그 뒤에도 쭉 그럴거니까 믿고 열심히 해보자 화이팅.

H2 DataBase 연결 에러

  • 해결 : h2 bin에서 ls 하고 sh h2.sh 실행하기.

참고

  • drop all objects
    흔적도 없이 H2 DB 내부 테이블 전부 삭제. FK 로 얽히든 말든 전부다 깔끔히 밀어버린다.

dbc:h2:mem:testdb와 jdbc:h2:~/testdb의 차이

jdbc:h2:mem:testdb
In-memory DB.어플리케이션이 동작할 때에만 존재하는 DB로 DB를 연결하고 닫으면 해당 DB는 사라진다.
jdbc:h2:~/testdb
Local DB. 로컬에서 홈디렉토리에 db를 생성되어 사용된다. 해당 DB는 저장되어 계속 사용할 수 있다.

profile
백엔드 개발자

0개의 댓글