Coding (164)

07
05

누르면 tp-link 홈페이지로 이동합니다.

1. 문제의 발단

  • 원래 있던 공유기와 거리가 멀어 방에서 와이파이가 잘 잡히지 않았다.
  • 안 쓰고 있던 공유기를 하나 받아와서 연결하기로 했다.

2. 어떻게 하는가

  1. 컴퓨터를 하나 준비한다. 혹은, 휴대폰도 상관없다. 하지만 확실히 컴퓨터가 편하다.
  2. 모든 인터넷을 끊고, 준비한 공유기( tp-link archer c60 모델을 사용했다. )와 연결한다.
    • 공유기의 전원을 넣고, 렌선을 Ethernte( 색이 혼자만 다른 부분인 internet 부분이 아니다. )에 꽂고 인터넷이 안 되는 기기에 연결한다. 휴대폰이라면 와이파이를 잡으면 된다.
  3. 공유기의 설정을 맞춰주기 위해 초기화 시킨다. 샤프 같은 걸로 작은 버튼을 5초에서 10초간 누르면 LED가 깜박이면 버튼을 땐다.
  4. 인터넷 창을 켜고 http://192.168.0.1/ (혹은, http://tplinkwifi.net/)을 주소창에 입력해 관리자 설정창으로 간다.
  5. 아이디는 초기설정은 admin 그리고 비밀번호는 admin 혹은 공유기 뒤에 pin 번호가 적혀있다.
  6. 무선 설정에서 네트워크 이름을 원하는 것으로 바꾼다. 5G 도 같이 설정한다.
  7. 네트워크 => LAN => IP 주소의 마지막 숫자를 기억할 수 있는 것으로 바꿔준다. ( 3자리 숫자까지 가능하다. )
    • IP 주소가 원래 사용하던 공유기와 같으면 충돌이 일어난다.
  8. 다시 바꿔준 주소를 입력해 관리자 설정창으로 다시 간다.
  9. 고급 => 설정에 가서 조금 스크롤을 내리면 WDS 설정이 있다. 켜서 원래 사용하던 와이파이를 선택해 준다.
  10. 마지막으로 DHCP 설정에 가서 DHCP 사용을 중지한 후 저장하고 오른쪽 위에 재시작을 눌러준다.
    • DHCP는 원래 사용하던 공유기를 가져와서 사용하기 때문에 지금 설정할 공유기에는 필요가 없다. 이 과정을 마지막에 해 주는 것을 권장한다. 중간에 하면 설정창 접속이 끊긴다.
IP TIME 설정과 조금 다른 설정창을 가지고 있어서 올바르게 설정하는데 시간이 꽤 걸렸다. 하지만 결국, 원리는 같다.
잘 읽어보고 하면 모든 공유기에 연결을 할 수있다.
참고한 동영상을 아래에 남겨놓겠다. 설명이 부족하다면 참고하면 좋다. 비록 영어도 아닌 알 수 없는 언어로 설명하고 있지만 충분히 도움이 될 것이라고 예상된다.
만약 너무 어렵다면, 휴대폰으로 TP-Link Teher 애플리케이션을 마켓에서 다운로드하여서 설정을 하면 조금 더 직관적이다.
그래도 모르겠다면 댓글에 남겨 주시면 답변을 드리도록 노력해 보겠습니다.
https://www.youtube.com/watch?v=lQx1OtvVpzc

 

'Coding > How to Fix' 카테고리의 다른 글

oh-my-zsh Update Error  (0) 2022.01.18
mysql의 sql 파일이 실행이 안될때  (0) 2021.08.27
우분투 20.04 블루투스 연결 문제 공략집  (0) 2021.06.29
COMMENT
 
07
04

1. printKeyValue

  • 객체를 입력받아  string 타입으로 key: value의 형식으로 리턴한다.
  • 각 키와 값의 사이에 줄바꿈으로 다른 요소라는 것을 표시한다.
function printKeyValue(obj) {
  let result = ''; // string 타입으로 리턴해야 하기 때문에 빈 스트링을 만든다.
  for(let key in obj) { // for...in 으로 객체를 돌면서 key 값을 구한다.
    result = result + `${[key]}: ${obj[key]}\n` // 벡틱을 이용해 한줄에 알맞은 요소를 넣고 result에 쌓는다.
  }
  return result; // 완성된 result를 리턴한다.
}
  • 줄 바꿈은 '\n' 이다.
  • 만약, Object.keys(obj)를 사용한다면, 모든 키를 받아 버리기 때문에 키 하나하나씩을 선택할 수 없게 된다.

2. arrayInSameKey

  • 배열과 객체를 받아, 배열의 요소가 객체의 키와 같을경우 새로운 객체 안에 넣어서 리턴한다.
  • 같지 않은 요소는 무시한다.
function arrayInSameKey(arr, obj) {
  let result = {}; // 빈 객체를 만든다.
  for(let key in obj) { // 반복문으로 객체안의 Key를 추출한다.
    for(let i = 0; i < arr.length; i++) { // arr를 하나씩 확인하면서,
      if(key === arr[i]) { // 키와 같은 데이터가 있는지 검색한다.
        result[key] = obj[key] // 같은 데이터를 result안에 같은 키와 값은 obj[key]에서 가져와 할당한다.
      }
    }
  }
  return result; // 완성된 객체를 리턴한다.
}
  • 이중반복문이 복잡하다고 생각하고, 쓰지 않고 어떻게든 풀어보려고 했지만 이것이 가장 간단한 방법으로 보인다.
  • 리펙토링도 좋지만, 일단 알고 있는 답을 애써 무시하고 처음부터 다른 방법으로 찾으려 하는 것 보다, 일단, 알고 있는 방식으로 답을 작성 해 놓고 이후, 리펙토링을 통해 코드를 정리할 생각을 해야한다.
COMMENT
 
07
02

1. Spread 및 Rest를 객체에서 사용하기

  • spread는 배열을 그대로 복사하거나, 합치고 객체에서도 사용이 가능하다.
let obj1 = { foo: 'bar', x: 42 };
let obj2 = { foo: 'baz', y: 13 };

let clonedObj = { ...obj1 }; // obj1의 키와 값이 그대로 복사가 된다.
let mergedObj = { ...obj1, ...obj2 }; // obj1과 obj2의 같은 이름의 키인 'foo'가 있으므로 이후에 온 obj2의 foo로 다시 할당된다.
console.log(clonedObj) // {foo: "bar", x: 42}
console.log(mergedObj) // {foo: "baz", x: 42, y: 13} 이때,겹치지 않는 키는 그대로 추가된다.
  • 함수에서도 사용이 가능하다. 주로, 파라미터들을 가져오는 데 사용한다. slice와 같이 원하는 부분을 잘라서 가져올 수 있다.
function myFun(a, b, ...manyMoreArgs) {
  console.log("a", a); // 'a', one
  console.log("b", b); // 'b, two
  console.log("manyMoreArgs", manyMoreArgs); // 'manyMoreArgs', ["three", "four", "five", "six"]
}

myFun("one", "two", "three", "four", "five", "six");
  • Spread 나 Rest는 변동이 있을 수 있는 파라미터를 가진 함수나, 배열에 주로 사용하기 편하다. 아무리 추가, 삭제가 일어나도 그대로 배열을 가지고 올 수 있기 때문이다. 그 이후  sort와 같은 메서드를 이용하기도 매우 유용하다. 변화가 있더라도 변화된 그대로 다음 메서드를 실행시켜 줄 수 있다.

2. 구조 분해 할당

  • 구조 분해 할당은 Spread를 사용한 후, 값을 해체한 뒤에 다시 변수로 할당해 준다.
function f(...[a, b, c]) {
  return a + b + c;
}

f(1)          // NaN (b 와 c 는 undefined)
f(1, 2, 3)    // 6
f(1, 2, 3, 4) // 6 (4번 째 파라미터는 해체되지 않음)
  • 마찬가지로 객체에서도 사용이 가능하다.
const {a, b, ...rest} = {a: 10, b: 20, c: 30, d: 40}
console.log(a) // 10
console.log(b) // 20
console.log(rest) // {c: 30, d: 40} // 위의 a, b는 값을 리턴하지만, spread로 다시 할당하면 모든 키와 값을 다 가져온다.
  • 객체에서의 구조 분해 할당은 꼭 선언과 함께 해야 한다. 아닐 경우 다른 문법으로 잘 못 읽을 수 있다.
  • 함수에서의 객체 분해를 이용할 수 있다.
function whois({displayName: displayName, fullName: {firstName: name}}){
  console.log(displayName + " is " + name);
}

let user = {
  id: 42,
  displayName: "jdoe", // 위의 whois 함수에서 displayName의 값이 그대로이기 때문에 jdoe을 리턴.
  fullName: {
      firstName: "John", // fullName의 값이 구조 분해 할당으로 firstName을 name을 선언하여 할당하고 있다.
      lastName: "Doe"
  }
};

whois(user) // 결국, displayName은 그대로 "jdoe", name은 firstName이 할당 되어 있으니, "John"
// jdoe is John

 

COMMENT
 
07
01

1. 클로저

  • 함수가 함수를 리턴하는 형태의 함수.
  • 클로저의 맹점은 함수가 2개가 있는 형태에 있다. 외부의 함수에 변수를 설정하면, 내부의 함수에는 영향을 준다.
    이때, 내부 함수도 외부 함수에 선언된 변수를 가져와 쓸 수 있게 된다.
  • 예시를 보자.
const sum = x => y => x + y; // 화살표 함수로 외부 함수와 내부함수를 만들고, 내부함수의 x와 내부함수의 y 를 더해주는 함수를 만들었다.
const sum3 = sum(3) // sum3을 선언해 먼저 sum에 x에 3을 넣어 준다.
sum3(2) // 5 
// 이후, sum3의 y를 2로 넣어주면, 위에 할당된 x = 3 덕분에 2가 더해진 5가 리턴된다.
sum3(5) // 8 
// 마찬가지로 위에 할당된 x = 3 덕분에 8이 리턴된다.
  • 이처럼, 외부함수에 선언된 변수를 계속 사용할 수 있다.
  • 클로저의 진정한 재사용성의 끝판왕은 아래의 예시로 볼 수 있다.
const count = () => {
    let value = 0; // value를 초기값을 0 으로 준다.

    return { // count 함수에 키로 데이터를 조작할 함수들을 만든다.
        plus: () => { 
            value = value + 1
        },
        minus: () => {
            value = value - 1
        },
        getValue: () => value
    }
}

const counter1 = count(); // 첫번째 계산할 데이터를 준다.
counter1.plus(); // vlaue === 1
counter1.plus(); // vlaue === 2
counter1.plus(); // vlaue === 3
counter1.getValue(); // vlaue === 3 리턴.

const counter2 = count(); // 두번째 계산할 데이터를 준다.
counter.plus(); // vlaue === 1
counter.minus(); // vlaue === 0
counter.plus(); // vlaue === 1
counter.getValue(); // vlaue === 1 리턴.
  • 이러한 것을 '클로저 모듈 패턴'이라고 한다.
  • 어떠한 수를 입력 받더라도, 외부 함수에서 정해준 변수를 계속 가져와 사용하기 때문에 가능하다!

2. 덤으로 보는 간단한 스코프

  • 우리가 생각하는 그 스코프가 맞다. 영향을 주는 범위이다.
  • 위의 클로저가 이미 스코프의 원리로 동작하기 때문에 모르면 사용할 수 없다.
  • 가장 중요한 포인트는, 선언된 변수는 한 변수 안에서만 사용 가능하다.
  • 하지만, 바깥쪽에서 선언된 변수는 안쪽 스코프가 또 있다면 사용이 가능하다.
  • 스코프가 중첩이 가능하다고 생각하면 쉽다.

이때가지 배운 것들이 모두 딱딱 맞아 들어가는 느낌이다.
이제 무작정 사용하던 것에서 원리를 알고, 설명까지도 할 수 있을 정도의 단계가 되어 가고 있다.
활용과 응용을 더 연습해서 완전히 내 것으로 만들면 완벽하다!

COMMENT