Spring-vo형태로 데이터베이스에 넘겨주기

오늘도 코딩중!·2023년 4월 25일
0

Spring

목록 보기
3/4

오늘 bcrypt형태로 로그인을 진행할 예정.

bcrypt란? 암호화 보안이 더 강력해짐.(암호화를 할 때마다 암호화로 나온 string이 달라짐)

1. 파라미터를 클래스 형태로 넘기는 법

(MyBatis의 typeAlias 사용)

우리는 MyBatis 초기설정을 할때 typeAlias 태그를 두번째에 추가했다. 여기에다가 설정을 하는 것이다.

이렇게 추가하는 이유는 parameterType에 대한 설정이다. parameterType을 작성할 때, 우리는 클래스를 경로와 함께 입력하면 그대로 기입할 수 있다.

하지만 여러 패키지안의 경로에 있는 클래스의 경로를 전부 기입할 수는 없는 노릇이다. 그러니 TypeAlias에 해당 문장을 alias로 정의해두면 정의해둔 내용을 대신 쓸 수 있다.

  • 이렇게 넘겼을 경우 resultType은 string(String)값으로 받아온다. 하지만 result로 클래스를 받아오는 경우는 어떻게 해야할까. 로그인을 예시로 알아보도록 하자.

resultType으로는 Member라는 클래스를 받아올 수가 없다.

ResultMap이란?

작성 방법
id column태그에는 pk를 쓰므로 member_no를 넣고
result태그에는 나머지를 넣음.

2. Session을 추가하는 방법

Spring에서 로그인을 한 후, 세션을 추가하는 기능은 Model을 이용해야한다.

Model model import를 해야할 것은 org.springframework.ui.Model

클래스의 윗부분에 @ SessionAttributes를 선언하고, 내부에 Session에 선언한 model값을 집어넣는다.

@SessionAttributes({"loginMember"}) //model에 추가된 값의 키와 annotation의 값이 같으면, 해당 값을 session scope로 이동시키는 역할을 한다.

이런 형태가 될 것이다.

하지만 세션말고 request와 같이 쓰려는 기능이 있을 때 이것을 세션으로 올려버리면 어떻게 될까? 실행은 잘 되겠지만 메모리적으로 정말 안 좋은 방향이 될 것이다. 그렇다면 우리는 무엇을 해야할까?

3. RedirectAttributes

request에서 잠깐 session처럼 썻다가 돌아오는 기능이 있다. 그것이 바로 RedirectAttributes이다.


이렇게 선언한 로그인 메서드 내부에서 아이디 비밀번호가 틀렸다면 어떻게 해야할까?

스프링이 아니었다면 우리는 session.setAttribute를 써서 우리는 메시지를 할당했었다. 스프링에서도 할 수 있지만 우리는 다른 방식을 채용할 것이다.

즉 RedirectAttributes를 써서 redirect방식에서 request방식을 쓸 것이다!

if문에서 true였을 때 쿠키를 만드는 방법에서 resp,req가 필요하므로 이건 읽어보기 바라고 우리는 else였을 때를 집중한다

else였을 때 ra.addFlashAttribute()를 써서 우리는 session을 설정할 때처럼 썼다. 이 기능은 무엇을 할까? ra는 자신이 session인척을 한다. redirect와 만났을 때 자신은 session이라고 가장을 하고, redirect된 곳에 보내준다.

하지만 이는 가장했을 뿐 본질은 request의 영역을 가진 객체이므로 request영역에 대한 수행을 한 사진의 message는 수행을 한 후, 효력을 잃을 것이다

주의! RedirectAttributes는 컨트롤을 통해서 수행되기 때문에, 만약 컨트롤이 닿지 않는 server의 설정인 welcome-xml-file에 등록된 기본jsp(ex-index.jsp)는 수행되지 않으니, 기본홈페이지에서 사용하고 싶으면 forward를 통해서 기본 홈페이지를 하나 더 만들고 그곳으로 forward를 하길 바란다.


4. Spring <jsp:forward page="url"/>

스프링에서의 forward의 흐름을 익혀보자.

3번에서 forward를 하는 방식으로 기본 홈페이지를 옮겨보는 가정을 바탕으로 흐름을 만들어보자!

우리는 index.jsp를 복사해서 webapp/WEB-INF/views/common/main.jsp를 만들었다고 하자.

그러면 index.jsp에는 jsp의 선언부분과 forward문만을 남기고 index.jsp를 놓아두겠다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<jsp:forward page="main"/>

서버를 키고, 가장 먼저 web.xml을 통해서 index.jsp로 가면 forward를 만나게 된다. forward를 만나면 Dispatcher가 실행되게 되고, Dispatcher의 설정을 조절하는 servlet-context의 매핑방식으로 @Controller를 찾게 된다.

나는 @Controller을 다음과 같이 설정했다.

Controller는 클래스 레벨과, 메서드 레벨을 순차적으로 확인하고 RequestMapping방식으로 찾게된 main이 가리키는 메서드의 return으로 common/main을 반환한다.

반환된 값을 View Resolver가 받아서 servlet-context에 설정한 대로, prefix와 surfix를 앞뒤에 붙여서 forward시킨다.

그럼 이때의 경로는 /WEB-INF/views/common/main.jsp가 되므로 경로와 일치되게 되며 그곳으로 forward가 실행된다.

profile
늦은만큼 코막고 달려!

0개의 댓글