공유 자원은 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 있는 메모리, 파일, 데이터 등의 자원이나 변수를 의미한다. 이런 상태의 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태라고 한다. Race Condition (경쟁 상태) 경쟁 상태는 공유 자원에 대해 여러 프로세스가 동시에 접근할 때, 결과값에 영향을 줄 수 있는 상태를 말한다. 이런 상태는 동시 접근 시 일관성을 해치는 결과가 나타날 수 있다. 경쟁 상태가 발생하는 경우는 다음과 같다. 공유 데이터 접근: 여러 스레드 또는 프로세스가 공유된 메모리나 파일 등의 데이터에 동시에 접근하고 수정하려고 할 때 경쟁 상태가 발생할 수 있다. 예를 들어, 한 스레드가 데이터를 수정하는 도중에 다른 스레드가 같은 데이터를 읽..
전략 패턴이란? 전략 패턴은 정책 패턴이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 직접 수정하지 않고 전략이라고 부르는 캡슐화한 알고리즘을 컨텍스트 안에서 바꿔 주면서 상호 교체가 가능하게 만드는 패턴이다. 이 패턴은 알고리즘을 독립적인 클래스로 정의하고, 클라이언트에서는 알고리즘 클래스를 인터페이스를 톨해 사용한다. 이렇게 함으로써 클라이언트는 알고리즘의 구체적인 구현과 분리되어 유연성과 확장성을 높일 수 있다. 클라이언트는 실행 시간에 다른 알고리즘 클래스를 선택하여 사용할 수 있으며, 이를 통해 동일한 인터페이스를 가진 다양한 알고리즘을 적용할 수 있다. 전략 패턴은 다음과 같은 장점이 있다. 유연성: 알고리즘을 캡슐화하고 교체 가능하게 함으로써, 실행 시간에 알고리즘을 변경할 수 있다. 확장성..
팩토리 패턴이란? 팩토리 패턴(Factory Pattern)은 객체를 생성할 때 사용되는 디자인 패턴이다. 이 패턴은 객체 생성을 캡슐화하고, 클라이언트 코드와 객체 생성 코드를 분리함으로써 유연성과 확장성을 제공한다. 일반적으로 팩토리 패턴은 추상화된 인터페이스를 정의하고, 이를 구현하는 여러개의 팩토리 클래스를 만들어 사용한다. 클라이언트는 팩토리 인터페이스를 통해 객체를 생성하고 반환받을 수 있다. 팩토리 클래스는 객체 생성에 대한 로직을 구현하고, 실제 객체의 인스턴스를 생성하여 반환한다. 간단하게 말하자만 객체를 생성하는 부분을 Sub Class에 맡긴다고 생각하면 된다. 팩토리 패턴은 다음과 같은 장점이 있다. 객체의 생성을 중앙집중화해 코드의 유지보수성과 확장성을 향상시킨다. 구체적인 구현클..
어댑터 패턴이란? 어댑터 패턴(Adapter pattern)은 소프트웨어 공학에서 사용되는 디자인 패턴 중 하나로, 기존의 클래스를 새로운 인터페이스에 맞게 변환하여 재사용할 수 있도록 해주는 패턴이다. 어떤 클래스나 객체를 다른 클래스나 객체에서 사용하려면, 그것들이 호환되는 인터페이스를 가져야 한다. 하지만 기존에 존재하는 클래스나 객체가 원하는 인터페이스를 갖추고 있지 않을 경우에는, 새로운 클래스나 객체를 만들거나, 기존 클래스나 객체를 수정해야 하는 경우가 있다. 이때 어댑터 패턴을 사용하면, 기존 클래스나 객체를 수정하지 않고도 새로운 인터페이스를 제공할 수 있다. 어댑터 패턴은 크게 두 가지 종류가 있다. 클래스 어댑터 패턴과 객체 어댑터 패턴이다. 클래스 어댑터 패턴은 기존 클래스를 상속받..
TCP / IP 란? TCP / IP는 인터넷에서 데이터 통신을 위해 사용되는 프로토콜이며, 인터넷의 핵심 프로토콜로서 전 세계적으로 사용되고 있다. TCP/IP는 Transmission Control Protocol (TCP)와 Internet Protocol (IP) 두 개의 프로토콜로 구성되어 있다. TCP는 연결 지향적인 프로토콜로서, 안정적인 데이터 전송을 보장한다. 데이터를 전송하기 전에 먼저 연결을 설정하고, 데이터 전송이 완료된 후에는 연결을 종료한다. 이를 통해 데이터 손실을 최소화하고, 중복 전송을 방지하여 안정적인 데이터 전송을 보장한다. TCP / IP는 다음과 같은 계층적인 구조로 이루어져 있다. Application Layer(애플리케이션 계층): 응용 프로그램에서 사용하는 프로..
FTP(File Transfer Protocol) 이란? FTP는 인터넷 상에서 파일을 전송하기 위한 표준 프로토콜이며, TCP/ IP를 이용해 통신한다. FTP는 클라이언트와 서버 간에 데이터를 전송하는 데에 사용되며, 주로 웹 서버와 같은 리눅스 기반의 서버에서 사용된다. 기본적으로 암호화되지 않은 텍스트 기반 프로토콜이므로, 데이터 전송 중에 보안에 취약한면이 있다. 그래서 보안성을 강화한 방식인 FTPS가 개발되었다. 일반적으로 20, 21번 포트를 사용한다. FTPS(File Transfer Protocol Secure) 이란? FTPS는 FTP의 보안 버전으로, SSL/TLS 전용 포트인 990포트나 FTP와 동일한 20, 21 포트를 사용한다. FTPS의 방식은 이전에 설명했던 HTTP에서 ..
SSH (Secure SHELL, 시큐어 셀) 란? SSH란 인터넷을 통해 다른 컴퓨터나 서버에 안전하게 원격으로 접속하고 명령을 실행하는 프로토콜이다. SSH는 암호화된 통신을 사용하기 때문에, 인터넷을 통해 전송되는 데이터가 제3자에게 노출되는 것을 방지할 수 있다. SSH 연결을 설정하려면 SSH 클라이언트를 사용하여 원격 컴퓨터에 접속하고, 원하는 작업을 수행한다. 일반적으로, SSH 클라이언트는 Unix 또는 Linux 시스템에서 기본으로 제공된다. Windows 운영체제를 사용하는 경우, PuTTY와 같은 SSH 클라이언트를 설치해야 한다. SSH는 어디에 사용하는가? 원격 서버에 로그인: SSH를 사용해 원격 서버에 로그인하면 로컬 머신에서 작업한 것과 동일한 명령을 원격 서버에서 수행할 수..
SSL(Secure Sockets Layer) 이란? SSL은 클라이언트와 서버 간의 통신을 암호화하는 보안 프로토콜이다. SSL 3.0 버전에서 보안 취약점이 발견되어, 이후 버전에서는 TLS 프로토콜이 사용된다. TLS는 SSL과 호환되며, 더욱 강력한 암호화 기능을 제공한다. 'HTTPS://' 로 사용되는 웹 사이트가 있다면 SSL을 사용하는 경우라고 볼 수있다. TLS(Transport Layer Security) TLS는 클라이언트와 서버 간의 통신을 암호화하기 위해 대칭키 암호화와 공개키 암호화를 혼합하여 사용한다. 대칭키 암호화는 데이터를 전송하는 데 사용되며, 공개키 암호화는 대칭키를 안전하게 전달하기 위해 사용된다. 또한, TLS는 디지털 인증서를 사용해 서버의 신원을 확인한다. 디지털..