인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

천천히꾸준하게님의 프로필 이미지
천천히꾸준하게

작성한 질문수

[NarP Series] MVC 프레임워크는 내 손에 [나프1탄]

09_JavaEE기본_Servlet(서블릿)이 뭐야

9강 질문

작성

·

200

0

안녕하세요 선생님 강의 잘 듣고 있습니다

다름이 아니라 9강을 듣다가 잘 이해가 안가서요

25분경에서 요청할때는 넘어오는 데이터가 없으니까 받을 필요가 없다고 하셨는데

클라가 서버에 요청을 할때 넘어오는 데이터가 없다는게 무슨 말인지 잘 이해가 안갑니다..

그래서 resp를 쓰셨는데

요청을 하면 서버가 처리를 해서 응답을 하는 거 아닌가요? 왜 넘어오는게 없다는거죠???

클라이언트가 요청을 해줬으니까 (우리가만든 페이지를 띄워야달라고 하는게 요청이라고 생각했어요)

req라는 변수를 써줘야하는거 아닌가요?

 

그리고 resp가 클라이언트를 식별하고 있으니까 GetWriter를 이용해서

이 클라이언트와 연결된 출력 스트림을 하나 얻어오면 된다고 하셨는데

이게 무슨 소리일까요?

 

그리고 왜 System.out.println이라는 출력 소스가 따로 있는데

굳이 PrintWriter라는 클래스를 가지고와서 쓰는건가요?

그리고 클래스를 객체로서 사용하려면

Printwriter out = new Printwirter() 이런 형식으로 먼저 써줘야하지 않나요?

어떻게 바로 resp라는 변수를 넣을 수 있는걸까요??

 

 

답변해주시면 감사하겠습니다.

답변 1

1

박매일님의 프로필 이미지
박매일
지식공유자

네 열공하시는군요^^

Q. 클라가 서버에 요청을 할때 넘어오는 데이터가 없다는게 무슨 말인지 잘 이해가 안갑니다..

->클라이언트에서 서버가 요청은 받았지만 요청을 할때 넘어오는 데이터는 겁니다.
예를들면 클라이언트에서 회원가입의 경우를 들어보겠습니다
회원가입좀 해주세요라는 요청을할때는 이름,이메일,전화번호등의 데이터를 서버로 넘겨줘야
서버가 데이터를 받아서 가입을 하겠죠? 이런경우는 요청할때 데이터가 서버로 넘어오기때문에
서버는 데이터를 받아야된다는 의미입니다.

다른 예는 회원목록을 보여주라는 경우를 들어보겠습니다. 
이경우는 회원목록좀 보여주세요라는 요청만있고 데이터를 넘길필요는 없기때문에 서버에서도 데이터를 받을 필요가 없겠죠? 회원목록좀 보여주세요라는 요청에 회원목록만 응답만 해주면되구요.
 
Q. 요청을 하면 서버가 처리를 해서 응답을 하는 거 아닌가요? 왜 넘어오는게 없다는거죠???
네. 클라이언트가 서버에 요청을 하면 그 요청에 대해 서버는 응답을 하는건 맞습니다.
여기서 넘어오는게 없다는 것인 위에서 회원가입을 설명한 데이터를 이야기하는 것입니다. 

클라리언트의 요청은 서버의 request(req)로 받으며 혹시 넘어오는 데이터는 request(req)객체에 담겨져 있으므로 request.getParameter("요청파라메터") 이렇게 받아서 사용하면 됩니다.

Q. 그리고 resp가 클라이언트를 식별하고 있으니까 GetWriter를 이용해서 이 클라이언트와 연결된 출력 스트림을 하나 얻어오면 된다고 하셨는데 이게 무슨 소리일까요? 
->resp에 접속한 클라이언트의 정보가 저장되어있습니다.(즉 클라이언트의 IP, PORT 정보등)
만약 서버가 클라이언트에 응답을 할려면 네트워크로 응답을 해야겠죠?
그럼 서버가 클라이언트에게 응답을 할려면 스트림(즉, 통로,빨대)이 있어야 응답을 해줄수가 있습니다.  System.out.println은 클라이언트에 전송이 되는 것이아니라 서버 콘솔창(Tomcat)에 출력이 됩니다. 응답이라는것은 요청한 클라이언트에게 해야됩니다. 그래서 PrintWriter라는 클래스를 이용합니다

Q. 굳이 PrintWriter라는 클래스를 가지고와서 쓰는건가요?

-> 그래서 PrintWriter라는 클래스를 이용합니다. PrintWriter는 일종의 출력 스트림(빨대)으로 보시면됩니다. 그런데 이 PrintWriter객체를 만들려면 현재 요청한 클라이언트와 연결해서 만들어야 되기 때문에 요청한 클라이언트의 정보를 담고있는 response(resp, 응답객체)를 이용해서 객체를 만들어야 클라이언트와 연결이되겠죠? 
PrintWriter out=resp.getWriter(); 이렇게 해야 클라이언트와 연결된 출력스트림을 만들수있습니다.
그후에 out.println("<html>"); 이런식으로 클라이언트에 응답을 하는것입니다. 클라이언트는 브라우저에 결과가 출력이되구요.

말로 설명을 할려니 조금 어렵지만 영상 후반부를 계속들어보시면 이해가 되실겁니다.
이해가 어려우신 부분이 있으시면 언제든지 문의주시기 바랍니다.^^


감사합니다 100퍼센트는 아니지만 어느정도 이해가 되었어요! 강의를 끝까지 듣고도 이해가 안가면 다시 여쭈러 오겠습니다!!

천천히꾸준하게님의 프로필 이미지
천천히꾸준하게

작성한 질문수

질문하기