분류 전체보기(301)
-
[HTTP] HTTP 진화 과정
HTTP/0.9 - 원-라인 프로토콜 요청은 단일 라인으로 구성되며 리소스에 대한 경로로 가능한 메서드는 GET이 유일했다. 응답 또한 극도로 단순하다. 오로지 파일 내용 자체로 구성된다. 상태, 오류 코드도 없었다. 문제가 발생한 경우, 특정 HTML 파일이 사람이 처리할 수 있도록, 해당 파일 내부에 문제에 대한 설명과 함께 되돌려 보내졌다. HTTP/1.0 - 확장성 만들기 HTTP/0.9는 매우 제한적이었으며 브라우저와 서버 모두 좀 더 융통성을 가지도록 빠르게 확장되었다. 버전 정보가 각 요청 사이내로 전송되기 시작(HTTP/1.0이 GET 라인에 붙은 형태로) 상태 코드 라인 또한 응답의 시작 부분에 붙어 전송되어, 브라우저가 요청에 대한 성공과 실패를 알 수 있고 그 결과에 대한 동작(특정 ..
2022.10.26 -
[HTTP] HTTP 개념 정리 💡
HTTP는 상당히 확장 가능한 프로토콜이다. 자원의 URI의 개념, 메시지의 단순한 구조, 통신 흐름을 위한 클라이언트 서버 구조와 같은 몇 가지 기본 개념에 의존한다. 이렇나 기본 개념을 토대로 새로운 HTTP 메서드나 헤더의 생성을 통해 새로운 기능과 새로운 의미를 더하는 수많은 확장들이 수년간 생겨났다. HTTP 개요 HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 프로토콜이다.(최상층인 Application Layer에 해당된다.) HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다. 클라이언트-서버 프로토콜이란, (보통 웹브라우저인) 클라이언트 측에 의해 요청이 초기화되는 프로토콜을 의미한다. 하나의 완전한 문서는 텍스트, 레이아웃..
2022.10.26 -
언어별 성능 비교
https://www.ciokorea.com/news/257842 수십 년째 요지부동, 'C 언어'가 왕좌 지키는 이유 ‘C 언어’는 지난 1972년 개발돼 지금까지 전 세계적으로 널리 사용되고 있으며, 소프트웨어 시대의 핵심적인 기본 구성요소로 군림하고 있다. www.ciokorea.com 자바의 장점 자바는 JIT(Just-In-Time) 컴파일러가 자바 코드를 컴파일하여 타깃 환경에서 실행한다. JIT 엔진은 프로그램 동작을 기반으로 런타임 시 루틴을 최적화하여 사전 컴파일된 C에서는 불가능한 많은 최적화 클래스를 허용한다. 또한 OS 독립적이므로 한 번 작성하면 어디서든 실행될 수 있다. 이러한 장점들은 닷넷(.NET)도 유사하다. 자바의 단점 자바는 JVM 인터프리터가 기계어로 변환하는 중간 코..
2022.10.26 -
[Python] 파이썬 웹서버 & Flask vs. FastAPI
평소에 Flask보다 FastAPI가 더욱 성능이 좋다는 것은 알고 있는데, 왜 그럴까? 왜냐하면 Flask가 WSGI 기반임에 불구하고, FastAPI는 ASGI 기반으로 개발되었기 때문이다. 우선 둘의 차이점을 알아보기 이전에, Spring 계열에서는 웹서비스를 Tomcat 등의 WAS로 배포를 하는데, 공교롭게도 Python에서는 이러한 WAS를 제공하지 않는다. 그렇다면 어떻게 웹서버와 Python 애플리케이션을 연결하는 것일까? CGI(Common Gateway Interface)와 FastCGI CGI를 이용하면 웹서버에 들어온 요청으로 파이썬 프로그램을 실행하고, 그 결과를 각각의 브라우저로 보여줄 수 있게 된다. 과거에는 정적 HTML 파일 하나만 가지고 웹 서비스를 하였기 때문에 CGI가..
2022.10.26 -
[Java] String, StringBuffer, StringBuilder
분류 String StringBuffer StringBuilder 변경 Immutable Mutable Mutable 동기화 Thread-safe Synchronized 가능(Thread-Safe) Synchronized 불가능 저장 Heap & Stack에서 참조 Buffer → toString() 시에 메모리 할당 1. String 특징 new 연산을 통해 생성된 인스턴스의 메모리 공간은 변하지 않음 (Immutable) Garbage Collector로 제거되어야 함 문자열 연산 시 새로 객체를 만드는 Overhead 발생 객체가 불변하므로, Multihead에서 동기화를 신경 쓸 필요가 없다. → 문자열 연산이 적고, 조회가 많은 멀티 쓰레드 환경에 좋음 → 문자열 추가,수정,삭제 등의 연산이 빈..
2022.10.22 -
[Java] 스레드 이해
Java에서 Thread를 구현하는 방법은 크게 두 가지가 있다. 1. Thread class 상속 → 다른 클래스 상속이 불가하니 2번 선호 2. Runnable 인터페이스 구현 public class ThreadBasic { public static void main(String[] args) { // 1. Thread Class를 상속받는 방법 Thread t1 = new MyThread1(); // 쓰레드의 생성 t1.start(); // 쓰레드의 실행. run()이 종료되면 MyThread1 소멸된다. // 2. Runnable 인터페이스를 구현하는 방법 Thread t2 = new Thread(new MyThread2()); t2.start(); // 쓰레드의 실행. run()이 종료되면 My..
2022.10.21