-
성공과 실패를 결정하는 1%의 네트워크 원리 6장Study/성공과 실패를 결정하는 1%의 네트워크 원리 2022. 2. 13. 18:10
이번 장에서는 웹 서버에 HTTP 요청이 수신되고 처리 후 브라우저에 응답을 주는 과정을 정리하겠습니다. 1. 서버의 개요 서버가 요청을 받기 위해서는 클라이언트가 요청을 송신할 때와 동일하게 소켓과 프로토콜 스택을 이용합니다. 하지만 클라이언트와 사용하는 방법이 다릅니다. 클라이언트가 tcp 연결을 할 때는 서버에 바로 연결을 진행하면 되지만 서버는 클라이언트와 송수신을 하기 위해 접속을 대기하는 과정이 필요합니다. 따라서 서버는 접속을 대기하는 부분과 접속 이후 클라이언트와 송수신 하는 부분으로 프로그램이 나뉩니다. 서버는 처음 프로그램을 시작할 때 소켓을 생성하고 접속을 수신하기 위한 포트를 바인딩합니다. 그리고 접속 대기를 시작합니다. 이후 클라이언트가 해당 서버에 접속을 하면 접속 대기용 소켓을..
-
02 TCP/IP의 데이터를 전기 신호로 만들어 보낸다Study/성공과 실패를 결정하는 1%의 네트워크 원리 2022. 1. 25. 20:33
이번 장에서는 브라우저가 HTTP 요청을 하기 위해 소켓을 작성하고 서버에 접속하는 과정과 TCP/IP, 이더넷을 통해 데이터를 송수신 하는 과정에 대해 알아봅니다. 1. 소켓을 작성한다 브라우저에서 서버에 접속하려면 OS의 프로토콜 스택에 요청해야 하는데 이 때 소켓을 사용합니다. 소켓은 소켓 라이브러리를 이용해서 생성할 수 있습니다. 소켓은 내부적으로 프로세스 통신을 제어하기 위한 제어 정보들을 메모리에 저장하고, 이 정보들을 이용해서 프로토콜 스택에 송수신을 요청합니다. 2. 서버에 접속한다 HTTP 요청을 위해 소켓을 생성했으면 그 다음은 서버에 접속을 해야합니다. 서버에 접속하려면 서버의 IP와 서버에 있는 애플리케이션의 포트를 알아야 합니다. 이는 서버 URL에서 구할 수 있습니다. DNS를 ..
-
실용주의 프로그래머 정리 8Study/실용주의 프로그래머 2021. 12. 21. 00:19
실용주의 프로젝트 이번 장에서는 실용주의 기법들을 팀과 프로젝트에 적용하는 방법에 대해 알아보겠습니다. 41. 실용주의 팀 이전 장들에서 배운 실용주의 기법들을 팀 전체에 적용하는 전략을 알아보겠습니다. 깨진 창문을 없애라 깨진 창문은 팀원 전체가 관심을 가지고 정리해야합니다. 코드를 정리하는 인원 몇명을 두는 것은 현실적으로 불가능합니다. 팀 전체가 지저분하거나 개선해야되는 코드를 방치하지 말고 깨끗히 정리합시다. 삶은 개구리 프로젝트 전체 환경 변화를 지속적으로 감시하고 관찰해야 합니다. 아무도 모르게 프로젝트가 망가질 수 있습니다. 필요하다면 감시자 역할을 팀원 중 한명에게 맡겨서 변화를 지속적으로 감시하도록 할 수 있습니다. 소통하라! 팀원들끼리 활발하게 소통해야합니다. 또한 외부와 적극적으로 소..
-
실용주의 프로그래머 정리 7Study/실용주의 프로그래머 2021. 12. 20. 22:31
프로젝트 전에 이번 장에서는 프로젝트를 시작하기 전에 준비해야 할 것들에 대해 다루고 있습니다. 36. 요구사항의 구렁텅이 대부분의 클라이언트는 원하는 요구사항을 정확히 표현하지 못합니다. 따라서 우리는 클라이언트의 요구사항으로부터 더 정확한 요구사항을 끄집어내야 합니다. 요구사항을 정확하게 뽑아내기 위해서는 사용자가 어떻게 사용하는지에 집중하기 보다는 왜 필요한지 파악하는 것이 더 중요합니다. 요구사항의 핵심적인 내용을 파악해야 추후 요구사항의 변경이 생겼을 때 좀 더 유연하게 대처할 수 있습니다. 요구사항을 깊이있게 파악하기 위해 가장 좋은 방법은 사용자가 직접 되는 것입니다. 실제로 사용자와 함께 출근해서 일해보고 도메인을 파악해보면 좀 더 핵심적인 요구사항을 파악할 수 있습니다. 요구사항의 핵심을..
-
실용주의 프로그래머 정리6Study/실용주의 프로그래머 2021. 12. 12. 22:04
코딩하는 동안 해야 할 일들 기계적으로 하는 코딩은 좋지 않은 구조를 만든다. 항상 고민하고 많이 생각하지 않으면 잘못된 프로그램을 만들 가능성이 높아진다. 기계적으로 해도 좋은 코드가 나왔으면 이미 프로그래머는 대체 됐을 것이다. 이번 장에서는 코딩하는 동안 고려해야 될 점들을 알아본다. 31. 우연에 맡기는 프로그래밍 우연히 운좋게 동작하는 동작에 의존하지 말자. 어떤 원리로 돌아가는지 이해하고 있어야 한다. 또한 다른 사람의 라이브러리를 사용할 때는 문서에 없는 동작에 의존하지 말자. 작성자가 의도하지 않은 동작일 가능성이 높다. 확실하지 않은 사실을 가정하지 말고 증명하자. 의도적으로 프로그래밍하는 것이 우연에 맡기는 프로그래밍 보다 훨씬 안전하다. 의도적 프로그래밍을 지키기위한 원칙은 다음과 같..
-
실용주의 프로그래머 정리5Study/실용주의 프로그래머 2021. 12. 6. 21:47
구부러지거나 부러지거나 코드는 항상 빠르게 변화한다. 빠른 변화 속도를 대처하기 위해 느슨하고 유연한 코드를 작성해야 한다. 이번 장에서는 변화하는 세상속에서 코드의 유연성과 적응성을 잃지 않는 법을 소개한다. 우선 결합도를 낮추는 법을 알아보고, 메타 프로그래밍을 이용해서 적은 양의 코드를 작성해서 유연함을 유지할 수 있는 방법을 소개한다. 그리고 시간 측면에서 결합도를 알아보고 뷰와 모델을 분리하는 법을 소개한다. 마지막으로 모듈들이 데이터를 교환할 수 있는 만남의 장소를 마련해서 결합도를 획기적으로 줄이는 방법을 알아본다. 26. 결합도 줄이기와 디미터 법칙 결합도를 줄이면 코드가 유연해지고 변경을 잘 적응할 수 있다. 결합도를 낮게 유지하는 방법 중 하나는 디미터 법칙을 지키는 것이다. 디미터 법..
-
실용주의 프로그래머 정리 4Study/실용주의 프로그래머 2021. 11. 28. 13:00
실용주의 편집증 명심하자. 완벽한 소프트웨어는 만들 수 없다. 따라서 소프트웨어를 믿지 말자. 끊임없이 의심하고 방어 코드를 작성하자.(물론 적정선에서) 21. 계약에 의한 설계 계약에 의한 설계에서는 루틴, 함수, 메소드가 3가지를 지키며 동작하기를 기대한다. 선행조건: 함수가 정상적으로 동작하기 위한 조건이다. 후행조건: 함수가 실행된 이후 만족해야하는 상태(조건)을 의미한다. 클래스 불변식: 메소드 실행 전, 실행 후에는 특정 조건을 만족해야함을 의미한다. 계약에 의한 설계를 지원하는 아이펠같은 언어는 해당 조건을 기술해서 소프트웨어 안정성을 높인다. 개인적으로 자바에서 인터페이스가 계약이라고 생각한다. 실제로 계약에 의한 설계처럼 강한 조건 검사는 지원하지 않지만 인터페이스가 어떤 기능을 하고 어..
-
실용주의 프로그래머 정리 3Study/실용주의 프로그래머 2021. 11. 22. 23:05
기본적인 도구 개발 생산성을 높이기 위해서는 적합한 도구를 쓰는 것이 중요하다. 기본적인 도구와 더불어 상황에 맞는 도구를 확장해서 능숙하게 사용할 수 있어야 한다. 이번 장에서는 도구를 잘 활용하는 방법에 대해 알아보도록 하자. 일반 텍스트의 힘 일반 텍스트는 그 자체로 알아보기 쉽고 다루기 쉽다. 데이터를 효율적으로 저장하기 위한 경우를 제외하면 일반 텍스트를 잘 활용하자. 잘 정의된 일반 텍스트는 강력하다. 쉘 게임 쉘은 자동화 하기에 정말 좋은 도구다. GUI 기반의 툴들은 제한된 동작을 제공하지만(사실 요즘 GUI들은 플러그인이나 커스터마이징을 많이 지원해준다. 옛날 책이라 그런듯) 쉘을 이용하면 무궁무진한 기능을 제공할 수 있다. 특히 반복적인 작업을 자동화할 때 아주 유용하다. 쉘 스크립트와..