git commit [-m | -am] "메세지이름" -m 옵션 : 메세지 이름만 적기 -am 옵션 : git add 와 git commit -m 동시에 수행 하기
Staging area -> repository
git push 저장소명 브랜치명
repository -> remote repository
저장소 되돌리기
HEAD^^
가장 최근 커밋부터 두개 되돌리는 것
git reset --hard HEAD^
Working Directory , Staging area , Repository 의 가장 최근 부분이 사라지고 , Repository 의 head는 두번째 커밋이 된다 , 이때 현재 작업공간은 두번째 커밋내용으로 변경되며 up-to-date(최신) 상태가 된다.
git reset (--mixed) HEAD^ <default>
Staging area , Repository 의 가장 최근 부분이 사라지고 , Repository 의 head는 두번째 커밋이 된다 , 이때 작업공간은 영향을 받지 않고 그대로 있는다.
git reset --soft HEAD^
Repository 의 가장 최근 부분이 사라지고 , Repository 의 head는 두번째 커밋이 된다 , 이때 작업공간과 Staging area 는 영향을 받지 않고 그대로 있는다.
그외 알아두면 유용한 명령어들..
git diff , git revert
Repository끼리의 상호작용 종류
git remote (-v)
원격저장소 조회,추가.삭제하기. 내 로컬 Repository와 상호작용하고 있는 원격 저장소들의 목록을 조회 -v 옵션 : 단축이름과 URL 같이 보여줌
git remote add origin URL.git
내 로컬과 상호작용하는 원격저장소로 , origin(단축이름) 이라는 원격저장소 명칭으로 정하여 URL을 원격저장소로 등록하기
git remote rm origin
내 로컬에 등록된 origin(단축이름) 이라는 원격저장소를 제거한다
git push -u origin master
원격저장소에 밀어넣기. 나의 로컬 디렉토리의 master 브랜치를 origin의 master브랜치로 푸쉬하는 것 -u 옵션 : git push -u origin master 로 해주면 , 이후에 origin master 부분을 생략해도 디폴트로 적용됨
git pull (origin master) < -u 옵션이 이전에 사용 되었다면 origin master는 생략가능 >
원격저정소 갖고 와서 합치기. 원격 저장소 origin을 내 로컬 저장소의 master 브랜치로 갖고와서 덮어 씌우는 것(동기화,merge)
git fetch origin
원격저장소 일단 갖고만 오기. origin저장소에 있는 것을 내 로컬저장소로 가져만 오는 것이다. git pull은 merge 되어 내 작업공간이 사라지지만 , git fetch는 merge 되지 않고 일단 가져만 오는 것이고 , 로컬 저장소에서 영향을 받지는 않는다. fetch로 가져온 내용은 [origin/master | FETCH_HEAD ] 브랜치에서 확인이 가능하다.
git checkout origin/master
브랜치 변경하기. 현재 브랜치를 origin/master 브랜치로 변경하기
git clone url.git
원격저장소 복사하기. url 에 있는 원격 저장소 내용을 현재 디렉토리에 복사해오기 , 자동으로 원격저장소가 등록되어 origin역시 자동 생성 된다.
Execution failed for task ':test'. > No tests found for given includes: [StringTest$Test3](filter.includeTestsMatching)
* Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
이라는 에러 발생.
Settings -> Build,Execution,Deployment -> Gradle -> Run tests using -> From Gradle to IntelliJ IDEA 로 변경
@BeforeAll,@AfterAll : 클래스에 있는 모든 메소드를 수행할 때 , 메소드 수행전 , 후에 수행될 어노테이션이다. @AfterEach,@BeforeEach : 특정 메소드가 시작되기 후, 전 마다 수행되는 어노테이션 @AfterEach : 다음 테스트에 영향을 주지 않기 위해 종료되어야할 리소스를 처리하는 부분 @BeforeEach : 테스트 할 때의 초기 환경을 setup @Test : Junit이 수행할 코드 ,메소드에 붙음 @Nested : 연관 테스트 함수를 묶어주고 , 중첩테스트클래스임을 나타내줌 (클래스 레밸)
@RepeatedTest : value 속성에 지정된 수 만큼 반복 ,name 속성에 {displayName} {currentRepetition} {totalRepetitions} 가 함께 쓰일 수 있음 @DisplayName : 테스트 이름 설정 ( 클래스 , 메소드 레밸 이며 주로 @Nested와 같이 쓰임 )
@DisplayName 사용이유
메소드명을 한글로 작성해도 언더바를 작성해야 해서 가독성이 좋지 않음
@Nested 와 함께 쓰려면 클래스를 작성해야 하는데 @DisplayName 을 쓰는게 깔끔
JUnit 개발자들은 영어가 모국어 수준일텐데도 @DisplayName 어노테이션을 추가했다는 점
@ParameterizedTest : 하나의 테스트 메소드로 여러 개의 파라미터에 대해서 테스트할 수 있습니다.
name 속성을 이용하여 파라미터를 받는 메소드들에게 이름을 지정해 줄 수 있습니다.
name속성 내부에 , {index}는 1부터 시작되며 1씩증가
{arguments}는 모든 파라미터들을 출력
{0}은 첫번째 인수 , {1}은 두번째 인수 , .... @ValueSource : 리터럴 값의 단일 배열을 지정할 수 있으며 매개 변수화 된 테스트 호출마다 단일 인수를 제공하는 데만 사용할 수 있습니다. @ParameterizedTest 와 함께 쓰임 @CsvSource : ValueSource의 확장판 ,여러 인자를 delimeter(구분자)로 구분해서 넘겨줌.
@ParameterizedTest 와 함께 쓰임
@NullSource@EmptySource : @NullSource@EmptySource 를 사용하면 파라미터 값으로 null과 empty를 넣어줍니다.
@ParameterizedTest 와 함께 쓰임
@NullAndEmptySource : null과 빈 공백을 파라미터값으로 넣어줍니다.
@ParameterizedTest 와 함께 쓰임
example1) ValueSource 인수로써 문자열은 strings 로 , 정수형은 ints 형으로 하고 , method의 인자인 name으로 하나씩 들어감
로그인 권한이 필요한 url로 이동할 시 , 로그인페이지로 이동후 로그온되면 , 다시 첫 url로 이동
사용자에 의하여 로그인 페이지로 이동후 로그인 시 , 메인페이지로 이동
로그인 유지기능을 remember me 이용하여서 구현
jsp 파일에서 로그인정보를 가져올 경우엔 , security taglib 이용하여 정보 획득하기
로그아웃 구현
2. 로그인 권한이 필요한 url로 이동할 시 , 로그인페이지로 이동후 로그온되면 , 다시 첫 url로 이동
(사용자의 요청을 저장하고 꺼내올수 있는)RequestCache 인터페이스를 이용하여
사용자 요청 정보들이 들어 있는 SavedRequest 클래스 객체를 세션에 저장
로그인화면을 보기전에 방문했던 URL을 가져오기
5 . jsp 파일에서 로그인정보를 가져올 경우엔 , security taglib 이용하여 정보 획득하기
( pom 에 등록한 spring-security-taglibs 이용하여 jsp 에서 세션 바로 이용)
로그인 성공 -> Authentication에 자동으로 사용자 정보 담김 -> .jsp 파일내 taglib 를 이용하여 세션 정보 도출
<sec:authentication property="name" var="Session_userID"/> 을 이용하여 시큐리티 이전에 사용하였던 세션 아이디를 이용함
class 에선
Authentication authentication String Session_userID=(String)authentication.getPrincipal(); 을 이용하여 id 획득
(주의)
in class)로그인하지 않았다면 , Authentication 객체에 담긴게 없게 되고 , authentication 호출하면 null이나옴 in jsp)<sec:authentication property="name" var="Session_userID"/> -> 등록된게 없으면 ,anonymousUser 가 나옴
1. url 에 접근권한 설정
security xml 설정
(url리소스) 정회원권한
/*/contentView/delete (Authentication 와 게시글 id 비교) /*/contentView/update(get&post) (이하동문) /*/contentView/updateBoard(이하동문) /*/contentView/replyBoard(get&post) (Authentication 존재여부) /*/contentView/deleteComment(Authentication 와 댓글 id 비교) /*/contentView/registerComment(Authentication 존재여부) (요약)=> /*/contentView/** /*/write(get&post)
/*/contentView/asyncGood
비회원권한 /**
문제발생점
/*/write 페이지에서 ->post 방식에서 세션 만료후 , 글등록을 누르면 -> login 창으로 이동후 로그인 -> 등록은 되는데 이상하게 되는 문제 발생
해결점 세션만료된 POST 방식의 경우 로그인성공핸들러에서 sendRedirect 를 무시하게함 ( HTTP 메소드를 이용하여 구현 ) -> 웰컴페이지로 이동 ( default-target-url="/")
특이사항
/*/contentView/asyncGood 는 ajax 요청 url 이다 ,
비로그인 상태에서 해당 링크를 클릭 하면 , 로그인 페이지로 이동할 줄 알았으나 이동하지 않음
개인적인 생각으로는 , 서버의 produces 와 클라이언트의 dataType이 이미 JSON 으로 정해져 있으므로 ,
로그인html 에서 자동로그인 체크박스의 name="_spring_security_remember_me" 로 잡아주었다
특이점
In class) authentication.getPrincipal() 은 사용자의 ID 를 반환해 주었다 , 하지만,
REMEMBER ME 가 적용된 상태에서 -> 자동로그인으로 로그인 -> 서버재실행 ->authentication.getPrincipal() 은 UserinfoVO객체 반환이 되었다
나는 아이디가 필요하였기에 , authentication.getName으로 변경하여 해결 하였지만 ...
개인적인 생각으로는 , 서버가 다운되면 자동으로 Security Context Holder 내부의 Authentication도 초기화가 될 것이고 , 그렇다면 쿠키를 가져와 쿠키내용을 토대로 VO객체 생성후, Authentication 객체 생성에 이용되는 것이 아닐까? 하고 생각해본다.. 두서가 없구나 ㅠㅠ 공부부족이다
Uploaded by Notion2Tistory v1.1.0