목록분류 전체보기 (157)
Rootable의 개발일기
스프링에서 HTTP 요청과 응답을 다루는 대표적인 클래스로 InputStream/OutputStream: 바이너리 데이터를 직접 다루는 가장 낮은 레벨의 추상화@RequestBody/@ResponseBody: 문자열(JSON/XML)을 객체로 자동 변환하는 중간 레벨의 추상화HttpEntity: HTTP 헤더, 상태 코드, 바디를 모두 포함하는 메시지 전체를 다루는 가장 높은 레벨의 추상화 📌 InputStream/OutputStream (원시 스트림) java.io의 클래스로 HTTP Body의 데이터를 원시 바이트(byte) 스트림으로 다룸 처리 방식(스트리밍): 데이터를 청크(chunk) 단위로 조금씩 읽고 씀(전체 데이터를 메모리에 올리지 않음)자동 변환: 전혀 없음, 개발자가 직접 바이트를 ..
📌 퀵 정렬이란 하나의 리스트를 피벗(pivot)을 기준으로 하나는 pivot보다 작은 값들의 부분리스트, 하나는 pivot보다 큰 값들의 부분리스트로 정렬한 뒤, 각 부분리스트에 대해 재귀적으로 정렬하는 방법 🚩 분할 정복(Divide and Conquer) 알고리즘퀵 정렬은 기본적으로 '분할 정복' 알고리즘을 기반으로 정렬되는 방식이다. 다만, 병합 정렬(Merge Sort)과 다른 점은 병합 정렬은 하나의 리스트를 '절반' 으로 나누어 분할 정복을 하고, 퀵 정렬은 피벗(pivot)을 기준으로 분할 정복을 하기 때문에 하나의 리스트에 대해 비균등하게 나뉠 수 있다는 점이다.일반적인 성능: 퀵 정렬 > 병합 정렬 퀵 정렬은 '비교 정렬' 이며, 정렬의 대상이 되는 데이터 외에 추가적인 공간을 필요..
Ubuntu 환경에서 단체 채팅방을 C와 MySQL을 통해 구현했다. MySQL은 채팅 내용을 저장하는 용도로 사용한다. 📜 기능 목록 모든 사용자에게 채팅 메시지가 전달된다.최초 접속하면 최근 10개의 채팅을 볼 수 있다.채팅 내용은 MySQL에 저장한다. 📌 클라이언트 동작 흐름 MySQL 커넥션 초기화 및 연결서버와 통신할 소켓 생성소켓에 연결할 서버 주소 정보 바인딩서버에 연결 요청DB로부터 최근 10개 레코드 조회 후 각 클라이언트 화면에 출력데이터 전송시간 정보, 사용자 이름, 채팅 메시지 등을 포맷팅 하여 서버에 전송클라이언트가 'exit' 명령을 입력하면 로그아웃으로 간주하여 close 수행데이터 수신서버에서 작성한 메시지가 있다면 읽어온 후 출력 📌 서버 동작 흐름 MySQL 커넥션..
🤔 소켓이란 네트워크에서 데이터를 송수신할 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결부 네트워크에 연결하기 위한 소켓은 정해진 규약, 즉 통신을 위한 프로토콜에 맞게 만들어져야 한다. 보통 OSI 7 계층 중 4 계층인 TCP 상에서 동작하는 소켓을 주로 사용하며, 이를 TCP 소켓 또는 TCP/IP 소켓이라고 부른다. 마찬가지로 UDP에서 동작하는 소켓을 UDP 소켓이라고 부른다. 소켓은 크게 프로토콜, IP 주소, 포트로 정의된다. 🚩 용어 정리프로토콜(Protocol)컴퓨터 사이에서 메시지를 주고 받는 데 필요한 양식, 약속이나 규약IP 주소(IP Address)각 장치(호스트)를 식별하기 위한 고유 주소. 송신자와 수신자를 식별포트(Port)IP 주소를 통해 도착한 호스트에서 어..