항해99 마지막 프로젝트가 거의 끝나간다. 시간은 가는데 많이 하지 못한 아쉬움과 조급함 등 복합적인 마음 때문에 답답한 마음이 든다.
남은 기간은 더 많은 것을 추가 하기 보다는 why?에 집중해서 내 것으로 만드는 시간을 가지면 좋을 거 같다.
어제 고민한 알람 기능은 우선 간단하게 구현하고 보완해 나갈 생각이다.
When? 화상채팅을 위한 예약을 신청한 경우, 그리고 예약 수락, 거절할 경우 알람을 보낼 생각이다.
How?
1. 예약 신청을 한다.
2. 예약 신청 데이터를 DB에 저장한다. (Redis를 활용할 수도 있다)
3. socket을 통해 예약 받는 유저에게 데이터를 전달한다. (예약 받는 유저가 접속해 있다면 실시간으로 데이터가 전달된다.)
지금 생각으로는 모든 유저가 사이트 접속 시 고유의 userID 방으로 join하게 만들고 그 방으로 데이터를 전달하는 방식으로 구현할까 생각 중이다.
socket 고유 ID를 사용해도 되는데 접속할 때 마다 바뀌기 때문에 관리하기가 쉽지 않을 거 같다.
4. 만약 예약 받는 유저가 접속해 있지 않아 실시간 데이터를 받지 못했다면 로그인 시 알람 데이터를 전달 받는다.(로그인 시 알람 요청을 프론트에서 백으로 보낸다.)
5. 고객이 읽음 처리를 하면 프론트에서 읽음 API 요청을 보내고 DB에 읽음으로 update 혹은 알람 테이블을 새로 만든 경우 데이터를 delete 처리한다.
var secret = {
data: "I am secret"
};
function destroy (stuff) {
stuff = null;
}
destroy(secret);
console.log(secret); // ?
위 코드 결과를 당연하게 null이 나올 것이라 생각했다.
secret에 null값이 재할당 될거라 생각했는데 {data: "I am secret"}이 출력됐다.
함수에 대해 다시 공부했다.
함수가 호출되면 (매개변수가 있을 경우) 함수 몸체 내에서 암묵적으로 매개변수가 생성되고 일반 변수와 마찬가지로 undefined로 초기화된 이후 인수가 순서대로 할당된다.
위 함수에서도 secret이라는 매개변수가 생성되고 암묵적으로 초기화된 후 null을 할당한다. 근데 글로벌에 선언된 secret과 함수 내의 secret은 다른 secret일까?
매개변수는 함수 몸체 내부에서만 참조할 수 있고 함수 몸체 외부에서는 참조할 수 없다. 즉, 매개변수의 스코프는 함수 내부이다.
그렇기 때문에 console.log(secret)에서 secret은 글로벌에 정의 된 secret에만 접근 가능하다.