오늘은 TCP/IP 계층에서 3계층을 담당중인 전송 계층 = 트랜스포트 계층에 대해서 다뤄보겠습니다. 인터넷 프로토콜 스택의 4계층 애플리케이션 계층 - HTTP, FTP 전송 계층 - TCP, UDP 인터넷 계층 - IP 네트워크 인터페이스 계층 통신 과정(프로토콜 계층별 관점) 통신 과정을 탑다운 방식으로 살펴보겠습니다.(전송 측) 채팅을 한다고 가정하면, 프로그램에서 메시지를 생성하고 소켓 라이브러리를 통해 전송 계층에 전달합니다. 전송 계층에서는 보낼 데이터 + 자신의 정보(TCP)를 더해서 인터넷 계층에 보냅니다. 인터넷 계층인 IP도 자신의 패킷을 생성해서 앞의 데이터에 덧붙입니다. 각 계층마다 정보를 덧붙여서 인터넷으로 전달합니다. TCP/IP 패킷 정보 IP패킷에 TCP 관련 정보 포함 T..
인터넷 인터넷은 컴퓨터들이 서로 통신 가능하도록 하는 거대한 네트워크입니다. 인터넷은 간단하게 설명하면 선(wire)입니다. 컴퓨터와 컴퓨터를 연결하는 거죠. 인터넷 통신 이 연결선을 통해서 컴퓨터끼리 데이터를 주고받는 과정이 인터넷 통신입니다. 라우터나 중간 서버 등을 거쳐가면서 도착지까지 데이터가 이동합니다. IP(Internet Protocol) 인터넷을 이용하여 통신할 때 사용하는 규약 IP주소를 통해서 컴퓨터들이 서로를 찾아내고 통신을 할 수 있습니다. 지정한 주소로 데이터 전달이 용이함 데이터 전달 시 패킷이라는 단위로 데이터를 전달 패킷에는 출발지 IP, 도착지 IP, 데이터 등등의 내용이 포함됩니다. 사람들은 보통 도메인 주소로 특정 서버에 데이터를 요청합니다.(ex, 173.194.121..
char형 변수를 int형으로 변환하고 싶을 때, '5'-'0' 이런 식으로 '0'을 빼준 적 있지 않으신가요?? 그 원리에 대해서 알아봅시다. 산술변환이란? "연산 전에 피연산자의 타입을 일치시키는 것" 만약에 float 타입과 int타입이 있다면 int 타입을 float 타입으로 자동 형변환 해줍니다. int i=10; float f=20.0f; float result=f+(float)i; //float result=f+i; 와 동일함 int -> float의 경우(작은 값 -> 큰 값) //형변환 명시를 안해줘도 자동으로 해줍니다. 또한 int타입보다 작은 타입들은 자동으로 int로 변환이 됩니다. 앞의 char타입인 '5' - '0'의 경우 char 타입이 int로 자동 변환됩니다. 문자 '5'는..
자바를 제대로 활용하고 있는지 의문이 들어서 복습을 하고 있습니다. 복습하는 도중에 새롭게 알게 된 사실등을 정리하므로 해당 포스팅에서는 많은 내용을 다루지 않습니다. 변수란? 하나의 값을 저장하기 위한 메모리 공간에 이름 붙인 것입니다. int age = 5; 위의 예제에서는 age가 변수가 됩니다. 메모리에서 int형에 해당하는 byte만큼 자리를 배정하고 거기에 age라는 이름을 붙입니다. 그 공간에 5라는 값을 담아주면 되겠죠. 참고로 int는 변수의 타입이고 5라는 상수 값은 리터럴이라고 부릅니다. 자바의 상수를 int age 앞에 final이라는 키워드를 붙이면 상수가 되며 값을 수정할 수 없는 점 유의바랍니다. 선언 위치에 따른 변수 클래스 변수, 인스턴스 변수, 지역 변수 이 세 종류는 선..
문제 링크 www.acmicpc.net/problem/20115 20115번: 에너지 드링크 페인은 에너지 드링크를 좋아하는 회사원이다. 에너지 드링크는 카페인, 아르기닌, 타우린, 나이아신 등의 성분이 들어있어 피로 회복에 도움을 주는 에너지 보충 음료수이다. 야근을 마치고 한 www.acmicpc.net 문제 요약 두 에너지 드링크 a, b가 있고, 양이 각각 Xa, Xb라 할 때, 다음 둘 중 하나의 선택을 할 수 있다. a의 양을 Xa + (Xb / 2)로 만들고, b를 버리기 b의 양을 Xb + (Xa / 2)로 만들고, a를 버리기 위의 방식으로 에너지 드링크를 합쳐서 그 양을 최대로 하자. 접근 그리디 문제이고 접근법도 굉장히 쉽습니다. 그냥 가장 양이 많은 드링크에 그다음 양이 많은 드링크..
자꾸 헷갈리게 되는 동기와 비동기에 대해서 정리해보려고 합니다. Blocking vs Non-Blocking 동기, 비동기 처리 방식을 언급할때 같이 언급되는 용어인 blocking과 non-blocking에 대해 알아보겠습니다. 저는 이 두 가지를 일종의 상태를 설명하는 용어라고 이해하고 있습니다. Blocking의 경우에는 우리가 무엇인가를 호출하고 System call이 완료된 후 리턴하기 까지 계속 wait queue에 들어가 있는 상태를 일컫습니다. 한 마디로 정의하자면 작업 중단된 상태입니다. Non-Blocking은 System call과 관계없이 리턴하기에 queue에 들어갈 필요도 없습니다. 동기식 방식 동기식 방식은 순차적으로 작업을 진행합니다. 순차적이라서 앞의 작업이 끝나지 않으면 ..
프로젝트 목표 실시간으로 환율 값을 얻어서 사용자에게 전송해줄 수 있는 봇을 만드려고 합니다.목표가격에 도달했을 경우에는 알림 메시지를 전송할 예정입니다.이번 글에서는 그 첫 단계인 메시지 전송을 해보겠습니다. 봇 토큰 발급받기 여러분에게 텔레그램 계정이 이미 있다는 가정하에 진행하겠습니다. @BotFather 라는 봇과 채팅하면서 토큰을 받아야합니다. 대화 시작하기 -> /newbot 을 입력해주세요. 그 다음에는 차례대로 봇 이름, 봇 닉네임(유일해야함)을 입력하라고 합니다. 여기까지 진행해주시면 간단한 봇 발급은 끝납니다. 봇 토큰을 발급해주는데 따로 메모해두세요. Chat_id 확인 https://api.telegram.org/bot토큰/getUpdates url를 통해서 확인 가능합니다. 본인이..
오류 발생 경위 spring boot gradle에 h2 dependency를 추가하고 웹으로 db 콘솔 접근할 때 오류가 발생했습니다. 사실.. 저는 간단하게 해결했습니다. 오류에서도 JDBC를 언급하고 있는데요. 제가 당장 jdbc를 사용하지 않기에 따로 추가해주지 않았습니다. 저는 implementation 'org.springframework.boot:spring-boot-starter-jdbc' 를 추가하고 오류를 해결했습니다. 다른 해결법 저와는 다른 이유로 고생하시는 분들을 위해서 다른 해결법도 정리해두겠습니다. application.properties 를 확인한다 보통 localhost:8080/h2-console 에 접속하셔서 확인을 해볼텐데요. application.properties ..