728x90
반응형

지난 파이널 프로젝트때 회원관리 부분을 담당했었는데

살짝 애먹었던 로그아웃 세션 관련하여

또 한번 마주하게 되어 해결방법을 기록해본다.

 

트러블슈팅을 마주하게 됐던 상황은

컨트롤러 상단에 SessionAttributes를 설정하고

회원가입이나 로그인 시 회원정보 세션을 유지하게 해두었는데

기존에 배웠던 session.invalidate()로는 세션 해제가 되지 않고 세션값이 계속 유지되었다.

쿠키도 삭제해보고 여러가지 방법을 시도해봤는데 새로운 사실을 알게 되었다.

SessionAttributes의 경우 sessionStatus를 사용해 세션을 정리한다고 해서 

invalidate 대신 사용해보니 정상적으로 로그아웃 시 세션 해제가 되었다. 

 

SessionStatus는 @sessionAttributes를 활용해

session에 남긴 데이터를 제거하는데 활용하는 인터페이스라고 한다.

 

 

session : 일반적인 HttpSession 객체

sessionStatus : Spring MVC 컨트롤러에서 세션 관리를 위한 특수한 용도로 사용되는 객체

 

 

컨트롤러에 SessionAttributes로 세션 설정

sessionStatus를 사용한 로그아웃 세션 해제

  @RequestMapping("/logout")
    public String logout(SessionStatus sessionStatus) {
        sessionStatus.setComplete();;
        return "redirect:/";
    }

 

 

 

스프링 문서

https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/bind/support/SessionStatus.html

 

SessionStatus (Spring Framework 6.0.12 API)

Mark the current handler's session processing as complete, allowing for cleanup of session attributes.

docs.spring.io

 

728x90
반응형
728x90
반응형

이번 추석 연휴기간동안 나동빈 개발자님의 인프런 강의로 JSP 웹사이트 구축을 복습해보는 시간을 가졌다.

 

처음에는 게시판 웹 사이트를 만들어보았고 (클릭 시 GitHub이동)

두 번째로는 회원 전용 강의 평가를 할 수 있는 웹 사이트를 만들었다.

 

스프링, 스프링부트만 최근에 사용하다가 단순 JSP로 웹 사이트를 구축해보니

확실히 직접적으로 코딩해야하는 양이 많고, 사소한 오류를 찾는데 시간이 꽤나 소요되었다.

 

디자인의 경우 부트스트랩을 활용했는데 나같은 경우는 최신화된 요소로 작업하기 위해

CDN으로 포함하여 적절하게 구성했다.

기능을 중점적으로 작업하면서도 디자인 부분 일부는 적절하게 수정해서

단순 JSP 웹 사이트 프로젝트를 완성해보았다.

 

 

JSP 강의평가 웹 사이트 개발하기
- 소요 기간 : 2일
- 사용 IDE : STS

 

기능

- 부트스트랩을 활용한 디자인 적용

- 로그인, 로그아웃, 회원가입

- 강의 평가 데이터베이스 구축 및 데이터 모델링

- 이메일 인증

- 미니 검색 엔진 (필터링 포함)

- 강의평가 조회

- 강의평가 등록 (모달), 삭제, 추천

- 강의평가 신고 (모달 - 관리자 이메일로 내용 발송)

- XSS 방어

 

추가로 구현해볼 기능

- 회원정보 수정, 회원 탈퇴

- 글 수정

 

 

 

- JSP 강의 평가 웹사이트 소스 코드

https://github.com/jangmimi/LectureEvaluation

 

GitHub - jangmimi/LectureEvaluation: LectureEvaluation web site

LectureEvaluation web site. Contribute to jangmimi/LectureEvaluation development by creating an account on GitHub.

github.com

728x90
반응형

'Coding > Study' 카테고리의 다른 글

[IT 용어] API (Application Programming Interface)  (0) 2023.10.14
[JAVA] 람다식 Lambda  (0) 2023.10.05
[GitHub] 깃, 깃허브  (0) 2023.09.28
[Kotlin] 코틀린 맛보기  (0) 2023.09.22
[JAVA] StringBuilder와 StringJoiner  (0) 2023.09.19
728x90
반응형

Git(깃) :

- 분산형 버전 관리 시스템

- 모든 소스코드가 공개된 오픈 소스

- 리눅스, 맥OS, 윈도우 운영체제 지원

- 장점) 이력 기록 및 추적, 원격 저장소 및 공유, 변경 이력 병합

 

GitHub(깃허브) :

- 깃을 이용하여 관리하는 프로젝트의 원격 저장소 역할을 수행하는 웹 호스팅 서비스

- 장점) 호스팅 서비스, 공개 및 비공개 저장소, 고급 기능

 

 

터미널에서 새 브랜치 생성 후 원격 저장소에도 반영하는 방법

- 터미널에서 새 브랜치 생성

  >> git branch 새브랜치명

 

- 현재 브랜치 상태 확인

  >> git branch -a

  (a는 all의 약자로, 현재 저장소에서 로컬 브랜치와 원격 브랜치 모두 보여주도록 하는 옵션)

새 브랜치를 로컬 브랜치에 생성 후 확인 모습 (원격 브랜치에는 새 브랜치가 반영 안된 상태)

- 원격 브랜치에 반영하기

  >> git push origin 새브랜치명

새 브랜치를 원격 브랜치에 반영 후 확인 모습

 

 

 

참고 서적

박미정의 깃&깃허브 입문

728x90
반응형
728x90
반응형

쿼리 작성 시 대소문자 치환이 번거로울 때가 있다.

강의를 듣다가 데이터베이스에서

소문자를 대문자로 치환하는 꿀 단축어를 알게 되었다.

 

소문자 변환은 U를 L(Lower)로 하면 된다던데

나는 안되더라..원인을 찾게되면 추가로 기재할 예정!

 

 

데이터베이스에서 대문자 치환 단축어

Shift + Ctrl + U

 

 

- MySQL에서 사용 모습 : 


+ 인텔리제이에서도 된다!

인텔리제이에서는 Shift + Ctrl + U

대소문자 치환을 번갈아가면서(토글처럼) 사용 가능하다.

 

- IntelliJ에서 사용 모습 : 

728x90
반응형
728x90
반응형

이번 문제 풀이에서도 느꼈던 stream의 간결함!

for문은 의식의 흐름대로 작성하게 되는 코드라면

stream은 동일한 결과를 내면서도

보기 좋게 정리한 느낌의 코드이다.

 

 

프로그래머스 실제 풀이

 

첫 풀이 코드

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        StringBuilder answer = new StringBuilder();
        String[] arr = s.split(" ");
        int[] intArr = new int[arr.length];
        
        for(int i=0; i<arr.length; i++) {
            intArr[i] = Integer.parseInt(arr[i]);
        }
        
        Arrays.sort(intArr);
        
        answer.append(intArr[0]).append(" ");
        answer.append(intArr[intArr.length-1]);
        
        return answer.toString();
    }
}

 

stream 사용 수정 코드

import java.util.Arrays;

class Solution {
    public String solution(String s) {
        String[] arr = s.split(" ");
        int[] intArr = Arrays.stream(arr).mapToInt(Integer::parseInt).toArray();
        
        Arrays.sort(intArr);
        
        return intArr[0] + " " + intArr[intArr.length - 1];
    }
}

 

 


깊이 있게 공부하기 :

JAVA의 stream, generic, lamda

728x90
반응형

+ Recent posts