전체 글 48

심화 프로젝트 (2)

심화프로젝트 진행하던 중 발생한 트러블 슈팅 정리1. 테스트 위해 게임을 실행하던 중 tower구입 이벤트를 실행하면인스턴스 안에 존재하는 메서드를 읽지 못하는 오류가 발생했다.분명 클래스 내에 선언되었는데 왜 읽지 못할까 생각을 했고 this.buyTowerButton.addEventListener('click', this.placeNewTower);이 부분이 문제인 것 같다. placeNewTower함수내에 getRandomPositionNearPath라는 함수가경로 근처에 좌표를 랜덤 생성하는 함수가 있는데버튼 클릭하고 콜백함수 실행 시 함수 내부의 또 함수가 있는데 여기서 문제가 발생한 듯찾아보니 this바인딩을 해줘야 내부 함수에서도 동작을 할 수 있다 해서this.buyTowerButton.a..

카테고리 없음 2024.07.18

심화 프로젝트 (1)

팀원분들과 타워 디펜스 게임 멀티서버 프로젝트를 하면서맡은 기능을 구현하던 중트러블 슈팅클라이언트에서 일단 랜덤생성된 x, y좌표를 타워 인스턴스를 생성하는 부분이 있는데여기서 생성된 타워 인스턴스를 그대로 서버로 socket.emit을 했다.서버에서 처리 후 클라이언트로 다시 반환해 온 이 타워 인스턴스를draw메서드(class 내부 메서드)를 사용해 웹 브라우저에 타워를그리도록 구현을 했는데 분명 class내에 draw함수가 있어서해당 타워를 그릴 수가 있어야 하는데 자꾸 draw를 인식 못하는 문제가 발생했었다.(당시 에러코드, 사진을 안 찍어둠)해결과정그래서 어디서 변형이 된 건지 전송과정부터 하나하나 콘솔 찍어봤는데클라에서 생성된 타워 인스턴스랑 서버에서 반환되어 온 타워 인스턴스가달라진 것을 ..

카테고리 없음 2024.07.17

메모리

메모리란RAM이라고 불리며Random Access Memory의 약자이다사용자가 자유롭게 내용을 읽고 쓰고 지울 수 있는 기억장치이다.컴퓨터가 켜지는 순간부터 CPU는 연산을 하고 동작에 필요한 모든 내용이 전원이 유지되는 내내 이 기억장치에 저장된다. 주기억장치로 분류되며 램이 많으면 한 번에 많은 일을 할 수 있기에책상이라고 비유되기도 한다.램을 많이 확보하면 하드드라이브에 기록되는 것과 달리 거의 실시간으로더 많은 데이터를 액세스하고 읽을 수 있다. RAM이 중요한 이유시스템의 속도와 성능은 설치된 램의 용량과 직접적으로 관련이 있다.램이 충분하지 않으면 멀티태스킹이나 여러 개의 프로그램을 실행하거나 앱을 열어둘 때 속도가 느려질 수 있다.보통 컴퓨터하다가 여러개의 창이 열려있는데 이것들이 바뀌는 ..

카테고리 없음 2024.07.10

CPU

CPU란?중앙처리장치인 CPU는 서버의 핵심 계산 장치인 하드웨어 구성요소이다 기억, 해석, 연산, 제어 4대 주요 기능을 관할하는 장치 서버 및 기타 서비스 장치가 데이터를 디지털 신호로 변환하고 이를 수학적 연산을 한다면 CPU는 신호를 처리하고 컴퓨팅을 가능하게 하는 기본 구성요소 모든 컴퓨팅 장치의 두뇌라고 할 수 있다메모리에서 명령을 가져와서 필요한 작업을 수행하고 출력을 다시 메모리로 보낸다 운영 체제 및 애플리케이션을 실행하는데 필요한 모든 컴퓨팅 작업을 처리처리할 명령어를 저장하는 역할을 하는 프로세서 레지스터 비교, 판단, 연산을 담당하는 산술논리 연산장치(ALU) 명령어의 해석과 올바른 실행을 위해 CPU를 내부적으로 제어하는 제어부와 내부버스 등이 있다프로세서 레지스터프로세서에 위치한..

카테고리 없음 2024.07.08

오버로딩 오버라이딩

오버로딩 이름이 같아도 매개변수 개수,타입, 순서를 다르게 해서 여러개의 함수를 같은 이름으로 정의 할 수 있음 예를들어 같은 함수의 이름이라도 매개변수의 타입이 (int a, int b), (dobble a, dobble b) 이렇게 매개변수의 개수는 같아도 타입이 다르면 사용할 수 있다 또 (int a, int b) (int a, int b, int c)처럼 매개변수의 개수가 달라도 같은 이름의 함수를 사용할 수 있다 마지막으로 같은 매개변수인데 순서를 변경해서도 정의할 수 있다 (int a, string b) (string a, int b) 만약 내가 함수명(int a, string b)이렇게 호출했다고 하자 함수는 오버로딩으로 함수명(int a, string b)이 정의되어있고 함수명(string..

카테고리 없음 2024.07.04

삼각함수, 역삼각함수

직각삼각형에서 밑변과 높이와 빗변의 관계에 따라 삼각비에 이름으로 사인, 코사인, 탄젠트로 나타냈다사인은 높이를 빗변으로 나눈 값, 코사인은 밑변을 빗변으로 나눈 값 탄젠트는 높이를 밋변으로 나눈 값을 의미한다처음 배울때는 각의 세타값을 최대 90으로 배웠는데 좀 더 확장해보도록 하자  좌표평면에서 각 세타를 나타내는 동경과 중심이 원점이고 반지름의 길이가 r인 원의 교점의 좌표를 x,y라고 한다면세타의 값이 하나 정해지면 다음 세 값도 각각 정해진다 세타의 값이 하나 정해짐에 따라 세 값도 하나씩 정해지므로 세 가지의 함수를 생각해 볼 수있다이때 세가지 함수는 삼각비를 가지고 있기 때문에 이들을 삼각함수라고 부른다위 그림은 x,y값이 모두 양수인 상태라 세타값이 90을 넘어가지 않는데이제 원의 형태로 ..

카테고리 없음 2024.07.01

모의면접 준비

면접 출제 문제 대비간략한 정리1. OSI 7 계층에 대해 간략히 설명해 주세요.OSI 7 계층은 네트워크 통신이 일어나는 과정을 7계층으로 나눈 국제표준모델 물리계층  01001의 데이터를 전기적 신호로 변환데이터링크계층  mac주소 설정 ip는 집주소 같은 느낌이면 mac주소는 컴퓨터의 주민번호 같은 느낌  만약 ip가 바뀌어도 해당 컴퓨터에 제대로 연결되고 전송된 야하기 때문에 mac주소를 부여  동일한 네트워크 안에서 오류제어 흐름제어네트워크계층  컴퓨터들끼리는 라우터로 연결되어 있는데 인터넷을 사용하여 다른 컴퓨터에 연결하고 데이터를 전송하려면 라우터를 통해 연결해야 한다  데이터를 전송하려는 컴퓨터의 ip주소를 알고 있어야 하고 라우터로 경로를 설정해서 전송한다 전송계층  데이터를 쪼개고 순번..

카테고리 없음 2024.06.28

TCP와 UDP

TCP란?인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜이다.TCP는 ip와 함께 사용하는데 IP가 데이터를 배달한다면 패킷을 추적 및 관리를 한다TCP는 연결형 서비스를 지원하며 인터넷 환경에서 기본으로 사용한다.TCP의 특징연결지향 방식으로 패킷 교환 방식을 사용한다.3-way-handshake과정을 통해 연결을 설정하고 4-way-handshake과정을 통해 해제한다흐름 제어 및 혼잡 제어높은 신뢰성UDP보다 속도가 느림전이중,점대점 방식TCP는 패킷 전송을 위해 논리적 경로를 배정한다. 3-way-handshake는 목적지와 수신지를 확실히 하여 정확한 전송을 보장하기 위해 사용한다..TCP는 연결형 서비스로 신뢰성을 보장하기 때문에 데이터의 흐름제어나 혼잡제어같은..

카테고리 없음 2024.06.28

EC2 배포하기

과제제출 때마다 EC2 배포를 하려는데자꾸 까먹어서 블로그에 적어놔야겠다. 1. 먼저 github에 완성한 코드를 새 레퍼지토리에 push 한다. 2. AWS 로그인 후 EC2 인스턴스 시작한다. 3. 사용할 운영체제(현재 우분투)를 정하고 현재 계정은 프리티어 상태이기 때문에 프리티어 사용가능한 것들로 설정한다. 4. 키 페어를 지정하는데 기존에 있는 키페어를 사용해도 되고 새로운 키페어를 생성해도 된다.  키페어 지정 5. 설정 완료 후 해당 인스턴스가 실행 중이 되는데 설정에 보안/보안그룹에 들어가서 서버오픈한 포트가현재 방화벽에 막혀있기 때문에 해당 포트를 인바운드 규칙 편집으로 추가한다. 소스는 사용자 지정으로 하면 누구나 해당 서버에 접근할 수 있다. 6. 인스턴스를 시작하면 지정한 키페어가(..

카테고리 없음 2024.06.17

샤딩

샤딩이란?데이터베이스를 물리적을 쪼개는 기술이다.여러 데이터베이스를 관리하는 기술인데게임서버에 CCU가 증가하게 되면 샤딩을 사용해 커넥션을 늘릴 수 있다.또 독립적으로 사용하기 때문에 요청을 병렬적으로 처리할 수 있다.독립적으로 작동하기 때문에 한 샤드에 문제가 생기더라도 그 샤드의 속한 유저를 제외하고나머지 유저들은 정상적으로 유지할 수 있다. 수평적 샤드 기준으로 어떻게 데이터를 분할하냐면const sharNo = playerId % NUM_OF_SHARDS플레이어 ID가 1,5,9이면 1번째 샤드4,8,12이면 2번째 샤드로 저장되는 원리이다 해시 함수보통 비밀번호에 사용하는데 bcrypt로 사용해 봤을 텐데bcrypt는 특정 입력값을 항상 동일한 해시값으로 생성하는 특징을 가지고 있다.일반적인 ..

카테고리 없음 2024.06.13