처음 웹 서버는 정적인 요청에 대한 응답만 가능했다. 동적인 페이지를 만들기 위해 프로그램을 붙였고 대표적인 것이 서블릿이다. 초기에는 CGI 구현체를 활용했지만 요청마다 새로운 프로세스를 만드는 것은 너무 비효율적이였다. 그래서 하나의 싱글톤 CGI 구현체를 사용함으로써 스레드로 처리할 수 있게 되었고 이것이 현재의 서블릿이 된 것이다. Spring Web MVC는 서블릿을 사용한다. 그럼 이 둘을 비교하는게 맞을까도 싶다. 그래서 서블릿과 서블릿을 사용한 Spring Web MVC에 대해 기록해보려고 한다. 그림과 같은 http 요청과 응답을 개발자가 직접 처리하기 위해 응답을 만들고 하는 과정을 거친다면 힘들 것이다. 모든 규약을 확인해가며 긴 텍스트로 들어온 요청을 분석하고 거기에 맞는 처리를 하..
SQL SQL 관계형 데이터베이스에서 사용하기 위해 설계된 언어이다. 표준적인 SQL 명령어들이 있으며 이것은 모든 관계형 데이터베이스에 의하여 지원된다. SQL 명령어들은 두 가지의 카테고리로 나누어진다. 데이터 정의 명령어(Data Definitnion Language) 테이블을 생성하거나 변경 대표 명령어 : CREATE, ALTER, DROP, USE 데이터 조작 명령어(Data Manipulation Language) 데이터를 추출, 추가, 삭제, 수정 대표 명령어 : SELECT, INSERT, DELETE, UPDATE SQL이 사용되는 분야 관계를 맺고 있는 데이터가 자주 변경되는 프로그램이나 변경될 여지가 없으며 명확한 스키마가 더 중요할 때 사용하면 좋다. NoSQL는 변경될 때마다 여..
인덱스는 RDBMS에서 검색 속도를 높이기 위한 자료구조 Index는 DB 분야에 있어서 테이블에 대한 동작의 속도를 높여주는 자료 구조 음반(music) row id 제목 가수 발매일 1 aaaaaa a 2022.03.04 2 bbbbbb e 2021.03.03 3 cccccc b … 52222 dddddd b 2021.03.03 52223 eeeeee a 2021.03.03 52224 ffffffff b 2021.03.03 … 99999 ggggggg c 2021.03.03 100000 hhhhhhh d 2021.03.03 어떤 사람이 가수가 a인 모든 음반을 구매하려고 한다고 가정하자! SELECT * FROM music WHERE 가수 = 'a'; index가 없는 경우, 100000개의 데이터를..
입력과 버퍼의 관한 정리 우선 우리가 키보드를 통해 키입력을 받으면 입력받은 내용이 버퍼라는 기억공간에 저장이 된다. 또한 콘솔에서 아무 키만 입력된다고해서 입력이 되는것이 아니라 마지막에 엔터키를 눌러야 지금까지 눌렀던 내용이 버퍼에 전달되어 저장이 된다. 먼저 키보드로 120 라고 입력했다고 가정하자. 참고로 엔터에 해당하는 코드 문자는 \r\n 이다. 그럼 버퍼에는 120라고 들어갈 것이다. 입력은 nextInt() 메서드가 실행된이후 버퍼에 내용이 있는지 확인하게 된다. 처음이니 버퍼에 내용은 없다. 따라서 키보드로부터 사용자의 입력을 기다리는 상태가 되고, 위에 가정한대로 입력을 받게 된다. 그리고 버퍼에서 공백,탭문자,개행문자(엔터)를 구분으로 해서 하나의 단어를 가져..
📌클래스(Class) 클래스란, 객체를 만들어 내는 설계도 혹은 틀이다. 서로 연관되어 있는 변수, 메서드의 집합이다. class Animal { // 변수 String name; int age; // 메서드 void run(){ System.out.println(name + "달려"); } void eat(){...} } 클래스의 구성 class 키워드를 이용하여 선언한다. 필드 = 멤버 변수 캡슐화의 원칙으로 클래스 외부에 어떤 변수나 메서드가 위치해서는 안된다. 📌객체(Object) 실세계에서 우리 주변에 있는 TV, 책, 의자, 사람 등 모든 것이 객체이다. 객체는 자신만의 고유한 상태와 행동을 가지며 서로 상호작용하며 존재한다. 이러한 객체는 클래스로부터 생성된다. 자신만의 고유한 상태인 필드(..
오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것 (new) 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것 (change, modify) class Parent { void parentMethod() {} } class Child extends Parent { void parentMethod() {} // 오버라이딩 void parentMethod(int i) {} // 오버로딩 void childMethod() {} void childMethod(int i) {} // 오버로딩 } 바인딩 오버로딩 : 정적 바인딩, 호출될 메소드가 컴파일 시점에 결정된다. (컴파일 다형성) 오버라이딩 : 동적 바인딩, 호출될 메소드가 실행 시점에 결정된다. (런타임 다형성) 바인딩이란 프로그래밍에서 컴각종 값들..