본문 바로가기
728x90

개발일지40

네트워크 프로그래밍(Network Programming) | 웹 서버, 소형 웹 서버 Tiny 만들기 1. 웹 서버 웹 클라이언트(브라우저)와 서버는 HTTP(Hypertext Transfer Protocol)라는 텍스트 기반의 프로토콜을 사용하여 상호 연동하고, 웹 콘텐츠는 HTML(Hypertext Markup Language) 언어로 작성된다. | 웹 콘텐츠 웹 콘텐츠는 MIME(Multipurpose Internet Mail Extensions) 타입을 갖는 바이트 배열이다. 웹 서버는 두 가지 서로 다른 방법으로 클라이언트에게 콘텐츠를 제공한다. 정적 콘텐츠 디스크 파일(정적 콘텐츠)을 가져와서 그 내용을 클라이언트에게 전달. 파일을 클라이언트에게 돌려주는 작업은 정적 콘텐츠를 처리한다고 말한다. 동적 콘텐츠 실행파일을 돌리고, 그 출력을 클라이언트에게 보낸다. 실행파일이 런타임에 만든 출력을 .. 2021. 9. 24.
네트워크 프로그래밍(Network Programming) | 소켓 인터페이스, getaddrinfo함수, addrinfo구조체 1. 소켓 인터페이스 | 소켓 인터페이스 네트워크 응용을 만들기 위한 Unix I/O 함수들과 함께 사용되는 함수들의 집합 | 소켓(socket) 통신을 위한 끝점(End point of a connection). 각 소켓은 인터넷 주소와 16비트 정수 포트로 이루어진 소켓 주소를 가지며, address : port 로 나타낸다. 소켓은 모든 운영체제에서 지원한다. (데이터를 주고 받기 위해서 소켓 디스크립터(socket descriptor)라는 파일시스템을 이용) 클라이언트의 소켓 주소 내의 포트는 클라이언트가 연결 요청을 할 때 커널이 자동으로 할당한다. 서버의 소켓 주소에 있는 포트는 대개 영구적으로 이 서비스에 연결되는 Well-known port다. (예시- 웹 서버 포트: 80, 이메일 서버 .. 2021. 9. 24.
네트워크 프로그래밍(Network Programming) | 클라이언트, 서버, 네트워크, 인터넷, TCP/IP, IP 개념 정리 1. 클라이언트-서버 프로그래밍 모델 모든 네트워크 응용 프로그램은 클라이언트-서버 모델에 기초하고 있다. 이 모델에서 근본적인 연산은 트랜잭션이다. 클라이언트-서버 트랜잭션은 네 단계로 구성된다. 클라이언트가 서비스를 필요로 할 때, 클라이언트는 한 개의 요청(request)을 서버에 보내는 것으로 트랜잭션을 개시한다. (예시- 웹 브라우저가 파일을 필요로 할 때, 웹 서버로 요청 보냄) 서버는 요청을 받고, 해석하고, 자신의 자원들을 적절한 방법으로 조작한다. (예시- 웹 서버가 클라이언트로부터 요청을 받을 때, 디스크 파일 읽음) 서버는 응답(response)을 클라이언트로 보내고, 그 후 다음 요청을 기다린다. 클라이언트는 응답을 받고 이것을 처리한다. (예시- 웹 브라우저가 서버로부터 페이지를 .. 2021. 9. 23.
정글에서 살아남기 | WEEK06 | 시스템 콜, 데이터 세그먼트, sbrk, 메모리 단편화? 태초마을로 돌아가자(컴퓨터 시스템 기초 이해 필수) 정글 6주 차!! week06의 키워드 WEEK06: 시스템 콜, 데이터 세그먼트, sbrk, 메모리 단편화 week05주 때 RBTREE를 구현하면서 malloc을 사용했었다. 그리고 이번 주 차에는 내가 사용했던 malloc함수를 내가 만드는 것이 목표! 1. Malloc Lab 구현 저번 주에는 실사용에 사용되는 효율적인 자료구조를 통해 C언어 문법에 대해서 익혔다면, 이번 주는 C언어에서 메모리 할당에 사용되는 malloc함수를 직접 구현하면서 데이터가 메모리에 어떤 방법으로 할당되는지 등 메모리에 대한 개념을 이해하는 것이 과제의 목표였다. 말롭랩 과제에 대한 자세한 설명은 아래 링크로! 2021.09.14 - [개발자 도전기/[SW사관학교 정글] 개발일지] - Malloc Lab | 동적 메모.. 2021. 9. 19.
Malloc Lab | 동적 메모리 할당(3) - Implicit - first fit, next fit 코드 구현 Malloc Lab | 동적 메모리 할당(1) - 개념 정리 Malloc Lab | 동적 메모리 할당(2) - 묵시적 가용 리스트(Implicit free list) 더보기 그 외 explicit 방법 구현 등 코드도 보고 싶다면? https://github.com/dapsu/week06-malloclab.git Implicit - First fit /* * mm-naive.c - The fastest, least memory-efficient malloc package. * * In this naive approach, a block is allocated by simply incrementing * the brk pointer. A block is pure payload. There are no he.. 2021. 9. 15.
Malloc Lab | 동적 메모리 할당(2) - 묵시적 가용 리스트(Implicit free list) Malloc Lab | 동적 메모리 할당(1) - 개념 정리 Malloc Lab | 동적 메모리 할당(1) - 개념 정리 동적 메모리 할당? C언어를 공부하면서 배열을 정할 때 배열의 크기도 명확하게 설정해야 하는 것이 파이썬과 달라 조금 낯설었다. 예를 들어 A대학교 B학과의 학년 별로 코로나 백신 접종을 얼 dapsu-startup.tistory.com 이전 포스팅에서 동적 메모리에 대한 간단한 개념 소개와 명시적 할당기 중 묵시적 가용 리스트, 명시적 가용 리스트 두 가지 방법에 대해서 짧게 설명했었다. 이번에는 묵시적 가용리스트(Implicit free list, 줄여서 Implicit라고 부르겠음)에 대해 정리해보려고 한다. 묵시적 가용 리스트(Implicit free list) 실용적인 할당기.. 2021. 9. 14.
Malloc Lab | 동적 메모리 할당(1) - 개념 정리 동적 메모리 할당? C언어를 공부하면서 배열을 정할 때 배열의 크기도 명확하게 설정해야 하는 것이 파이썬과 달라 조금 낯설었다. 예를 들어 A대학교 B학과의 학년 별로 코로나 백신 접종을 얼마나 했는지 결과를 출력하는 프로그램을 만든다고 생각해보자. 각 학년 별로 학생 수가 모두 다르기 때문에 배열을 일일히 정하는 것은 효율적이지 않다고 느껴진다(물론 학생 수 정도야 귀찮아도 가능하겠지만, 다뤄야 하는 데이터가 방대해진다면 어질어질해진다). 그렇다고 크기를 '충분히 크게' 잡게 된다면 메모리가 낭비되는 경우가 발생할 것이다. 이런 낭비를 막기 위해 '학년 별 학생 수'를 입력 받고 그 학생 수 만큼 배열의 크기를 정할 수 있다면 효율적일 것이고, 이를 가능하도록 하는 방법이 바로 동적 메모리 할당이다. .. 2021. 9. 14.
정글에서 살아남기 | WEEK05 | 이런 C......!! Red-Black TREE 구현하기 4주 간 알고리즘 던전에서 나왔더니 C언어의 지옥이 다가왔다...! 새로운 탐험 시작!! 운영진님들이 말하는 C언어란... 시작부터 겁을 주신다...ㅋㅋ 여하튼 C는 Assembly 언어와 매우 가까운 언어로, C를 사용하면서 조금 더 컴퓨터의 본질에 가까이 가는 것을 기대하신다고 한다. 그리고 이번 week05주 차의 키워드 WEEK05: 동적 메모리 할당, 포인터, 메모리 누수, 균형 이진 탐색 트리 저 단어들은 뭘까...? 뭐 알고리즘 할 때도 당연히 다 모르던 키워드들이었기 때문에 크게 신경쓰지 않았다. 결국엔 다 알게 될 것이기 때문에!! 1. 개발환경 설치 C언어 개발을 더 매끄럽게 하기 위해 Ubuntu 20.04 LTS (x86_64)환경에서 gcc 9.x 컴파일러를 사용하는 것을 권장하셨.. 2021. 9. 12.
정글에서 살아남기 | WEEK04 | 다이나믹 프로그래밍은 다이나믹하지 않다구 드디어 알고리즘 마지막 4주 차...!!! 진짜 내가 컴퓨팅 사고로 전환하고 있는지 잘 모르겠지만 확실한 점은 알고리즘 문제를 건드릴 수는 있게 되었다는 점..? 처음에는 알고리즘 문제를 보고 나서 어떻게 풀어야 할지 접근조차 하지 못했었는데 이제는 완벽하게 정답을 출력하지는 못하더라도 이렇게 풀면 되겠다~라는 생각을 가지고 코드를 작성하기는 한다는 것(물론 결국 오답이다 ㅎㅎㅎ 이제 화나지도 않아) 여하튼, WEEK04주 차의 알고리즘 키워드! WEEK04 : 동적 프로그래밍, 그리디 알고리즘 이번 주 과제의 수는 14개였다. 저번주처럼 과제 수가 적었고, 그 의미는 동적 프로그래밍(dp), 그리디 알고리즘(greedy) 역시 만만치 않게 어려운 카테고리라는 것이다. 그래도 저번 주에 기대 이상으로 d.. 2021. 9. 5.
728x90
LIST