
매우 부끄러운 하루였다..
복습
function fn (f1, params) {
return f1(params)
}
--------------------
fn(n => n * n, 11)
--------------------
==>121
JS도 GC가 존재해서 사용하지 않는 메모리는 알아서 해제해준다.
function createCounter() {
let count = 0; // count는 createCounter 내부 클로저로 유지됨
return function () {
count += 1;
return count;
};
}
const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2
→ 이 경우엔 GC가 변수와 함수를 해제하지 못한다. (메모리 누수 발생)
_ 를 붙이고 변수를 만들면 private 접근자
갱신을 눌렀을 때는 이미 스프링에서는 벗어났기 때문에 JS를 통해 바꿔줘야한다
→ 그래서 비동기 통신이 필요함
fetch ('http://localhost:8080/ticket')
.then (resp => {return resp.json();})
.then( data => {
console.log("DATA!")
console.log(data)
})
.catch ( err => console.log(err));
js는 HTML을 트리구조로 보기 때문에 DOM 형태로 가져올 수 있음
*document*.getElementById();
→ 노드를 가져온다.
→가지고 오고 싶은 요소의 id를 넣어주면 됨
fetch ('http://localhost:8080/ticket')
.then (resp => {return resp.json();})
.then( data => {
console.log(data.name)
document.getElementById('ticket-name').value = data.name;
})
.catch ();
document.getElementById('ticket-name').value 의 value는 <input value=""> 를 가져오는것임method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data)
stringify로컬 스토리지: 브라우저에만 저장되는 저장소 → devtools에서 확인 가능
*window*.localStorage.setItem(*SEQUENCE_KEY*, 0);를 통해 값을 겨져옴
꼼수(?)
unction validate() {
if (getSequence() === 0) {
alert('게시글을 먼저 작성해주시기 바랍니다.');
return false;
}
return true;
SEQUENCE_KEY 값을 가져와서 0이면 빠꾸if( !validate() ){
return;
}
혼자 테스트할 때 content값이 안들어가는 문제가 계속 있었는데
코드에서 어디는 content라고 쓰고 어디는 contents라고 써서 그런거였다
→ 성공!
Java 애플리케이션에서 DB에 접근하기 위한 인터페이스를 표준화해서 제공(명세)
Driver가 커넥션이 되어 연결
→ 쿼리가 가능
DB는 언제나 변경될 수 있는데 Java애플리케이션이 SQL 의존적이면, 엔티티가 변경되었을 때 전체 애플리케이션에 큰 문제가 생길 수 있음 (신뢰 불가능)
모델링이 → 스키마를 따라가게 된다 → 상속, 다형성 등 객체지향의 장점
위와같은 문제를 해결하기 위해 생겨난 기술
SPring은 Java Persistence API 표준으로 ORM을 제공한다.
❗️운영에서 스키마는 직접 짜는게 좋다.
표준 SQL을 두고 각 DB의 SQL 문법을 방언으로 취급
어떤 DB를 사용하는지 등록하면 그 DB에 맞게 SQL을 대신 만들어준다.
JPA를 구현한 구현체
XML
컴퓨터 시스템간 정보교환을 위해 만들어놓은 마크업 언어
영속성 단위에는 DB 접속 정보를 준다.
Spring 애플리케이션의 엔티티 객체의 생명주기를 관리