day52. 24-12-18-수
Server + Applet : 서버에서 실행되다가 웹 브라우저에서 요청을 하면 해당 기능을 수행한 후 웹 브라우저에 결과를 전송하여 응답
그 결과를 클라이언트에 내려보낸다 - json, html
새로운 프로젝트

New Runtime > tomcate v10.1선택

apache-tomcat-10.1.28 다운받기

git 사용할 경우 > Preference 바꾸기 : utf-8 (encoding 타입, 한글 에러 방지) > update 누르기


유틸리티 라이브러리 배치하기
log4j01.2.17.jar: 보안 취약, 운영서버에는 비추 - 로그설정시 사용 - 공통된 관심사(AOP <-> OOP)
gson-2.8.5.jar : 구글에서 json형식을 지원하는 라이브러리
mybatis-3.4.6.jar : SQL 매핑 오픈라이브러리
배포위치: dev_jsp2 > src > main > webapp > WEB-INF > lib
day53. 2024-12-19-목
어떤 언어든지 브라우저에 '쓰기'를 지원하는 API가 있다면 웹 어플 구현이 가능하다.
단, 자바(JVM) 만으로는 불가한데, 요청객체와 응답객체가 없기 때문에 서블릿이 필요하다.
따라서, 엔진 역할로 jsp, servlet api 필요하고, 이는 WAS인 TOMCAT 제공하며 res, req을 처리한다. 결국, JVM + tomcat이 자바 기반 웹 구현을 가능하게 한다.
❓document.write("<h1>hello</h1>")는 어떻게 쓸까?
==> 자바에서 println을 사용해라~!
웹 어플? 서버와 클라이언트의 물리적 거리 문제 해결 --> 브라우저 도메인URL으로 연결
HTTP 프로토콜은 Connectionless(비연결지향)과 Stateless(상태정보 유지 안함) 특징이 있다.
따라서 서버와 클라이언트가 통신을 할 때 통신이 연속적으로 이어지지 않고 한 번 통신이 되면 끊어진다.
하지만, 실제로는 데이터 유지가 필요한 경우가 많다.
예) 장바구니 저장, 페이지 이동해서 로그인 유지
이러한 문제를 해결하는 방법이 바로 쿠키와 세션이다.
쿠키 -> 클라이언트에서 관리 : HTTP의 일종으로 사용자가 어떤 웹 사이트를 방문할 경우, 해당 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다.
세션 -> 서버에서 관리 : 브라우저가 종료되기 전까지 클라이언트의 요청을 유지하게 해주는 기술을 세션이라고 한다.
출처 | https://velog.io/@octo__/쿠키Cookie-세션Session




tech_aid\reactNexpress\notice-express >>>> 리액트와 nodejs + mySQL
day54. 2024-12-20-금
day55. 2024-12-23-월
Java API중에서 applet패키지제공
자바클래스를 html문서에 등록할 수 있는 클래스
http/https
Restful API(전송방식 - get|post|put|delete)
웹서비스란 요청과 응답으로 구성
요청객체와 응답객체 제공
HttpServletRequest
HttpServletResponse
2개의 객체를 주입받으려면 서블릿이 되어야 한다.
약속, 강제성 - > inferface, extends - > 메소드 오버라이드 지원 -> 원형을 수정할 수 없다.
리턴타입과 파라미터를 손댈 수 없다.
웹서비스를 위해서는 URL통한 요청으로 시작된다.
http://localhost:8000/업무이름/페이지이름 이거나 혹은 요청 이름
메소드의 리턴타입이 void이다.
doGet이나 doPost에서 페이지를 출력하는 방법에는 두 가지가 있다.
1) out.print("<h1>제목</h1>") : 대단히 비효율적이다.(html태그, javascript, css 섞여 있다.)
"<table class='tb_notice' width='500px' height='300px',...>
2)출력 페이지를 호출하기 - 효과적이다. 왜냐면 print에다 태그를 적지 않아도 된다.
res.sendRedirect("XXX.jsp");
JSP (java와 html, css, javascript섞어쓰기)
화면처리를 담당한다.
java오류는 Exception발생 - 화면이 출력되지도 못한다.
어디서 문제가 발생한거지?
화면 처리에는 두 가지 상황이 있다.
DML관련 -
SELECT - executeQuery():ResultSet -> cursor조작한다. -> rs.next(), rs.previous(), rs.isFirst():boolean, rs.isLast():boolean
테이블에 직접적인 변화가 없다.
INSERT|UPDATE|DELETE - executeUpdate():int
리턴값이 int이다.
1row inserted
1row updated
1row deleted
commit / rollback
출력메시지는 회원가입이 완료되었습니다.
if(result ==1) 성공
else if(result == 0) 실패
목록, 조건 검색 결과처리하는 화면
1건(int, String, NoticeVO, Map)
n건(List<Map<>>, List)
DB연동한 후 조회 결과는 서블릿이 쥐고 있는데
출력은 JSP페이지에서 해야 한다.
왜냐면 서블릿으로 화면을 출력하는 것은 비효율적이다.
Java -> jsp 파일이 다르다.
파일이 서로 다른데 어떻게 주소번지를 받아오지?
요청이 유지되는 동안에는 주소번지를 넘길 수 있다.(가능함)
jsp코드안에 자바코드를 섞어쓰면 500번에러(Exception종류) 마주하게 된다.
: 화면이 출력 안됨. 에러 코드가 그대로 출력으로 나간다.
jsp안에는 최대한 자바코드를 쓰지 않아야 한다.
(express-> HandleBars사용한것.)
데이터셋과 태그가 섞여 있다. - 고민
jsp는 View계층을 담당하고
Servlet은 Model계층(비즈니스로직)을 담당하게 한다.
컨트롤러는 앱의 사용자로부터의 입력(파라미터)에 대한
응답(response.sendRedirect("xxx.jsp"))으로 모델 및/또는 뷰를 업데이트하는 로직을 포함합니다.
컨트롤 계층은 응답페이지 이름을 결정해 줘야 한다.
또한 응답페이지가 나갈 수 있도록 처리해야 한다.
뷰를 업데이트 하는 것은 jsp에서 해야 할 일이다.
예를 들어보면, 쇼핑 리스트는 항목을 추가하거나 제거할 수 있게 해주는 입력 폼과 버튼을 갖습니다.
이러한 액션들은 모델이 업데이트되는 것이므로, 입력이 컨트롤러에게 전송되고, 모델을 적당하게 처리한 다음,
업데이트된 데이터(String, json, xml)를 뷰로 전송(화면폼설정과 응답포맷이 맞지 않으면 400에러발생-)합니다.
컨트롤계층의 역할은 서블릿에 맡기는 것이 좋겠다.
서블릿은 req, res를 갖고 있다.
사용자가 입력한 값을 받을 수 있다. -
getParameter에 오는 이름은 form태그에서 정해진 값이다.
<input type="text" name="mem_id">
출력>>
String mem_id = req.getParameter("mem_id")
<input type="text" name="mem_pw">
출력>>
String mem_pw = req.getParameter("mem_pw")
단순히 데이터를 다른 형태로 나타내기 위해 뷰를 업데이트하고 싶을 수도 있습니다(예를 들면, 항목을 알파벳순서로 정렬한다거나, 가격이 낮은 순서 또는 높은 순서로 정렬). 이런 경우에 컨트롤러는 모델을 업데이트할 필요 없이 바로 처리할 수 있습니다.
.jar는 로컬 zip파일, .war는 웹 zip파일
배포시 parcel bundler로 묶는데, 이것을 자바에서는 build로 명칭한다. - 슬림하게 서비스최적화
npm run build
npm i cors 설치 at express > 이후 app.js에 아래 추가
const cors = require('cors');
//CORS설정
app.use(cors())
day56. 2024-12-24-화요일
npm i react-quill-new설치 > 게시판 창 생성 QuillWrite.jsx, QuillEditor.jsx > /quill/write - 이미지 서버에 url로 저장해주기(아직 미완성)Application Programming Interface
이종 간의 연결고리
MyBatis를 이용해서 DB연결을 해보자
notice-react & notice-express
연결 방법
리액트 어플리케이션 로딩시에
setProxy.js약속한다.
(자동스캔한다, 추가 설정 없지만 읽는다!)
프록시 설정: npm i http-proxy-middleware 설치
setProxy.js파일은 리액트 프로젝트에 배치되고, 설정내용에는 5000번 서버정보, 구분자로 URL접두어에 반드시 users를 붙였을때만 교차 출처에 대해 허용된다.
실무에서도 DB에 저장하지 않는다. > URL로 바꿔준다!
get(조회), post(입력), put(수정), delete(삭제)
day57. 2024-12-26-목요일
<%
;스크립틀릿
여기에 자바코드 작성하며, 여기에 들어간 모든 자바코드는 service()에 들어가나. 내가 선언한 변수는 servlet에 있으며 지역백수이다
%>
전역변수는 <%! 여기작성 %> : 디클러레이션, 메소드 선언과 전역변수 선언이 가능함
(모두 jsp에 사용되는 기호이다)
git 연습
react/express : BoardDBList.jsx 글쓰기 화면 QuillEditor.jsx연결, BoardDBDetail.jsx > BoardHeader.jsx 상세보기 설정