
1996년 5월 이전까지 서버와 클라이언트는 정적인 자료(HTML 등)만 주고받는 관계였다. 좀 더 정확하겐 미리 가지고 있던 문서 중 클라이언트의 요청에 부합하는 것을 골라 반환하는 관계라고 할 수도 있다. 하지만 사용자가 늘어나고 새로운 요구가 생겨나면서 정적인 웹 페이지에서 벗어나 동적으로 반응하는 웹에 대한 필요가 생겨났고, 이는 1996년 5월 자바원 컨퍼런스의 서블릿 API 발표로 이어졌다. 서블릿이란 한 마디로 말하면 클라이언트의 요청을 처리하고 반환하는 기술, 혹은 그 패키지나 클래스를 말한다. 여기서의 요청 처리 및 반환은 기존과는 다른 동적인 반환(필요한 부분만 선택적으로 반환하는 것)을 말하며, 반환 시 정적인 리소스(HTML)를 활용한다는 특징이 있다. 작동하는 위치는 그림에서 보이..

Process ⊃Thread 프로세스 OS로부터 자원을 할당받는 작업의 단위 여기서 자원이란 파일, 메모리, 코드, 스택, 힙 등을 모두 포함 위와 같은 특성상(메모리 공유 X) 프로세스 사이의 Context Switching(정보 교환) 이 어려워 여러 여러 개의 프로세스를 가진 프로그램의 동시 작업 수행 어려움 → 소프트웨어의 복잡도가 증가할수록 발목을 잡는 요인 독립적인 작업이기 때문에, 한 프로세스의 강제종료가 다른 프로세스에 영향을 주지 않는다. 이와 같은 배경에서 탄생한, 프로세스보다 작은 단위가 바로 스레드 스레드 프로세스의 자원을 사용하는 실행의 최소 단위 독립 실행을 위해 각자의 PC Register, 스택을 가지며 프로세스 내부의 힙 메모리, 데이터, 코드는 공유 때문에 생성 및 처리속..
공부를 하고 프로젝트를 하면서 노드라는 단어를 참 많이 듣기도 했고 쓰기도 했다. 그래도 그림자를 따라다니는 기분을 지울 수가 없어서, 내가 사용하는 범위 안에서만 정리하고 가자. 시작하기 전에, 노드는 맥락과 분야에 따라 굉장히 다양한 의미를 가지며, 내가 정리한 것은 오로지 내가 현재 관심 있는 분야에 한정된 자료에 불과하다. Node - Data Structure 자료 구조를 배울 때, 특히 링크드 리스트나 트리, 더 일반적으로는 그래프에 대해 배울 때 노드라는 단어를 처음 만난다. 자료구조에서의 노드란 추상적으로 말하면 구조의 기본 단위, 트리나 그래프로 치면 정점이라고 할 수 있으며 덜 추상적으로 말하면 메모리 곳곳에 흩어져 있는 데이터의 조각, 혹은 그 기본적인 단위를 가리킨다. 추가로 링크드..

으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]버블 정렬(Bubble Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 선택 정렬은 한 마디로 말하면 처음부터 끝까지 훑어서 가장 작은(혹은 큰) 숫자를 처음 인덱스에 넣는 방식이다. 시간 복잡도가 같은 삽입 정렬이나 버블 정렬이 그때그때 값을 바꾸는 데 비해 선택 정렬은 한 바퀴에 한 번씩 원소를 배정한다. 어떤 정렬 상황에서건 일관되게 O(N2)의 속도를 보여준다는 특징도 가지고 있으며, 버블 정렬에 비해 두 배 ..

으로 구현한 다른 정렬: [Java+Python]삽입 정렬(Insert Sort) [Java+Python]선택 정렬(Selection Sort) [Java+Python]병합 정렬(Merge Sort) [Java+Python]힙 정렬(Heap Sort) [Java+Python]퀵 정렬(Quick Sort) [Java+Python]카운팅 정렬(Counting Sort) 버블 정렬(Bubble Sort)은 간단히 말하면 처음부터 시작해 인접한 원소와 비교해 자리를 바꾸는 알고리즘이다. 한 바퀴 돌 때마다 원소 하나가 확실히 정렬되기 때문에, 거품이 떠오르는 것 같다고 해서 붙은 이름이기도 하다. 선택 정렬, 삽입 정렬과 함께 최악의 효율을 보여주며, 그 와중에도 삽입 정렬보다 느리다. 최선의 상황(정렬이 끝난..

SQL Mapper와 ORM은 둘 다 JDBC의 단점을 해결하기 위해 나온 기술이다. JDBC의 단점 - DB 연결, SQL CRUD, Data Type Mapping 등의 작업을 일일이 해주어야 함 따라서 당연하게도 둘 다 영속성 프레임워크에 속해 있지만, 상당히 다른 작동 방식을 보인다. 하나씩 알아보자. 먼저 두 기술의 차이를 구조가 아닌 시간순으로 보면 위와 같다. 계속해서 구조의 차이를 보면 다음과 같다. SQL Mapper Object와 SQL의 필드를 매핑하여 데이터를 객체화하는 기술 SQL문 직접 작성 및 쿼리 수행결과를 어떠한 객체에 매핑하여 줄지 바인딩 → SQL 의존적 다른 DB를 도입하거나 변환하는 경우 SQL문을 그 DB에 맞게 새로 작성 → DB 의존적 패러다임 불일치* 발생 M..
SSR(Server Side Rendering)은 이름 그대로 JS가 렌더링을 서버에서 마친 후 클라이언트로 전송하는 방식이다. 매번 완성된 html을 새로 받는 것이라 보면 되는데, 이 때문에 아래와 같은 장단점이 존재한다. 장점 SEO(Search Engine Optimization)에 유리 빠른 초기 로딩 - 단일 파일의 용량이 작음 웹 페이지가 사용자와 상호작용이 적은 경우 유리(블로그, 신문사) 단점 애플리케이션 유지 비용이 높음(자원 이용이 서버에 집중) 요청시마다 새로고침 - UX차원에서 불리 서버에 부하가 걸릴 가능성이 있음 CSR(Client Side Rendering)은 이와는 달리 JS가 사용자의 요청에 따라 필요한 부분만 받아오는 방식을 말한다. 다른 경로로 이동해도 새로고침이 발생..

URI(Uniform Resource Identifier)는 통합 자원 식별자라는 이름 그대로 현재 위치에 대한 고유한 문자열을 말한다. 지금 당장 브라우저의 주소창을 눌렀을 때 나오는 문자열이며, URL 및 쿼리 파라미터를 포함한다. URL(Uniform Resource Locator)은 통합 자원 지시자라고 번역할 수 있으며, 네트워크 상에서 리소스의 위치를 가리킨다. 프로토콜, 도메인, 포트 및 URL Path로 구분할 수 있으며, 보통 웹 주소라 하면 이 URL을 가리킨다. 마지막으로 URN(Uniform Resource Name)은 통합 자원 이름이라고 번역되며 쉽게 정리하면 URI에서 프로토콜을 제외한, 영구적이고 유일한 식별자라고 할 수 있다. URL과의 차이점은 URL - 어디에서, 어떤 ..
모든 반복문은 언제나 재귀 함수로 변환할 수 있으며, 그 반대도 마찬가지다. 따라서 개발자의 필요에 따라 적절히 골라서 사용하는 것이 중요한데, 그 장단점과 차이를 정리해보자. 반복문(Iteration) 선언 - 이 곳에서 반복이 일어난다는 것을 명시. 직관적이며 가독성 좋음. 시작 - 초기화, 반복 조건, 제어 변수의 변경, 반복문 내의 명령문 실행에 대한 정보 명시 종료 - 특정 조건에 도달 할 때까지 반복적으로 실행 무한반복 - 반복 조건에 따라 발생하며 CPU 사이클을 반복적으로 사용 메모리 - 힙 메모리 사용(넘칠 시 Out Of Memory 에러 발생) 속도 - 빠름 변수 - 많음. 이는 변경 가능한 상태의 증가로 이어지며 프로그램 오류가 발생할 가능성이 상대적으로 높음. 재귀 함수(Recur..
재귀란 일반적으로 정의하자면 자기 언급이다. 수학으로 봤을 땐 일종의 점화식이라고 할 수 있으며, 프로그래밍적으로 이야기하자면 재귀 함수란 정의 단계에서 자시 자신을 호출하는 함수를 가리킨다. 주어진 문제를 풀 때 자기 자신을 다시 호출함으로써 코드의 복잡도를 줄이기 위해 사용한다. 하지만 꼬리재귀 최적화가 되어있지 않은 환경에서 재귀 호출은 스택 메모리를 빠르게 잡아먹게 되므로 실행 속도 측면에서 반복문이 더 좋은 선택이 된다. 여기서 꼬리재귀 최적화란 메서드를 재귀 호출 메서드와 꼬리 메서드로 구분해 재귀 호출 이후 추가적인 연산을 실행하지 않도록 막는 방법이며, C++, Swift, Kotlin 컴파일러에는 자동으로 구현되어 있으나 보안상의 이유로 자바 컴파일러엔 구현되지 않았다. 다만 이에 영향을..
- Total
- Today
- Yesterday
- 스트림
- 백준
- 세계여행
- 칼이사
- Algorithm
- 알고리즘
- 중남미
- 동적계획법
- 스프링
- 맛집
- 세모
- 유럽여행
- 면접 준비
- 지지
- Python
- 기술면접
- a6000
- BOJ
- 야경
- spring
- 세계일주
- 자바
- 파이썬
- 남미
- 리스트
- Backjoon
- 유럽
- 여행
- RX100M5
- java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |