2021-01-08 sp4

월요일 AOP 방법론

@CookieValue
쿠키에 넣을 녀석??
@CookieValue("boardCookie") String value
CookieUtils utils = new CookieUtils(req);
String value = utils.getCookieValue("boardCookie");

@RequestMapping 설정을 안해주면
설정 안해준 녀석으로 핸들러를 찾지 모든 녀석이 들어 온다.
기본 핸들러를 찾지 못하기 때문에

project - spring - show RequestMappings

Errors errors
BindingResult errors 둘이 같은 데이터를 가지고 있다.( Errors를 상속 받고 있다)

<form:form commandName="board"
<form:form ModelAttribute="board"
같은 녀석이다.

변경할 녀석

board 게시판 페이징 처리가 안되는듯?
BoardDeleteController
LoginProcessSerlvet
template.jsp
추천도 바꿔야함
거래처 게시판도

어제 못한 prod??인지 member인지

REST

https://toma0912.tistory.com/86

RestController

@Controller + @ResponseBody, 버전을 탄다 4.0 부터 지원

REST - Representational State Transfer

참고 : https://ko.wikipedia.org/wiki/REST

  • 로이 필딩(Roy Fielding) 2000년 박사학위 논문에서 소개

  • 필딩 HTTP의 주요 저자 중 한 사람

  • 네트워크 아키텍처 원리의 모음이다. 여기서 '네트워크 아키텍처 원리'란 자원을 정의하고 자원에 대한 주소(URL)를 지정하는 방법 즉, Line 에 대해서 잘 써먹자

  • 필딩의 REST 원리를 따르는 시스템은 종종 RESTful이란 용어로 지칭된다.

    REST 의 목적
    http의 기존 구조를 잘 써먹자
    자원이 누구인지를 식별?
    자원에 대한 식별만을 넣고 행위를 표현하지 말자
    굳이 URL 정보에 행위를 넣지 않아도 Method로 표현할 수 있지 않느냐? - 원래 목적그대로 사용하자

    둘다 조회인데
    GET 목록 /board
    GET 상세 /board + /133
    POST 등록 /board
    PUT 수정 /board + /133
    DELETE 삭제 /board + /133
    게시글 자원의 식별만 있고 명령은 존재하지 않는다.

원래 프로토콜의 구성요소들을 원래 목적을 그래로 활용하자
RESTful

자원을 요청했으면 그 자원만을 달라
다른 부가적인것을 받지 않는다.

restful 설계 방식
참고:
https://one-it.tistory.com/entry/RESTful-API-%EC%84%A4%EA%B3%84-%EA%B7%9C%EC%B9%99

경로변수

  • 경로의 일부분으로 들어오는 변수, {변수명}

http://localhost/webStudy04_SpringMVC/board/143
어떤걸 하겠다라는 행위가 전혀 없다.

브라우저에서는 RESTful 스러운 메서드를 지원하지 않는다.
전체를 바꾸려면 한두군데 아니다. 지금 모듈은 그대로 놔두는데 이것만 바꿔보자 라는 것

추가로 덧글쪽에다가만 적용해보자

이러면 심각 그동안에는 주소로 식별 했는데

브라우저가 지원하지 않는 put을 이용하기 위해선 이렇게 사용한다.
CoC에 따라 쓰는 히든 파라미터??

근데 이 _method 를 받는 녀석들은 누가 처리할 것이냐라는 것이다.
이 처리는 하는건 모든 핸들러에서 중복이된다.
그래서 필터나 인터셉터가 필요한데
그래서 Spring에서는 필터를 제공한다.

방명록 + 테스트관련 에러? (스프링과 JUnit 연동)

Spring + mybatis 연동

mapping namespace 맞춘이유
어떤 인터페이스의 proxy를 만들지 정하기 위해서 정했었다. 핵심이 되는 부분
유사 패턴이 반복된다. - 프레임워크에서는 미리 만들어 뒀다 우리가 직접 DAO 객체를 만들필요도 없어진다.

연동 모듈 2가지 필요



transaction 안에 트랜잭션 매니저가 존재하는데 이러면 우리가 관리할 필요가 없다.

도움을 받아야하는 것을 가져온다.
mybatis-spring

이것을 쓰려면

제거

제거

<properties resource="kr/or/ddit/db/dbInfo.properties" />

제거

<!-- environments 인 이유 계정 정보를 여러개 둘수 있다. -->
	<environments default="dev">
		<environment id="dev">
		<!-- transactionManager 트랜잭션 매니저를 달라, 이게 트랜잭션 관련 커밋, 롤백 권한? -->
			<transactionManager type="JDBC" />
			<dataSource type="POOLED" >
				<!-- ${} 구멍에서 찾는다? 라고 해서 플레이스 홀더래 -->
				<property name="driver" value="${driverClassName}"/>
				<property name="url" value="${url}"/>
				<property name="username" value="${user}"/>
				<property name="password" value="${password}"/>
			</dataSource>			
		</environment>
	</environments>

다 중복되니 구현체가 각각 필요 없어짐??

private SqlSessionTemplate template;
	@Inject
	public void setTemplate(SqlSessionTemplate template) {
		this.template = template;
		mapper = template.getMapper(IMemberDao.class);
	}
	IMemberDao mapper;


aspectjweaver

미리 공부할 것 : 프로그래밍 언어의 변천사(절차지향TOP-> 함수지향FOP->객체지향OOP)

ProdserviceImpl에서 createProd, modifyProd에

@Transactional붙이기

src/test/java에 있는 MemberDAOImplTest에서

private IMemberDAO dao;

컨테이너 안 매퍼 프록시를 생성해서 주입받아 써야함

web.xml이 동작해야 함-> 서버가 구동되어야 함-> 이건 Test가 아닌데?

-> 서버 구동하지 않고도 테스트할 수 있는 방법? 스프링이 가진 테스트 모듈 쓰기

커밋전 꼭 해야하는게 단위 테스트이다.

@RunWith(SpringJUnit4ClassRunner.class)
메타 어노테이션이 아니라 일일히 달아줘야한다.

AOP 인터페이스 기반의 프록시 기능인데
타입 기반으로 해버리면 만들수가 없다?

미션 2 JDBC 인터페이스를 기반으로해서 프록시를 생성하는 기술을 알아보고와라

15.6 살펴보기
https://docs.spring.io/spring-framework/docs/4.3.30.RELEASE/spring-framework-reference/htmlsingle/#spring-mvc-test-framework

서버사이드 테스트

가짜 객체를 만들어서 테스트할수 있다 진짜 DB로 롤백하는 그게 아니라

Preferences - favorites

미션3 방명록 완성

미션4 알바생 스프링으로 바꿔보기??

스프링 처음 만드는것 부터 따라서 해보기 - 복습차원임.

좋은 웹페이지 즐겨찾기