[Network] 네트워크 원리(1) 웹 브라우저가 메시지를 만든다.
·
CS/Network
개요성공과 실패를 결정하는 1% 네트워크 원리를 공부하고 정리한 글이다.    STORY 1 |  HTTP 리퀘스트 메시지를 작성한다.1.1) URL 입력과 해독, HTTP 메시지 주고 받기URL(Uniform Resource Locator)URL은 사실 http: 뿐만 아니라 ftp:, file:, mailto:로 시작하는 것 등 여러가지가 있다.보통 우리가 브라우저를 사용할 때는 웹 서버에 접근하는 클라이언트로 사용하지만, 브라우저의 기능은 다양하기 때문이다. 파일을 다운로드/업로드하는 FTP의 클라이언트 기능이나 메일 전송 클라이언트 기능도 가지고 있다.브라우저는 몇 개의 클라이언트 기능을 겸비한 복합적인 클라이언트 소프트웨어다.각종 URL 형식 예시와 공통점가장 앞부분에서 브라우저에 액세스하는 방..
[python] 파이썬으로 진법변환하기
·
언어/PYTHON
개요간단한 듯하면서도 구현을 할 때마다 까먹는 부분이 생겨서 이번 포스팅을 통해 확실하게 잡아보려고 한다.   1) 파이썬 함수를 통해 진법 변환하기십진수를 이진수로, 이진수를 십진수로 파이썬 함수를 통해 변환하는 것은 상당히 간단하다. 1-1) 십진수를 이진수로 변환하기십진수를 이진수로 변환할 때는 bin이라는 함수를 사용한다. 이 함수는 정수를 "0b"가 붙은 이진수로 변환해준다. (문서 참조) Built-in FunctionsThe Python interpreter has a number of functions and types built into it that are always available. They are listed here in alphabetical order.,,,, Built-i..
[DevOps] 멀티모듈 프로젝트 CI/CD 적용 - 설계 구상 편
·
DevOps/DevOps
개요실제 운영 환경 인프라를 구축하기 위해 설계를 팀에 공유해보기로 하였다. 사실 3달 정도 전에 Github Actions + Elastic Beanstalk으로 실습을 해보았으나, 실패했던 경험이 있기에 다시 돌아와서 설계 과정을 세세히 기록해본다. 또한, 이전에는 사용해보고 싶었던 기술(Jenkins)과 추천 받은 기술로 구성하였다면, 이번엔 온전히 내 논리와 지식을 활용하여, 배포를 하자마자 사용자가 생길 우리 서버..🤗의 아키텍처를 구상해보려고 한다.   1) 이전 시도 복기와 현재 상황나에게 가장 까다롭게 다가오는 것은 멀티 모듈 설계와 AWS 사용이다. 이 까다로운 문제를 하나씩 풀어 나가는 과정을 작성해보자..! 1-1) 모듈 구조 파악하기 core(공통 라이브러리)admin(관리자 모듈..
[백준/1547] 공 | 두 수의 전환
·
PS/BOJ&Programmers
공알고리즘알고리즘을 공부해본 사람이라면 한 번쯤은 겪었을 법한 두 수의 전환을 이용한다.   이 문제에서 주의해야 할 점은 공의 번호와 인덱스를 달리 생각해야 한다는 것이다. 예를 들어, 1번 공과 3번 공의 위치를 바꿀 때 배열의 인덱스는 그대로고 1번 공과 3번 공의 위치만 즉, 인덱스 번호 바뀌는 것이다.   그래서 인덱스로만 다룰 순 없고 for문으로 공의 번호가 저장된 배열을 돌면서 입력으로 주어지는 x,y의 위치를 찾아야 한다. for _ in range(m): x,y=map(int,input().split()) # x 위치 먼저 찾기 for i in range(len(arr)): if arr[i]==x: # x가 있는 위치의 값을 tmp_x 변..
[Network] 내가 만든 웹 서비스 WireShark로 패킷 분석하기 - 7계층 분석
·
CS/Network
개요내가 만든 웹 서비스 WireShark로 패킷 분석하기 1편에 이어서, 2편에서는 본격적인 WireShark 패킷 내용을 살펴보자. 현재 서버는 로컬 컴퓨터에서 spring boot를 IntelliJ로 실행하고, 포트포워딩하여 15001 포트로 클라이언트가 접속할 수 있도록 세팅되어있다.서버 위주의 패킷을 분석하고, 특정 상황에서는 서버와 클라이언트 양측의 패킷을 각각 분석한다. 유저 시나리오는 다음과 같다.클라이언트의 접속(채팅방 이용자)유저 1의 채팅방 만들기유저 2의 채팅방 접속(다대다 채팅 가능)서로 채팅하기방 나가기이메일 전송하기클라이언트 브라우저 접속 종료 S1# 클라이언트(채팅방 이용자)의 메인 화면 접속  [서버 측 패킷] 두 클라이언트(51115, 51116)의 요청과 서버의 응답에 ..
[Network] 내가 만든 웹 서비스 WireShark로 패킷 분석하기 - Spring WebSocket & STOMP
·
CS/Network
1편 - 소켓 통신 프로젝트 기능 구현 소개 2편 -  패킷 분석 내용 소개  개요WireShark 패킷 분석을 위한 애플리케이션인 만큼, 소켓 통신을 구현하여 서버와 클라이언트, 클라이언트끼리의 통신이 잘 보이는 채팅 서비스를 구현하였다. 소켓 통신은 KAU 멋쟁이 사자처럼 고기의 소켓통신 세션을 참고하였고, SMTP 프로토콜 통신을 캡처하기 위해 이메일 전송을 추가하였다.소스코드는 해당 깃허브에서 확인 가능하다. 기능 구현은 크게 다음과 같다.WebSocket 통신구글 SMTP 서버를 통한 메일 발송  WebSocket 통신 구현에 사용된 기술 크게 3가지로 분류된다.- WebSocket(HTTP와 비교)- STOMP- Message Broker   WebSocket이란? HTTP와 다른 점은 뭘까?..
[AWS] Cloud Watch Agent 설정하기 | Configuration validation second phase failed 해결
·
카테고리 없음
개요진행하는 프로젝트의 로그 작업을 위해 CloudWatch를 설정하였다.CloudWatch를 통해 로깅하기 위해서는 로그를 측정할 Agent를 따로 설치해야 한다.  해당 문서에서는 IAM 관련 설정은 생략한다.CloudWatch Agent 다운로드해당 문서에서 서버 OS에 맞는 명령어를 찾아, 설치한다. 필자는 ubuntu 서버를 사용 중이므로, 다음과 같은 과정을 통해 설치하였다.  1. EC2에 agent 다운로드 wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb  2. 패키지 설치 sudo dpkg -i -E ./amazon-cloudwatch-agent.deb  A..
[AWS] AWS 하나의 LB로 여러 서비스 운영하기
·
DevOps/AWS
개요지난 포스팅에서 하나의 로드밸런서로 여러 서브도메인, 서비스를 운영하는 것을 GCP를 통해 구축해보았다. (GCP를 사용하지 않더라도 앞의 글을 읽는 것을 추천한다.)  [DevOps] 하나의 LB로 여러 서비스 운영하기개요로드 밸런서는 운영관리 입장에서 상당히 많은 편의성을 제공한다.그래서 그런지 규모가 작은 프로젝트 즉, "부하 분산"이 필요없는 프로젝트임에도 불구하고 정말 많은 사람들이 로드 밸cobinding.tistory.com 이번에는 AWS의 로드밸런서와 라우팅 설정을 통해서 하나의 LB로 서브도메인을 구분하는 것을 세팅해보도록 한다.  AWS로 구축할 웹사이트는 user와 admin이 구별되어있다. user-main.example.com  admin-main.example.com 이 두..
[GCP] GCP 하나의 LB로 여러 서비스 운영하기
·
DevOps/GCP
개요로드 밸런서는 운영관리 입장에서 상당히 많은 편의성을 제공한다.그래서 그런지 규모가 작은 프로젝트 즉, "부하 분산"이 필요없는 프로젝트임에도 불구하고 정말 많은 사람들이 로드 밸런서를 활용한다. 그런데 나의 경우, 작은 프로젝트에 LB를 쓰는게 그 기술의 취지에 맞지 않고, 그렇기에 많은 자원이 낭비가 된다는 생각에 쓰기가 싫었다. (뭔가 괜히 패배하는 기분이랄까..?) 여기서부터 도르마무 시작이었다!  하나의 서버에 여러 포트를 두고, 이 각각의 포트에 SSL을 적용하는 테스크를 진행했는데, 사실 이건 로드 밸런서로 뚝딱뚝딱 1-2시간이면 할 수 있는 업무다. 그런데 위와 같은 이유로 로드밸런서를 사용하기 싫었고, 일일이 포트별 SSL 설치라는 수작업을 하기로 했다. ➡️ 심지어 이 수작업을 하는..
[BackEnd] API의 멱등성을 고려하여 개발하기
·
Dev/Backend
개요신규로 도입한 어드민 기능에 문제가 발생했다. 아래 두 가지가 부족했기 때문이었다.API의 멱등성사용자 관점에서의 테스트 이 포스팅에서는 API의 멱등성에 대해 상세히 다루고, 앞으로 의식하여 적용할 수 있도록 해볼 것이다! 멱등성(Idempotency)멱등성은 수학 용어로, 여러 번 연산을 적용해도 결과는 달라지지 않는 성질을 말한다.한자도 덮을 멱, 무리 등인데 무리(swarm)의 효과를 덮어버린다! 라는 뜻이다.멱등성의 대표적 예다.절댓값 함수1을 계속 곱하는 것 HTTP의 멱등성기본적으로 HTTP 메소드의 GET, PUT, DELETE 와 같은 메서드는 멱등하다.예를 들어, 여러 번 호출해도 GET 은 항상 같은 결과를 보여준다.PUT 또한 여러 번의 요청에도, 매번 같은 리소스로 업데이트 한..
[Network] Transport Layer, Mux & Demux
·
CS/Network
개요TCP Keywordsreliable data transferflow controlcongestion controlTransport Layer가 하는 일서로 다른 host의 프로세스 간 Logical communication 제공프로토콜은 End System 즉, host에서 돌아간다.Network 계층의 라우터들을 거쳐서 데이터들이 전달되지만, Transport 계층은 이 거쳐가는 과정은 보이지 않고 두 엔드 시스템(프로세스) 사이의 Logical Communication에만 집중한다.Sender: App Layer의 메시지를 segment 단위로 메시지를 잘라서, Transport Layer의 헤더를 붙이고 Network Layer로 전송Receiver: 받은 segment를 합쳐서 메세지를 만들..
[네트워크] DNS, DNS 쿼리, DNS recode 종류
·
CS/Network
개요프로세스가 서로 통신할 때 알아야 하는 두 가지 정보 → IP, PortIP: 프로세스가 돌고 있는 머신의 Network Interface Card에 부여된 Identity → IPv4, host name(domain name)Port: 실행 중인 프로세스에 접근할 수 있는DNSIP 주소를 hostname으로 매핑(라우팅)해주는 역할→ Network Layer에서 해야하는 일을 App-Layer에서 함⇒ Network Layer는 빠르게 전송만 하면 돼서, 복잡한 연산을 App-Layer에서 처리하는 것distributed database → not centralize가용성, 중요한 서비스는 분산시킨다.application layer protocol   DNS가 하는 일host name-IP addr..
sebinChu
Studying IT with cobinding