2주차

허현진·2021년 8월 13일
0

Spring

목록 보기
2/4

@ : annotation
--> 스프링한테 이런 역할이 있다고 알려줌

2-1 이번주 배울 것

  • API : 각 용도의 맞게 요구를 하면 돌려주는 창구(서버와 클라이언트 간의 약속)

  • DB : MySQL, H2은 SQL언어로 작동

  • JPA : 자바를 위한 번역기. 즉, 스프링은 자바로 작동하고, 데이터베이스는 SQL로 작동하므로 그 사이를 연결해줌
    - Repository : JPA를 작동시키는 매개체

  • DTO : 데이터를 주고 받는 방법 (class entity그대로 사용 안함)

  • Lombok : 코드 절약 기능

2-2 RDBMS

  • 성능/관리 면에서 고도화된 엑셀
  • 틀이 정해져 있음
  • MySQL, PostgreSQL, Oracle Database,H2
  • H2 : In-memory DB --> 서버가 작동하는 동안에만 내용 저장하고, 서버가 작동을 멈추면 데이터가 삭제되는 데이터베이스(개발 연습용)

-H2웹콘솔 설정 : resource->application.properties

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:testdb 복붙

--> 서버키고 브라우저에 localhost:8080/h2-console 치면 h2 웹페이지에서 확인 가능

2-3 SQL 연습하기

  • RDBMS : 고도화된 엑셀
    테이블 - 행과 열로 존재, 한줄 - 데이터

    테이블 생성하기

CREATE TABLE IF NOT EXISTS courses (
    id bigint(5) NOT NULL AUTO_INCREMENT, 
    title varchar(255) NOT NULL,
    tutor varchar(255) NOT NULL,
    PRIMARY KEY (id)
);
  • courses가 존재하지 않으면 테이블을 만들어라
  • id, title, tutor 를 추가해라
  • NOT NULL : courses는 세개의 열(id,title,tutor)로 구성되어 있는데 어느 하나도 비어서는 안된다
  • bigint : sql상에서 long이라 생각
  • varchar : sql상에서 string
  • PRIMARY KEY (id) : id 는 행(데이터)을 구분하게 해주는 유일한 값
    --> id를 구분할 수 있는 키로 삼겠다 ( title을 지정해도 되지만 중복가능성 높음)
  • AUTO_INCREMENT : id를 자동으로 +1 증가시켜주어라

데이터 삽입

INSERT INTO courses (title, tutor) VALUES
    ('웹개발의 봄, Spring', '남병관'), ('웹개발 종합반', '이범규');
  • INSERT INTO courses : courses에 넣어달라
    -(title, tutor) : 괄호 쌍이 딱딱 맞게 순서대로 데이터를 넣어달라

데이터 조회하기

SELECT * FROM courses;

--> 이러한 명령어들 이제부터 JAVA에서 실행할 거임. 이건 JPA 덕분에 번역 가능

2-4 JPA 시작하기

  • JPA : JAVA를 이용해서 데이터를 생성,조회,수정, 삭제할 수 있도록 해주는 번역기

  • MySQL에서 Table은 엑셀 시트 한개, SQL은 조회해오는 기능

  • Spring에서 Domain(entity)가 Table과 1:1대응 , Repository가 SQL과 1:1대응
    --> Table = Domain , SQL = Repository

  • com.sparta.week02밑에 domian패키지 폴더 안에 Course class, CourseRepository interface생성

  • Interface : JPA를 사용하는 방법. interface를 통해서 jpa사용 가능
    --> class에서 멤버가 빠진, 메소드 모음집

    2-6 생성일자, 수정일자

  • DB 관리에 있어서 생성일자, 수정일자 옵션 추가하는 건 기본적임!!
    --> Timestamped

    2-7 JPA 심화

  • CRUD : 정보관리의 기본 기능
    --> 생성,조회,변경,삭제

    creat & read

    repository.save(new Course("프론트엔드의 꽃, 리액트", "임민영"));

    Course course = repository.findById(2L).orElseThrow( //orElseThrow : 해당 id가 없을 경우
    () -> new IllegalArgumentException("해당 아이디가 존재하지 않습니다.")

update,delete하기 전에 service먼저 알아야 함

스프링의 구조
1. Controller : 가장 바깥, 요청/응답 처리
--> 자동 응답기
2. Service : 중간, 실제 중요한 작동
--> 업데이트 쓰는 용도
3. Repo : 가장 안쪽, DB와 맞닿아 있음
(ex. Repository, Entity)
--> 직접 쿼리를 날림

--> Controller와 Repo사이의 연결고리 : CourseService(update)

2-8 Lombok, DTO

  • Lombok : 자바 프로젝트를 진행하는데 거의 필수적으로 필요한 메서드를 자동생성해줌으로써 코드를 절약할 수 있도록 도와주는 라이브러리
    ctrl+alt+s --> compiler --> Annotation Processors --> Enable annotaion 체크
    shift2번 --> actions -> plugins --> lombok설치
    ex) @Getter , @NoArgsConstructor
    ex) final CourseRepository courseRepository로 꼭 필요한 멤버 변수 선언 휘에, @RequiredArgsConstructor lombok선언해주면 따로 생성자 선언 해주지 않아도 됨.
    ** final을 써주어야 ReqiredArgsConstructor적용

  • DTO : data transfer object
    --> 계층간 데이터를 주고받을 때는 기존의 class를 사용하지 말고 새로운 class를 만들어서 사용하자
    --> update함수를 쓸때
    --> course class를 직접 사용하는 경우는 저장할때, 값을 찾아서 넘겨줄 때 사용하는 것이 알맞음. 변경할 때는 course class를 사용할 때 적절하지 않음
    public Long update(Long id, Course course) 이런 형식으로 id랑 Course class를 이용하였는데 class를 이용해서 변경하는거 좋지 않다.(db가 변경되는 것이기 때문)
    ex)

  • service에서 repository로 갈때

  • Controller에서 service나 repository로 갈 때,

  • 요청을 받을 때

  • 정보를 물고 다닐 때

    2-9 API-GET

  • API : 클라이언트-서버 간의 약속
    --> 클라이언트가 정한대로 서버에게 요청(Request)을 보내면
    --> 서버가 요구사항을 처리하여 응답(Response)반환

  • REST : 주소에 명사, 요청방식에 동사를 사용함으로써 의도를 명확히 드러냄
    (restcontroller랑은 아무 관련 없음, 주소와 관련된 rest)
    여기서 동사는 JPA에서 배운 CRUD를 의미
    (생성:POST,조회:GET,수정:PUT,삭제:DELETE)
    *주소에 들어가는 명사들은 복수형 사용 (/courses)

  • API를 만든다는 것 = 요청에 응답하는 것을 만드는 것, 요청에 응답하는 자동응답기는 Controller!!

  • 일단 우리는 응답을 json형식으로 만들거기때문에 restController를 만들 것임.

  • ARC(Advanced REST Client) : API를 만들고 나서 테스트 및 기능 확인을 할 수 있게 해주는 툴

2-10 API-POST,PUT-DELETE

POST요청 방법 : 일단 데이터를 전달해주어야함.
(여기는 형식적, 외워야함)

ARC 구성 설명
HEADERS - 요청할때 정보를 같이 보낸다

HEADERS -> Header name : Content-Type
Parameter values : application/json

BODY - 생성할 데이터 전달
json으로 작성

{
"title":"앱개발 종합반",
"tutor":"김건희"
}

summary

https://www.notion.so/teamsparta/Spring-2-58046d5633454406b67905630ab7bc72

profile
코딩일지..

0개의 댓글