본문 바로가기
학원수업/3월

03/07 개발자 국비수업 68회차 수업

by 코딩마스터^^ 2023. 3. 7.

pojo spring전에 연습하기-흐름도

요청객체와 응답객체를 HandelMapping쪽으로 넘겨준다.

 

boardList

JsonBoardList

boardDelete

boardInsert

boardUpdate

 

컨트롤러에서 로직으로 갈때에는 req,res필요없다. 파라미터로 넣어줄거다. 유저가 넣어주는 값이다.

유저의 값은 UI,UX뷰계층에서 받아온다.

현재는 easyUI를 사용한다. 연습 후 React로 넘어갈 예정

 

Model계층에서는 비즈니스 로직을 처리한다. 업무의 기능별로...

재고관리, 판매량관리, 회원관리 등등....

모델계층안에 Data Access Object? 다오 포함된다.

오라클과 직접 대화하는 아이가 Dao이다.

Dao부분이 Spring Boot공부하면 JPA로 바뀌어서 생략이 되는 부분이다.

 

어디를 가도 테이블 세개이하인곳은 없다... 테이블 아주 많이 쓴다고 합니다... 조인 필수!!!!

 

7번에 요청을 보낼때 MyBatis를 사용하고있다. 바나나에서 했던 JDBC로 대체할수있음.

 

Bean 이 붙으면 스프링이 객체주입을 관리해준다. 라이프 사이클 관리를 대신 해준다.

JPA

-SqlSession

-SqlSessionFactory(Bean)

 

JPA 사용할때는 튜닝문제가 일어 날 수 있다.

3초 이상 걸리면 안되기때문에 - 특히!! 은행, 물류 등등 DB가 100억 1조 등등 데이터가 너무 많아서 오류 날 가능성크다.

 

MyBatis는 XML파일에 쿼리문을 가지고 있다. 컴파일을 안해도 된다. 버전관리가 용이하다.

서비스 중에 서버 껐다 켤수있니? 노노 난리남.

미리 공지하고 서비스 중단한다. 밤에...

 

SRC안에는 자바가 있다. XML도 같이 내려간다.

데브옵스 엔지니어?

 

SqlSession이 commit, rollback해준다.

 

로직의 응답을 요청객체안에 넣어서 되돌려 보낸다.

pageMove[0] : forward / redirect

pageMove[1] :  주소이름

 

 

 

JPA(Java Persistence API)는

자바 진영에서 ORM(Object-Relational Mapping) 기술을 표준화하기 위한 API입니다. ORM은 객체 지향 프로그래밍 언어에서 사용되는 클래스와 관계형 데이터베이스의 테이블 간의 매핑을 자동으로 처리하는 기술입니다.

JPA는 이러한 ORM 기술을 추상화한 인터페이스를 제공하며, 이를 구현한 여러 ORM 프레임워크(예: Hibernate, EclipseLink 등)와 함께 사용됩니다. JPA를 사용하면 개발자는 SQL 쿼리를 직접 작성하지 않고도 객체 지향적으로 데이터를 다룰 수 있습니다. 이를 통해 생산성과 유지보수성을 높일 수 있습니다.

 

DAO(Data Access Object)는

데이터베이스나 다른 영구 저장소에서 데이터를 읽고 쓰는 작업을 수행하는 객체 지향적인 디자인 패턴입니다.

DAO는 데이터 액세스 계층(Data Access Layer)의 일부로 사용되며, 해당 계층은 데이터를 영구 저장소에서 읽어와서 애플리케이션 계층(Application Layer)에서 사용할 수 있도록 적절한 형식으로 변환합니다. DAO는 데이터 액세스 계층의 구현을 캡슐화하기 때문에, 애플리케이션 계층에서는 DAO를 사용하여 데이터를 액세스할 수 있습니다.

데이터 액세스 계층은 일반적으로 비즈니스 로직과 분리되어 있으며, 애플리케이션의 유지보수성과 확장성을 향상시키는 데 도움이 됩니다. DAO는 또한 객체 지향적인 방식으로 데이터베이스 액세스를 수행하기 때문에, 개발자가 SQL 쿼리를 직접 작성할 필요 없이 데이터베이스 액세스를 추상화할 수 있습니다.

 

boardDao->board3Logic->board3Controller

 

응답을 보내주는 순서대로 같은 코드의 반복이다.

 

 

삭제처리 프로세스!!

요청을 board3/boardDelete.st3?bm_no=5

Get망식으로 처리하고있다.

 

첨부파일을 처리하려면 무조건 Post방식으로 해야한다. 곧 할 예정

PostMan으로 확인 하는 습관 아주 좋은 습관^^

 

 

Sope연습하기

 

인스턴스화 하면 scope를 사용 할 수 없다. ㅇ니스턴스화 하면 안된다.

 

scope1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <jsp:useBean id="myCar" scope="request" class="com.book.scope.Sonata" />
    <jsp:useBean id="herCar" scope="page" class="com.book.scope.Sonata" />
    <jsp:useBean id="hisCar" scope="session" class="com.book.scope.Sonata" />

<%
//유지문제->request, session+cookie
	com.book.scope.Sonata himCar=new com.book.scope.Sonata();
//scope를 가질 수 없다, 인스턴스화 하면 그래서 안된다. 인스턴스화는 스코프를 가질 수 없다.
	out.print("<h3>"+myCar.toString()+"</h3>");
	out.print("<h3>"+herCar.toString()+"</h3>");
	out.print("<h3>"+hisCar.toString()+"</h3>");
	out.print("<h3>"+himCar.carName+"</h3>");
	request.setAttribute("myCar",myCar);
	pageContext.setAttribute("herCar",herCar);//page는 여기 페이지에서만 된다.
	session.setAttribute("hisCar",hisCar);
%>
<jsp:forward page="move1.jsp">
<jsp:param name="oMyCar" value="<%=myCar.toString() %>"/>
<jsp:param name="oHerCar" value="<%=herCar.toString() %>"/>
<jsp:param name="oHisCar" value="<%=hisCar.toString() %>"/>
</jsp:forward>
</body>
</html>

 

move1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page import="com.book.scope.Sonata" %>
<%
	Sonata myCar=(Sonata)request.getAttribute("myCar");
	String oMyCar=request.getParameter("oMyCar");
	String oHerCar=request.getParameter("oHerCar");
	String oHisCar=request.getParameter("oHisCar");
	Sonata herCar=(Sonata)pageContext.getAttribute("herCar");
	Sonata hisCar=(Sonata)session.getAttribute("hisCar");
	out.print("scope1.jsp에서 생성된 객체가 유지되나요?");
	out.print("<hr>");
	out.print(myCar);
	out.print("<hr>");
	out.print(herCar);
	out.print("<hr>");
	out.print(hisCar);
	out.print("<hr>");
	out.print(myCar.carName+","+oMyCar.carName+","+oMyCar.concat("1")+"자동차".concat("1"));
	//concat 안에 든걸 갖다 붙임. 변수가 들어 갈 수 있음
	out.print(herCar.carName+","+oHerCar);
	out.print(hisCar.carName+","+oHisCar+","+true.concat("1")+new Boolean(true));
%>

scope1 -> move1

출력X        위임, 원본

포워드 

 

원본인지 아닌지 어떻게 확인하지??

Object가 활용 범위가 넓다. 타입이 유연하다.

 

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=kimkwon429&logNo=220765215503 

 

19. <jsp:forward>

<jsp:forward> <jsp:forward> 액션태그는 하나의 JSP 페이지에서 다른 JSP페이지로 요청...

blog.naver.com

#<jsp:param> 액션 태그 사용법

 

 

#<jsp:param>

-forward 및 include 태그에 데이터 전달을 목적으로 사용되는 태그이다.

-name(이름)과 value(값)으로 이루어져 있다.

-단독으로 사용되지 못하며 <jsp:include>나 <jsp:forward>의 자식 태그로 추가한다.

-다른 페이지에 여러 개의 정보를 전송해야 할 때는 다중의 param 액션 태그를 사용한다.

 

 

#<jsp:include> 액션 태그로 포함하는 페이지에서만 유효하다.

 

myCar는 값이고 oMyCqr는 String타입이다.

boolean타입은  concat()을 사용 할 수 없다. 없으니까^^

 

정신이 혼미하다...

복습하자...

 

 

댓글