차근차근 개발자 되기

Spring

97일차: Spring 회원관리(로그인,비밀번호 찾기,수정,삭제) / 검색 기능 게시판_2021.11.04

wellow 2021. 11. 4. 23:37

 

목차

1.      Spring 회원관리: 로그인 관련 / 정보 수정 / 회원 탈퇴

2.      검색 기능이 있는 게시판

 

 

1. Spring 회원관리: 로그인 관련 정보 수정 / 회원 탈퇴     

 

1) 등록한 이메일로 비밀번호 찾기

- 회원의 정보(ex. 아이디와 이름)를 입력하고 입력한 정보와 일치하는 회원을 찾는다.

- 회원 정보가 일치하면 회원가입 때 입력했던 이메일로 비밀번호를 전송한다.

 

2) 로그인

- 아이디와 비밀번호 값을 받고, 아이디와 일치하는 회원이 있는지, 회원이 존재하면 비밀번호가 맞는지 등을 비교한다.

- 회원 인증에 성공하면 session 값을 공유한다.

- session 객체는 메소드의 매개변수에서 생성 가능하다.

- 로그인 후에는 메인 화면이나 마이페이지 화면 등으로 이동한다.

 

 

 

3) 로그아웃

- 로그아웃 버튼을 누르면 세션 값을 삭제시킨다.

- 로그아웃이 되면 메인 화면 또는 로그인 화면으로 이동한다.

 

예시

1
2
3
4
5
6
7
// 로그아웃
    @RequestMapping("member_logout.nhn")
    public String logout(HttpSession session) {
        session.invalidate();
 
        return "member/member_logout";
    }
cs

 

 

4) 정보 수정

- 정보 수정을 하기 위해서는 공유된 세션 아이디 값으로 한 명의 회원 정보를 구해온다.

- 구해온 정보를 수정 폼으로 가지고 넘어간다.

- 수정된 값을 다시 받아서 update sql문을 실행시킨다.

- 첨부파일을 수정하지 않는 경우 null 값이 되기 때문에, 기존 첨부파일명을 가져와서 저장시켜야 한다.

- 첨부파일 기능이 있는 경우, 컨트롤러에서 MultipartRequest 객체로 값을 받는다.

 

5) 회원 탈퇴

- 테이블에 state 같은 컬럼을 만들어서 가입할 때는 1 탈퇴할 때는 2번으로 설정할 수 있다.

- 회원 탈퇴 버튼을 클릭하면 실제로는 delete sql문이 아닌 update sql문을 실행시키고, state 컬럼을 2로 수정한다.

- 회원이 업로드한 프로필 이미지(첨부파일)은 파일 객체를 생성해서 삭제시킨다.

- 업로드 폴더의 경로를 구할 때, request 객체를 이용하면 request.getContextPath()로 구하고, session 객체로는 session.getServletContext()로 구할 수 있다.

- 회원정보를 업데이트 시킨 다음에 공유된 세션 값을 삭제시킨다.(ex. session.invalidate(); )

 

*첨부파일 중복 문제 해결 (RandomFile.java 파일)

- cos 라이브러리는 파일 이름이 중복되는 것을 자동으로 처리해주지만, commons-fileupload 라이브러리는 중복 파일 처리 기능이 없다.

- 따라서 UUID 클래스로 난수를 발생시켜서 파일명을 저장시켜 문제를 해결할 수 있다.

 

난수 발생 예시

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.UUID;
 
public class RandomFile {
 
    public static void main(String[] args) {
        // TODO Auto-generated method stub
 
        String filename = "clock.jpg";
        String extension = filename.substring(filename.lastIndexOf("."), filename.length());
        System.out.println("extension:"+extension);
        
        UUID uuid = UUID.randomUUID();
        System.out.println("uuid:"+uuid);
        
        String newfilename = uuid.toString() + extension;
        System.out.println("newfilename:"+newfilename);
                
    }
 
}
 
 
cs

 

 

2. 검색 기능이 있는 게시판  

 

1) 환경설정: root-context.xml

- root-context.xml에서 DB 연결을 할 때, 커넥션 풀을 이용하려면 ComboPooledDataSource 클래스를 사용하면 되는데, 이 클래스를 사용하려면 pom.xml 파일에 ‘commons-dbcp' 라이브러리와 ‘c3p0’ 라이브러리 코드를 추가해야 한다.

 

2) 동적 SQL

- 검색 기능에는 동적 SQL(쿼리)이 사용된다.

 

예시

1
2
3
4
5
6
7
8
9
10
11
12
<select id="getTotal" parameterType="board" resultType="int">
    select count(*) from board 
    <where>
        <if test="keyword != null and search !='subcon'">
            ${search} like '%'||#{keyword}||'%'
        </if>
        <if test="keyword != null and search=='subcon'">
            subject like '%'||#{keyword}||'%' or
            content like '%'||#{keyword}||'%'
        </if>
    </where>
</select>
cs

 

 

3) 글 목록 구하기

- 글 목록을 구할 때 기본 변수를 생성자의 매개변수로 받고 나머지 변수를 만드는 클래스를 따로 만들어서 호출할 수 있다.

 

4) 글 삭제

- 글 삭제시 delete가 아닌 update를 수행해서 del 컬럼의 값을 n에서 y로 수정한다.

- 게시글 목록에서 삭제된 글은(del 컬럼의 값이 y이 글) ‘삭제된 게시글입니다’와 같이 표시하고 링크를 걸지 않는다.