내일배움캠프 #17 #Spring 3일차

김한준 Hanjun Kim·2023년 11월 2일
0

내일배움캠프

목록 보기
17/70
post-thumbnail

Spring 입문 3일차!

오늘은 뭔가 헷갈렸던 점들이 많다.

꼭 복습해서 내것으로 만들어야겠다!


학습 정리

데이터를 Client에 반환하는 방법

  • 빠른이동 : ctrl + e
  • 빠른생성 : alt + enter
  • 빠른print : soutv
  • html보다는 Json을 반환을 선호(AJAX 비동기 라이브러리)

    view 파일이 아님, 서버쪽에서는 읽는 방법이 따로 있음

    "{\"name\":\"Robbie\",\"age\":95}"
    -> 서버는 Json을 읽지 못하기 때문에 "Json 형태로 생겼는데 String타입" 인 걸 Client에 반환

  • /json/class 로 반환할 때
    필드의 이름 : Json의 Key
    인자로 들어간 값 : Value
    로 반환해줌

  • RestController : Controller + Response body

  • html을 반환할 때는 view를 반환하고, Json을 반환할 때는 RestController를 달아주면 편하다
    보통은 Json만 반환할 가능성이 높다

Jackson

  • Jackson : Json 데이터 구조를 처리해주는 라이브러리
    Json <-> Object 사이 변환
    Object to JSON : Getter 없으면 직렬화 오류
    JSON to Object : Getter or Setter & 기본 생성자 없으면 역직렬화 오류

Path Variable / Request Param

  • Path Variable : 서버에 보내려는 데이터를 URL 경로에 추가해서 보내는방식 (익숙)
    @PathVariable 붙여주기

  • (중요!) Request Param 방식 (=Query String 방식) : Key, Value 형식으로 ?, &을 달아서 보내주는 방식
    @RequestParam 붙여주기
    하지만
    @RequestParam 생략이 가능하다
    @RequestParam o : required = true가 기본값, 데이터 전송할때 없으면 오류남
    @RequestParam x : required = false로 변경, 오류는 나지 않지만 null로 초기화
    ex) @PathVariable String name, int age

  • Post Request Parma 방식 : form태그 활용, Post 방식 = Get과는 다르게 URL에 붙이지 않고 내부적으로 데이터 전송함

HTTP 데이터를 객체로 처리하는 방법

  • @ModelAttribute : Body 부분에 들어온 QueryString 데이터 방식을 객체에 Mapping해서 가져올 수 있다.
    항상 필드명 일치하는게 중요
    객체로 한번에 받을 수도 있다
    생략 해도 되고, Spring은 simple(int, String, Date 같은 원시타입)이면 Request고, 아니면 Model으로 판단

  • @RequestBody : Body에 Json이 들어오는 경우
    Jaskson이 해줄 수 있지만, RequestBody로 꼭 명시를 해 줘야 한다.

메모장 만들기

  • 주소창에 hello.html 해서 불러왔었는데, 기본 요청을 하면 내부 설정에 의해서 static-index.html이 default값이라 불러와진다

Create, Read, Update, Delete구현하기

  • DTO(Data Transfer Object) : 데이터 전송 및 이동을 위해 생성되는 객체
    Client에서 보내오는 데이터를 객체로 처리할 때 사용된다
    Request할때는 RequestDtoResponse는 ResponseDto 클래스를 만들어서 처리 할 예정
    굳이 구분 하는 이유는 데이터베이스랑 소통하는 클래스는 조심히 다뤄야 해서

조금 헷갈리니 다시 보자

DB

  • RDBMS : Relational(관계형) DBMS
    테이블간 FK(Foreign Key)를 통해 다른 데이터와 조합해서 함께 볼 수 있다

SQL

  • RDBMS에서 사용되는 언어
    DDL : Data Definition Language, CREATE / ALTER / DROP / TRUNCATE
    DCL : Data Control Language, GRANT 와 REVOKE
    DML : Data Manipulation Language, INSERT / SELECT / UPDATE / DELETE

JDBC

  • Java DataBase Connectivity
    어플리케이션 서버와 데이터베이스 소통 방법
    = 표준 인터페이스

  • 그림추가 +

  • INSERT문에서 VALUE가 ? : 들어올때마다 다르게 동적으로 처리되어야하니까
    그 다음 setString으로 설정해줌
    jdbcTemplate.update로 CRUD 다 함
    SELECT는 query

  • ORM 이 등장해서 이런 복잡한 코드 쓰이지 않는다

  • RDBMS 데이터 테이블에서
    id column 하나는 memo 자바 객체 클래스에서 field 하나랑 매칭이 되는거고
    username은 이름
    테이블에서 한 줄, 데이터 한 줄은 memo 객체 하나랑 매칭이 된다


코드 정리한것(보고 이해하기)

https://github.com/wkdehf217/Memo


1주차 숙제 SQL

CREATE TABLE IF NOT EXISTS MANAGER
(
id bigint primary key,
name varchar(100) not null,
student_code varchar(100),
foreign key(student_code) references student(student_code)
);

ALTER TABLE MANAGER ADD CONSTRAINT manager_fk_student_code FOREIGN KEY(student_code) REFERENCES STUDENT(student_code);

//

ALTER TABLE MANAGER MODIFY id INT NOT NULL AUTO_INCREMENT;

//

INSERT INTO MANAGER(name,student_code) VALUES('managerA','s1');
INSERT INTO MANAGER(name,student_code) VALUES('managerA','s2');
INSERT INTO MANAGER(name,student_code) VALUES('managerA','s3');
INSERT INTO MANAGER(name,student_code) VALUES('managerA','s4');
INSERT INTO MANAGER(name,student_code) VALUES('managerA','s5');

INSERT INTO MANAGER(name,student_code) VALUES('managerB','s6');
INSERT INTO MANAGER(name,student_code) VALUES('managerB','s7');
INSERT INTO MANAGER(name,student_code) VALUES('managerB','s8');
INSERT INTO MANAGER(name,student_code) VALUES('managerB','s9');

//

SELECT s.name, e.exam_seq, e.score FROM EXAM e INNER JOIN STUDENT s
ON e.student_code = s.student_code
INNER JOIN MANAGER m ON s.student_code = m.student_code WHERE m.name = 'managerA';

//

ALTER TABLE EXAM DROP foreign key exam_fk_student_code;
ALTER TABLE MANAGER DROP foreign key manager_fk_student_code;
ALTER TABLE EXAM ADD FOREIGN KEY (student_code) REFERENCES STUDENT (student_code) ON DELETE CASCADE;
ALTER TABLE MANAGER ADD FOREIGN KEY (student_code) REFERENCES STUDENT (student_code) ON DELETE CASCADE;

DELETE FROM STUDENT WHERE student_code = 's1';


챌린지반 1일차

  • 서버에서 하는건 <텍스트 그림 영상 음성 메타버스(가상공간)>

  • 벡엔드 로드맵..
    ~를 만들겠어 -> 거기에 해당하는 기술만 공부
    단, Java, Spring, web(HTTP 요청 / 응답), DB는 기본

    엄청나게 빠른 속도로 데이터를 조회해서 가져오는것 : Caching

  • 실력자 커트라인
    ex)당근마켓
    -> 당근마켓을 내가 직접 만들어보기
    -> 실제로 그걸 만들었다? = 실력적 커트라인 (?)

profile
개발이 하고싶은 개발지망생

0개의 댓글