본문 바로가기

분류 전체보기71

[Network] 트랜스포트 계층(Transport Layer)(1) Transport Layer 트랜스포트 계층 프로토콜은 각기 다른 호스트에서 동작하는 애플리케이션 프로세스간의 논리적 통신(logical communication)을 제공합니다. 논리적 통신은 애플리케이션 관점에서 보면 프로세스들이 동작하는 호스트들이 직접 연결된 것처럼 보인다는 것을 의미합니다. 또한 트랜스포트 계층은 프로토콜은 네트워크 라우터가 아닌 종단 시스템에서 구현됩니다. 트랜스포트 계층 세그먼트라고 알려진 트랜스포트 계층 패킷으로 변환되어 네트워크 계층 패킷(데이터그램) 안에 캡슐화되어 목적지로 전달됩니다.(라우터는 데이터그램 안에 캡슐화된 트랜스포트 계층 세그먼트의 필드를 검사하지 않습니다.) 이 후 수신 애플리케이션의 트랜스포트 계층에서 세그먼트 내부의 데이터를 이용할 수 있도록 수신된 세.. 2023. 8. 11.
[GoF] 어댑터 패턴(Adapter Pattern) Adapter Pattern 어댑터 패턴(Adapter Pattern)은 Gang of Four(GoF) 디자인 패턴 중 하나로 Design Patterns: Elements of Reusable Object-Oriented Software 책에서 소개 된 23가지 디자인 패턴 중 하나입니다. 어댑터 패턴은 구조 패턴으로써 인터페이스를 사용자가 기대하는 다른 인터페이스로 변환하는 패턴으로 호환되지 않는 인터페이스 때문에 함께 동작할 수 없는 인터페이스들이 함께 작동할 수 있도록 변환해주는 디자인 패턴입니다. 이는 인터페이스가 현재의 시스템과 호환되지 않는다고해서 현재의 시스템을 변경을 해야하는 것이 아닌 새로운 소스 코드 수정 없이 함께 작동하도록 만들어주는 것에 의미가 있습니다. 어댑터 패턴은 주로 다.. 2023. 8. 10.
[Web] REST REST 출처 REST(REST: Representational State Transfer)는 리소스의 표현으로 구분하여 해당 리소스의 상태를 주고 받는 아키텍처 스타일입니다. REST는 2000년 로이 필딩(Roy Fielding)이 정의한 아키텍처 스타일(architectural style)로 아키텍처 스타일이란 아키텍처에 적용되는 제약조건들의 집합을 의미합니다. 로이필딩은 REST를 Starting With the Null Style 방식을 이용하여 아키텍처를 설계하였으며 이는 어떤 제약 조건 없이 시스템의 전반에서 시작하여 점진적으로 제약 조건을 추가하는 방식입니다. 추가한 제약 조건들은 시스템내에서 조화롭고 자연스럽게 동작할 수 있도록 설계되며 이는 시스템 맥락에 대한 이해와 규제를 강조합니다... 2023. 8. 9.
[Dev] BDD(Behavior-Driven Development) BDD BDD란 개발자와 비개발자간의 협업을 강조하는 Agile 소프트웨어 방법론으로 애플리케이션의 예상 동작을 사람이 읽을 수 있는 시나리오를 기반으로 다른 팀들 간의 커뮤니케이션 격차를 해소하고 소프트웨어 요구 사항에 대한 이해를 공유합니다. BDD는 TDD(Test-Driven Development)와 DDD(Domain-Drvien Design)에서 파생된 개발 방법론으로 주로 동작보다는 테스트 구현에 중점을 둡니다. 소프트웨어의 예상 동작에 초첨을 맞춰 행위를 작성하고 결과를 검증함으로써 행위 중심의 도메인 기반 설계 방법입니다. BDD는 특히 해결해야 할 비즈니스 문제가 복잡할 때 효과적인 개발 방법론으로 간주됩니다. Agile과의 관계 BDD를 사용하면 응용 프로그램 수준에서 포괄적인 문서보.. 2023. 8. 8.
[CS] 유니코드(Unicode) & 인코딩(Encoding) Unicode 유니코드는 다양한 언어와 문자를 컴퓨터에서 표현하기 위해 탄생했습니다. 예를 들어 영어와 같은 알파벳 기반 언어의 문자는 아스키(ASCII)라는 문자 인코딩을 통해 1 byte(8 bit)만을 사용해 표현할 수 있지만, 다른 언어의 문자들은 1 byte로 표현할 수 없었습니다. 이로 인해 언어 간 데이터 교환, 다국어 텍스트 처리, 국제화 및 로컬라이제이션 작업 등에서 어려움이 발생했습니다. 전 세계의 다양한 언어와 문자를 효과적으로 표현하고 처리하기 위해서는 통일된 표준이 필요했고 이런 필요성을 해결하기 위해 유니코드가 등장하게 되었습니다. 1991년 처음으로 유니코드는 발표되었고 초기에는 16 bit로 최대 65,536개의 문자를 표현할 수 있는 UCS-2라는 인코딩 방식을 사용했습니다.. 2023. 8. 8.
[CS] CPU의 구조와 기능(2) CPU의 구조와 기능 명령어 파이프라이닝 CPU 성능은 컴퓨터 시스템의 프로그램 처리 시간에 직접 영향을 주기 때문에, 그 속도를 향상시키기 위하여 여러 가지 방벙들이 사용되고 있습니다. 그 중에서 가장 간단하면서도 분명한 효과를 얻을 수 있는 방법이 명령어 파이프라이닝(instruction pipelining) 입니다. 이것은 명령어를 실행하는데 사용되는 하드웨어를 여러 개의 독립적인 단계(stage)들로 분할하고, 그들로 하여금 동시에 서로 다른 명령어들을 처리하도록 함으로써 CPU의 성능을 높여주는 기술을 말합니다. 명령어 파이프라인은 분할되는 단계의 수가 많아질수록 처리 속도가 높아지는데, 최근에는 CPU의 속도를 더욱 높이기 위하여 여러 개의 명령어 파이프라인들을 설치하기도합니다. 2-단계 명령.. 2023. 8. 8.
[Java] JVM(Java Virtual Machine) JVM 자바(Java) 언어의 실행 환경인 JVM(Java Virtual Machine)은 자바 바이트코드를 실행하는 가상 컴퓨터입니다. JVM은 말 그대로 가상 기계, 즉 가상의 컴퓨터를 물리적 컴퓨터의 메모리 안에 하나 더 구축합니다. 가상이긴 하지만 새로운 가상 컴퓨터를 구축하다보니 더 많은 물리적 CPU 자원과 메모리를 소비하기 때문에 당시 프로그래밍 언어들과 속도를 비교했을 때는 많이 느렸습니다. 하지만 하드웨어의 발전, 하드웨어 구성 요소의 가격 하락, 최적화된 알고리즘으로 개발된 API와 JVM으로 인해 현재는 자바의 성능이 느린 것을 체감하기는 힘듭니다. 자바의 가상 세계는 현실 세계에서 컴퓨터의 물리적인 하드웨어와 운영체제 그리고 그 위에서 구동될 소프트웨어를 가지는 구조를 모방하여 구성.. 2023. 8. 7.
[Java] 런타임 데이터 영역(Runtime Data Area) Runtime Data Area Runtime Data Area는 OS로 부터 할당받은 JVM의 메모리 영역으로 자바 애플리케이션이 실행하는 동안 데이터를 저장하고 관리하는 영역입니다. Runtime Data Area는 총 5가지 영역으로 나뉘어져있으며 스레드 공유 여부에 따라 각 영역의 성격이 다릅니다. Method Area, Heap Area는 모든 스레드가 공유하는 영역이고, 나머지 Stack Area, PC Register, Native Method Stack은 각 스레드에 따라 생성되는 개별 영역입니다. 출처 Method Area ★ 확인 필요 ★ Method Area는 Class Area 또는 Static Area로도 불리며 모든 스레드가 공유하는 영역 중 하나로 클래스 로더에 의해 로드된 클.. 2023. 8. 6.
[Java] 실행 엔진(Execution Engine) Execution Engine Execution Engine은 바이트 코드를 읽고 실제로 실행하는 역활을 담당합니다. Runtime Data Areas에 있는 자바 바이트 코드를 읽고 운영체제에 맞게 기계어로 번경하여 해당하는 명령어(instruction) 단위로 실행합니다. Execution Engine은 위의 수행 과정에서 인터프리터와 JIT 컴파일러 두 가지 방식을 혼합하여 바이트 코드를 실행합니다. Interpreter 자바는 인터프리트, 컴파일 두 방식을 혼합하여 사용하는 하이브리드 모델입니다. 컴파일을 통해서 자바 바이트 코드를 생성하고 코드의 명령어를 인터프리터를 사용해 하나씩 읽어서 해석하고 바로 실행합니다. 이는 빠른 시작 속도와 동적인 실행 환경을 제공하지만 반복적으로 실행되는 코드의 .. 2023. 8. 5.