본문 바로가기

전체 글278

레트로의 유니티 성능 최적화 - 메모리 구조의 이해 4 원문 작성일: 2026-08-19관리되는 힙 동작 방식관리되는 힙과 세그먼트new 키워드로 만든 인스턴스, C# 타입 유니티 컴포넌트를 생성시 해당 객체들은 관리되는 힙 영역에 할당된다. 관리되는 힙은 페이지 단위를 직접 다루지 않고 세그먼트라고 부르는 더 큰 단위를 사용한다. 세그먼트는 블록이라고 불리기도 한다.하나의 세그먼트는 연속된 여러 개의 페이지로 구성되며 하나의 세그먼트에는 하나 이상의 오브젝트가 할당될 수 있다.유니티에서 관리되는 힙은 여러 대의 세그먼트로 이루어진다.새 할당 발생관리되는 힙에서 새로운 할당이 발생하는 GC는 다음 순서로 할당할 수 있는 공간을 찾는다.기존 세그먼트 내부에서 연속된 빈 공간을 검색충분한 공간이 있으면 해당 공간을 사용공간이 부족하거나 조각화가 많이 존재할시 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 3 원문 작성일: 2026-08-13관리되는 메모리관리되는 메모리란스크립팅 백엔드의 가상 머신에 의해 관리되는 메모리C#코드의 메모리 할당은 .NET아래에서 돌아가기에 해당 부분에 포함된다. 정확하게는 .NET 표준을 구현한 Mono, IL2CPP 런타임 위에서 돌아간다. C# 코드의 메모리 할당이 모두 관리되는 메모리는 아니다. 클래스 인스턴스, 배열, 문자열 같은 것들은 관리되는 메모리가 맞지만, NativeArry, Marshal.AllocHGlobal, stackalloc 등 명시적 네이티브, 언매니지드 할당은 C#으로 작성해도 GC 대상이 아니며, 직접 Dispose()해야 한다.관리되는 메모리는 아래의 영역들로 구성된다.관리되는 힙C# 스크립팅 스택네이티브 VM 메모리관리되는 힙C#에서 발생하.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 2 원문 작성일: 2026-08-11유니티의 메모리 구조가상 메모리 할당 분포아래는 유니티 앱이 가상 메모리 상에서 차지하는 할당을 크게 5가지 유형으로 나눈것이다.바이너리유니티 네이티브 메모리유니티 관리되는 메모리그래픽스네이티브 플러그인바이너리앱 실행 파일이라고 불린다.앱 실행에 필수적인 코드와 라이브러리를 포함하는 파일이다. 변경될 수 없는 읽기 전용 정적 코드이며 클린 메모리에 해당한다.유니티 네이티브 메모리유니티 엔진의 CPP구현에 의해서 발생하는 할당이다. C# 그래픽 객체를 로드시 유니티 내부에서 CPP 그래픽 객체를 생성한다. 이때 생성되는 CPP 객체 할당이 유니티 네이티브 메모리 할당에 해당한다. 더티 메모리에 속한다.유니티 관리되는 메모리 Managed MemoryC#을 포함하는 .NET .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 메모리 구조의 이해 1 원문 작성일: 2026-08-10IOS 메모리 구조와 동작 원리물리 메모리프로그램이 실행 중에 실제로 접근하는 데이터가 로드되는 공간. 하드웨어적 요소임.가상 메모리물리 메모리의 사용량은 애플리케이션이 인지하는 메모리 사용량과 다르다.물리 메모리 할당량 != 애플리케이션의 가상 메모리 할당량애플리케이션은 물리 메모리와 직접 상호작용을 하지 않으며, 애플리케이션의 메모리 할당은 가상 메모리에서 이루어 진다. 즉, 애플리케이션 수준에서는 물리 메모리에 직접 접근할 수 없다.이러한 가상 메모리를 사용하는 구조에서 프로그래머들은 물리 메모리를 핸들링 할 필요가 없으며, 운영체제는 물리 메모리를 최적화 하여 관리한다.1. 페이지와 페이지 프레임가상 메모리는 페이지 = Page 단위로 나누어 관리된다. 일반적으로 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프레임 디버거 원문 작성일: 2026-08-09프레임 디버거앱을 일시 정지한 상태에서 현재 프레임을 구성하는 유니티 랜더링 이벤트를 순서대로 보여주는 도구렌더링 순서 시각화렌더링 최적화 단서 찾기렌더링 배치 분석그래픽 버그 분석상단Window => Analysis => Frame Debugger로 열 수 있다창을 연 뒤에는 원하는 플레이어를 연결할 수 있다. 이때 개발자 모드가 활성화된 빌드만 연결이 가능하다.연결된 상태에서 Enable을 누를시 플레이어가 일시정지되면서 해당 프레임을 그리는 과정에 사용된 렌더링 이벤트들을 프레임 디버거에 표시해준다.프레임 디버거 창의 구성은 아래와 같다이벤트 스크러버현재 프레임에서 발생한 렌더링 이벤트를 앞뒤로 이동하며 확인가능이벤트 계층 구조현재 프레임을 구성하는 렌더링 이벤트들이.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 배처 원문 작성일: 2026-08-08렌더링 병목대중적으로 많은 드로우콜이 병목의 원인으로 꼽지만, 현대의 GPU는 충분이 강력하기 때문에 이는 크게 문제가 되지 않는다.일반적으로 더 큰 비용은 렌더 파이프 라인 상태 변경에 있다.일반적으로 연산 자체보다 연산 준비에 비용이 더 크기 때문이다. 렌더 파이프라인 상태 전환은 CPU, GPU 모두에게 비용이 든다.CPU 부담유니티에서 드로우 직전 다른 셰이더 패스를 사용할시 내부적으로 그래픽스 드라이버에 새로운 상태를 설정하라는 명령이 들어간다. 이 과정에서 API 호출 오버헤드가 발생하여 GPU로 전송해야 하는 버퍼가 늘어난다.GPU 부담새로운 렌더 파이프라인 상태를 위하여 기존 파이프라인을 멈추고 재구성하는 과정이 필요하다. 이때 GPU 파이프라인에 지연이 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 그래픽스 명령어 원문 작성일: 2026-08-05그래픽스 명령어그래픽스 명렁어란?GPU가 렌더링과 관련된 작업을 수행하도록 지시하는것. 보통 그래픽스 드라이버 API를 통해 실행, GPU로 업로드 된다.여러 그래픽스 API들이 사용하는 명령어들- Draw Call도형을 그리도록 요청Clearing프레임 버퍼를 초기화블렌딩 설정알파 블렌딩 방식등을 설정하여 색상 조합 방식을 지정버퍼 설정 및 텍스처 설정버퍼와 텍스처를 GPU에 전달, 상태 설정렌더 파이프라인 상태 설정 = Set Render Pipeline State드로우 콜을 발행하기 전에 적용할 파이프라인 상태를 지정CPU에서 생성된 그래픽스 명령어는 명령어 버퍼 = Command Buffer에 담겨 GPU로 전송된다.그래픽스 명렁어를 어떤 순서로 실행하는 가에 따라.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 병목 지점 찾기 원문 작성일: 2026-08-04병목 스레드 찾기전체 스레드가 모두 동시에 병목이 되는 경우는 매우 드물다. 그렇기에 프로파일러로 어떤 스레드에서 병목이 발생하는지 파악하는 것이 중요하다.이때 첫 단계로 CPU 프로파일러에서 멩니 스레드가 다른 스레드 작업 완료를 대기하고 있는지를 확인해야 한다. 이때 아래의 대기 마커를 확인할 필요가 있다.메인 스레드에서 확인되는 주요 대기 마커Gfx.WaitForPresentOnGfxThread렌더 스레드 병목 또는 GPU 병목WaitForJobGroupID잡 워커 스레드 병목WaitForJobGroupID는 직접 확인하려 했는데 확인이 되지 않는다. WaitForJobGroupID — "A Sync Fence on a JobHandle was triggered. .. 2026. 9. 12.
개발 Flow에 대한 이야기 원문 작성일: 2026-07-10개발을 할때 보통 설계를 머리든, 실제 기록이든 하고 진행하게 된다. 이때 개발을 하다가 다음과 같은 양자 택일에 대해서 생각했다.설계를 할때부터 최대한 생각하는 시간을 가져서 최대한 최적화된 코드를 한번에 내는것우선 작동하는 매커니즘으로 작동을 확인한 뒤, 최적화를 진행하여 완성본을 내는 방식이때 서로 장단점이 있다고 생각한다.설계를 완성도를 우선시 할때장점1. 재작업 최소화이미 코드 단계에서 필요 없는 코드를 덜어내었기 때문에, 이후 작업에서 해당 부분이 병목을 일으킬 가능성이 낮아진다.2. 코드 일관성작업자가 짜는 코드 스타일이 반영되서 작성될 것이기 때문에 타 스크립트들과 비슷한 형태가 될 것이고, 이는 코드 리뷰시 좀더 원활하게 할 수 있도록 도움을 준다.단점1... 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프로파일러 차트 보기 원문 작성일: 2026-07-08CPU 모듈 차트에는 메인 스레드 CPU 사용량이 시간의 흐름에 따라 그래프로 표시되며, 아래의 두 가지 지점에 주목한다. 스파이크(Spike) CPU 사용량이 짧은 시간 동안 급격히 증가한 지점 프레임 예산 초과 지점 목표 프레임 시간을 초과한 구간스파이크스파이크는 차트에서 그래프가 급격히 올라가는 구간을 의미함. 해당 프레임에서 CPU 부하가 순간적으로 많이 증가 했음을 나타냄해당 구간들은 게임 화면이 잠시 멈추거나 히칭이 발생할 수 있다. 히칭 프레임이 흔들리는 현상특히, 프레임 예산을 초과하는 스파이크는 반드시 원인을 확인해야 한다.평균 CPU 사용 시간프로파일러 UI를 확인하면 가로 방향으로 선이 보인다. 각 기준선은 아래와 같은 프레임 타임을 의미한다.. 2026. 9. 12.
서버 개발시 사용되는 HTTP Status Code 원문 작성일: 2026-07-07HTTP Status Code란?서버가 응답(Response)할 때 돌려주는 3자리 숫자로, 요청이 어떻게 처리되었는지를 나타내는 상태 값이다. "HTTP 상태 코드" 혹은 "HTTP Response Status Code"라고 부른다.상태 코드는 첫 자리 숫자를 기준으로 아래의 5가지 범주로 나뉜다. 범위 이름 의미 1xx Informational 정보 (요청을 받았고 처리 중) 2xx Success 성공 3xx Redirection 리다이렉트 (추가 동작 필요) 4xx Client Error 클라이언트 에러 5xx Server Error 서버 에러4xx — 클라이언트 에러 (Client Error)요청한 쪽(클라이언트)에 문제가 있을 때 .. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 프로파일러 기반 지식들 원문 작성일: 2026-07-06프로파일링 = profiling이란?프로그램의 다양한 수치를 수집하고 분석하는 과정유니티의 프로파일러이다 해당 창을 통하여 개발자들은 자신이 만든 게임의 어떠한 부분들이 성능에 부하를 받고 있는지 확인할 수 있다.해당 창은 아래의 4가지 구성으로 이루어져 있다.프로파일러 컨트롤프로파일링 대상을 선택하고 프라포일링을 시작하거나 중지하는 등의 상호작용이 가능프로파일러 모듈프로파일링이 가능한 모듈의 목록이 표시됨프레임 차트현재 활성화된 각 프로파일러 모듈의 차트가 이 영역에 그려짐모듈 세부 정보 창현재 선택한 프로파일러 모듈에 기록된 상세 정보가 표시됨프로파일러 부착프로파일링을 수행하기 위해서는 프로파일러를 원하는 대상에 부착하는 과정을 거쳐야 한다.이때 빌드된 유니티 플레이어.. 2026. 9. 12.
유니티 Custom Update Manager에 대한 이야기 원문 작성일: 2026-07-05유니티의 패턴중에는 이러한 패턴이 있다https://docs.unity3d.com/6000.4/Documentation/Manual/events-per-frame-optimization.html이를 이해하기 위해서는 게임 엔진에 대한 지식이 필요하다보통 게임 엔진의 경우 cpp 언어로 작성이 주로 되고, opengl, drectX, vulcan 등 그래픽스 api를 사용하여 제작된다. 이러한 엔진들이 하는것은 무엇인가?둠은 맞는 예시는 아니다만, 보통 게임 엔진들은 아래와 같은 형태를 띈다초기화 (윈도우 생성, 리소스 로드 ...)while (게임이 실행 중){ 입력 처리 (Input) - 키보드/마우스/패드 상태 갱신 (Update) -.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 최적화 준비하기 원문 작성일: 2026-07-04최적화 사전 준비게임 최적화란?전반적인 성능과 안정성을 향상 시키는것최적화 작업을 진행하기전 이하 항목을 먼저 결정해야함플렛폼과 지원 사양 결정지표와 목표결정왜 최선을 목표로 하지 않는가?최적화를 아무리 해도 개선을 할 여지가 계속 생기기 때문에또한, 목표없이 최적화를 진행할시 중요한 부분을 놓치고 사소한 부분을 고친다고 개발 자원을 낭비할 수 있음타깃 하드웨어 결정하기권장 사양, 최소 사양 기기로 나뉜다권장 사양개발자가 의도한 게임의 그래픽스 품질을 사용자 경험으 저하없이 즐길 수 있는 사양하지만 하이엔드 기기를 말하지는 않음최소 사양그래픽스 품질은 낮아지짖만 필수적인 게임 플레이는 가능한 사양이러한 기기들을 기준으로 성능 지표를 측정하고 목표수치를 설정, 최적화를 진행.. 2026. 9. 12.
레트로의 유니티 성능 최적화 - 스레드 원문 작성일: 2026-07-09스레드유니티는 다중 코어를 활용하는 멀티 스레드 엔진이다. CPU 프로파일러의 타임라인 뷰를 사용하면 여러 스레드가 동시에 실행되는 것을 확인할 수 있다.CPU 프로파일러의 하이어라키 뷰에서는 드롭다운 메뉴로 스레드 목록을 확인, 선택 후 해당 스레드의 실행 내용을 확인할 수 있다.CPU 성능 문제는 모든 스레드에서 동시 병목이 되는 일을 거의 없고, 대부분 하나의 스레드에서 집중적으로 발생한다. ㄸ환 하나의 스레드에서 발생한 지원은 다른 스레드에 영향을 주어 대기 시간을 늘리는 구조가 된다. 그렇기에 성능 분석의 첫 단계는 어떤 스레드가 병목 상태인지 식별하는 것이다.유니티의 주요 스레드는 아래와 같다.- 메인 스레드게임 로직과 엔진 루프, 대부분의 C# 스크립트가 실행.. 2026. 9. 12.
OAuth란 무엇인가? 최근 네트워크를 다루어야 하는 일을 하게 되었다. 다만, 현재 내 기술 스택으로는 야매 네트워크를 만드는 정도이기에 짜잘하게 기술을 파먹어 보려 한다. 그중 게임 로그인에서 자주 사용하고 구현할일이 있었던 OAuth = Open Authorization를 잠시 정리해보려 한다 https://ksh-coding.tistory.com/62 Spring Security + JWT를 이용한 자체 Login & OAuth2 Login(구글, 네이버, 카카오) API 구현 (5) - OAuth란? / OAuth본격적으로, OAuth2 로그인을 구현하기 전에, OAuth가 무엇인지 알아보고자 합니다. 1. OAuth(Open Authorization)란? OAuth의 사전적 정의는 다음과 같습니다. OAuth는 인터.. 2026. 5. 25.
sql 기본 문법 정리 drop table if exists testtbl;create table testtbl( id int auto_increment, name varchar(10), in_date date);테이블 생성 select id, name, in_date from testtbljoin 연결 테이블 a on a column = b columnwhere 조건group by 그룹 기준 columnorder by 정렬 기준 desc/asclimit 제한수;테이블 조회 SELECT review_id, score, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C'.. 2025. 12. 11.
데이터베이스 (2025 11 17) drop procedure if exists errorProc;delimiter $$create procedure errorProc()begin declare continue handler for 1146 select '테이블이 없음' as '메시지'; select * from noTable;end $$delimiter ;call errorProc();프로시저를 사용하여 error 핸들링도 가능하다 drop procedure if exists errorProc2;delimiter $$create procedure errorProc2()begin declare continue handler for sqlexception begin show errors; select '오류 발생' .. 2025. 11. 17.
컴퓨터 구조 - 기억장치(2025 11 17) 주기억장치 블록(K개의 단어들로 구성됨) = 하나의 캐시 라인에 적재함 b의 한 줄을 캐시 라인이라 칭한다이때 태그라는 것이 있는데, 각 캐시 라인을 식별하는 용도로 사용된다 블록주기억장치로부터 동시에 인출되는 정보들의 그룹주기억장치 용량 = 2^n 단어, 블록 = K 단어 -> 블록의 수 = 2^n / K라인캐시에서 각 블록이 저장되는 장소태그라인에 적재된 블록을 구분해주는 정보5.3 사상방식각 주기억장치 블록이 어느 캐시라인에 적재될 것인지를 결정해 주는 방식으로서, 캐시 내부 조직을 결정직접 사상완전 연관 사상세트 연관 사상1) 직접 사상각 주기억장치 블록이 지정된 하나의 캐시 라인으로만 적재됨주기억장치 주소 형식태그 필드라인에 적재되어 있는 블록의 번호라인 번호캐시의 m = 2^i 개의 라인들 중.. 2025. 11. 17.
데이터베이스 (2025 11 12) use cookdb;select U.userID, U.userName, sum(price * amount) as '총구매액', case when (sum(price * amount) >= 1500) then '최우수고객' when (sum(price * amount) >= 1000) then '우수고객' when (sum(price * amount) >= 1) then '일반고객' else '유령고객' end as '고객등급'from buytbl as B right outer join usertbl U on B.userID = U.userIDgroup by U.userID, U.userNameorder by sum(price * amount) desc;select 안쪽 속성에.. 2025. 11. 12.
컴퓨터 구조 - 기억장치 모듈 설계, 캐시 메모리(2025 11 11) 기억장치 모듈의 설계 순서컴퓨터 시스템에 필요한 기억장치 용량 결정사용할 칩들을 결정하고, 주소 표를 작성세부 회로 설계중요한 부분임 만약 필요용량이 1K ROM, 2K RAM이고주소 영역이 ROM = 0부터 RAM = 800H이고사용 가능한 칩이 1K X 8bit ROM, 512 X 8bit RAM일시 조건을 맞추려면 RAM을 4개를 사용해서 맞춰 주어야 한다이때 4개를 구분 하려면 cs가 4개 필요하기에 주소 비트 최상위 2비트를 구분 용도로 사용한다칩주소 영역 16진수주소 비트들ROM000H - 3FFH00xx xxxx xxxxRAM1800H - 9FFH100x xxxx xxxxRAM2A00H - BFFH101x xxxx xxxxRAM3C00H - DFFH110x xxxx xxxxRAM4E00H .. 2025. 11. 11.
그래픽스 Opengl - Barycentric 좌표 #define _USE_MATH_DEFINES #define GLM_ENABLE_EXPERIMENTAL#include #include #include #include #include #include #include #include "cow.h"#include "ppm_io.h"void convertNDCtoImage(const glm::vec4 vertexNDC, glm::vec4 vertexView, const uint32_t& imageWidth, const uint32_t& imageHeight, glm::vec3& vertexRaster){ vertexRaster.x = ((vertexNDC.x + 1.0f) / 2.0f) * imageWidth; vertexRaster.y = ((1... 2025. 11. 11.
데이터베이스 - SQL 프로그래밍 (2025 11 10) SQL에도 다른 프로그래밍 언어와 비슷한 분기, 흐름 제어, 반복 등의 기능이 있음 이때 프로시저에서 ;를 중복해서 사용하기에 구분을 위해 마침을 수정한다이때 delimiter를 사용하여 자신이 원하는 기호를 마침 처리 기호로 사용한다 drop procedure if exists ifProc;delimiter $$create procedure ifProc()begin declare var1 int; set var1 = 100; if var1 = 100 then select '100입니다'; else select '100이 아닙니다'; end if;end $$delimiter ;call ifProc(); drop procedure if exists ifProc; = 함수가 이미 있을.. 2025. 11. 10.
컴퓨터 구조 - 기억장치 (2025 11 10) 5.3.2 ROM Read only memory영구 저장이 가능한 반도체 기억장치읽는 것만 가능하고, 쓰는 것은 불가능아래 내용들의 저장에 사용시스템 초기화 및 진단빈번히 사용되는 함수 서브루틴제어 유니트 마이크로프로그램PROM programmable rom사용자가 한 번은 쓰는 것이 가능한 ROM EPROM erasable programmable ROM자외선을 이용하여 내용을 지우는 것이 가능한 PROM, 여러 번 쓰기가 가능 EEPROM electrically erasable PROM전기적으로 지울 수 있는 EPROM, 데이터 갱신 횟수 제한있음 플래시 메모리페이지 단위 읽기/쓰기 가능삭제는 블록 단위만 가능EEPROM에 비해 삭제 빠름, 집적 밀도 높음삭제 횟수 제한 있음하드 디스크를 대체하는 SS.. 2025. 11. 10.
QA - Testing 테스트 유형확인/리그레션 테스팅정의결함 수정 후 제거 확인을 위해 재확인 하는것목적테스트 된 프로그램 테스팅 반복결함 해결로 새로운 결함이 발생한지 확인버그가 수정되었는지 확인 = 확인 테스트수정 확인 후 다시 테스트 = 리그레이션 테스트(테스트 성공 후 다시 테스트를 하는 것)유지 보수 테스팅이미 사용되고 운영되고 있는 시스템에서 수행되는 테스트변경, 단종, 마이그레이션 될 때 발생변경 = 개선 활동에 의한 변경, 요구사항, 환경 등등마이그레이션 = 다른 플렛폼으로 옮겨가는것 테스트 수행 방법에 따른 분류동적 테스팅실제 구현된 시스템 테스팅정적 테스팅소스코드 레벨의 시스템 테스팅 도구에 의한 정적 분석정적 분석의 목적소프트웨어의 소스코드와 모델에서 결함을 발견정적 분석의 특징정적 분석은 동적 테스팅으로.. 2025. 11. 8.
네트워크 (2025 11 06) 이전신호를 그래프로 정리sin, cos로 보기 불편하기 때문에 Euler의 공식을 사용함https://namu.wiki/w/%EC%98%A4%EC%9D%BC%EB%9F%AC%20%EA%B3%B5%EC%8B%9D 오일러 공식오일러 公 式 / Euler's formula / 독일어 Eulersche Formel 1714년 로저 코츠는namu.wiki 오일러공식에서 주의깊게 볼만한 요소j라는 허수를 사용함e^j∂ = cos ∂ + jsin ∂ 이기에 복소수가 됨 그래프 값이 sin, cos로 보기 불편하기 때문에 Euler의 공식을 사용함가독성 (복소수 지수값 > sin, cos값) 오일러공식에서 주의깊게 볼만한 요소j라는 허수를 사용함e^j∂ = cos ∂ + jsin ∂ 이기에 복소수가 됨 sin ∂는 .. 2025. 11. 6.
[Unity]Project_DT - 상태이상 구현 public class Enemy : Character{ private bool _acting = false; private int? _pendingNext = null; [SerializeField] private List _states = new List(); [Header("현재 상태")] [SerializeField] private EnemyState _currentState = null; // 콜백 묶음 private Action _requestChange; private Action _reportDone; void Awake() { _states = GetComponentsInChildren(true).ToList().. 2025. 11. 5.
네트워크 (2025 11 04) 물리계층 physical layer = phy layer전선을 통해 정보를 어떻게 보내는가에 대한 계층 기기 A, B가 연결되기 위해서는 어떠한 연결이 필요함이 연결은 무선일수도, 유선일수도 있음이때 매질 = medium으로 정보를 전송함 주파수 frequencyHz(헤르츠)단위 sinusiudal function (사인 함수)크게 2종류가 존재sincos ◀ 이걸 주로 사용함주로 cos로 신호를 표시함 주파수에서 위아래 이동 최대, 최소 값이 각각 A, -A일시진폭 = A임 이때 0에서 T0까지 = 반복되는 시작과 끝을 한 주기(T0)라고 하며이때 f0(기본 주파수)는 f0 = 1/T0가 된다. f0는 파형이 1초에 몇 번 반복되는지 나타낸다(Hz단위) s(t) = 신호를 구하는 공식은 Acos(2파.. 2025. 11. 4.
컴퓨터 구조 - 기억장치 (2025 11 04) 1. 기억장치의 분류와 특성기억장치 엑세스 memory accessCPU가 어떤 정보를 기억장치에 쓰거나 기억장치로부터 읽는 동작 기억장치의 액세스 유형순차적 액세스 sequential access저장된 정보를 처음부터 순서대로 액세스하는 방식직접 액세스 direct access액세스할 위치 근처로 직접 이동한 다음에, 순차적 검색을 통하여 최종 위치에 도달하는 방식임의 액세스 random access주소에 의해 직접 기억 장소를 찾아 액세스 하며, 어떤 기억 장소든 액세스하는 시간이 동일연관 액세스 associative access저장된 내용의 특정 비트들을 비교하여, 일치하는 내용을 액세스기억장치의 설계 / 전송단위 / 주소지정 단위기억장치 시스템을 설계하는 데 있어서 고려해야 할 주요 특성들용량액세.. 2025. 11. 4.
[Unity]Project_DT - 카드 기능 수정 현재 수정해야 하는 부분이 크게 2가지가 보인다 1. 카드 처리를 적에게만 하고 있다. 즉, 자신에게 처리해야 하는경우가 없다2. 처리를 이상하게 하고 있다. damage 스크립터블을 여러개 만들어서 사용하는데, 이렇게가 아니라 spec에서 값을 가져와서 사용해야 한다 일단 1번부터 처리를 하자 // 드래그 종료 처리 public void OnEndDrag(PointerEventData eventData) { //Debug.Log("OnEndDrag"); CardArrowLineMaker.Instance.SetIsDragging(false); CardArrowLineMaker.Instance.ActiveLineDrawer(false); /.. 2025. 11. 3.