Web 18

Web 18강. MVC 패턴 사용

MVC 패턴에서는 redirection을 사용하지 못한다. 정적인 파일인 login 페이지를 요청하면 redirection으로 뷰(login.jsp)로 바로 찾아갈 수 있다. 만약 동적인 데이터가 필요하면 데이터베이스를 찾아가야하는데, 이를 Model이라고 한다. 동적인 페이지가 필요한 요청이 오면 MVC 패턴, 정적인 파일을 요청하면 CV패턴 -> 프론트 컨트롤러 패턴을 사용한다. 모델이 필요 없기 때문에 redirection으로 해결할 수 있다. 모델이 필요한 요청이 오면 어떻게 데이터를 넘겨줄 수 있을까? request 공간에 데이터가 저장되어 있다면 request.getAttribute( )를 호출하여 데이터를 가지고 있을 것이다. 그런데 redirection을 함으로써 FC는 응답을 마치고 새로..

Web 2022.02.26

Web 17강. DBCP

DB 연결할 때 Connection conn 객체를 파일마다 만들어줬었다. 커넥션 객체는 사용자마다 필요하다. Connection Pooling기법을 사용하여 재사용 해줄 것이다. DBCP(DataBase Connection Pooling) : 풀링 기법은 DB 커넥션 객체를 여러개 만들어서 커넥션 풀에 넣어놓고 클라이언트 객체가 필요할 때 마다 커넥션 객체를 가져다 쓰고 다 쓴 후에는 다시 풀에 돌려주는 기법 커넥션 풀에돌아간 커넥션 객체는 다른 클라이언트가 요청하면 재사용된다. https://kyun2.tistory.com/48 [DBCP] 데이터베이스 커넥션 풀 기법 활용하기 DBCP(Database Connection Pooling) 풀링(pooling) 기법은 데이터베이스 커넥션 객체를 여러개 ..

Web 2022.02.24

Web 16강. request

모든 서버에는 4가지 메모리 영역이 있다. heap이라는 논리적 영역에서 4가지로 나뉘는 것이다. 프로그램 하나가 서버에 데몬으로 돌고 있다. 톰캣이라는 프로세스가 돌고 있는 것이다. 클라이언트 A가 get, post, delete, put 중 하나를 요청한다. 이 서버는 여러 명이서 사용(요청)하는데 요청을 처리할 때 개개인의 메모리 영역이 필요할 것이다. DB에서 데이터를 끌어올려서 메모리에 올리는데 어떤 클라이언트가 요청했는지 메모리에 영역 구분이 필요하기 때문이다. 클라이언트 A, B, C가 요청을 하면 A 스레드, B 스레드, C 스레드가 각각 만들어져서 돌고 있을 텐데, 각각의 스레드들이 메모리 구분이 필요하여 요청할 때마다 new 되는 게 있다. 이게 request이다. A가 요청 시에 ht..

Web 2022.02.24

Web 15강. MVC 패턴

서블릿 순수하게 진행 스트레스 엄청 받음 ↓ 모델 1 - JSP 나옴 (Java Servlet Page) 서블릿 : 동적 웹페이지 생성 프로그램 (자바, C 등 수많은 언어가 동적 웹페이지를 생성하는 프로그램) JSP, PHP, ASP(C#언어 -> html에 섞는 기술) 모델 1에서 JSP에는 VIEW가 순수하지 않다. 비즈니스 로직(디비 연결부터 자바 코드들을 말함)이 너무 많이 들어가있기 때문이다. 다이렉트하게 요청하니까 URL 요청을 한다. (단점 : 내 서버의 폴더 구조가 노출됨) ↓ 모델 2 (MVC패턴; 모델 - 뷰 - 컨트롤러) Model = Java 파일, DB View = JSP 파일 Controller = Java 파일 (앞단에서 요청 제어) -> 컨트롤러가 하나의 코드로 공통 처리를..

Web 2022.02.24

Web 14강. FrontController 패턴

package site.metacoding.servletproject.controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; // http 프로토콜 최초 버전 (GET) // http1.0 프로토콜 (GET, POST) // http1.1 프로토콜 -> 지금 일반적으로 사용하는 디폴트 프로토콜 (GET(주소요청..

Web 2022.02.23

Web 12강. 새 프로젝트 만들기

새로운 프로젝트를 만들 것이기 때문에 기존에 사용하던 first 프로젝트 폴더는 close 해준다. 빈 공간에 마우스 우클릭하여 새로운 동적인 프로젝트를 만들 것이다. 프로젝트를 만들면 제일 처음 index.jsp 파일을 만들어서 서버가 잘 돌아가는지 테스트부터 해본다. 기존에 쓰던 first 프로젝트는 Remove 처리해준다. 컨텍스트 패스도 설정해주자! package site.metacoding.servletproject; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; impor..

Web 2022.02.23

Web 11강. 동적 페이지 만들기

META-INF와 WEB-INF 폴더는 외부 접근 불가 폴더로 지정되어 있다. WEB-INF 폴더에 라이브러리 추가하면 build path를 지정해주지 않아도 자동으로 인식해준다. -- 1. 테이블 생성 CREATE table userInfo( id number primary key, name varchar2(20), phone varchar2(20) ); CREATE SEQUENCE SEQ_USERINFO INCREMENT BY 1 START WITH 1; INSERT INTO userInfo(id, name, phone) VALUES(SEQ_USERINFO.nextval, '홍길동', '01011112222'); INSERT INTO userInfo(id, name, phone) VALUES(SEQ_..

Web 2022.02.23

Web 10강. 아파치 톰캣 아키텍처

정리 아파치 톰캣 아키텍처 여러 명의 클라이언트를 받기 위한 소켓 : 80 포트 아파치 톰캣은 멀티스레드 기반으로 만들어져 있다. 소켓 80 포트는 누가 들어오길 기다리는 리스너이다. 리스너가 통신할까? 아니다! 얘는 클라이언트의 요청만 받는 애이다. 리스너가 응답까지 다 하면 다른 클라이언트의 연결을 받지 못한다. 웹브라우저에서 주소창에 엔터를 치는 행위 : GET 요청 통신을 위한 새로운 소켓을 서버 쪽에서 만들어낸다. 포트번호가 랜덤 하게(5001이라고 하자) 열린다. 새로운 소켓이 생기고 클라이언트와 연결되면 새로운 소켓은 응답만 한다. 새로운 스레드로!! 클라이언트는 리스너에게 요청하고 새로운 소켓이 응답해주는 방향을 가진다. 요청할 때마다 소켓이 만들어지는 건데 자세히 보면 서블릿이 만들어지는..

Web 2022.02.23

Web 9강. 동적 웹 서버

아파치 웹 서버는 정적인 웹 서버이다. 톰캣이 해주는 일 -> html 파일이 브라우저에서 해석되기 전에 html 파일에 있는 자바 언어를 선 해석해서 브라우저에 뿌려준다. html에다가 자바 코드만 쓸 수 있으면 동적인 페이지가 된다. html에 데이터를 자바 코드로 넣을 수 있는 기술 -> JSP(JavaServer Pages) html에 자바언어를 적을 수 있는 파일 .jsp => 동적 파일 이 자리에는 자바 코드를 적겠다는 약속이다. 이 자리에 자바 코드를 쓰겠다 = 자바에서의 BufferedWrite 하는 것과 같음 아파치가 클라이언트에게 응답하는 파일은 %까지 다 글자로 인식해서 돌려준다. 그대로 돌려주면 안 된다. 아파치는 자바 언어를 해석하지 못하기 때문에 톰캣에게 jsp파일을 던진다. :..

Web 2022.02.23