본문 바로가기

✨ Back-end173

[Servlet] 서블릿을 이용한 mvc1패턴과 mvc2패턴 MVC 패턴이란? Model-View-Controller의 약자로 애플리케이션을 세 가지 역할로 구분한 개발 방법론 모델(Model) : 비즈니스 영역의 로직을 처리 뷰(View) : 비즈니스 영역에 대한 프레젠테이션 (즉, 사용자가 보게 될 결과 화면)을 담당 컨트롤러(Controller) : 사용자의 입력 처리와 흐름 제어를 담당 MVC1 패턴 (MVC1 Pattern) 즉, Controller 영역에 View 영역을 같이 구현하는 방식이며, 사용자의 요청을 JSP가 전부 처리한다. 요청 받은 JSP는 JavaBean Service Class를 사용하여 웹브라우저 사용자가 요청한 작업을 처리하고 그 결과를 출력 Model1 구조의 장단점 장점 단점 구조가 단순하며 직관적이기 때문에 배우기 쉽다 출력을.. 2023. 8. 8.
[Servlet] 서블릿 컨테이너 정의 및 역할, HTTP 요청 처리 순서 서블릿 컨테이너란? 서블릿을 담고 관리해주는거. 구현되 있는 서블릿 클래스의 규칙에 맞게 서블릿을 관리하며 클라이언트의 요청을 받으면 HttpServletRequest와 HttpServletResponse 객체를 생성하여 post, get 여부에 따라 동적인 페이지를 생성해 응답한다. Tomcat (서블릿 컨테이너) 공식적으로 인정된 Servlet / JSP Container 중 가장 인기 있는 Servlet Container 중 하나는 Tomcat이다. https://tomcat.apache.org/ Apache Tomcat® - Welcome! The Apache Tomcat® software is an open source implementation of the Jakarta Servlet, Jak.. 2023. 8. 8.
서블릿(Servlet)과 CGI ( Common Gateway Interface ) 차이 서블릿이란? 자바 프로그래밍을 사용한 웹 어플리케이션 서버에서 실행되는 동적 컨텐츠를 생성해내는 자바 기반의 웹 컴포넌트이며 servlet container에 의해 관리된다. 바이트 코드로 컴파일된 플랫폼 독립적인 자바 클래스로 서블릿 컨테이너에 의해 동적으로 로드되고 실행된다. 서블릿의 주요 특징 클라이언트의 Request에 대해 동적으로 작동하는 웹 어플리케이션 기존의 정적 웹 프로그램의 문제점을 보완해 동적인 여러 기능을 제공 JAVA의 스레드를 이용해 동작 MVC패턴에서 컨트롤러로 이용 컨테이너에서 실행 보안 기능을 적용하기 쉬움 CGI란? 대화식 웹 페이지를 실행할 수 있도록 웹 서버에서 외부 프로그램을 처리하는 인터페이스 웹 서버와 외부 프로그램간의 데이터를 주고받는 방법에 대한 규격 웹 서버.. 2023. 8. 8.
[Servlet] 세션(Session)과 쿠키(Cookie) HTTP의 단점을 보안하기 위해서도 사용하며, 웹상에서 클라이언트의 상태를 유지하기 위한 방법으로 Session과 Cookie를 사용한다. Cookie란? ( 서버 -> 클라이언트 ) 서버가 클라이언트에 저장하는 정보로서 클라이언트 쪽에 필요한 정보를 저장해놓고 필요할 때 추출하는 것을 지원하는 기술 Servlet Container가 사용자 웹 브라우저에 key/value로 구성된 한 쌍의 텍스트 파일을 저장하는 방법 사용자 정보가 네트워크를 통해 서버와 클라이언트 사이에서 지속적으로 유지되기 때문에 네트워크의 부하를 초래 브라우저가 종료되는 순간에 같이 없어지지만, 만기일자를 설정함으로써 쿠키를 지속적으로 유지, 중단 CookieTest1 HTML 삽입 미리보기할 수 없는 소스 CookieTest2 H.. 2023. 8. 8.
Servlet - 서블릿(실행 코드 방식)과 JSP(스크립트 방식) 실행 코드 방식 - 서블릿 (Servlet) 스크립트 방식 - JSP (JavaServer pages) HTML 문서 안에 Java 코드 포함 Java 코드 안에 HTML 코드 포함 JSP 특징 - 자바기반 스크립트 언어 : 자바의 기능을 그대로 사용 가능 - HTTP에 대한 클라이언트의 요청 처리/ 응답 - 웹 어플리케이션에서 결과 화면을 생성할 때 주로 사용 JSP를 사용하는 이유 - 자바 언어에 기반하기 때문에 플랫폼에 독립적 (리눅스, 윈도우 등 운영체제에 상관없이 동) - 스프링이나 스트러츠와 같은 프레임워크와 완벽하게 연동 스크립트의 3요소 동적으로 출력 결과를 생성하기 위해 사용 스크립트 릿 표현식 선언부 표현식(Expression) 값을 출력 스크립트 릿(Scriptlet) 자바 코드를 실.. 2023. 8. 8.
HTTP 프로토콜의 특징 HTTP란? TCP / IP를 기반으로 한 지점에서 다른 지점으로 요청과 응답을 전송하는 프로토콜 Hyper Text Transfer Protocol로, TCP / IP 4계층에서 애플리케이션 계층에 해당하는 프로토콜로써, 전송계층에서 TCP를 사용하여 웹 브라우저와 웹 서버 간에 통신하는 프로토콜이다. HTTP는 비연결형과 무상태로 동작하는 프로토콜이라서 이전 연결 때의 상태정보를 서버가 유지해주지 않는다. 그러므로 상태정보를 일정 시간동안 지속해서 유지해주는 기술이 필요하다. 특징 상태가 없는(stateless) 프로토콜. 즉, 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리 비 연결성 ( Connectionless ) 클라이언트 - 서버 구조 무상태 ( Stateless ) HT.. 2023. 8. 8.
[Spring] 웹소켓 STOMP WebSocket - 실시간 채팅 구현하기 1. gradle을 사용하면 bulid.gradle에 먼저 implementation 해줘야하는게 있다. 반드시 추가 한 후, 다시 Refresh gradle Project를 시켜주자. implementation 'org.springframework:spring-web' implementation("org.springframework.boot:spring-boot-starter-websocket") 2. 먼저 HTML을 만들어준다. 나는 index.html을 만들어 아래 코드를 이렇게 넣어주었다. HTML 삽입 미리보기할 수 없는 소스 3. HTML과 연동시킬 javascript를 만들어준다. 아래 코드를 app.js를 만들고 붙여넣어 주었다. HTML 삽입 미리보기할 수 없는 소스 4. 이번 기능의 핵.. 2023. 6. 1.
[Spring] 쇼핑몰 - 62 이메일 전송하기 build.gradle bulid.gradle에 아래 코드를 추가해주었다. implementation 'org.springframework.boot:spring-boot-starter-mail' 이후 Refresh Gradle Prejct를 하자. application.properties spring.mail.host=smtp.gmail.com spring.mail.port=587 spring.mail.username= spring.mail.password= spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.auth=true spring.mail.username= 에는 발신자 메일을 넣어준다. goo.. 2023. 5. 4.
[Spring] 쇼핑몰 - 60 주문 상태 변경 버튼 클릭시 주문 상태 버튼을 이용해 배송 관리를 해보자. 체크박스가 하나 이상이니 WHERE절에 ORDER_NUM 조건으로 IN 쿼리를 짜준다. UPDATE ORDER_STATUS SET STATUS_CODE = #{statusCode} WHERE ORDER_NUM IN (?,?) 쿼리에는 먼저 이런식으로 나오게 되는데, IN에는 두개 이상의 매개변수가 들어와야하므로 Map으로 빈값을 채워야한다. order_manage.html 버튼을 누를 때마다 js을 이용해 주문 상태를 변경하기 위해 버튼에 onclick 을 넣어주었다. order_manage.js js에서 컨트롤러로 이동하면 쿼리가 실행될 수 있도록 Map데이터를 생성해서 던질것이다. AdminController 컨트롤러 일단 orderNum이 1, 2로 체.. 2023. 5. 2.
[Spring] 쇼핑몰 - 59 페이징처리 페이징 처리를 해보자 모든 오라클 db에서 사용가능한 정렬 -1 ROWNUM을 넣은 후 정렬이 되기 때문에, 조회된 행 번호를 보면 뒤죽박죽으로 정렬되어있다. 따라서 오른쪽과 같이 SELECT절에 한번 감싸주어 ROWNUM을 정렬하게 되면 이렇게 ROWNUM이 제대로 정렬되어 뜨는 것을 확인할 수 있다. ROWNUM 은 조회된 데이터에 행번호를 붙이기 때문에, ROWNUM > 11 에서 데이터를 전혀 불러올 수 없다. ROWNUM이 1보다 큰 데이터들을 조건으로 주면 데이터가 나올 수 없다. HTML 삽입 미리보기할 수 없는 소스 이렇게 SELECT문으로 한번 더 감싸주었다. 그리고 ROWNUM에 별칭 ROW_NUM을주어, SELECT절에서 ROWNUM말고, ROW_NUM을 정렬하고 WHERE 조건을 주.. 2023. 4. 28.
[Spring] 쇼핑몰 - 58 주문 목록 정렬하기 날짜순으로 정렬되면 날짜순에만 파란색으로, 상태순으로 정렬되면 상태순으로 정렬되고 파란색으로 변경해보자. admin_mapper.xml 날짜순으로 정렬하기 위해서는 UPDATE_DATE를 BUY_DATE로 변경해야한다. STATUS_INFO에 있는 1,2,3,4,5는 각 주문접수, 주문확인, 배송준비, 배송중, 배송완료 데이터를 갖고있으므로 상태순으로 정렬하려면 BUY_DATE를 STATUS_CODE로 들어오면 된다. 따라서 ${ } 을 채워주면 된다. 단, 서브메뉴에서 들어오거나, 페이지를 처음들어오면 데이터를 못 받으므로, VO에서 변수를 추가하고, 컨트롤러에서도 넣어줘야 한다. OrderListSearchVO AdminController 컨트롤러 이렇게까지 하면, ${orderBy} 에는 초기에 주.. 2023. 4. 28.
[Spring] 쇼핑몰 - 57 주문 관리 검색 기능 만들기 order_manage.html html에서 일단 그림을 그려주었다. align-middle -> 버튼 생성 시 글자들이 위로 올라가는데, 다시 가운데 정렬해준다. admin_mapper.xml 각 input에 맞는 데이터들을 집어넣어 조건에 맞는 데이터들만 조회하기 위해 쿼리를 수정해주었다. 검색 기능을 구현하기위해 데이터를 이렇게 조회해보았는데, BUY_CODE와 BUY_DATE, STATUS_CODE에 임의의 값을 넣어 조회되는지 확인해보고, 오른쪽과 같이 java에 있는 데이터로 바꿔넣었다. OrderListSearchVO 컬럼이 변수로 들어오면 # 말고 $쓴다. 왜냐하면 #은 데이터 준 뒤 ' ' 를 줌으로써 문자로 인식한다. AdminController 컨트롤러 DB쿼리를 mapper에 이렇게.. 2023. 4. 27.