본문 바로가기

반응형

분류 전체보기

(239)
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2. 개략적인 규모 추정 시스템의 용량이나 성능 요구사항을 파악하기 위해서 개략적인 추정이 필요한 경우가 있다. 효과적으로 이를 표현하기 위해서는 2의 제곱수, 응답지연값, 가용성에 관계되어 잘 이해하는 것이 중요하다.2의 제곱수데이터의 크기는 2의 제곱수로 표현할 수 있따. 데이터의 최소 단위는 1바이트이고, 8비트로 구성된다. ASCII 문자 하나가 차지하는 메모리 크기가 1바이트이다. 10제곱: 1KB20제곱: 1MB30제곱: 1GB40제곱: 1TB50제곱: 1PB응답지연값통상적인 연산들의 응답지연값을 분석하면 아래과 같이 정리할 수 있다. 메모리는 빠르지만 디스크는 느리다.디스크 탐색 (seek) 은 가능한 한 피하라.단순한 압축 알고리즘은 빠르다.데이터를 인터넷으로 전송하기 전에 가능하면 압축하라.데이터 센터는 보통 여..
[Spring] 자바 웹 애플리케이션 & WAS 동작 원리 파이썬 웹 애플리케이션을 실행하기 위한 Gateway Interface 서버인 WSGI, ASGI 등에 대해 정리한 적이 있다. 이러한 Gateway Interface 서버는 파이썬으로 구현되어 있어서, Django와 같은 파이썬 웹 프레임워크로 개발된 애플리케이션을 파이썬 모듈로 import 하여 사용할 수 있다. 이는 인터페이스 서버가 동작하는 프로세스 안에서 해당 애플리케이션 코드를 직접 import하여 Python object 또는 callable 형태로 사용한다는 의미이다. 그렇다면 자바에서는 어떨까? 파이썬의 Gateway Interface 서버와 유사하게, 자바에도 Tomcat,  Jetty 등의 웹 애플리케이션 서버 (WAS) 가 존재한다. 이들 서버 역시 요청을 받아 자바 애플리케이션을 ..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1. 사용자 수에 따른 규모 확장성 기술 인터뷰 중 '대규모 트래픽을 감당해야 하는 경우 시스템을 어떻게 설계할 것인가' 라는 질문을 받은 적이 있다. 대규모 트래픽, 대용량 데이터에 대한 솔루션들의 중요성은 알고있지만 실무에서 경험이 없어 제대로 공부해보지 못했다. 이번 기회에 '가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책을 기반으로 관련 내용들을 공부하고 이를 정리하려 한다.단일 서버단일 서버로 구성되어 있는 시스템에 대해서 생각해보자. 이 시스템은 웹앱, DB, 캐시 등을 하나의 단일 서버에서 실행한다.시스템에 사용자의 요청이 도달하여 처리하는 과정은 다음과 같다. 클라이언트: 사용자에 의해서 특정 도메인에 대한 요청 생성-> DNS: 도메인 이름을 IP 주소로 변환-> 클라이언트: 반환된 IP 주소로 HTTP 요청을 전달..
[Django] Django 배포 - wsgi vs asgi 장고 애플리케이션을 개발하고 나면 이를 배포해야 한다. 자바 스프링의 경우 Tomcat과 같은 WAS 환경으로 배포된다. 하지만 파이썬은 자바 애플리케이션과 달리 컴파일이 필요없고 인터프리터를 통해서 실행된다. 그렇다면 파이썬 애플리케이션이 어떤 웹서버 환경에서 동작하는지 장고 애플리케이션을 기준으로 정리한다.1. CGI vs WSGI vs ASGI파이썬 애플리케이션을 웹서버에서 실행하기 위해서는 웹서버와 애플리케이션이 통신할 수 있어야 한다. 웹서버로 전달된 요청을 애플리케이션으로 전달하고 애플리케이션에서 처리한 응답을 다시 외부로 반환할 수 있어야 한다. 이러한 동작을 위해서 파이썬 애플리케이션의 통신 방식을 인터페이스로 미리 정의해놓았고, 통신 방식에 따라서 CGI, WSGI, ASGI 등 다양하게..
[Kotlin] 영역 함수 (Scope functions) 코틀린은 특정 객체의 컨텍스트안에서 코드 블럭을 실행하도록 하는 함수들을 제공한다. 특정 객체에 대해서 영역 함수 (scope function) 들을 사용하면 임시적으로 영역 (scope) 가 형성되며, 영역안에서는 객체의 이름이 없이 컨텍스트 객체에 접근이 가능하다. scope function 에는  let, run, with, apply, also, 이렇게 5개 함수들이 포함되며 이러한 함수들을 사용하여 코드를 더욱 간결하고 가독성 좋게 작성할 수 있다.1. Scope functions 비교scope functions 는 기본적으로 코드 블럭을 실행한다는 점에서 동일하지만, 블럭안에서 컨텍스트 객체에 접근하는 방법과 표현식의 결과 등이 서로 다르다. - Context object: this or it..
[Kotlin] 튜토리얼 따라가기 (5) (Null safety) 프로그래밍을 하다보면 null 값을 만나는 경우가 있다. null 값으로 인해서 예외가 발생하는 경우가 많은데, 코틀린에서는 null 값을 방지하는 null safety 기능을 가지고 있다. 이를 통해서 코틀린은 런타임이 아닌 컴파일 타임에 null 값으로 인한 잠재적 위험을 탐지할 수 있다. null safety 기능을 통해서 null 값이 가능한 곳을 명시적으로 선언하거나, null 값을 확인하거나, null 값을 반환할 여부가 있는 프로퍼티나 함수를 안전하게 호출하기, null 값이 발견되었을 때 수행할 동작 설정 등을 할 수 있다.1. Nullable types코틀린에서는 기본적으로 null 을 허용하지 않는다. 하지만 명시적 타입 뒤에 '?' 기호를 붙여서 nullable type 으로 선언할 ..
[Kotlin] 튜토리얼 따라가기 (4) (Classes) 1. Classes코틀린은 Class 와 Object 를 통해 객체지향을 제공한다. 클래스 선언에는 다음과 같이 Class 키워드를 사용하여 선언한다. class Customer2. Propertiesclass Contact(val id: Int, var email: String)class Contact(val id: Int, var email: String = "example@gmail.com") { val category: String = "work"} 클래스 객체는 프로퍼티를 가진다. 프로퍼티는 클래스 선언시 선언부의 () 괄호 또는 구현부의 {} 괄호에 선언할 수 있다. 선언부의 프로퍼티는 함수에서와 같이 기본값을 정의할 수 있다. 프로퍼티는 var 과 val 모두로 선언할 수 있는데, 런타..
[Kotlin] 튜토리얼 따라가기 (3) (Functions) 1. Functionsfun sum(x: Int, y: Int): Int { return x + y}fun main() { println(sum(1, 2)) // 3} 코틀린에서는 fun 키워드를 사용하여 함수를 선언한다. 매개변수는 타입과 함께 () 괄호 안에 선언되고, 함수 본문은 {} 안에 작성된다. 함수의 반환 타입은 함수 선언부의 매개변수 괄호 다음에 정의된다.2. Named arguments코틀린은 함수를 호출할 때 매개변수의 이름을 지정하여 인자를 입력할 수 있다. 이를 named argument 라고 하며, 이때는 매개변수의 순서와 상관없이 지정한 매개변수로 인자가 입력된다. fun printMessageWithPrefix(message: String, prefix: Str..

반응형