Study/Computer Science (7) 썸네일형 리스트형 [HTTP] Stateless 상태(state)란 특정 상황에서 어떠한 대상의 정보를 가리키는 단어다. 따라서 상태란 대상에 종속적이다. 뒤집어서 stateless라고 함은 달리 의존하는 대상이 없고 독립적으로 기능한다는 뜻이라고 할 수 있겠다. HTTP(Hypertext Transfer Protocol)의 특징 중 하나는 stateless다. 각각의 요청과 응답은 독립적이며, 이전의 요청이나 응답에 명시적으로 의존하지 않는다. 이는 HTTP 위에서 웹 서버와 클라이언트 간의 통신이 요청-응답의 단위로 이루어지고, 각 요청은 별도의 작업으로 처리된다는 것을 의미한다. 따라서 각 요청마다 필요한 정보는 함께 전달되거나 다른 방법을 통해 관리되어야 한다. 예를 들어 HTTP에서는 사용자의 인증(authentication)을 어떻게 처리할.. 인터페이스 인터페이스(interface)란 상호작용의 규정이다. 상호작용에는 3가지가 필요하다. 액션을 취하는 쪽, 액션에 응답하는 쪽, 그리고 액션의 방식. 중요한 것은 액션의 방식이다. CLI(command-line interface)에 대해 생각해보자. 사용자는 컴퓨터에게 요청하고, 그 요청에 대해 컴퓨터는 사용자에게 응답한다. CLI는 이러한 요청과 응답의 구성 방식이 커맨드 라인이라고 하는 텍스트로 이루어진다. GUI(graphical user interface)는 액션의 구성 방식이 시각적인 대상에 대한 클릭/드래그 등으로 바뀐 것이다. 상호작용을 하는 측은 그 규정의 디테일에 대해 알아야만 한다. 예컨대 API(application programming interface)가 그렇다. 정해진 방식을 따라.. 프로그래밍 패러다임 프로그래밍 패러다임이란 프로그램을 구성하는 코드 작성, 즉 구현에 있어서의 추상적 체계를 말한다.비구조적 프로그래밍(unstructured programming)이란 프로그램의 실행 순서가 전부이던 시기의 프로그램 작성 패러다임이다. 'A가 끝났으니 B로 가시오.' 비구조적 프로그래밍에서 규칙은 단 하나다. 올바른 순서에 따라 올바른 출력을 뽑아내는 것. 코드의 작성은 '틀리지 않게' 이루어졌고, 코드의 유지보수는 지극히 코드 중심적으로 이루어졌을 것이다. 프로그래머는 지시에 따라 다음에 실행될 코드를 찾아가야만 했다.프로그램에게 기대하는 바가 커지면서 프로그램 또한 거대해진다. 코드를 작성하는 과정은 물론 해석하는 과정 또한 간결해져야 했다. 산발적으로 반복되는 부분을 수렴적인 형태로 응축하고, 코드를.. 자료형, 메모리, 그리고 Python [2] (이하의 내용은 부정확한 부분이 많을 수 있습니다. 틀린 부분은 지적해주시면 감사하겠습니다.) Python의 사양(specifiaction)에서는 메모리 관리에 대해 추상적인 원칙만을 제공한다. 그러한 원칙 중 하나가 바로 private heap이다. private heap은 모든 Python 객체와 자료 구조를 포함하는데, 여기서 private heap은 아직 실재하는 영역이 아니다. 각 구현체가 실제적으로 구현하는 과정에서 구체화된다. 왜 "private"인가? Python은 개발자가 메모리를 명시적으로 관리하게 두기보다 그것을 은닉하려는 철학을 갖고 있다. 그래서 개발자가 직접적으로 접근할 수 없는 private heap과 그를 유일하게 관리하는 Python memory manager를 도입한다. .. 자료구조 높이 쌓아올려진 책에 대해 생각해보자. 각각의 책은 너무나 무거워서, 책탑의 중간에서 한 권을 빼낸다는 일은 불가능하다. 우리가 안전하게 꺼낼 수 있는 책은 탑 맨 꼭대기에 놓인 책뿐이고, 책을 얹을 때에도 맨 위에만 얹을 수 있다. 이것도 '스택(stack)'이라고 부를 수 있을까? 의견이 조금 갈릴 것 같다. 스택과 닮은 구석은 있지만 스택이라고 단언하기에는 마음에 걸리는 부분이 있는 것이다. 그렇다면 Python에서 list, append(), pop()으로 구현한 스택은 스택이 맞나? 어찌 되었건 pop(idx)를 통해 list의 가장 끝이 아닌 인덱스의 원소도 빼낼 수 있지 않나? 후입선출의 구조를 상호작용의 자유도 측면에서 제한해야만 스택일까? 사용자 측에서 후입선출의 특징만을 이용하고 있는 .. 자료형, 메모리, 그리고 Python [1] 0/ 자료형, 메모리, 그리고 Python [0] 프로그래밍에서 자료형(data type)은 여러 기준으로 분류될 수 있다. 다루는 대상이 숫자(numerics)인지 문자열(string)인지, 숫자 중에서도 정수(integer)인지 실수(float)인지. 정수처럼 단일한 대상(scalar)을 말하는지, 아니면 클래스처럼 복합적인 값을 가진 대상(composite)을 말하는지. 언어에 자체적으로 내장된 자료형(built-in)인지, 아니면 무언가를 import해야만 하는 자료형(user-defined)인지. 값을 직접 가리키는지(value), 아니면 값의 주소를 가리키는지(reference). 이 부분에 대해 알아보면서 헷갈리는 게 한두 가지가 아니었다. 각 언어마다 다르게 이야기하기 때문이다. 예를 들어.. 자료형, 메모리, 그리고 Python [0] SWEA에서 Python의 메모리 계산 방식이 달라진 모양이다. 예전에 Pass한 풀이를 다시 집어넣었는데 총 20개의 테스트 케이스 중에서 7개만 통과하고 메모리 초과로 Fail을 받았다. 이때까지만 해도 별 생각이 없었다. 조금만 고치면 되겠지 뭐. 그렇게 데이터를 구겨넣는 여정이 시작되었다. 문제는 2차원 배열에서 각 좌표가 가져야 할 값을 구하는 전형적인 BFS. 주어지는 좌표가 1000 미만이라 큐에 (x, y) 좌표를 각각 집어넣는 대신 1000x+y의 형태로 바꿔보았다. 테스트 케이스를 10개까지 통과할 수 있었다. 각 좌표가 가지는 값의 상한은 1998. 2차원 배열을 1차원으로 이어붙인 다음 2k번째 좌표와 2k+1번째 좌표의 값을 value(2k)*10000+value(2k+1)로 표현.. 이전 1 다음