본문 바로가기

8주차 개발일지

@정소민fan2025. 5. 7. 10:30

이번 주차의 메인 과제는 웹서버 만들기이다.

기본적으로 배워야 하는 건 네트워크 프로그래밍, 동시성 프로그래밍이다.

사실 이것도... 매 주차마다 하는 말 같지만 학부 때 배웠던 내용이다.. 심지어 소켓 프로그래밍까지 실습해 봤다

 

소켓 프로그래밍

소켓은 transport 레이어와 application 레이어 간의 통신을 중개하는 통로라고 한다.

서버에서는 연결 요청을 받아들여 큐에 넣을 리스닝 소켓, 그리고 요청을 accept하고 클라이언트와 통신할 연결 소켓이 있어야 한다.

클라이언트에서는 서버와의 통신을 위한 소켓 하나만 있으면 된다.

서버와 클라이언트 내에서 소켓을 위한 작업이 각각 다른데, 아래 노션에서 확인해보자

https://verdant-bathtub-bae.notion.site/1e57bb7778c9803ea66edf6d61739fd7?pvs=4

 

소켓 프로그래밍 | Notion

소켓

verdant-bathtub-bae.notion.site

서버에서는 socket, bind, listen, aceept

클라이언트에서는 socket, connect 함수를 사용해 소켓 작업을 한다.

 

네트워크 프로그래밍

네트워크와 네트워크 프로그래밍은 다르다고 한다. 네트워크는 5 계층 레이어를 배우면서 각각의 레이어에서 헤더를 붙이면서 캡슐화하는 과정, 그리고 동기화, 혼잡 제어, 라우팅 알고리즘을 어떻게 사용하는지 이론으로 배우고, 네트워크 프로그래밍에서는 주로 애플리케이션 레이어 내에서의 통신을 주로 다룬다. HTTP 메소드가 어떻게 되는지, 헤더가 어떻게 해석되는지, 정적 컨텐츠와 동적 컨텐츠를 어떻게 클라이언트에게 제공하는지 등을 배운다.

네트워크 프로그래밍에 대한 자세한 내용은 아래 노션에서 확인하자

https://verdant-bathtub-bae.notion.site/1e57bb7778c980e3a1f5fb2517842dc1?pvs=4

 

네트워크 프로그래밍 | Notion

데이터 수신

verdant-bathtub-bae.notion.site

사실 네트워크에 대한 내용도 같이 배웠으면 좋았을 것 같지만, 만약 배웠으면 정글의 커리큘럼이 한 달은 더 늘어나지 않았을까 싶다.

 

동시성 프로그래밍

웹 서버를 만들면서 여러 클라이언트가 동시에 접속할 수 있도록 구현하라는 요구사항이 있다. 하지만 소켓 함수들에 블락킹 함수도 있고, 한 번에 하나의 클라이언트와 통신할 수 있기에 멀티쓰레딩이 필수로 요구된다. 멀티쓰레딩을 하면서 공유 자원에 동시에 여러 쓰레드가 접근할 수 있기에 발생하는 여러 동기화 문제들이 있다. 이러한 동시성을 제어하기 위한 프로그래밍이 동시성 프로그래밍이다.

https://verdant-bathtub-bae.notion.site/1eb7bb7778c980f9aa14cf4230298791?pvs=4

 

동시성 프로그래밍 | Notion

세마포어

verdant-bathtub-bae.notion.site

세마포어는 PintOS에서도 굉장히 많이 쓴다고 하니 미리 연습해 두자.

 

웹 서버 제작

에코 서버, tiny 서버, 프록시 서버에 대한 코드는 깃허브에 올려두었다. 주석도 나름 열심히 달아놔서 이해하는데 어렵지 않을거라 생각한다

https://github.com/goochul-im/proxy-server

 

GitHub - goochul-im/proxy-server: 크래프톤 정글 8주차

크래프톤 정글 8주차. Contribute to goochul-im/proxy-server development by creating an account on GitHub.

github.com

 

 

후기

이번 주에는 본가에 2박 3일 동안 내려가있어서 진도가 많이 뒤처질 것 같았지만 대부분이 이미 해본 내용이어서 그렇게 시간에 쫓기지는 않았다. 다만 자리를 오래 비웠어서 팀원들에게 미안할 따름이다.

'크래프톤 정글' 카테고리의 다른 글

[pintOS] 시스템 콜 과정  (0) 2025.05.15
9주차 개발일지  (0) 2025.05.14
7주차 개발일지  (0) 2025.04.30
6주차 개발일지  (0) 2025.04.23
5주차 개발일지  (0) 2025.04.16
정소민fan
@정소민fan :: 코딩은 관성이야

코딩은 관성적으로 해야합니다 즐거운 코딩 되세요

목차