본문 바로가기

Computer Science

(37)
반효경 운영체제 - 5. Process Synchronization 더보기 반효경 교수님의 운영체제 강의를 듣고 내용을 정리한 글입니다. Process Synchronization이란? 데이터의 접근 - 연산 - 결과 저장 과정에 일어나는 순서에 따른 발생할 수 있는 문제, 다시 말하면 Storage box를 여러 개의 execution box가 공유하기 때문에 발생할 수 있는 문제라고 할 수 있다. Race Condition 의미 : 여러 주체가 동시에 하나의 객체에 접근하려고 할 때 원치않는 결과를 얻을 수 있다. 발생 : CPU - Memory 관계, 컴퓨터 내부 - 보조저장장치(디스크), 프로세스 - 프로세스의 주소 공간 등 일반적으로 프로세스는 자신의 주소 공간을 가지므로 문제가 되지 않지만, 시스템콜을 통해 공유 메모리를 사용하는 프로세스의 경우나, 커널 내부..
Socket의 연결 종료와 Timeout 설정하기 - setSoTimeOut Socket 통신에 대해 공부하다가 궁금한 점을 기록한 내용입니다. 틀린 내용이 있다면 편하게 지적해주세요. 스프링에 대해서 학습하다가 간단히 아래와 같은 소켓 통신을 하는 서버 모델을 만들었습니다. 외부로부터 개방되어있는 listen socket은 8080포트로 들어오는 연결을 받아 connection 소켓에 할당합니다. 할당된 소켓은 새로운 스레드에 할당되어 클라이언트와 비동기적으로 통신하고, listenSocket은 다시 새로운 연결을 기다립니다. public class WebServer { public static void main(String args[]) throws Exception { int port = 8080; try (ServerSocket listenSocket = new Serve..
mySQL 컨테이너로 JDBC 프로그래밍 (Java) 오늘은 저번에 Docker에서 띄운 mySQL 컨테이너에 연결해서 DB에 데이터를 저장하고 가져오는 간단한 JDBC 프로그래밍을 해보았습니다. JDBC 프로그래밍은 DB에 접근할 수 있도록 해주는 JDBC API를 이용하여 데이터의 추가, 삭제, 수정, 검색 등을 할 수 있는 자바 응용프로그램을 작성하는 것인데요, 한 마디로 mySQL 등의 DB를 사용하는 응용 어플리케이션을 작성하는 것입니다. JDBC에 대해 알아보기 앞서, 데이터베이스와 SQL에 대해서 간단하게 살펴보겠습니다. 데이터베이스 데이터베이스(Database)는 데이터를 저장하고 관리하기 위한 체계적인 방법을 제공하는 시스템입니다. 데이터베이스는 일반적으로 테이블(Table)이라는 구조를 사용하여 데이터를 저장하고, SQL(Structure..
HTTP 요청 전송 및 분석 - 소켓 프로그래밍, TCP 전송의 원리 (Java) 안녕하세요, 저번 포스팅에서 HTTP에 대해서 알아보았습니다. 다시 한번 정리하자면, HTTP는 인터넷에서 데이터를 주고받기 위한 프로토콜 중 하나로, 웹 브라우저와 웹 서버 간의 통신을 담당합니다. HTTP는 클라이언트가 서버에 요청(request)을 보내고, 서버는 클라이언트에 응답(response)을 보내는 구조로 동작합니다. 이러한 구조를 바탕으로 웹 사이트를 방문하거나 파일을 다운로드하게 됩니다. 자세한 내용은 아래 포스팅을 참고바랍니다. https://porolog.tistory.com/25 HTTP 요청 전송 및 분석 with HttpRequest (Java) 이번 포스팅은 브라우저에 URL을 입력했을 때, 일어나는 일 중, HTTP로 요청을 보내고, 그 결과를 서버로부터 받는 http 프로..
HTTP 요청 전송 및 분석 with HttpRequest (Java) 이번 포스팅은 브라우저에 URL을 입력했을 때, 일어나는 일 중, HTTP로 요청을 보내고, 그 결과를 서버로부터 받는 http 프로토콜의 작동을 프로토타입으로 구현해보는 것에 대한 내용입니다. 그 전에 앞서 네트워크에 대한 간단한 내용을 소개하고, HTTP란 무엇인지에 대해 살펴보겠습니다. 먼저, HTTP가 무엇인지에 대해 알아보기에 앞서, HTTP를 '왜' 알아야하는지 알아야겠죠? HTTP가 네트워크에서 어느 부분에 사용되고, 실생활과는 어떤 연관성이 있는지 궁금할 것입니다. 우리 근처에서는 바로 주소창에 URL을 입력할 때가 있겠습니다. (이는 논외로 인터뷰 단골 질문이라고 합니다..) 주소창에 URL을 검색하면 일어나는 일 웹 브라우저의 주소창에 URL(Uniform Resource Locator..
비동기와 동기화 - 비동기 카페 주문 구현 (Java) 안녕하세요, 이번 포스팅은 생소하지만 아주 중요한 내용인 비동기/동기의 개념, 그리고 동기 처리 대비 효율적이라는 비동기 처리의 장점과 그렇지만 공유된 자원에 동시 접근하기 때문에 생길 수 있는 부작용에 대해 알아보겠습니다. 그리고 비동기 처리의 부작용을 해결할 수 있는 동기화(Synchronization) 방법에 대해서도 알아보겠습니다. 내용을 살펴보면 처음보신다면 좀 생소하고 헷갈립니다. 프로그래머들이 편하게 비동기와 동기화를 사용할 수 있도록 자바에서도 묶어서 구현해놓은 인터페이스가 존재하는데요, 바로 CompletableFuture라는 API입니다. 이에 대해서도 중요한 메서드들과 내부 구현을 살펴보겠습니다. 마지막으로 API를 사용해서 비동기로 주문을 처리하는 카페를 구현해하면서 실제로 어떻게 ..
객체지향 설계, UML 다이어그램 - 콘솔 체스 구현하기 (Java) 이번 포스팅의 주제는 콘솔 체스 구현하기입니다. 복잡한 체스 룰을 조금 간략화시켰고, UI부분은 콘솔 출력으로 대체했습니다. 들어가기 앞서서, 설계의 중요성은 말 안해도 누구나 다 아실겁니다. 저도 마찬가지로 일단 돌아가게만 구현을 했다가 리팩토링 과정에서 한줄한줄 찾아가면서 코드를 고치면서 생산성이 많이 떨어진다는 느낌을 받았던 경험이 있는데요, 그래서 저도 이번에는 설계를 가능한 범위까지하고, 구현을 하면서 설계를 보완해나간다는 목표를 잡았습니다. 설계를 잘 할 수 있도록 도와주는 툴이 있는데요, 테스트 코드 작성과 UML 모델링 언어입니다. 흔히 TDD라고도 말하는, 테스트 주도 개발 방법론입니다. 테스트 코드 작성을 선행으로 전체적인 그림을 그린 후에 구현하는 방법인데, 이 방법은 사실 저도 실천..
프로세스와 스레드의 개념과 이해 - CPU 스케줄러 구현하기 (Java) 이번 주제는, CPU 스케줄러를 구현하면서 프로세스와 스레드의 개념을 이해해보는 것입니다. 프로세스와 스레드의 개념에 대해서는 제 블로그의 반효경 운영체제 시리즈에 정리해두었으므로, 이번 포스팅에서는 간단히 개념을 짚어보면서 관련된 구현의 내용을 설명해드리겠습니다. 이번 포스팅에서 구현할 것은 프로세스와 스레드를 관리하는 스케줄러의 프로토 타입입니다. 프로세스, 스레드의 개념을 먼저 학습하고, CPU는 한 개인데 어떻게 수많은 프로세스와 스레드들을 CPU가 처리하는지 궁금하실겁니다. 이러한 프로세스와 스케줄러를 관리하는 스케줄러에 대해서도 알아보겠습니다. 스케줄링 알고리즘에도 여러 종류가 있는데, 그 중에서 한 가지 방법을 골라서 구현에 적용해보았습니다. 다시 본론으로, 프로세스와 스레드에 대해 알아보겠..