전체 글 50

구름톤 챌린지 2주차 - 1

2023.08.21.(월) #include #include #include #include #include #include #include using namespace std; string getString(string & S, int a, int b); int main() { ios::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL); int N; string S; cin >> N >> S; vector strings; set checkDup; // 1. 일단 가능한 문자열들 만들어서 vector에 저장하기 // 언뜻보기엔 (getString에도 반복문이 있어서) O(N^3)이지만, `temp[j-i] = S[j];`가 실행되는 횟수는 대략 1+2+...+..

구름톤 챌린지 1주차 - 1

2023.08.14.(월) #include int main() { long double W=0, R=0; scanf("%Lf %Lf", &W, &R); printf("%d", (int) ( W*(1+(R/30)) ) ); return 0; } 일단 계산을 할 때는 정확하게 계산해야해서 실수형 type의 변수를 선언하여 사용했습니다. 출력할 때는 소숫점을 바리라고 하여 (int)로 casting 후 출력했습니다. 2023.08.15.(화) #include void calculate(int *T, int *M, int c[], int size_c) { int sum = 0; for (int i=0; i

부스트캠프 웹・모바일 8기 챌린지 수료 후기

> 챌린지 前이제 3-1 학기를 마치고, 지금까지 나름대로 전공 공부를 열심히 했다고 생각했습니다. 아직 DB나 데이터통신 같이 배우지 못한 주요 과목도 있었지만 대부분 기초적인 CS 지식은 나름대로 잘 공부해뒀다고 생각했고, 이제 수많은 CS 관련 직종에서 어떤 분야로 진로를 정할지 고민하던 중이었습니다.그 때 부스트캠프 웹 개발 분야를 모집한다는 글을 보게 되었습니다. 앞서 말씀 드렸듯 전공 기초를 잘 닦아뒀다고 생각했기에 부스트캠프에서 웹 개발에 관련된 기술을 배워도 잘 따라갈 수 있을 것이라고 생각하고 지원하게 되었습니다.진로 분야를 완벽하게 정하진 못 했었지만, 웹 개발은 평소에도 관심이 있었기에 일단 부딪혀보자는 식으로 지원했습니다.제가 해본 경험이라곤 교내에서 한 게 대부분이었고, 다른 선배..

후기 2023.08.13

[Network Programming] MultiTherad 기반 서버

Thread(쓰레드) (예전에 시프 공부할 때도 정리 잘 해뒀으니 이 글초반에 쓰레드 설명하는 부분이랑 같이 보면 좋음.) 쓰레드의 등장 배경 1. 프로세스의 생성은 많은 리소스가 소모된다. 2. process간 context-switching은 오버헤드가 크다.(쓰레드에 비해...) 3. 프로세스들은 메모리 공간이 독립적이라 특별한 경로가 아니면 데이터 공유가 안된다. Thread(쓰레드)는 한 Process내의 또 다른 실행 흐름이다. 구체적으로 말하자면, 쓰레드들은 Stack을 제외한 공간을 공유한다.(+ 다른 실행 흐름이니까 당연히 PC값도 다르겠지..) 한 process 내에 존재하므로 프로세스처럼 아예 다른 메모리 공간을 할당받을 필요도 없고, context-switching이 일어나도 오버헤..

[Network Programming] 소켓과 표준 입출력(standard I/O)

C standard에 정의된 I/O 함수를 사용하면 다음과 같은 장점이 있다. (ex. fprintf) 1. Portability에 좋다. 2. 버퍼링을 통한 성능 향상에 도움이 된다. 소켓을 만들면 기본적으로 kernel에서 버퍼를 만든다. 그게 위 그림의 우측에 보이는 소켓 버퍼이다. TCP 소켓은 오류가 발생하면 데이터 재전송도 해야 되고 하니 이런 버퍼가 꼭 필요하다. 그렇다고 UDP 소켓엔 버퍼가 없는건 아니다. 데이터를 보낼 때도 잠시 담아둬야 할 수도 있고, 받을 때도 application에서 읽기 전까지 잠시 담아둬야 할 수도 있으니 UDP 소켓에서도 버퍼는 필요하다. 그런데 standard I/O 함수는 내부적으로 응용 계층에서 버퍼를 또 사용한다. 즉, 표준 입출력 함수를 사용하면 위 ..

[Network Programming] Multicast & Broadcast

> Multicast Multicast 데이터 전송 방식 - 특정 Multicast 그룹을 대상으로 데이터를 딱 한번 전송 - 그럼 해당 그룹에 속하는 client는 모두 데이터를 수신한다. - Multicast 그룹 수는 IP 주소 범위 내에서 얼마든 추가 가능 - 특정 Multicast 그룹으로 전송되는 데이터를 수신하려면 거기에 가입하면 된다. - Multicast에선 연결의 개념이 없으므로 UDP socket을 기반으로 전송 - 모든 host에 데이터를 전송해야할때 그냥 TCP나 UDP를 쓰는 것보다 트래픽 양 ↓ 앞서 IPv4 주소를 설명할 때, Class D(224.0.0.0~239.255.255.255)의 주소들이 Multicast를 위한 주소라고 했다. 여기서 각 IP 주소가 각 Multi..

[Network Programming] 다양한 IO Functions

send & recv #include ssize_t send(int sockfd, const viod * buf, size_t nbytes, int flags); ssize_t recv(int sockfd, viod * buf, size_t nbytes, int flags); read/write와 달리 send와 recv는 소켓 전용 입출력 함수이다.(TCP 전용! UDP에서 쓰려면 주소 정보관련 인자도 있어야 함, recvfrom()/sendto() 처럼...) read/write랑 마지막 인자로 int flags가 추가된 것 말곤 다를게 없다. 따라서 flags 인자에 사용할 수 있는 옵션과 그 의미에 대해 알아보자. bitwise-or(|) 연산자로 여러 옵션을 선택할 수도 있다. OS에 따라 옵션..

[Network Programming] IO Multiplexing 기반 서버

MultiProcess 서버는 아래와 같은 단점을 가진다. 1. process의 빈번한 생성은 성능 저하로 이어진다. 2. MultiProcess의 흐름을 고려해야하므로 구현이 쉽지 않다. 3. 만약 process간 통신까지 해야한다면 구현이 더 복잡해진다. 따라서 하나의 process가 다수의 client에게 서비스를 제공할 수 있는, 하나의 process가 여러 개의 소켓을 핸들링 할 수 있는 IO MultiPlexing이 그 대안이다. (물론 무거운 작업이면 process 하나가 따로 해주는게 맞다고 교수님께서 말씀하심) 데이터 송수신이 무조건 실시간으로 0의 지연시간을 가져아하는 것은 아니므로 멀티플렉싱이 가능하다. 이를 위한 기능을 하나씩 배워보자. select() 함수를 사용하면 멀티플렉싱 서..