require -> 해당 파일의 모든 exports 객체의 키 값을 가져온다
let exports = module.exports = {} 의 느낌이어서
exports가 module.exports의 shortcut이 가능한 것
하지만 exports는 module.exports를 참조하기 때문에
객체같은 참조형 자료는 복사하지 못하고
원시형 자료는 가져올 수 있다.
let obj = {}
let obj2 = obj
console.log(obj === obj2) -> true(같은 주소값을 바라본다)
console.log({} === {}) -> false(다른 주소값)
socrative 3번의 경우, require가 두 번 실행됐지만 그렇다고 두 번 참조하는 것이 아님(require.cache개념)
4번과도 연동됨 -> counter === 1 -> counter === 2
cache를 다 참조는 하지만, cache에 같은 내용이 있다면 중복해서 가져오지 않는다(한 번만 가져온다)