일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 원서읽자
- STUDYENGLISH
- englishbook
- SQL
- 직무면접
- 완전탐색
- 원서
- 코딩테스트
- MySQL
- dfs
- BFS
- 코테 대비
- 코테 준비
- English
- sw expert academy
- sw expert
- PyQt
- readingbook
- the midnight library
- 삼성
- 백준
- 원서읽기
- 프로그래머스
- swexpertacademy
- 알고리즘
- 코테
- nightroutine
- 알고리즘 문제
- 쉬운 알고리즘 문제
- D4
- Today
- Total
목록전체 글 (172)
시나브로
4 Way-Handshake란, 전송 제어 프로토콜(TCP)에서 통신을 중단할 때 사용하는 과정/방법입니다. 더 쉽게 말하면 연결을 중단할 때 한번더 확인하고 중단한다고 생각하면 쉽습니다. 여기서 전송제어 프로토콜 TCP에 대해 궁금하다면, 아래에 정리된 글을 참조하기 바랍니다. hyemsinabro.tistory.com/156 [정리] TCP 프로토콜 // 추후 작성 예정 hyemsinabro.tistory.com 그리고 3 Way-handshake와 4 Way-handshake는 짝꿍과 같기 때문에 3 way-handshake도 알아야합니다. 아래의 링크는 3 way-handshake를 정리한 글입니다. hyemsinabro.tistory.com/157 [정리] 3 Way-Handshake 3 Way..

3 Way-Handshake 란, 전송제어 프로토콜(TCP)에서 통신을 하는 장치간 서로 연결이 잘 되어있는지 확인하는 과정/방식이다. 더 쉽게 말해서 송수신자(데이터를 주고 받는 2사람이라고 생각하면 쉬울 것 같다)사이에 연결을 확인하는 과정이다. 3 way handshake에 대해 먼저 알아보기 전에 3 way handshake를 사요하는 TCP 프로토콜에 대해 알아야합니다. TCP 프로토콜은 연결지향적이다. 이는 상대방이 내 신호를 받을 수 있는지 확인하고 전송을 하는 것을 의미합니다. 이때 내 신호를 받을 수 있는 지 확인하는 것이 3 way handshake입니다. 만약 TCP 프로토콜에 대해 자세히 알고 싶거나, 이해가 안된다면, 밑의 게시글이 좀 더 자세히 적혀있습니다! hyemsinabro..
TCP 프로토콜이란, 연결지향이며, 신뢰성 있는 데이터 전송을 보장하는 프로토콜입니다. TCP 프로토콜에 대해 알아보도록 하겠습니다. TCP 프로토콜의 가장 큰 특징은 1. 연결지향 2. 신뢰성이 있는 데이터 전송 입니다. 여기서 신뢰성이 있는 데이터 전송은 내가 데이터를 전송했을 때, 데이터가 누락이 되지 않고 오류없이 제대로 전송이 되는 것을 말합니다. 그럼 '신뢰성이 있는 데이터 전송'이라는 부분에서 의문을 가질 것입니다. '그럼 다른 프로토콜은 신뢰성 있는 데이터전송을 보장하지 않나?', '신뢰성이 없는 걸 왜쓰지?' 라는 의문을 가질 수 있습니다. [ 저도 처음에는 이런 의미를 가지고 있었습니다 ] 먼저, 이러한 의문에 대해 설명하겠습니다. 네. 신뢰성이 있는 데이터 전송을 보장하지 않는 프로토..
프로세스 Process 실행 중인 프로그램 디스크로부터 메모리에 적재되어 cpu의 할당을 받을 수 있는 것 운영체제로부터 주소 공간, 파일, 메모리 등을 할당받으며 이것들을 총칭하는 것 프로세스 제어블록 : PCB 특정 프로세스에 대한 중요한 정보를 저장하고 있는 운영체제의 자료구조 프로세스를 관리하기 위해 프로세스의 생성과 동시에 고유한 PCB를 생성 저장되는 정보 프로세스 식별자 : process ID[PID] 프로세스 상태 : new, ready, running, waiting, terminated 프로그램 카운터 : 프로세스가 다음에 실행할 명령어의 주소 CPU 레지스터 CPU 스케줄링 정보 : 프로세스의 우선순위, 스케줄 큐에 대한 포인터 메모리 관리 정보 : 페이지 테이블 또는 세그먼트 테이블..
Sorting Algorithm Comparisons Sorting Algorithm : 비교방식 알고리즘 1. Bubble sort : O(n^2) 2. selection sort : O(n^2) 3. Insertion sort : O(n^2) 4. Merge sort : O(n log n) , divide / conquer 5. Heap sort : O(n log n) [정렬], O(log n) [삽입, 삭제], (1) 힙에 넣었다가 꺼내는 원리로 sorting (2) 기존의 배열을 heapify(heap으로 만들어주는 과정)을 거쳐 꺼내는 원리로 정렬하는 방법 6. Quick sort : O(n log n), divide / conquer worst case : O(n^2) Balanced Part..
HTTP : GET과 POST 비교 공통점 : 서버에 무엇인가를 요청할 때 사용하는 방식 GET Header부분의 URL에 담겨서 전송 - URL상의 ?뒤에 데이터가 붙어서 request를 보낸다. 데이터 크기 제한적 URL에 노출되기 때문에 보안없음 데이터를 가져온다 = 서버에서 데이터를 가져와서 보여준다거나 하는 용도, 서버의 데이터를 변경하지 않는다 POST body부분에 담겨서 전송 데이터크기의 제한이 없고, GET보다 보안적으로 낫다[암호화하지 않는 이상 크게 차이없다] 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다. TCP vs UDP TCP 신뢰성, 순차적인 전달 멀티캐스팅이나 브로드캐스팅을 지원하지 않는다. 송신자와 수진자 모두 소켓이라는 종단점을 생성함으로써 이루어진..
Array vs Linked List Array 논리적 저장 순서와 물리적 저장 순서가 일치 인덱스로 해당 원소에 접근할 수 있다. random access가 가능하다 추가/삭제시, shift 연산이 필요 Linked List Array의 문제점을 해결하기 위한 자료구조 삽입/삭제 과정에서의 shitf 연산이 필요없다 탐색 과정에서 첫번째 원소부터 확인해야된다 = 탐색시간이 오래걸린다. 탐색 과정 때문에 삽입/삭제 과정에서 O(n)의 시간이 추가 발생하게 된다. stack Last In First Out : LIFO Queue First In First Out : FIFO Tree 비선형자료구조 계층적 구조 Node (노드) : 트리를 구성하고 있는 각각의 요소를 의미한다. Edge (간선) : 트리를 ..
객체지향 프로그래밍 Object Oriented Programming 현실 세계를 프로그래밍으로 옮겨와 프로그래밍하는 것 : 추상화 재사용성 높다 = 신뢰성 확보 비용절감 유지보수 용이 모델링 과정에서 매핑을 통해 요구사항을 명확하게 파악 설계원칙 1. SRP Single Responsibility Principle 단일 책임 원칙 클래스는 단 하난의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유여야한다. 2. OCP Open-Closed Principle 개방-폐쇄 원칙 확장에는 열려있어야하고 변경에는 닫혀있어야한다 3. LSP Liskov Substitution Principle 리스코프 치환 원칙 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으..

MQTT를 이용하여 AWS에서 입력을 하면 아두이노 ESP32 보드에서 이를 받아 LED 전구를 점등하는 프로젝트입니다. 사용 스펙 - 아두이노 ESP32 - AWS - Node-RED 이러한 구조로 만들겠습니다. ESP에서 구동하는 것은 금방 가능하나, AWS와 Node-RED, ESP32를 연결하는 것이 중요합니다. 아두이노 IDE에서 ESP32로 셋팅합니다. ESP 32보드에서 시리얼 입력을 통해 LED가 정상작동 되는 지 확인합니다. 컴퓨터에 MQTT를 셋팅합니다 MQTT를 통해서 컴퓨터와 연결하고 동작을 확인합니다. AWS를 셋팅합니다 AWS와 Node-RED를 연결합니다 Node-RED와 ESP 32보드를 연결합니다. 아두이노 IDE에서 ESP32로 셋팅합니다. ESP 32보드에서 시리얼 입력..
MQTT 프로토콜 : Message Queue Telemetry Transport - ISO 표준 경량 메시지 프로토콜 - Broker 중심으로 통신하는 구조 - Broker와 Client는 Socket으로 연결 - 계속 연결 상태 유지 MQTT에 대해 알아보겠습니다. Topic Topic은 계층적은 주체를 의미합니다. /를 이용하여 계층을 표현합니다 /building/ground/store 이러한 형태를 가지고 있으며, 채팅방의 개념과 유사하다고 생각할 수 있습니다. 여기서 만약 store 대신 #을 적는다면, /building/ground/# ground 밑에 있는 모든 방에서 메시지를 받을 수 있게 도비니다. 이와같은 것은 Multi Level이라고 합니다. /building/+/store 이렇게 ..
간단한 방법으로 회원가입 창을 만들어 보도록 하겠습니다. from PySide2.QtWidgets import * def check_age(): print(ageedit.text()) if int(ageedit.text()) > 20: agetext.setVisible(True) def join(): print(nameedit.text().__len__()) if nameedit.text().__len__()>=5: nametext.setVisible(True) app=QApplication() window=QWidget() layout=QFormLayout() nameedit=QLineEdit() layout.addRow("name",nameedit) nametext=QLabel("아이디의 길이가 길어..
이 부분은 간단한 것을 개발할 때에는 그렇게 중요한 개념이 아닙니다. 하지만,조금 큰 프로그램을 개발하거나 복잡한 프로그램을 개발할 때는 필수적으로 이해하고 있어야되는 개념입니다. Widgets : Qt에서 눈에 보이는 모든 모듈 ( 컨트롤 ) - QLabel / QComboBox / QCheckBox / ... 등등 QWidget은 모든 위젯들의 부모입니다. 그리고 하나의 window입니다. 그럼, 밑의 코드에서 QWindow에 대한 의미를 알 수 있을 것입니다. from PySide2.QtWidgets import * app=QApplication() window=QWidget() window.setWindowTitle("edit") layout=QHBoxLayout() layout.addWidget..
개발하다보면 필수적으로 모듈을 사용해야됩니다. 이때 사용할 수 있는 방법이 2가지 입니다. 첫번째, import PySide2.QtWidgets 위의 코드처럼 import [모듈] 형식으로 사용할 수 있습니다. 이 경우에는 모듈 전체를 가져오는 것입니다. 두 번째, from PySide5.QtWidgets import * 위의 코드처럼 from 모듈 import 변수/함수 형식으로 사용할 수 있습니다. 이 경우에는 특정 모듈의 변수/ 함수만 가져옵니다. 위와 비교해서 파일의 크기가 줄어들 수 있을 것입니다. 변수/함수 대신에 *을 작성할 경우, 모든 내용을 의미하며 첫번째, 코드와의 차이점은 없습니다.
첫 번째, 먼저 버튼을 띄어보겠습니다 두 번째, 버튼을 클릭했을 때, 함수를 호출하겠습니다. 이 글은 위의 차례대로 글이 구성되어있습니다. 1. 버튼 띄우기 앞 장에서 다루었던 Qt의 기본형태에 대한 이해가 완료되었다고 생각하고 진행하겠습니다. 버튼을 띄우는 것은 쉽습니다. 밑의 코드가 기본 형태입니다. from PySide2.QtWidgets import * app=QApplication() btn=QPushButton("btn") btn.show() app.exec_(); 여기서 유의점은 QPushButton이라는 것입니다. 그냥 button이 아니라는 것에 유의합시다! QPushButton으로 버튼 객체를 생성하였으면, 꼭 show()를 통해 보여줘야됩니다. 만약 show를 하지 않으면 화면에 보여..
일단, 밑의 코드를 작성해서 실행시켜봅시다. from PySide2.QtWidgets import * app=QApplication() #필수1, 객체 생성 label=QLabel("hello world"); label.show() app.exec_() #필수2, 무한루프를 돌면서 이벤트 리스너를 실행함 실행시켜보면, hello world라고 적혀있는 윈도우 창이 뜹니다. 그러면 정상적으로 작동된다는 것입니다. 이제 코드에 대해 분석해 보겠습니다. 첫 번째, from PySide2.QtWidgets import * 이 문구의 의미는 이전에 설치한 PySide2의 QtWidgets을 include한다는 의미입니다. 이 문구가 없으면, Qt를 사용할 수 없습니다. 두 번째, app=QApplication()..