Dev 226

[ JSP ] Servlet 과 ServletConfig

서블릿(Servlet)은 콘솔프로그램에서 동작하는 클래스가 아니다. 서블릿은 웹환경에서 동작하는 클래스이다. 단순한 클래스를 서블릿 클래스로 바꾸려면 서블릿활동에 필요한 API를 장착해야한다. 서블릿 클래스의 가장 근본이 되는 API에는 Servlet 인터페이스와 ServletConfig 인터페이스가 있다. Servlet 인터페이스는 서블릿의 생성과 실행 그리고 삭제와 관련된 인터페이스이다. ServletConfig 인터페이스는 서블릿의 초기화와 관련된 인터페이스이다. 톰캣의 lib 폴더에 가면 서블릿을 위한 API가 존재한다. 이클립스를 사용하면 톰캣과 연동하여 접근할 수 있고 cmd 창으로 컴파일 하는 경우, 클래스패스 지정을 통해 접근하여 사용할 수 있다. Servlet 인터페이스 Servlet은 ..

Dev 2021.06.20

[ JSP ] 서블릿(Servlet) 등록 (web.xml 과 어노테이션)

[ JSP ] Servlet 이란? Servlet이란 Server Application Let의 줄임말이다. Let은 조각을 의미하니 서버의 조각을 Servlet이라고 한다. Servlet은 왜 필요할까? 우선 서버의 필요성부터 알아보자. 서버(Server)란? 서버는 'Request(요청.. lordofkangs.tistory.com Servlet의 개념은 이전 포스팅에서 다루어 보았다. 그럼 이 Servlet을 어떻게 사용해야 하는지 알아보자. 어떤 프로그램이든 특정 파일에 접근하려면 '경로'가 필요하다. 웹브라우저가 웹서버에게 요청(Request)을 할 때, Servlet이 필요하다면 해당 Servlet이 위치한 경로를 이용하면 된다. 그리고 이 경로는 '가짜 경로'(가상경로)이어야 한다. 왜냐하면..

Dev 2021.06.20

[ JSP ] JSP의 역할

JSP는 Java Server Pages의 줄임말이다. 한마디로 Java Server용 페이지라는 의미다. 대표적인 Java 서버에는 '톰캣'이 있다. 톰캣은 JDK를 사용하여 '서블릿'을 실행한다. 서블릿은 서버의 조각이라는 의미로 JDK가 프로그램 실행시, 필요한 클래스를 동적로딩하는 원리를 응용하여 서버에 적용시킨 개념이다. 구체적인 내용은 이전 포스팅에 정리해 놓았다. [ JSP ] Servlet 이란? Servlet이란 Server Application Let의 줄임말이다. Let은 조각을 의미하니 서버의 조각을 Servlet이라고 한다. Servlet은 왜 필요할까? 우선 서버의 필요성부터 알아보자. 서버(Server)란? 서버는 'Request(요청.. lordofkangs.tistory.c..

Dev 2021.06.20

[ JSP ] Servlet 이란?

Servlet이란 Server Application Let의 줄임말이다. Let은 조각을 의미하니 서버의 조각을 Servlet이라고 한다. Servlet은 왜 필요할까? 우선 서버의 필요성부터 알아보자. 서버(Server)란? 서버는 'Request(요청)'에 'Response(반응)'하려고 만들어졌다. 서버가 없다고 가정하면, 사용자는 데이터가 저장된 DB에 직접 접근하여 원하는 데이터를 얻어야 한다. 이는 굉장히 불편한 작업이다. 예를 들어, 피자를 먹고 싶은 A가 직접 토마토 농장을 찾아가 토마토를 얻고, 도우를 만들기 위해 밀가루를 사오고, 올리브를 얻기 위해 올리브 농장을 찾아가야 하는 것과 같다. 정말 번거로운 일이다. 하지만 간편한 방법이 있다. 피자가게(Server)에 배달을 Request..

Dev 2021.06.20

[ JAVA ] 제네릭 (Generic) 심화 ( 와일드 카드 + 상속 )

[ JAVA ] 제네릭 (Generic) 제네릭(Generic)을 사용하는 이유는 무엇일까? 프로그래밍에서 자료형(Data Type)이란 굉장한 의미를 갖는다. 자료형이 '명시'되어 있으면 데이터를 저장하는데 필요한 메모리의 크기를 알 수 있다. lordofkangs.tistory.com 이전 포스팅을 통해 기본적인 제네릭의 개념을 알아보았다. 이번에는 제네릭 심화 개념을 파헤쳐 볼까한다. 제네릭을 사용하면 타입 파라미터로 모든 클래스를 넣어줄 수 있다. 이렇게 모든 타입이 가능하다는 말은 프로그램에 있어 좋은 말이 아니다. 다양한 타입이 들어오면서 데이터의 정체성을 훼손시킬 수 있다. 예를들면 어떤 제네릭 클래스는 숫자 타입만 사용할 목적으로 만든 클래스지만 문자열 클래스가 들어가도 컴파일 과정에서 어..

Dev/JAVA 2021.06.20

[ JAVA ] 제네릭 (Generic)

제네릭(Generic)을 사용하는 이유는 무엇일까? 프로그래밍에서 자료형(Data Type)이란 굉장한 의미를 갖는다. 자료형이 '명시'되어 있으면 데이터를 저장하는데 필요한 메모리의 크기를 알 수 있다. 이처럼 자료형은 변수에 저장할 수 있는 데이터의 '범위'를 알려준다. 그러므로 코딩을 할 때, 데이터를 데이터에 알맞는 크기의 변수에 저장하면 모든 일이 쉽게 풀릴 것만 같다. 하지만 코딩은 그리 단순한 흐름으로 흘러가지 않는다. double realNum = 1.5; int intergers = (int) realNum; double(8byte)형 변수에 저장한 데이터를 int(4byte)형 변수에 저장해야하는 상황이 발생한다. (강제형변환, casting) 강제형변환은 프로그램 성능에 악영향을 준다..

Dev/JAVA 2021.06.20

[ JAVA ] 스레드(Thread) 동기화5 (Implicit Lock vs Explicit Lock )

동기화는 스레드 간 작업 순서를 결정하는 것이다. 작업순서를 결정하기 위해서는 두 가지가 고려되어야 한다. 1. 상호배제(Mutex) 2. 협동(Cooperation) 상호배제(Mutex)에 관해서는 '스레드 동기화 이해하기 1,2,3 포스팅에서 알아보았고 협동(Cooperation)에 관해서는 '동기화 이해하기 4'에서 알아보았다. 이번 포스팅은 '스레드 동기화 이해하기 5'로 스레드 동기화와 관련된 마지막 포스팅이다. 이번 포스팅에서는 협동(Cooperation)을 더 다루어 볼것이다. 협동이란, 스레드 간의 소통을 원할히 하여 동기화를 구현하는 것이다. '스레드 동기화 이해하기 4'에서는 join()과 yield()를 알아보았다. 두 메소드의 공통점은 둘 다 Thread 클래스에 소속된 메소드라는 ..

Dev/JAVA 2021.06.20

[ JAVA ] 스레드(Thread) 동기화4 ( yield(), join() )

[ JAVA ] 스레드(Thread) 동기화1 ( Intrinsic Lock + 피터슨 알고리즘 ) 동기화 지훈이네 가족은 아빠, 엄마 그리고 형까지 네 식구로 이루어져 있다. 그러나 집 안에 컴퓨터가 단 한 대 뿐이라 가족간의 충돌이 불가피했다. 그래서 지훈이네 가족은 컴퓨터를 쓰는 순 lordofkangs.tistory.com 위 포스팅에서 동기화는 '상호배제(Mutex)'와 '협동(Cooperation)'으로 이루어진다고 말했다. 이전 포스팅 '스레드 동기화 이해하기 1,2,3'에서는 상호배제(Mutex) 방법으로 피터슨 알고리즘, 세마포어, 모니터를 알아보았다. 이번 포스팅에서는 동기화 작업을 위한 협동(Cooperation)에 대해서 알아볼 것이다. 동기화는 작업 순서를 정하는 것이다. 그 안에..

Dev/JAVA 2021.06.20

[ JAVA ] 스레드(Thread) 동기화3 ( 모니터(Monitor) )

[ JAVA ] 스레드(Thread) 동기화2 (세마 포어 Semaphore) 이전 포스팅에서는 공유 객체를 향한 스레드의 경쟁이 적은 경우의 상황을 알아 보았다. 이번에는 공유객체를 향해 스레드의 경쟁이 심해지는 경우, 어떤 방식으로 JVM이 스레드 동기화를 시도 lordofkangs.tistory.com 이전 포스팅에서 동기화를 위한 상호배제 방법으로 '세마포어(Semaphore)에 대해서 알아 보았다. 하지만 세마포어는 JVM이 채택하고 있는 방식이 아니다. JVM은 상호배제를 위해 Monitor 방식을 사용한다. [ JAVA ] 스레드(Thread) 동기화1 ( Intrinsic Lock + 피터슨 알고리즘 ) 동기화 지훈이네 가족은 아빠, 엄마 그리고 형까지 네 식구로 이루어져 있다. 그러나 집..

Dev/JAVA 2021.06.20

[ JAVA ] 스레드(Thread) 동기화2 (세마 포어 Semaphore)

이전 포스팅에서는 공유 객체를 향한 스레드의 경쟁이 적은 경우의 상황을 알아 보았다. 이번에는 공유객체를 향해 스레드의 경쟁이 심해지는 경우, 어떤 방식으로 JVM이 스레드 동기화를 시도하는지 파헤쳐 볼 것이다. 결론부터 말하면, 경쟁이 심해지면 공유 객체는 Heavy Weight Lock 상태가 된다. Heavy Weight Lock 상태는 모니터(Monitor) 방식으로 상호배제를 구현한다 Monitor 방식은 다음 포스팅에서 진행할 예정이다. 이번 포스팅은 Monitor 방식이 나올 수 있도록 영감을 준 세마포어(Semaphore) 방식에 대해서 알아볼 것이다. JVM은 세마포어 방식을 사용하지 않는다. JVM는 synchronized 키워드를 통한 Monitor방식으로 상호배제를 구현한다. JVM..

Dev/JAVA 2021.06.20