1. 힙 메모리를 사용하는 이유?

 

- 위의 그림에서 보듯이 heap의 공간과 stack 의 공간에 나누어져 있습니다.

 

- 그리고 stack메모리의 경우 사용되는 양은 런타임시 결정이 되지만 스택메모리의 최대 공간 (사용가능한) 은 컴파일 시

  이미 지정이 됩니다.

 

- 왜 스택공간이 있는데 굳이 힙 메모리를 사용해야 하는가 ? 에 대한 궁금증이 떠오르게 됩니다.

 

- 제가 경험해보고 아는 선에서 몇가지만 이야기해보겠습니다.

 

-- (1) dynamic (동적할당)

     

         알고리즘 문제를 풀 때 처럼 입력의 최대값이 정해져 있는경우 그 최대치로 메모리 공간을 할당해서 컴파일 시간

         에 결정을 해서 스택메모리를 사용할 수도 있지만 (큰 사이즈의 경우 다음에 언급), 만약 사용자에 입력에 의해서 

         공간의 변동이 정해지는 경우 개발자 입장에서 미리 그 크기를 예측할 수 없으므로 런타임 시간에 변동에 맞게 

         메모리를 할당해야하는 경우 입니다.

 

-- (2) size 문제 (엄청 큰)

 

         이전 게시글에서 언급했다싶이 stack memory의 경우 최대 사이즈가 미리 정해지는 만큼 엄청 큰 사이즈가 필요

         할 경우 stack overflow가 발생할 수 있습니다. 이 때 스택에는 주소를 가리키는 포인터만 설정해주고, heap 메모

         리 공간에 큰 사이즈를 선언해서 가리키게끔 할 수 있습니다.

 

-- (3) 스택메모리의 life cycle

 

         스택 메모리의 경우 stack frame단위로 쌓이게 되는데 그 함수가 끝날경우 (life cycle)이 끝날 경우, 스택 메모리에

         서 해제됩니다. 이 경우에도 어떤 데이터를 유지하고 싶을 때는 힙 메모리 공간을 사용합니다. (직접 해제 해주기 

         전 까지 힙 영역에 저장하고 있는 데이터는 사라지지 않으므로)

 

 

 

 

2. 힙 메모리 사용 in C++

 

- stack 메모리 대신 heap 메모리를 사용하는 경우는 필요한 용량이 매우 크다던지, dynamic(동적)으로 런타임 시간에

   결정이 되는 변수를 사용한다던지 할 때인데요

 

- C++에서는 new를 통해서 힙에 공간을 할당 받고 스택 메모리에서의 포인터 변수가 이를 가리키도록 합니다.

 

- new를 통해서 할당을 받을경우 반드시 까먹지말고 delete을 해주어야만 메모리 leak을 막을 수 있습니다.

 

- new이외에도 unique_ptr 을 사용한다던지, 배열의 경우 vector를 사용하여 힙에 선언을 해준다면

 

- 메모리 해제 과정을 신경쓰지 않아도 되게끔 좀 더 안전하게 사용하실 수도 있습니다. 하지만 new를 사용하신다면

 

- 까먹지말고 반드시 delete으로 해제를 해주어야 한다는 점.!

 

 

 

 

3. stack 메모리 사용할 때와 heap 메모리 사용할 때의 차이점(장단점?)

 

- 우선 stack에 선언할 경우 속도가 더 빠릅니다.

 

- heap의 경우 원하는 만큼의 공간의 힙메모리상에서 찾고 할당하고 나중에는 이를 해제해야 하므로 상대적으로 시간이

 

- 많이 소요됩니다.

 

- 그럼에도 heap에는 큰 용량을 필요로 하는 변수라던지, 동적으로 결정이 되는 변수일 때 사용이 가능합니다.

 

- 그러므로 큰 사이즈가 아닌 경우 (100kb 미만? 정도?) 정도는 속도가 빠른 스택메모리를 사용하는 것이 좋습니다.

 

- 또 다른 차이점은 스택메모리의 경우 여러번수를 선언하고 주소를 찍어보시면 아시겠지만,

 

- 빽빽하게?? a가 4바이트를 차지하고, b가 4바이트를 차지한다면 메모리 주소도 4바이트(32bits) 차이가 납니다.

                   (물론 연속되게 위치하고 있을 경우를 가정)

 

- 중간에 빈 공간없이 빽빽하게 차지하지만, 힙의 경우 구멍이 송송뚤린 것 처럼 사이에 공간이 있습니다.

 

- 스택처럼 빡빡하게 메모리를 채우지는 않습니다.

로컬 컴퓨터(내 컴퓨터)에서 서버를 구축 하여 사용하여도 되지만

 

클라이언트와 서버의 측면에서

 

서버는 항시 요청대기를 하고 있는 상태이어야 한다.

 

로컬컴퓨터를 이용시 항상 컴퓨터를 켜두어야 한다. 

 

이런 불편함을 극복하기 위해 아마존에서 제공 하는 AWS 인스턴스 서버를 임대하여 사용하면 

 

이 불편함을 해소 할 수 있고 실제 서버를 운용할 때도 메인 서버에서 바로 작업을 하기 보다는 테스트용

 

서버에서 작업을 한 후 메인 서버에 적용을 한다고 한다.

 

일단 아마존 aws 에 접속하여 회원가입을 해줍시다. ~ 

 

회원가입을 한 후 아이디의 지역을 서울로 바꿔줍시다 (아마 처음에는 미국 ~ 로 설정되어 있는 것으로 기억합니다.)

 

접속 하셨다면 위의 화면에서 EC2에 접근을 해줍니다.

 

 

저 인스턴스는 현재 제가 종료를 방금 눌러서 저런 상태입니다. 위의 빨간색의 인스턴스 시작을

 

눌러줍시다.

 

저 같은 경우 우분투 서버 18.04 버전을 사용하기 위한 인스턴스를 생성하기위하여 빨간색을 선택하였습니다.

 

 

제가 사용할 것은 프리티어로 제공해주는 인스턴스를 사용할 것이므로 프리티어 사용가능 표시가된 유형을 선택하여

 

줍니다.

 

다음 화면에서는 저같은 경우 특별히 변동시켜 적용해줄만한 사항이 없어서 다음:스토리지 추가를 눌러줍니다.

 

스토리지 설정입니다. 8기가로 기본입력 되어 있으나 혹시 모르는 마음에... 밑에 말 처럼 프리티어로 제공 가능한

 

최대 용량으로 설정해 주었습니다.

그 다음 보안 그룹 설정입니다. 자신이 사용할 프로토콜에 따른 포트 번호와 접근성에 대한 제한을 주는 

 

부분입니다. 각자가 원하시는 설정에 맞춰서 설정해 주시면 되겠습니다.

 

이 부분은 인스턴스 생성 이후에도 보안그룹 수정을 통해서 설정을 수정 하실 수 있습니다.

그 후 서버에 접근할 수 있드로고 키페어를 선택 혹은 생성해 주어야 합니다.

 

저는 기존 키페어를 발급 받은 것이 있었으므로 그대로 사용하였으나 없으 시다면 새 키 페어 생성을 하시면 됩니다.

 

이 키페어는 외부에 공개 되어서는 안되며 발급 받은 본인이 매우 잘 관리를 해주셔야 합니다

위와 같이 인스턴스가 생성 되었습니다 !!!!

 

퍼블릭IP를 통하여 접근 가능 하나 현재는 서버 내부에 아무 것도 설치하지 않았으므로 특정한 것이 뜨지는 않습니다..

 

보안그룹이나 키페어 관리에 관련된 부분은 체크된 부분을 통하여 접근하여 수정해주시면 됩니다.

 

** 인터넷이란? 

 - "network of networks"

 - mobile network, global ISP, home network, regional ISP, institutional network 등등 을 과 연결된 모든 네트워크

 - client에게 서비스를 제공하는 인프라

 

 

** IETF: Internet Engineering Task Force (승인 해주는 기관) - Standard

 

 

** 프로토콜이란? (what's a protocol)

 - 컴퓨터와 컴퓨터사이, 또는 한 장치와 다른 장치 사이에서 데이터를 원활히 주고받기 위하여 약속한 여러 가지 규약

    ( 출처: 네이버 사전)

 -  ex )  TCP connection request(client) 를 보내면 TCP connection response(server) 그후 자료 요청 밑 파일 전송 등

 

 

** 네트워크의 구조들( network structure)

 -  network edge (host: client and server(서버는 때때로 데이터센터(data centers)에 있다)

 -  네트워크에 접근 하는 physical media (유선, 무선 등)

 -  network core (interconnected routers, network of networks)

 

** physical media들의 네트워크 접근

 - residential access nets (집)

 - institutional access network ( 학교, 회사 등)

 - mobile access networks (스마트폰,,,,)

 - 공유매체일수도 있고 전용매체 일 수도 있다. (shared or dedicated? )

 

 

** 네트워크 연결 방식

 -  1. DSL(digital subscriber line) : 옛날에 주로 쓰던 연결 방식이다.

                                            전화 라인을 사용 , 속도가 비대칭적이다.

                                            ( 주로 데이터를 업로드(<1Mbps) 하려기보다 받으려고(<10Mbps) 하는 경우가 많았                                               기 때문에)

 - 2.  cable network : 원룸 등에서 분리배선 시키는 방식 (shared network)

                            HFC(hybrid fiber coax) -- 광섬유와 동축케이블을 함계 사용하는 선로망.

                                                             이 네트워크는 전부 광섬유로 구선하는 네트워크보다 비용이

                                                             적게 들면서 광섬유의 안정성 및 전송 속도 이점을 최대한 이용.

                            DSL 방식은 중앙서버에 전용 노선을 가지는 것과 달리 이 방식은 ISProuter을 통한 shared access                              network 이다.

 - 3. home netwok : cable 또는  DSL을 통해 들어와서 ROUTER를 사용하여 무선 또는 유선 통신 (wireless or wired )

 - 4. Enterprise access networks( Ethernet) : 학교나 회사 등등

                                                         더 높은 계층의 장비가 필요 (2계층 스위치, 3계층 라우터 등을 통해 연결)

 

** phsical media

 - 1. coaxial cable (동축 케이블) 

 - 2. fiber optic cable (광케이블) - 빠른속도, 단 잘 휘지(?) 않는다.

 - 3. radio - 반사, 간섭, 장애물 등에 의해 통신오류가 발생할 수 있다.

 

'학부생 공부 > 네트워크' 카테고리의 다른 글

Web and HTTP  (0) 2020.04.06
TCP, UDP  (0) 2020.04.06
Application Layer  (0) 2020.04.04
Internet structure  (0) 2020.03.26
Network Core  (0) 2020.03.25

+ Recent posts