목차 서블릿 정의 서블릿 등장 배경 Web과 WAS 웹 컨테이너 (Web Container) 웹 컨테이너(서블릿 컨테이너) 주요 기능 서블릿 생명주기 서블릿 동작 과정 서블릿 정의 서블릿은 자바를 기반으로 동적인 웹 페이지를 만들 때 사용되는 프로그래밍 기술이다. 서블릿은 웹 요청과 응답의 흐름을 메서드 호출만으로 다룰 수 있게 해 준다. 서블릿은 좁게 보면 웹 페이지를 동적으로 만들어주는 자바의 클래스라고 할 수 있고, 넓게 보면 웹 페이지를 동적으로 만들어주는 자바의 패키지라고 할 수 있다. 서블릿 등장 배경 과거 서버는 주로 정적인 리소스만 주고받을 수 있었다. 클라이언트가 자료를 요청하면 서버는 미리 만들어진 자료를 반환하는 형태였다. 하지만 인터넷의 규모가 커지고 웹을 통해 다양한 기능을 구현하..
JSP (Java Server Pages) JSP는 웹 프로그램 작성 언어이다. JSP는 동적인 페이지를 간단히 만들 수 있는 방법을 제공하는 Java 언어 기반의 Server Side Script 언어이다. (서버 환경에서 사용) 동적 웹 페이지 VS. 정적 웹 페이지 정적 웹 페이지는 서버에 저장되어 있는 HTML, CSS를 그대로 보여준다. 반면에 동적 웹 페이지는 상황에 따라 서버에 저장되어 있는 HTML에 데이터를 추가하거나 가공해서 보여준다. 동적 웹 페이지는 데이터의 추가나 변경이 필요할 때 HTML 자체를 수정해야 하기 때문에 그때마다 서버에 요청해야 한다. 동적 웹 페이지는 SEO에 취약하다. 동적 웹 페이지로는 CSR, SSR 방식이 있다. JSP 특징 스크립트 언어이기 때문에 Java..
다음 문제들을 빅 오 표기법으로 나타내보자. 1. 주어진 해가 윤년인지 밝히는 다음 함수의 시간 복잡도를 빅 오 표기법으로 나타내자. function isLeapYear(year) { return (year % 100 === 0) ? (year % 400 === 0) : (year % 4 === 0); } 해답 O(1) 함수에 전달된 년도를 N이라고 하면, 년도가 몇이든 알고리즘에 걸리는 단계 수는 일정하다. 2. 주어진 배열의 모든 수를 합하는 다음 함수의 시간 복잡도를 빅 오 표기법으로 나타내자. function arraySum(array) { let sum = 0; for(let i = 0; i < array.length; i++) { sum += array[i]; } return sum; } 해답..
의존성 배열이란? useEffect hook에 입력하는 두 번째 매개변수를 말한다. 사용 방법 1. useEffect(() => {}) 컴포넌트가 렌더링 될 때마다 호출된다. 매우 비효율적이기 때문에 이 방식으로는 거의 사용되지 않는다. 2. useEffect(() => {}, []) 첫 번째 렌더링 후에만 호출된다. 사용 예제 API 호출을 첫 번째 렌더링 후에만 호출할 경우 // API 호출 useEffect(() => { fetch(movies) .then((res) => res.json()) .then((data) => setMovies(data.List)); }, []) 3. useEffect(() => {}, [value]) 첫 번째 렌더링 후에 호출된다. 이후에는 value가 변경될 때마다 ..
CSS가 어떻게 발전되어 왔는지 정리해보고자 한다. 목차 CSS CSS 전처리기 BEM CSS Module (CSS in CSS) CSS in JS CSS (Cascading Style Sheet) HTML을 시각적으로 꾸미기 위해 사용하는 스타일 언어이다. 단점 - 순수 CSS의 경우 파일 간 값을 공유하지 못한다. 따라서 코드의 재사용이 어렵다. - 중복 코드가 많다. CSS SCSS CSS 전처리기 보통 CSS 전처리기에는 SCSS(SASS), LESS, Stylus가 있다. 그중에도 SCSS가 가장 많이 사용된다. 특징 CSS에 비해 중복되는 코드가 줄어든다. import 구문을 사용하여 다른 CSS를 불러와 사용할 수 있어 유지보수성이 향상된다. 물론 CSS도 여러 파일을 사용할 수 있지만, 빌..
객체 지향 프로그래밍 (Object-Oriented Programming) 객체 지향 프로그래밍은 클래스를 사용하여 추상적인 개념들을 정의하고, 그 클래스를 사용하여 실제 사용할 객체를 만들어냄으로써 현실 세계의 모든 것을 표현할 수 있다는 것에서 출발한다. 객체 지향 프로그래밍이란, 프로그래밍에서 필요한 데이터를 추상화해 객체를 만들고 객체들 간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법론이다. 클래스란, 객체들이 공통적으로 갖는 특성들을 모아 정의 내린 것이다. (추상화) 일종의 설계도이고 이것을 사용하여 우리가 사용할 수 있는 실제 객체를 생성한다. 객체란, 프로그램에서 하나의 역할을 수행하는 속성(Property)과 행위(Method)로 구성된 요소이다. 목차 프로그래밍 패러다임 객체 지향..
문제 N개의 자연수로 이루어진 수열이 주어졌을 때, 그 중에서 가장 길게 증가하는(작은 수에서 큰 수로) 원소들의 집합을 찾는 프로그램을 작성하라. 예를 들어, 원소가 2, 7, 5, 8, 6, 4, 7, 12, 3 이면 가장 길게 증가하도록 원소들을 차례대로 뽑아내면 2, 5, 6, 7, 12를 뽑아내어 길 이가 5인 최대 부분 증가수열을 만들 수 있다. 입력 예제 5 3 7 8 6 2 9 4 출력 예제 4 풀이 function solution(arr){ let answer = 0; let dy = Array.from({length: arr.length}, () => 0); // 앞에 다른 수가 없으니 자기 자신 1로 초기화 dy[0] = 1; for (let i = 1; i < arr.length; ..
문제 계단을 오를 때 한 번에 한 계단 또는 두 계단씩 올라간다. n개의 계단을 오르는 방법은 몇 가지인가? 입력 예제 7 출력 예제 21 풀이 function solution(n){ let answer=0; let dy = Array.from({length: n+1}, () => 0); dy[1] = 1; // 첫 번째 계단 가지수 dy[2] = 2; // 두 번째 계단 가지수 // 3 이상 계단 가지수 = 이전 두 계단 가지수를 더한 값 for (let i = 3; i
- 전위 순회 (부모-왼쪽-오른쪽) : 1 2 4 5 3 6 7 - 중위 순회 (왼쪽-부모-오른쪽) : 4 2 5 1 6 3 7 - 후위 순회 (왼쪽-오른쪽-부모) : 4 5 2 6 7 3 1 전위 순회, 중위 순회, 후위 순회 출력 재귀 함수를 사용하여 이진 트리 순회를 출력한다. function solution(v) { let answer = 0; function DFS(v) { if (v > 7) return; else { console.log(v); // 전위순회: 1 2 4 5 3 6 7 DFS(v*2); console.log(v); // 중위순회: 4 2 5 1 6 3 7 DFS(v*2+1); console.log(v); // 후위순회: 4 5 2 6 7 3 1 } } DFS(v); retur..
문제 10진수 N을 2진수로 변환하여 출력하시오. 입력 예제 13 출력 예제 1101 풀이 재귀 함수를 사용해서 해결한다. function solution(n) { let answer = ""; // 재귀 함수 function DFS(n) { if (n === 0) return; else { DFS(parseInt(n/2)); answer += String(n%2); // 재귀 함수 뒤에서 더해야 스택에 쌓였던 것들이 // 위에서부터 실행되니까 역순으로 출력 가능 } } DFS(n); return answer; }