메모리
·
개발정보
프로그램(프로세스)이(가) 실행되면 OS는 메모리에 공간을 할당해준다. 공간을 할당하는 것이지 메모리 전체의 영역이 Code, Data, Heap, Stack 으로 이루어진 것이 아닌 일정 공간을 4가지로 나누는 것이다. 메모리 영역을 크게 정적인 영역과 동적인 영역으로 나눠보았다. 정적인 영역 프로그램이 시작할 때 할당되고, 프로그램이 종료되면 소멸한다. 코드 영역 실행할 프로그램의 코드 즉, 소스코드가 저장되는 영역. 다른 이름으로 텍스트 영역이라고 부르기도 한다. CPU가 코드 영역에서 저장된 명령을 하나씩 가져가서 처리하게 된다. ※ JVM, Node or 브라우저에서는 TEXT 영역 X 데이터 영역 전역 변수와 정적 변수가 저장되는 영역 3가지로 나뉜다. Read-Only : const, fin..
힙 메모리 단편화
·
개발정보
메모리 단편화? 내부 단편화와 외부 단편화로 나뉜다. 내부 단편화 프로세스에서 필요로 하는 메모리의 양보다 더 많이 할당된 것을 말한다. 20mb만 필요한 메모리가 30mb가 할당된다면 10mb의 내부 단편화가 발생한다. 외부 단편화 메모리를 할당하고 난 다음에 작은 크기의 조각들이 남아서 사용할 수 없는 공간이 많아지는 것을 말한다. 해결방법으론 크게 3가지가 있다. 1. 페이징 2. 세그멘테이션 3. 메모리 풀 페이징 ? 가상 메모리를 사용한다. 사용하지 않는 프레임을 페이지에 옮기고, 필요한 메모리를 페이지 단위로 프레임에 옮기는 방법. 페이징 기법을 사용하면 외부 단편화 문제는 해결할 수 있지만 페이지 단위를 작게 하지 않는 이상 내부 단편화는 해결하지 못한다. ※ 페이지 ? 보조기억장치를 이용한..
Github 동작 원리
·
개발정보
개발자라면 당연히 자주 사용하게 될 Github인데, “ Github는 어떤 방식으로 동작을 하는 것일까? “ 라는 고민을 하였다. Git 프로젝트는 원격 저장소를 포함해서 4가지 요소로 나누어진다. Working Directory Local Repository Staging Area Remote Repository Working Directory 간단하게 말하면 로컬 환경에서의 작업 파일이다. Local Repository Working Directory에 있는 .git 폴더이다. git add, git commit 을 하면 .git 폴더 안의 데이터들과 해시를 담고 있는 파일이 수정된다. 여기서 수정되는 내용이 커밋을 통해 수정되는 내역이다. Staging Area .get, 즉 Local Repos..
웹소켓
·
개발정보
웹소켓? TCP 연결에 완전한 이중 통신 채널을 제공하는 컴퓨터 프로토콜이다. 서버와 클라이언트 간의 웹소켓 연결은 HTTP 프로토콜을 통해 이루어지는데, 연결이 정상적으로 이루어진다면 서버와 클라이언트 간에 웹소켓 연결(TCP/IP)이 이루어지고 일정 시간이 지나면 HTTP 연결은 자동으로 끊어진다. 서버와 클라이언트 간의 효율정인 양방향 통신과 데이터 전송을 위해서 사용된다. 일반적으론 클라이언트에서 Request를 보내면 서버에서 Response로 응답하는 StateLess 관계로 알고 있다. 즉, HTTP 통신은 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신 방식 하지만, 웹소켓은 StateFull하다. 매번 요청을 보내는 것이 아닌 한 번의 요청으로 HandShake 과정을 거..
Side Effect
·
개발정보
일반적으로 사이드 이펙트는 " 의도하지 않은 결과 " 를 의미한다. 특정 작업의 결과로 예상하지 않던 부수적인 효과를 말한다. 함수를 입력값에 대한 일정한 출력을 하는 것으로 가정할 때, 출력값에 영향을 미치지 않는 모든 결과를 Side Effect 라고 한다. 예를들어, a + b 를 해서 결과값을 리턴하는 함수에서 계산 기록을 저장하거나, 네트워크로 전송하는 것을 모두 Side Effect 라고 한다.
Singleton 패턴
·
개발정보
1. Singleton 객체의 인스턴스가 오직 1개만 생성되는 패턴이다. 사용하는 이유 최초 한번만 new 연산자를 사용해서 고정된 메모리 영역을 사용하기 때문에 다시 접근할 때 메모리 낭비를 방지할 수 있다. 뿐만 아니라 이미 생성된 인스턴스를 사용하니 속도 측면에서도 이점이 있으며, 서로 다른 클래스간 데이터 공유가 쉬워진다. 싱글톤 인스턴스는 전역으로 사용되는 인스턴스이기 때문에 다른 클래스의 인스턴스들이 접근하여 사용할 수 있다. 하지만 동시에 많은 접근을 하게되면 동시성 문제가 발생할 수 있다. 문제점 당연히 장점만 있는 것이 아닌 단점도 있는다. 1. Singleton 패턴을 구현하는 코드 자체가 많이 필요하다. 2. 테스트가 어렵다. 어플리케이션 전역에서 상태를 공유하기 때문에 테스트를 진행..
바인딩
·
개발정보
1. 바인딩? 프로그램의 기본 단위가 가질 수 있는 구성 요소의 구체적인 값, 성격을 확정하는 것을 말한다. String fruit = "apple"; 변수 선언을 예시로 들어본다면, String 은 변수의 자료형 fruit은 변수의 이름 apple은 변수의 자료값 변수의 속성의 구체적인 값이다. 이처럼 구체적인 값을 할당하는 과정을 바인딩이라고 한다. 바인딩은 일어나는 시간에 따라 정적 바인딩, 동적 바인딩으로 나뉜다. 정적 바인딩 컴파일 시간에 일어나며, 실행 중 변하지 않고 유지됨 함수의 정적 바인딩은 컴파일 시간에 호출될 해당 함수의 주소가 결정되어 바인딩 된다. 즉, 실행 파일에 호출할 함수가 위치한 메모리 주소가 이미 확정 기록된 것이다. 일반적인 함수는 정적 바인딩이 일어난다. 정적 바인딩은..
브라우저 캐싱
·
개발정보
1. 브라우저 캐싱? 사용자와 서버간 응답 속도를 높이기 위해서 사용하는 방법이다. 웹 페이지 구성요소 ( CSS, 이미지 파일 등)를 사용자의 PC에 저장했다가 다시 방문 시 PC에 저장된 요소를 꺼내 보여줌으로 속도를 빠르게 하고 트래픽 절감 효과를 주는 기법