오늘은 뭔가 헷갈렸던 점들이 많다.
꼭 복습해서 내것으로 만들어야겠다!
데이터를 Client에 반환하는 방법
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
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로 꼭 명시를 해 줘야 한다.
메모장 만들기
Create, Read, Update, Delete구현하기
조금 헷갈리니 다시 보자
DB
SQL
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
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';
서버에서 하는건 <텍스트 그림 영상 음성 메타버스(가상공간)>
벡엔드 로드맵..
~를 만들겠어 -> 거기에 해당하는 기술만 공부
단, Java, Spring, web(HTTP 요청 / 응답), DB는 기본
엄청나게 빠른 속도로 데이터를 조회해서 가져오는것 : Caching
실력자 커트라인
ex)당근마켓
-> 당근마켓을 내가 직접 만들어보기
-> 실제로 그걸 만들었다? = 실력적 커트라인 (?)