[CS] Socket Communication
·
CS
오늘은 네트워크 프로그래밍에서 중요한 소켓 통신(Socket Communication)에 대해 알아보겠습니다. 먼저 소켓 통신이 무엇인지 간단히 살펴본 뒤, 네트워크에서 통신이 성립되는 과정인 TCP 3-way Handshake 절차를 설명드리겠습니다. 이어서 소켓 통신에서 Client와 Server의 역할과 흐름이 어떻게 구분되는지 살펴본 후, Java에서 이를 구현하는 예제를 통해 구체적인 통신 과정을 정리해 보겠습니다.소켓 통신 (Socket Communication)네트워크에서 두 컴퓨터 간의 실시간 양방향 통신을 제공하는 기술양방향 통신: 상호 간의 데이터를 송수신하는 기술두 컴퓨터 간에 IP주소 + 포트번호의 조합으로 네트워크 간의 연결을 수행하며 수신자는 데이터를 요청하면 서버에서 응답을 제..
[CS] Concurrency, Parallelism
·
CS
동시성 (Concurrency)Task들이 빠르게 전환되면서 실행되어 동시에 실행되는 것처럼 보이는 것싱글 코어(cpu 내에서 실제로 연산 및 명 실행을 담당하는 장치)에서는 여러 작업이 동시적으로 실행되며 Task 간 Context Switch가 발생하면서 여러 작업들을 동시에 실행하는 것처럼 보입니다.Context Switch: CPU/코어에서 실행 중이던 프로세스/스레드가 다른 프로세스/스레드로 교체되는 현상유휴 시간(idle time)을 최소화하여 CPU 활용도를 높이는 것이 목표입니다. (유후 시간: 컴퓨터가 작동 가능한대도 작업을 하지 않는 시간)두 개 이상의 작업이 싱글 코어 or 다중 코어 CPU의 동일한 코어에서 실행되는 경우, 동시에 동일한 리소스에 접근할 수 있습니다.데이터 읽기 작업..
[CS] Call by Value, Call by Reference
·
CS
Call by Value, Call by Reference메서드를 호출할 때 파라미터를 전달하는 방법 Call by Value메서드를 호출할 때 인자의 값을 그대로 복사해서 함수에 전달하는 방식입니다.메서드를 호출하는 호출자 (Caller)의 변수와 호출당하는 수신자 (Callee)의 파라미터는 복사된 서로 다른 변수입니다.값만을 전달하기에 수신자의 파라미터를 수정해도 호출자의 변수는 변경되지 않습니다.메서드를 호출하는 순간에 복사본이 생성되며, 복사본의 값만 변경되며 원본의 값은 변경되지 않습니다.Java에서는 call-by-value로 동작합니다. (값을 복사, 주소값을 복사)Call by Reference (Java X, 100% Call by Value 방식) 메서드를 호출할 때 인자의 메모리 주..
[CS] clustered Index, non-clustered Index
·
CS
Index데이터를 빠르게 검색하기 위한 자료구조대표 자료 구조: B+ Tree정렬된 상태 유지범위 검색에 효율적데이터가 정렬된 상태로 저장됩니다.검색, 삽입, 삭제 연산을 로그 시간에 수행이 가능합니다.트리 구조에서 leaf node 간 연결되기 때문에 범위 검색이 효율적입니다.인덱스를 추가하면, 쓰기 시점에 B+ tree 구조의 정렬된 상태의 데이터가 생성됩니다.이미 인덱스로 지정된 컬럼에 대해 정렬된 상태를 가지고 있기 때문에, 조회 시점에 전체 데이터를 정렬하고 필터링할 필요가 없다.따라서, 조회 쿼리를 빠르게 수행할 수 있습니다. 인덱스에 대한 기본 이해MySQL의 기본 스토리지 엔진innoDB스토리지 엔진(Storage Engine): DB에서 데이터 저장 및 관리 장치InnoDB는 테이블마다 ..
[Java] Functional Interface
·
CS
함수형 인터페이스 추상 메서드(구현 없이 선언만 된 메서드)가 1개만 정의된 인터페이스default 메서드: 인터페이스 안에서 메서드 구현을 가질 수 있도록 허용하는 문법static 메서드: 객체를 생성하지 않고도 호출할 수 있는 메서드 (공용 기능, 유틸리티 기능을 활용할 때 사용)람다 표현식: 자바의 메소드를 간결한 함수식으로 표현한 것 함수형 인터페이스의 표준 API 종류인터페이스추상 메서드lambdaRunnablevoid run()() -> voidConsumervoid accept(T t)T -> voidSupplierT get()() -> TFunctionR apply(T t)T -> RPredicateboolean test(T t)T -> boolean Comparatorint compare..
[CS] JVM Memory Structure
·
CS
개요Java는 Garbage Collector(GC)를 통해 객체의 메모리를 자동으로 관리하며, 필요시 공간을 할당하고 사용하지 않는 객체를 제거합니다. 하지만 모든 객체가 GC에 의해 즉시 수거되는 것은 아니므로, 메모리 관리 원리를 이해하는 것은 고성능 시스템 구현에 큰 도움이 됩니다. 또한 이를 잘 이해하면 문제 발생 시 원인 분석을 훨씬 수월하게 할 수 있습니다. GC의 내용보다는 이번 포스팅에서의 목적은 JVM Memory의 구조를 이해하는 것입니다. 그래서 GC의 내용은 생략되고, Java Memory 구조에 대한 설명이 주가 되는 점을 참고 부탁드립니다. JVM의 Memory는 총 5개의 Area로 구분되어집니다. (Method(Static), Heap, Stack, Native Method..
[Tomcat] Tomcat의 핵심 컴포넌트와 동작 과정에 대해 분석해보자
·
CS
Spring Boot와 같은 프레임워크에서는 Embedded Tomcat을 기본 웹 서버로 제공하여, 개발자가 별도로 외부 톰캣 서버를 설치하거나 설정하지 않아도 애플리케이션을 실행하면 곧바로 웹 서버가 함께 구동되도록 설계되어 있습니다. 반면, 기존의 Tomcat(외장 톰캣)은 WAR 파일을 외부 톰캣 서버에 배포하여 운영하는 전통적인 방식입니다. 두 방식 모두 톰캣이라는 서블릿 컨테이너 위에서 동작한다는 공통점을 갖고 있으며, 애플리케이션의 요청 처리 흐름은 결국 동일한 톰캣 구조를 따릅니다. 따라서 Embedded 환경에서도 톰캣의 내부 동작 원리를 명확히 이해하는 것이 중요하다고 생각했기에 해당 글을 작성하게 되었습니다. 해당 포스팅에서는 Apache Tomcat의 개념에 대해 간략히 기재하고, ..
[Architecture] MSA (vs MA)
·
CS
오늘은 애플리케이션을 구성하는 방법론인 MSA와 MA에 대해 알아보고, 각각의 특징과 장단점에 대해서 설명드리겠습니다. 대략적인 Architecture image입니다. 사진만 봐도 Monolitic은 한 곳에 뭉쳐져 있고, MSA는 각각 Microservice로 분산되어 있는 것을 육안으로 확인할 수 있습니다.MSA (Microservice Architecture)소프트웨어 시스템을 여러 작은 독립적인 서비스로 분할하여 개발하고 배포하는 방식SOA (Service Oriented Architecture)의 특징을 공통으로 가집니다SOA: 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상 일 처리에 해당 소프트웨어 기능을 서비스로 판단하고 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 가는 방..
[CS] HTTP, HTTPS의 개념과 차이점에 대해 알아보자
·
CS
평소 HTTP와 HTTPS의 차이를 HTTPS = HTTP + Security 정도로만 파악하고 있었는데, 이번에 확실하게 개념 정리를 하려고 합니다. 이들이 무엇이고 왜 사용하는지와 둘의 차이점에 대해 알아보겠습니다. HTTP(Hypertext Transfer Protocol) 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜 사용자가 웹 사이트를 방문하면, 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고, 웹 서버는 클라이언트 요청에 대해 HTTP 응답을 합니다. 웹 서버와 사용자 브라우저는 데이터를 일반 텍스트로 교환하기에 HTTP 프로토콜은 네트워크 연결을 작동하게 하는 기본 기술입니다. 클라이언트 요청에 대한 성공 응답은 200(OK), 201(Created) 등으로 구성되고..
[CS] I/O 속도 개선을 위한 ios_base::sync_with_stdio(false), cin.tie(NULL), '\n'
·
CS
백준에서 간단한 stack 문제를 푸는 도중 발생한 시간 초과 문제입니다. 모든 테스트케이스를 고려했었고, 100% 확신을 한 상태에서 제출을 했는데 다음과 같은 issue가 발생했습니다. 설마설마하고 ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL) 코드를 넣었는데 정답 처리가 되었습니다. 그래서 이러한 사례가 많았는데, 막연하게 시간초과 방지를 위해 코드를 달아주는 것 외에는 정확히 모르고 있었습니다. 그래서 이 코드들에 대해 무엇이고 어떠한 상황에 사용하는지 알아보려고 합니다. ios_base::sync_with_stdio(false): C/C++ 표준 스트림 간 동기화 비활성화 처리 장점 일반적으로 C++ 표준 스트림(cin + co..