HTML , CSS 비교\[HTML] 기초 문법\[CSS] 기초 문법\[CSS] 웹사이트에 구글 폰트 적용하기\[CSS] 부트스트랩 활용공부와 담 쌓고 지내다가 갑자기 하려니 온 몸이 쑤신다.🤮더 늦기전에 열심히 하자!
\[JS] 기초 문법\[JS] DOM \[JS] JQuery 찍먹오늘은 특강이 많아 시간이 삭제된 것 같다. 😃Git 사용법이랑 2주차 관련 정리로 들은게 많은데 게시글 적을 시간이 부족하다..나중에 채워 넣어야겠다.
오늘 뇌속에 적립한 내용\[JS] Fetch\[JS] Firebase 맛보기\[CSS] 클론 코딩오늘은 3일간 공부한 HTML, CSS를 활용하여 구글메인 홈페이지 클론을 만들어보았다.반응형까지 만들 실력이 되지 못해서 모바일이나창크기를 확 줄였을 때 원본사이트와 같게
오늘 뇌속에 적립한 내용\[CSS] 클론코딩 - 마카오CSS를 좀 더 상세하게 공부하기 위해 부트스트랩을 사용하지 않고 카카오맵 클론코딩을 진행했다.아직 실력이 미흡해서 input 창만 부트스트랩을 사용하긴 했지만... 버튼 구현의 경우는 CSS로 하나 하나 그렸다.J
오늘 뇌속에 적립한 내용\[JS] 기초 문법 - 기존에 썼던 것 \[JS] 함수\[JS] 객체, 객체 메소드\[JS] 배열, 배열 메소드오늘은 JS 강좌가 열려서 1주차를 들으며 전에 공부했던 것을 복습했다.왕기초 강의를 들었을때보다 더 심화된 내용을 알려줘 재밌기도
오늘 뇌속에 적립한 내용\[JS] ES6 문법일이 있어서 TIL을 늦게 올려버렸다...위 게시글 외에도 공부한 내용이 조금 있기는 한데, 머릿속에서 정리가 안됐다.내일 복습 한번 더하고 정리해서 게시글 작성해야겠다 😁😁
오늘 뇌속에 적립한 내용\[JS] 함수-일급 객체\[JS] Map\[JS] Set내배캠을 시작한지 한주가 흘렀다.주말은 늦잠도 좀 자고~친구, 후배도 좀 보고~공부 흐름 안 끊기게 살짝 해주고~😎
오늘 뇌속에 적립한 내용\[JS] 데이터 타입 심화\[JS] 실행컨텍스트\[JS] this지금까지 배운 것들 중 제일 머리아팠다..💢함수 스코프나 호이스팅, 실행 컨텍스트 등 이론적으로 접근하니까 코드를 작성할 때 도움이 많이 될 것 같긴 하다.이해는 거의 다 했는데
오늘 뇌속에 적립한 내용\[JS] 콜백함수클래스클로저\~~가 있었지만, 몸상태가 별로 안 좋은 관계로 내일 쓰고 오늘은 일찍 자야겠다.컨디션 관리가 중요한데😥오늘 푹 쉬고 내일부터 컨디션 만땅으로 다시 시작하자.😎
오늘 뇌속에 적립한 내용\[JS] 클래스\[JS] 클로저감기 기운이 돌아서 오전에 집중을 거의 못했다.공부도 공부인데, 몸 관리 필수다 진짜. 😣클래스는 이해하기 쉬우나 클로저 개념 습득이 아직도 애매하다..😂😂강의 몇번 더 들어보고 유튜브나 인프런같은 다른 강의
오늘 뇌속에 적립한 내용오늘은 따로 게시글을 남기지 않았다.좀 쉬어가면서 복습도 하고, 평상시에 궁금했던거나 새로 공부할 것을 계획세우는데 목표를 뒀다.평상시에 공부하던 것 복습 JS 함수, 클래스, 실행컨텍스트컨테이너, 도커, 쿠버네티스 정의에 대해 학습컨테이너 :
오늘 뇌속에 적립한 내용\[JS] 정리변수객체method구조분해할당클로저call, apply, bind클래스지난 1주간 공부한 내용을 정리하며 복습했더니 어느정도 윤곽이 잡힌다.비동기, 함수, 클래스 부분은 조금 더 깊게 복습할 필요성이 있어보인다.😥내일 푹 자고 리
오늘 뇌속에 적립한 내용\[JS] 얕은복사, 깊은복사\[C++] 기본틀, 변수오늘은 주말이라 JS가 아닌 C++을 조금 학습했다.아예 처음은 아니지만 기초부터 차근차근 시간날때마다 학습하려고 한다.C가 진정 상남자의 언어 아닌가 생각해와서 어릴때부터 조금 접했지만 객체
오늘 뇌속에 적립한 내용\[C++] 배열, 구조체\[C++] 포인터와.. 진짜 JS가 쉬운편이라는 것을 한번 더 느끼는 시간이었다..역시 C는 포인터가 꽃인데, 오랜만에 보니 PTSD 왔다.Node.JS로 만든 서버를 C++로 마이그레이션 하려면 갈 길이 멀다.😥😥
오늘 뇌속에 적립한 내용\[JS] 알고리즘 도전반 1일차 예상답안인프런-코드캠프 JS 알고리즘 문제풀이프로그래머스 1~10일차 풀이오.. 이번주부터 알고리즘 공부를 시작했는데 머리가 잘 안돌아간다.많은 문제를 보고 풀어봐야 어느정도 감이 생길듯 싶다.😰😰😰우선 도
오늘 뇌속에 적립한 내용프로그래머스 알고리즘 풀이\[JS] 알고리즘 도전반 1일차 예상답안 수정 및 자세한 풀이\[JS] 알고리즘 도전반 2일차 풀이오늘은 국취제 상담도 다녀오고, 특강도 있고 해서 많은 내용을 하지는 못했다..당분간은 알고리즘만 공부해야할 것 같다.머
오늘 뇌속에 적립한 내용\[JS] 로그라이크 게임과제 발제\[트러블슈팅] CMD 창 한글 깨짐 - JavaScrpt\[JS] 로그라이크 게임과제 - 1일차아직 JS를 완벽히 알지 못하는데.. 개인과제로 로그라이크 게임 제작을 하게 되었다.문제푸는 것 보단 낫지..😁로
오늘 뇌속에 적립한 내용\[JS] 로그라이크 게임과제 - 2일차오늘 하루도 참 보라찼구만... 내일안으로는 끝낼 수 있을 것 같다.많은 기능과 디자인을 신경쓰고 싶지만 Node강의를 빨리 듣고 싶다. 😎😂오늘 구현한 내용이다!아직 덜써서 수정예정
오늘 내 뇌속에 적립한 내용\[JS] 로그라이크 게임과제 - 마무리오늘은 개인과제 마무리 후 제출하였다..아직 시간은 많이 있으나 나중에 다른 공부 하다가 집중 안될때 하나씩 구현하는걸로...server.js를 중점으로 game.js, option.js, achieve
오늘은 과제 처리 겸 서버, 클라이언트는 무엇이고 웹서버와 게임서버의 차이는 무엇이 있는지에대하여 알아보았다.주말엔 C++을 하려고 했는데.. 일정이 있어서 못했다 ㅠㅠ내일은 시간 좀 내서 해야겠다..우리가 원하는 정보를 얻기 위해 학교나 학원에서 수업을 듣죠? 이때
오늘은 어제와 같이 과제 수행 겸 네트워크 및 OSI 7계층에 대하여 알아보는 시간을 가졌다.정리한 내용은 다음과 같다.우리가 OSI 7계층에 대해서 알기 전, 네트워크란 무엇인가에 대하여 봅시다.네트워크란 컴퓨터 또는 기타 기기들이 데이터를 주고 받기 위하여 유선 또
오늘은 알고리즘 문제 풀고, 강의 조금 듣고 전 팀원들이랑 개인과제 리뷰하느라 게시글을 못 썼다.조금이라도 적은 내용이다.풀이방식1점을 득하기 위해서는 4루타가 필요하다.2점을 득하기 위해서는? 8루타라고 생각할 수 있지만 기존 4루타에서 한명이 들어왔고, 1,2,3루
오늘은 알고리즘 코드카타 및 Node.js 입문주차 수업을 진행하였다.깃허브 바로가기간단하게 http에 대하여 정리하고 갑시다.HTTP(HyperText Transfer Protocol)는 웹에서 데이터를 주고받기 위한 프로토콜입니다. 클라이언트(웹 브라우저)와 서버
잠을 제대로 못자서 그런가 집중이 너무 안된다.튜터님의 알고리즘 강의도 정리 해야하고 개인과제 부족한부분 수정도 해야하는데..운동을 안하니까 체력이 떨어지나보다 😰😰 저질체력.오늘의 알고리즘 코드카타 82612. 부족한 금액 계산하기12969. 직사각형 별찍기129
오늘은 국취제 상담이랑 밍글데이 등이 있어 함수 네이밍 기법 관련해서 조금 공부하고 남은 시간에 알고리즘 풀었다.86491. 최소직사각형81301. 숫자 문자열과 영단어68935. 3진법 뒤집기42748. K번째수147355. 크기가 작은 부분문자열131705. 삼총사
불금! 불금! 불금! 불금! 불금! 불금!오늘은 Node.js 강의 도입부와 알고리즘을 학습하였다.오늘 푼 알고리즘 코드카타12901. 2016년132267. 콜라 문제134240. 푸드 파이트 대회138477. 명예의 전당 (1)142086. 가장 가까운 같은 글자1
OSI(Open Systems Interconnection) 7계층 모델은 네트워크 통신을 7단계로 나눈 개념적 프레임워크입니다. 이 모델은 네트워크 시스템 간의 상호 운용성을 촉진하기 위해 개발되었으며, 각 계층은 특정한 네트워크 기능을 담당합니다. 각 계층에 대하여
오늘은 C++ 기본 문법 공부와 알고리즘, CS를 학습하였다. C++ 기본문법의 경우 JS와 비슷하여 따로 게시글을 작성하진 않았다.사실 일요일이라 귀차니즘 ++..😂 오늘 푼 알고리즘 135808. 과일 장수42840. 모의고사다음 글은 데이터링크 관련하여 작성한
오늘은 Node 강의 입문주차 일부를 듣고 실습해보는 시간을 가졌다. 전체적인 흐름은 이해가 되나 보지 않고 코딩할 정도는 아직 먼 것 같다. 오늘 푼 알고리즘 문제 12977. 소수 만들기161989. 덧칠하기HTTP 요청을 받기 위하여 express 라이브러리를 활
오늘은 Node.js 입문주차 강의를 모두 수강하고 알고리즘 코드카타를 진행하였다.에러처리 미들웨어의 경우 어제 작성한 게시글과 비슷하여 따로 작성하지 않았고, 그 외 강의 또한 작성의 필요성이 낮다고 판단되어 간단하게 TIL에 요약만 할 예정이다. 오늘 푼 알고리즘
오늘은 노드 심화주차 중 AWS, SQL에 대해 학습하였다.전부터 SQL이 땡기지 않아 미루고 미루었었는데 더이상 미룰 수 없게 되었다...😂😂 오늘 푼 알고리즘 코드카타 131128. 숫자 짝꿍140108. 문자열 나누기160586. 대충 만든 자판42862. 체
어릴 때 공부 좀 열심히 할걸.. 이라는 현타가 온다고기도 먹어 본 놈이 안다고 공부와 손 땐지 오래인 난 앉아있는 시간이 길어도 집중력과 기억력이 낮은 것 같다...🤮에휴 자책할 시간에 조금이라도 더 집중하자 오늘 푼 알고리즘 코드카타 155652. 둘만의 암호점점
이야.. 시간은 진짜 빨리간다.불금불금 외쳤던 TIL 쓴게 어제 같은데 벌써 한 주가 흘렀다..무섭다 😥오늘은 오전에 알고리즘 코드카타를 진행하고 밀린 강의를 보았다. 전체 강의 시간은 얼마되지 않지만 집중력 이슈로 인해 몇번을 뒤로가기 눌러서 시간 지체가 많이 되었
오늘은 하루종일 아버지 일을 도와줘서 공부할 시간이 적었다. 그래서 오늘은 스탠다드반 과제 자료조사를 조금 진행하고 정리를 좀 했다. 내일 정리한 것 바탕으로 게시글좀 낭낭하게 써주고 제출할 예정이다. 그리고 node 강의 빨리 마치고... 개인 과제 들어가야지 ㅠㅠ
오늘은 전송계층에 대하여 공부하고 Node 인증, 토큰, 미들웨어에 대하여 학습했다. Node관련 게시글은 추후에 개인과제 하면서 정리하며 올릴 예정이다.전송 계층은 우리가 인터넷에서 데이터를 주고받을 때, 그 데이터가 잘 도착하고 있는지 확인하고, 실수 없이 전달되도
오늘 푼 알고리즘 코드카타 150370. 개인정보 수집 유효기간178871. 달리기 경주웹 프레임워크 사용 - Express패키지 매너지 - Yarn 모듈 시스템 사용데이터베이스 - AWS RDSORM - PrismaRequest Authrization 헤더에서 JW
사건 발단라우트를 분리하는 과정을 거쳤고, 새로운 라우터를 저장한 후 테스트를 하는데 전혀 먹히지 않음이슈기존 분리하기 전 라우트 파일이 저장되지 않음.기존 정보가 남아있었기 때문에 app.js 내에서 앞단에 있는 라우트 목록에서 처리가 됨해결탭 정리를 잘하고.. 저장
172928. 공원 산책42840. 모의고사12939. 최댓값과 최솟값12951. JadenCase 문자열 만들기어제 필수 기능 API를 구현했는데, 에러처리 부분과 데이터 가져오는데에 있어 몇가지 부분을 수정하였다.\[Node.js] CH3 개인과제 - 필수 API
CH3 개인과제 일부 수정 및 미들웨어 구현으로 필수/도전 과제는 완료되었다. 분리할 부분이 더 보였지만 제출 시간의 한계로... 거기까진 못하고 제출했다. 😰😰 구현한 미들웨어에 대해 짤막하게 적어보겠다.토큰 인증 미들웨어에러핸들링 미들웨어에러로그 미들웨어 ( /
70129. 이진 변환 반복하기개인 과제가 끝나자마자.. 팀 프로젝트가 시작되었다.24.09.13 ~ 24.09.16 필수 목록 구현24.09.19 ~ 24.09.25 도전 목록 구현회원가입 / 로그인 기능캐시 구매 기능선수 데이터 준비선수 뽑기 기능나만의 팀 꾸리기
챌린지반 숙제를 오늘의 TIL로 작성하고자 한다.https://school.programmers.co.kr/learn/courses/30/lessons/132203흉부외과 또는 일반외과 의사 목록 출력하기다음은 종합병원에 속한 의사 정보를 담은DOCTOR 테이
일부 코드 수정회원가입 DB입력 단일 쿼리 트랜젝션 제거auth 미들웨어 Bearer split 기준 공백으로 수정, 페이로드 부분 수정패스워드 해시화 이전 페퍼값 추가부분 오타 및 주석 수정추가 라우터 ( 기본 틀, 수정 예정)캐시 충전캐시 조회비밀번호 수정랭킹 조회
아.. 이 얼마만에 느껴보는 편안한 월요일이었는지..오늘은 알고리즘 코드카타 1문제 풀고 SQL 문법이 부족하여 공부좀 했다.챌린지반 따라가려면 기본기 탄탄해야지;😒42842. 카펫비교연산자다양한 조건 ( BETWEEN, IN, LIKE )BETWEEN A AND B
오늘은 간단하게 SQL 문자열 가공하는법에 대해서만 학습했다.group by를 연계한 방법에 대해서는 추후에 적을 예정이다.밑에는 간단하게 정리한 내용이다Query 결과를 그대로 이용하지 않고 필요에 따라 가공 후 사용할 수 있어요.REPLACE예시1) 최근에 상점 이
아니 벌써 연휴 마지막 날?;;꿀같던 연휴 간 아주 쬐금 공부한 SQL 복습을 위하여 기본 문법 총 정리를 해보았다.CREATE DATABASE: 새 데이터베이스를 생성DROP DATABASE: 데이터베이스를 삭제CREATE TABLE: 테이블을 생성DROP TABLE
Docs 페이지에 예제가 있길래 JS 복습할 겸 풀어보았다.
12945. 피보나치 수12914. 멀리 뛰기12953. N개의 최소공배수12985. 예상 대진표오늘은 레이어드 아키텍처에 대하여 찍먹해보았다.기존 강의에서 배웠던 모놀리식 아키텍처는 소규모 프로젝트까지는 유용하게 사용될지 몰라도 중,대규모 프로젝트로 가면 확장성이나
138476. 귤 고르기59041. 동명 동물 수 찾기59406. 동물 수 구하기59408. 중복 제거하기갑자기 무슨 Vue냐, 싶겠지만 간단하고 쉽게 프론트엔드 부분을 구현할 수 있다고 하여 조금 알아보았다.API를 구현하는데에 있어 프론트에서는 어떻게 이용되는지,
오늘은 숙취로 인해 알고리즘 코드카타 하나와 SQL 코드카타 조금 풀었다.. 🤮🤮🤮🤮🤮76502. 괄호 회전하기131114. 경기도에 위치한 식품창고 목록 출력하기131528. 나이 정보가 없는 회원 수 구하기131697. 가장 비싼 상품 구하기59036. 아
131701. 연속 부분 수열 합의 개수팀원들과 진행중인 게임 API 서버가 어느정도 마무리 선에 들어가고 있어서 웹사이트를 하나 만들고자 했다.처음에는 Vue.js로 진행하려 했는데, 시간도 촉박하고(수요일 마감..) 백엔드 수업에 프론트를 크게 신경 쓸 필요가 있을
문제 링크 메모리: 33.5 MB, 시간: 0.42 ms코딩테스트 연습 > 정렬정확성: 100.0합계: 100.0 / 100.02024년 09월 24일 09:48:04내일 제출이라 너무 바쁘다.. 발등에 불똥 떨어졌다 😥
우여곡절 끝에 어느정도 프론트엔드를 구현하고 시연하고,닦이고..(?) ㅋㅋㅋㅋ튜터님들의 피드백과 구현해보고 싶었던 것들이 많아서 시간 틈틈이쪼개서 수리 진행해보고자 한다.맞닥들인 문제들이 많지만 제출 10분 전에 원인을 알게된 사례에 대하여 써보려고 한다.프론트엔드와
87390. n^2 배열 자르기해당 문제는 위의 gif와 같이 주어진 n으로 n행n열의 2차원 배열을 생성하고 1부터 n사이 즉 i로 i행 i열까지 i로 채운 후 행단위로 절삭하여 1차원 배열로 전환한다. 위 사진은 각 배열의 인덱스와 i값을 표시한 내용이다.여기서 우
객체 지향 객체 지향은 책임과 권한을 가진 객체들이 서로 메시지를 주고받아 협력하여 필요한 기능을 수행하는 방법론이다. 크고 복잡한 시스템도 효과적으로 분해하고 구성하며, 개발자는 손쉽게 이해하고 효율적으로 관리할 수 있게 도와준다. 캡슐화, 다형성, 상속을 지원하
fs - node.js 파일시스템 접근할 수 있는 모듈이며 파일 읽기 쓰기 기능을 제공한다. 동기적 및 비동기적 방식 모두 호환이 가능하다.데이터베이스에서 데이터를 구조화된 형태로 저장하는 방식으로 각각의 열이 특정한 유형의 데이터를 나타내고 행은 실제 데이터를 포함한
42578. 의상이 문제는 경우의 수로 풀 수 있다. 의상종류 중 하나는 무조건 착용해야 하며(전체 다 미착용 불가) 동일한 종류의 옷은 못입는다. 그러면 각 의상 종류의 수에 안 입는 경우 한가지를 추가하고 그 수들을 곱한 후 전체 안입는 경우의 수를 빼주면 원하는
기능개발(https://github.com/tjdcjf1996/Algorithms/commit/4d00cbb82ad144ed4fb2ea5ae1861d226a622513작업물들의 진행도가 적혀있는 progresses 리스트와 각 작업물들이 하루에 어느정도 개발할
42587. 프로세스위 문제는 실행 대기 큐에 들어있는 프로세스 중 우선순위가 높은 순으로 처리한 다음 FIFO로 처리될 때 location으로 지정된프로세스가 몇번째로 수행되는지를 알아내는 문제이다.우선 대기 큐에 \[ 우선순위,인덱스번호,우선순위,인덱스번호, ...
데이터베이스를 설계는 프로그램을 설계하는데에 있어 제일 중요한 뼈대를 세우는 것과 같다고 생각한다. 기본 철골 구조가 탄탄하지 못하고 구역을 획기적으로 나누지 못한다면 추후 완성된 건물이 안정적이지 못하고 구조 변경에도 큰 힘이 들 것이다.따라서, 프로그램을 설계하는
발제는 지난주 금요일이었는데 너무 늦게 시작했다. 소켓이 너무 어려워서 복습하는데 집중도 잘 안돼가지고 시간을 너무 낭비했다.어여어여 가자.. .├── assets // 게임 데이터│ ├── item.json│ ├── item
우선 스테이지를 어떻게 가져와야하나 고민했는데, 최초 시작할 때 index.js에서 stage 변수를 선언하고 Score.js에서 stage가 변환될 때마다 바뀐 stage_id를 반환하여 수정하는 방향으로 했다.item_Unlock 데이터 테이블을 fetch 해서 가
씁... 슬했다. 왜 계산식도 맞고 문제 없는 것 같은데 왜 안되는지 5시간을 헤맸다.결론만 말하자면, 서버의 문제가 아닌 클라이언트측 코드에서 비동기 처리를 해주지 않아 생긴 문제였다. 왜 안되지 하고 서버시간으로 계산하던 것도 클라이언트에서 보낼 때 timestam
$ set key valueex - set ddori:name yangddori$ get keyex - get ddori:name$ keys \*$ del key$ set key value ex 10$ ttl key만료시간 설정한 키의 경우 만료되면 -2를 반환 ( 키
Central Processing Unit - 중앙 처리 장치컴퓨터 성능을 따지는 큰 요소 중 하나인 CPU는 컴퓨터 시스템을 통제하고 프로그램의 연산을 실행, 처리하는 가장 핵심적인제어장치입니다. 사람으로 치면 "두뇌" 라고 할 수 있죠.CPU는 컴퓨터 프로그램에서
92335. k진수에서 소수 개수 구하기위 문제는 주어진 n을 3진수로 바꾸고 0P0 / P0 / 0P / P 기준 P가 소수인지 판별하는 문제이다. 예시로 437674가 들어왔을경우 3진수로 변환하면 221020101011 이고 0을 /로 바꿨을 때 221/2/1/1
html에 적혀있는 코드를 살짝 분리시켰다.public ├─images └─src ├─css └─jsHTML이 index, login, register 세 개로 index는button-container인 div와 캔버스로 구성되어있고
컴퓨터 구조는 능숙한 개발자가 되기 위해 필수적인 기본 지식입니다. 컴퓨터 구조를 이해하면 문제 해결 능력이 향상되고 성능, 용량, 비용 등을 고려해 최적의 컴퓨터 환경을 선택할 수 있습니다.컴퓨터가 이해하는 정보: 컴퓨터는 명령어와 데이터를 처리합니다. 명령어는 컴퓨
42746. 가장 큰 수해당 문제는 정렬 문제로 비교할 두 숫자를 문자열로 변환하여 AB BA 로 비교하여 큰 값을 내림차순 정렬하여 join 해주면 되는 문제이다.다만, 모든 넘버가 0이 들어왔을 때 0000 이런식으로 나가면 안되니까 0으로 이루어진 경우 0만 리턴
핸들러 코드를 테스트 하는데 자꾸 Cannot read properties of undefined (reading 'data') 오류가 발생하여 머리카락 50가닥 이상은 뜯은 것 같다.아니, 코드에는 틀린게 없어보이는데 자꾸 안가져와져서 하나하나 지워가며 console
IOCP는 I/O Completion Port의 약자로 Windows 운영체제에서 제공하는 비동기 I/O 처리 메커니즘이다. 고성능 네트워크 서버나 파일 처리 애플리케이션을 개발할 때 사용된다.IOCP는 여러 개의 비동기 I/O 작업을 동시에 처리할 수 있도록 설계된
131704. 택배상자와 처음에 보고 이해가 안가서 고민을 좀 많이 했는데, 저 order로 주어진걸 1,2,3,4,5 순으로 넣다 뺐다 해서 구하라는건 줄 알았으나, 그게 아닌 1,2,3,4,5 순으로 상자가 컨베이어 벨트에 올려져있고, ORDER 4,3,1,2,5
수정내역을 저장 ( git stash > git stash save )브랜치를 최신 버전으로 가져옴 git merge dev (dev 최신화 상태인지 선 확인)저장해두었던 수정내역 가져오기 git stash pop수정본과 최신본 문제없이 merge하고 테스트 후 PR
잠을 자지 않는 것은 오히려 코드가 꼬일 뿐이다.머리가 안 돌아가서 의도와 다르게 흘러간다는 점.피곤한 관계로 오늘 TIL은 KPT 회고록으로 대체하겠다.TOWER-DEFENSE 회고록
DB 커넥션 풀은 애플리케이션에서 데이터베이스를 연결할 때, 매번 새로 연결 생성을 하는 비용을 줄이기 위하여 미리 여러개의 커넥션을 만들어 두고, 필요한 경우 재사용하는 기법으로 성능 최적화와 자원관리 용이를 위해 사용한다.지금까지 써왔던 PRISMA 같은 ORM에서
net은 node.js에서 기본으로 제공하는 TCP 소켓을 생성하고 관리하는 기본적인 API를 말한다. 이를 통해 네트워크 통신을 쉽게 구현할 수 있으며 Socket.io와 달리 다운받을 것이 없고 낮은 레벨의 통신을 처리하는데 적합하다.사용법이 매우 비슷하다.TCP는
프로젝트 관리: 새로운 프로젝트 생성, 프로젝트 파일 구성 및 관리씬 관리: 게임의 각 장면과 화면을 구성하는 요소에셋 관리: 게임에 필요한 리소스를 관리컴파일 및 빌드: 스크립트 코드를 컴파일하여 실행 가능한 게임으로 빌드디버깅: 코드 실행 중에 오류를 찾고 수정에디
커링은 여러 개의 인자를 받는 함수를 하나의 인자를 받는 함수들의 연속된 체인으로 변환하는 기법으로 원래는 여러 인자를 한 번에 받는 함수를 여러 단계로 나눠서, 각각의 인자를 별도의 함수 호출로 전달하는 방식이다. 이 기법은 함수형 프로그래밍에서 자주 사용된다.여기에
식사 후 소화시키며 유튜브를 시청하다가 오랜만에 솔리드원칙 영상을 접하게 되었는데 지금까지 안 지키며 코딩했던 것 같다.24.09.27에 작성한 TIL다시금 정리하고 가자..솔리드 원칙이란 객체지향 프로그래밍과 게임 개발에 있어 중요한 코드의 유지보수성과 확장성을 높이
음.. 오늘은 TCP 강의를 좀 많이 반복해서 듣고 빈 프로젝트에서 작성해보려고 노력을 했었어서 새로운 지식을 습득한 것은 없다.그래서 오늘의 TIL은 복습을 통한 부족한 실력 개선을 목표로 작성하고자 한다.이번 TCP 과제에서는 mysql2를 사용한다. 즉, ORM을
간단한 테스트 용도나 요청이 많지 않은 경우 사용한다. 잦은 연결이 필요할 시 connection보다는 pool이 유용하다.config를 이용하여 Pool을 생성하고 있지만 하드코딩으로 적어도 생성은 되지 않을까 싶다.쿼리를 변경하여 로그를 찍을 수 있게끔 조정할 수
샤딩은 데이터베이스나 애플리케이션에서 데이터를 여러 작은 단위(샤드)로 분할하여 처리하는 기법이며 이를 통해 처리 성능을 높이고 부하를 분산할 수 있다. 특히 대규모 시스템에서는 하나의 서버가 감당할 수 없는 데이터를 여러 서버에 나눠 저장하는 데 사용된다.확장성: 서
TCP 서버 흐름 정리 CH5 MultiPlay 과제를 이번주동안 진행하면서, 머리속으로 정리가 안되어 한번 정리하고 가는 시간을 가진다. Common.proto Initial.proto 우선 클라이언트에서 DeviceId / IP / PORT 세 가지를 입력받
네트워크 통신계층 중 하나인 전송계층은 애플리케이션 계층과 네트워크 계층 사이에서 데이터의 전송 품질과 신뢰성을 보장한다. 주로 두 호스트 간 통신을 연결하고 데이터 흐름과 오류를 제어하며, 연결지향 통신 방식을 지원한다.연결 지향형 프로토콜로 통신을 시작하기 전 3-
삼각비는 직각삼각형 변들 사이의 비율을 이용하여 각도와 변의 길이를 구하는 방법이다. 우리가 삼각함수에서 사용하는 Sin, Cos, Tan 모두 삼각비의 일종이다.우리가 학창시절 삼각함수를 배울 때 높이를 밑변으로 나눈게 탄젠트, 높이를 빗변으로 나눈게 사인 등등 이런
해당 과제에 대하여 서버를 구축하고 테스트 하던 중...문제점이 하나 발생했다. 나는 유니티를 모른다.. 허나 이번 문제를 풀기 위해서는 유니티를 어느정도 다룰 줄 알아야 마지막 좌표값을 토대로 유저가 스폰된다.종료 이벤트 시 게임 세션에서 종료하고 유저 세션에서 삭제
현재 deviceId와 userId가 동일시되어 사용되고 있기 때문에 중복 로그인 시 문제를 야기할 수 있다.따라서, 서버측에서 중복 로그인 시도 시 Fail code를 보내면 로그인이 되지 않을 것이다.기존에는 최초 패킷 교환 시 이미 세션에 등록되었는지 확인하는 절
멀티플레이 게임에서 레이턴시(latency)를 줄이기 위해 다양한 네트워크 기법들이 사용됩니다. 특히, 실시간 게임에서는 지연이 문제를 일으키지 않도록 추측 항법(prediction) 및 보정(interpolation) 등의 기술이 필수입니다. 아래는 레이턴시 문제를
자원 관리: CPU, 메모리, 디스크, 네트워크 등 자원을 관리하고 조정한다.프로세스 관리: 여러 프로세스의 실행을 조정하고 CPU 시간을 분배한다.메모리 관리: 각 프로세스에 메모리를 할당하고 가상 메모리를 통해 관리한다.저장 장치 관리: 파일과 데이터를 저장 장치에
git rebase -i HEAD~n (n은 1부터 시작, HEAD~1 이면 바로 직전)pick이라 써있는 것을 reword로 바꾸고 wq (이름 바꾸는거 아님)다음 나오는 창에서 이름 변경해주고 wq!git push --force origin EXAMPLE-BRANC
프로세스는 실행 중인 프로그램 자체를 의미하며 우리가 실행하는 프로그램은 각자 독립적인 메모리 공간을 가지며 운영체제가 프로세스를 생성하고 관리한다.각 프로세스는 자신만의 독립적인 메모리 영역을 가지고 있어 다른 프로세스의 메모리에 직접 접근이 불가하고, 이 덕분에 안
오늘은 지난 과제간 있었던 트러블에 대하여 정리하는 시간을 가졌다.데이터가 한 지점에서 다른 지점까지 도달하는데 걸리는 시간을 뜻한다.금요일 제출한 CH5 개인과제에서도 서버-클라이언트 간 PING 패킷을 이용하여 레이턴시 측정을 수행하고그 기반으로 추측항법을 적용하였
오늘은 발제 및 팀 회의로 인해 시간이 너무 부족했다.과제를 진행하며 수정한 부분에 대해 적고자 한다.기존에는 패킷의 크기가 정해져 있어서 위와 같이 미리 정해놓고 부를 수 있었다.허나, 오늘 시작한 팀프로젝트의 경우 패킷의 크기가 가변이라 위와같이 사용하기 쉽지 않았
크.. 살면서 최초로 생일날 나가지 않고 코딩만 했다.\[TIL] 24.11.04 MON어제 작성한 TIL에 있는 패킷 파싱을 기준으로 response 패킹도 구현해보았다.스네이크 형식의 문자열을 카멜 형식으로 바꿔주는 아주 기본적인 함수이다.
현재 진행중인 과제에 사용되는 버퍼가 핸들러로 어떻게 연동되는지 정리를 한번 했다.전 과제에서 배운 protoMessages를 불러오는 함수를 인용하여 사용했다.핸들러 폴더 안에 있는 파일을 모두 불러 export된 함수를 추출하여 파일 이름과 매칭하여 handlers
과제 진행 간 타워ID나 몬스터ID가 고유값을 전달해줘야해서 UUID를 넣어 보내기로 했다.근데 proto 구조를 보니.. ID는 int32로 명시되어 있었고.. 다른 방법을 찾던 중 snowflake-id 라는 것을 발견했다.Twitter id(snowflake)에서
클래스 인스턴스를 복사하면서 데이터를 추가하고 싶을 때 방법이 몇가지 있어 가져와봤다. 근데, 이 방식을 채택하진 않았고 그냥 상속으로 처리했지만 찾은김에 적어본다. 1. 생성자 기반 복제와 데이터 추가 클래스의 생성자를 활용하여 인스턴스를 복사하고 데이터를 추가하는
Node.js 최종프로젝트가 얼마 남지 않은 상태에서 유니티에 대한 이해도가 아예 없는 것 보단 있는게 도움이 될 것 같아조금 찾아보았다.서버는 데이터를 관리하고 요청을 처리하는 중앙 시스템이다. 예를 들어, 게임에서 모든 플레이어의 위치나 게임 상태를 유지하고 관리하
게임 및 실시간 네트워크 애플리케이션에서 시퀀스 번호를 관리하는 이유는 다음과 같은 문제를 방지하거나 해결하기 위해서이다.패킷 순서 보장: 네트워크는 패킷이 순서대로 도착할 것을 보장하지 않는다. 클라이언트에서 보낸 패킷이 서버에 도착할 때 순서가 바뀔 수 있기 때문에
EC2 .. 왜 배포가 한번에 성공한 적이 없나 매번 EC2에 올릴 때마다 한번에 성공한 적이 없는 것 같다.. 가동했는데, 핸들러를 찾지 못하는 오류가 발생했다 loadHandler가 제대로 작동되지 않는다는 생각에 console.log를 찍어보았는데, 크흠 역시나
기존 프로젝트에서 시퀀스를 관리하지 않고 바로 즉각 처리했었으나, 시퀀스를 Map에 저장하고 누락 시 대기열에 해당 패킷을 저장 후 누락된 대기열을 요청하여 받으면 처리되는 방식으로 바꿔보았다.다만, 클라이언트 코드에는 패킷 재전송 코드가 없기 때문에 실제로는 작동하지
불큐(Fall Queue)는 서버와 네트워크 시스템에서 사용되는 대기열 관리 전략으로, 특히 높은 트래픽이나 서버 과부하 상황에서 서버 안정성을 유지하기 위해 활용된다. 이 시스템은 부하가 급격히 증가하여 서버가 즉시 모든 요청을 처리할 수 없는 상황에서 중요한 역할을
오늘은 하루종일 회의로 인해 새로운 지식을 습득하는데 제한이 있었다.Today I Learned 이 아니라 Today I Did 느낌으로 간다...상태동기화 모델 논의에러 패킷 구조 논의기술 스택 논의데이터 테이블 관련 논의패킷별 역할 담당세가지 모델 후보 제시서버 권
큐를 활용한 버퍼 처리는 데이터를 일정한 순서, 즉 들어온 순서대로 유실되는 것이 없이 완벽하게 처리할 수 있는 방법이다. 큐는 데이터가 차례로 입력되고, 각 데이터를 순차적으로 내보낸다. 지금 구현중인 게임의 패킷 처리 전 패킷 송 수신 측에 큐 방식으로 관리한다면
12월 말이 되기 전에 프로젝트 하면서 틈틈히 완강을 ...객체 지향 프로그래밍은 객체를 사용하여 개발하는 방식이다.각 객체는 상태(데이터)와 행동(메서드)을 가질 수 있다. 이를 통해 현실 세계의 사물이나 개념을 소프트웨어 세계에서 유연하게 표현하고, 객체 간의 협력
점령 관련 클래스를 작성하다보니 타이머가 필요하다고 느꼈다.해당 클래스는 원하는 시간과 실행할 콜백함수를 인스턴스 생성 시 입력받고 시작, 일시정지, 재개, 초기화 단계로 구성되어 있다.고민중인 사항이 점령 시 setInteval, setTimeOut이 빈번히 사용될
아직 패킷 전송 부분에 대해서 생각하지 못해 TODO로 냅두고 클래스 만들어서 테스트 해보았다.임시로 만든 테스트 코드 흐름에는 문제가 없는데... 패킷 전송부 구현 후 테스트가 두렵다
기존 패킷 전송은 각 핸들러에서 socket.write 하는 방식이었는데 이번에는 추후 상태관리 및 확장성을 염두하여 싱글턴 패턴의 클래스로 관리 해보고자 했다.완성되고 테스트 해봐야 아는 부분이겠지만 그 전 대규모 처리에 대한 자료를 조금 더 찾아봐서 리팩토링 할 예
오늘은 EC2 우분투 환경에서 도커를 이용해 서버를 올리는 방법과 EC2 인스턴스 초기화에 대해 알아보았다.초기 설정을 잘못했는지 서버를 인스턴스에 올린지 하루만에 반응속도가 엄청 느려졌다.apt-get install 로 node를 설치하고 nvm으로 또 설치해서 충돌
$ sudo docker pull redis먼저 위 명령어로 도커 이미지를 다운받는다. 설치가 완료되면 다음 명령어로 확인할 수 있다.$ sudo docker images이미지를 다운받았으니 컨테이너를 생성하면 된다.redis의 기본 포트는 6379이고, 원하는 포트로
뮤텍스가 무엇인지 이해하기 쉽게 말하면 하나의 길이 있는데, 이 길에는 하나의 방향으로 오직 한 대의 차만이 들어올 수 있다고 치자. 이 때, 서로 다른 방향에서 두 대의 차가 마주 달려온다면 정면충돌 사고가 나거나 서로 오가지 못하여 둘 중 하나는 후진하여 원래 출발
마이크로서비스 아키텍처(MSA)는 애플리케이션을 작은 서비스들로 나눠서 각각 독립적으로 개발하고 운영할 수 있게 하는 방식이다. 단일 시스템보다 더 쉽게 관리하고 확장성이 보장되어 있다. 각 서비스는 특정한 기능을 담당하고, 따로따로 배포하거나 수정할 수 있다.마이크로
갑자기 디스코드봇? 서버를 EC2에 올려놓았다보니, 서버 접속권한이 없는 클라이언트의 경우 로그를 매번 물어볼 수 밖에 없는 상황이라디스코드에서 간단한 명령어로 보면 좋을 것 같아 만들었다.https://discord.com/developers/applicat
기본적으로 알려져있는 포트인 3000번으로 서비스를 배포해놓았더니, 특정 IP에서 공격에 가까운 패킷 전송을 시도하였다.클라이언트 개발자분들도 아니고, 서버 개발자분들도 아니라고 하는 것을 보아하니 봇이 3000포트가 열려있는 아이피를 조회하여 접속 시도한다는 느낌을
각 핸들러에서 sendPacket을 넣어줄 때 연속적으로 패킷을 넣으면 패킷이 정상 발송은 되나, 서버 로그상에는 에러가 생기는문제가 발생했다.deQueueSend() 부분에서 값을 제대로 가져오지 못해 구조분해 할당이 되지 않는 상황이다.위 메서드의 경우 뮤텍스 락을
클라이언트 튜터님께서 데디케이트 서버 구성이 아니면 추후에 부하에 따른 처리가 어떻게 되는지 생각해본적 있냐고 하셔서추후 구현과제로 남겨두었던 분산서버에 대하여 구글링을 조금 했다.지금 당장 교체할 내용은 아니지만 미리 찾아두면 좋을 거 같았다.분산 서버는 여러대의 서
Json Web Token의 약자로 클라이언트와 서버 간 인증 및 정보 교환에 사용되는 JSON 기반의 경량 토큰이다. 소켓 통신 시 클라이언트의 인증 상태를 검증하는데 쓸 수 있다.socket.io와 같은 고수준 라이브러리는 미들웨어를 통해 인증 처리 후 연결 차단이
추가구현 목표인 분산서버에 적용할 nginx를 설치하고 테스트 하는 시간을 가졌다.보통 우분투에서 apt install nginx 로 설치하지만, 이렇게 설치하면 http 모듈만 있고 tcp를 다룰 수 있는stream 모듈이 포함되어 있지 않아서 공식홈페이지를 통해 다
VSCode 설정 탭(Ctrl+,)을 들어가서 검색창에 Bracket Pairs를 입력해주고 true로 바꾸어 주면,보기 편한 줄이 생긴다!구글 클라우드의 경우 첫 가입시 300$의 크레딧을 제공하기 때문에 프로젝트 간 사용하고자 AWS EC2를 쓰다가 잠깐 넘어왔다.
지금 생각하고 있는 단일서버에서 분산서버로 변환하는 작업구상은 여러가지다.다만, 구현 가능성과 효율성을 따지는 단계에서 지식의 한계와 경험의 한계에 부딪혀 여러 방안을 구상하고 월요일 자문을 받을 생각이다.클라이언트는 nginx 서버에 접속 하고 인증관련 요청을 보내면
GCP API 사용하기 npm 설치 npm install --save @google-cloud/billing-budgets
현재 분산서버 구조로 변경하기 위하여 헬스체크 서버를 구축하는 단계에서 고민에 빠졌다.헬스체크 서버가 게임서버 최초 구동 시 날라오는 노티를 기준으로 nginx 서버에게 해당 아이피와 포트를 전달하여자동으로 매핑되게 구현하고 싶었다.그러려면 우선 conf 파일을 읽어서
nodejs에서 자신의 ip를 가져오는법 게임서버에서 헬스체크 서버에게 상태 보고를 할 때 내 아이피를 보내야 했었다. 그래서 찾은게 os모듈을 이용한 ip조회이다. os모듈은 광범위하게 메서드를 제공하고 있는데 그 중 networkInterfaces를 이용하면 된다. 해당 메서드를 이용하면 아래와 같이 출력된다. internal이 true이면 내부 아...
수평적 확장 제한 : 단일 서버에 모든 기능이 집중되어 있어 트래픽 증가에 대응하기 힘듬장애 시 서버 마비 : 서버 장애 발생 시 전체 서비스 중단유지보수성 문제 : 서버의 역할과 기능이 복잡하게 얽혀있어 문제 진단 및 수정이 어려움위와 같은 문제를 해결하고 안정성과
헬스체크, 매칭, nginx-helper 등 API 통신을 위주로 처리되는 서버들의 보안성을 높이기 위해 여러 기술들을 찾아보았다.Rate Limiting은 서버가 일정시간 내 특정 클라이언트로부터 보낼 수 있는 요청 수를 제한하는 기법으로 서버의 과부하를 방지하고 악
원래 뮤텍스가 멀티스레드 환경에서 레이스 컨디션을 방지하기 위하여 사용하는 것으로 알고 있지만, 싱글 스레드 내에서도 공유 자원에 대한 경쟁은 있었다...물론 lockfile, flag 등의 방법은 많겠지만 이미 잘 만들어진 프레임워크가 있기 때문에 간단하게 가져다 쓰
디스코드 봇 기존에 클라이언트분들이 서버 로그를 편하게 알 수 있도록 명령어를 치면 로그를 찍어주는 디스코드 봇을 만들었었는데, 이번에는 서버 상태에 따라 알림을 일방적으로 원하는 채널에 찍어줄 수 있게 구현을 해보았다. 초간단 const channel = clie
오늘은 새로운 것을 학습하진 못하고 기존 단일서버를 분산서버로 컨버전하는데 시간을 다 썼다.그래서 오늘은 5분기록으로 대체한다.매칭 시스템 제거 events 및 연동 되어있는 핸들러 제거 패킷 리스트에서 제거로그인/회원가입 시스템 제거 events 및 연동 되어있는 핸
보통 ssh 연결을 할 때 git bash를 쓰곤 했다.근데 sftp를 쓰려면 파일질라 등의 프로그램을 2중으로 써야하고 여간 불편한 점이 한 두가지가 아니였다.그런 불편한 점을 바로 해소시켜줄 프로그램이 mobaXterm 이다.https://mobaxterm
내부 아이피를 활용하여 헬스체크서버에서 게임서버의 아이피를 보관하고 싶은데, 도커 내부에서 exec를 통해 아이피를 조회하거나 os 모듈을 이용하여 가져오면 도커 내부 아이피를 불러오게 되어 api로 전송할 수 없어 aws api를 활용하여 IP를 넘겨주고 있었다.하지
분산 서버간 설정이 일치하지 않아 어떤건 한국 타임존이고 어떤 서버는 미국인 상황이 발생하여 오류를 발생시켰다.다 동일하게 한국시간대로 바꾸기 위해 아래의 명령어들을 사용하면 된다.
유니티 클라이언트를 itch.io에 webGL로 올리니 문제가 발생했다. 이유는 api 통신 간 http를 사용중이여서 불가능하다는 것이었다.우리 서버는 nginx를 통해 모든 서버를 접속하기 때문에 nginx에만 인증서를 설치해주면 해결되는 문제라 진행했다.무료이고
프론트를 하는 친구의 부탁으로 잠깐 시간내어 간단한 웹 API 서버를 만들어주던 도중 상태코드에 대해 애매한 점이 있어 찾아보았다.과연 비밀번호가 틀린 것은 상태코드를 200으로 보내야할까, 401로 보내야할까.뭐 맞게 코딩하면 되겠지만.. 일단 알아본 바로는 서버가
하.. 분산서버로 컨버전 하는 동시에 nginx 리버스 프록시 사용으로 인해 게임서버로 접속하는 remoteAddress가 모두 nginx 서버 아이피로 찍히는 바람에 IP 밴을 담당하던 함수를 제거했었다.그러니까 아주 그냥 자기 집 들리듯이 막 들어와 패킷을 엄청 쏴
TIL-24.12.15-SUN기존 트러블 슈팅에 이어 nginx 헬퍼서버 쪽도 완료하였다.라우트, 컨트롤러, 서비스는 간단해서 따로 글로 남기지는 않았다.nginx 헬퍼 서버에도 API 요청을 처리할 수 있는 로직을 구성하였고, 거기에 사용되는 메서드이다.conf 파일
지난번에 친구의 부탁으로 간단한 API 서버를 만들어주었는데, 아이폰의 경우 https가 아니면 통신 자체가 안된다고 하여 인증서를 설치하였다.Nginx 서버에 인증서 설치 위의 링크에 있는 TIL에서 Nginx에 인증서를 설치하는법을 다뤘었는데, 이번에는 Nginx를
하루종일 인게임 디자인 하고 에셋 만들고 영상 편집하느라 서버 쪽 코드를 신경쓰지 못했다. 그나마 한거라고는 다른분 코드 버그 같이 찾기랑 비정상 클라이언트가 매칭을 잡고 게임서버에만 연결을 안했을 때 게임세션이 만들어지고 삭제되지 않는 현상을 잡아준 것 ? 해당 부분
다른 핸들러는 다 정상적으로 클라이언트에게 proto 패킷이 디코딩 되어서 페이로드가 도착하는데, 특정 패킷만 Null로 도착하는 증상이 있었다.1\. 의심 해 볼만한 것은 proto 파일이 양측간 최신화가 안되어있다는 점2\. 메시지 형식이 맞지 않는 점3\. 신에게
오늘은 프로젝트를 진행하면서 많이 썼다 생각한 명령어를 나열해보았다.Docker 컨테이너 실행 도커 컨테이너를 백그라운드에서 실행하며 환경 변수 파일(.env)을 읽어서 설정을 적용 도커 컨테이너 목록 확인 현재 실행 중이거나 중지된 모든 컨테이너의 목록을 확인
클라분들과 협업하면서 얘기가 나오는 것 중 가장 많이 나오는 것이 코루틴인데, 나는 노드 서버기수이지만 클라이언트도 알면 좋을 것 같아 알아보았다.코루틴은 유니티에서 비동기적 작업을 수행할 수 있게 해주는 기능이다. 반복적으로 수행되어야할 때 효율적으로 처리하는데 도움
Node.js 서버 최종 프로젝트가 종료된 시점에 C++ 서버로 마이그레이션 하고자 했던 계획을 준비할 때가 온 것 같다.현재 Node로 구축되어 있는 서버를 c++로 마이그레이션 하기 위해서는 여러 프레임워크에 대해 알아야 할 것 같아 간단하게몇 개정도 찾아보았다.C
한달가량 진행한 프로젝트가 종료되었다. 원하는 분들끼리 추가 구현 및 리팩터링을 진행할 것 같지만 아직 미정이다.유니티팀과 Node.js 서버팀이 협업하여 처음부터 목표한 내용까지 만들 수 있던 기회라 좋았고 도움이 많이 된듯하다.오늘은 발표 및 현업자 심사위원님들의
갑분 도커 컴포즈, 같은 기수분과 디코 채팅을 하던 도중 도커를 공부하시고 계시다고 하셔서 같이 듣게 되었다. 나의 경우 도커는 저번 프로젝트에서 사용하여 어느정도 사용이 가능한 상태였고 복습 겸 듣다가 프로젝트 때에는 서버를 인스턴스 단위로 분산시켜 도커 컴포즈를 사
유니티를 살짝 맛보기 위하여 C어제에 이어 도커에 대해 조금 더 알아보았다. 도커에서 이미지는 레이어 계층 구조로 구성되어있다. 각 레이어는 이미지 파일의 변경사항을 포함하고 있고 이러한 구조는 이미지의 효율적인 저장과 배포에 기여한다.읽기전용이미지를 구성하는 모든 레