본문 바로가기

전체 글

(12)
고통 뒤엔 성장이 온다. 성장을 위해선 동기를 가져야 하고 이것을 유지하기 위한 의지가 있어야 한다. 사람이란 그 의지가 한번씩 꺽이기 마련이라 주변에서 주는 피드백은 동기를 다시 부여해 주고 시들어 가는 의지에 생명을 불어 넣어 준다. 그동안 개발자로서 성장하기 위해 러닝 커브를 어떻게 줄일까에 대한 고민을 해 왔다면 이제는 어떻게 하면 더 같이 함께 싶은 동료가 될 수 있을까에 대한 고민이 필요한 시기가 온 것 같다.
리다이렉션 횟수가 너무 많습니다. Path설계를 잘못하면 위와 같은 페이지를 만날 수 있다. Security에서 Path의 권한 설정은 위에서 부터 차례대로 적용된다. 아래의 코드를 보면 anyRequest()는 “USER"권한을 가지고 접근가능하지만 로그인을 하기위한 .antMatchers(”/users/login")는 로그인 하지 않은 ANONYMOUS를 포함한 모든 권한을 다 받아 들인다. 따라서 처리 순서는 다음과 같이 된다. 사용자는/으로 접근할 것이다. 이때 사용자는 로그인 하지 않았으므로 ANONYMOUS 권한을 가지고 있다. 하지만 .anyRequest() .hasRole("USER")에 의해 /는 USER권한이 있어야 접근 가능하므로 Security는 요청을 로그인페이지로 리다이렉트 시킬것이다 /users/login페이지..
리멤버미 권한 오류 remember-me 사용에 체크 후 세션이 종료되고 다시 브라우저를 띄우면 로그인 화면은 건너뛰고 main화면이 보여져야 하는데 , 다시 로그인 화면이 출력 되었다. 헤더의 coockie에는 remember-me 토큰이 있었다. 그래서 리소스 권한 설정쪽을 다시 살펴보니 로그인 화면에 대해 다음과 같이 fullyAuthenticated()를 적용하고 있었다. .antMatchers("/").fullyAuthenticated() 이런 경우 remember-me 토큰 인증으로 로그인 할 수없다. 왜냐하면 fullyAuthenticated()는 anonymous나 remember-me 유저에 대한 접근을 허용하지 않는다. remember-me 인증을 받을 려면 hasRole()이나 Authenticated(..
template might not exist or might not be accessible by any of the configured Template Resolvers 문제발생상황 회원가입버튼을 누르면 500에러가 발생. 로그를 확인해보니 Error resolving template “/fragments/footer”, template might not exist or might not be accessible by any of the configured Template Resolvers (template: “layout/layout” - line 38, col 21) 이란 메시지가 확인 되었다. 로컬에서는 돌릴때는 아무 이상이 없었는데 aws에 jar배포후에 문재가 발생한 상황이었다. 해당 라인으로 가보니, 아래와 같이 되어 있었다. ... StackOverflow에서 문제를 찾아보니/를 빼라는 글이 있었다. 그래서 아래와 같이 돌린후 재배포 하니 문제상황이 해결되었..
코어 개수 : availableProcessors() CPU 코어 개수 얻기 System.out.print(Runtime.getRuntime().availableProcessors()); availableProcessors()는 JVM에서 이용가능한 코어 개수를 리턴한다. 내 CPU는 Inter - i7이다. 이 CPU는 코어가 4개이기 때문에 위와 같은 코드를 실행시키면 4가 출력될 것이라고 예상 할 수 있으나 실제로는 8이 출력된다. 이는 Intel이라는 회사가 하이퍼스레딩이라는 기술을 지원 해주기 때문인데, 이것은 물리적 코어 한개당 스레드 2개를 할당해 성능을 높이는 기술이다. 그래서 물리적 코어는 4개이지만 논리적 코어는 8개인 것이다. 참고 stackoverflow : Runtime.getRuntime().availableProcessors()
[c] size_t의 포멧형식 sizeof( )를 결과값을 출력하기 위해서 코드를 작성 하고 리눅스 gcc 컴파일시 다음과 같은 경고를 보게 될 수도 있다. 이럴땐 포멧 형식을 printf("%zu" ,sizeof(long)); 으로 변경해 주자 sizeof는 size_t를 반환하는데 c99에서 size_t의 printf포멧이 %zu로 지정되었다. test.c:8:9: warning: format '%d' expects argument of type 'int' , but argument 2 has type 'long unsigned int'[-Wformat=] printf("long size : %d\n",sizeof(long));
[c] gets( ) vs scanf( ) gets( )와 scanf( )는 둘다 Buffered IO이다. 개행문자 '\n'에서 두 함수는 차이점을 보이는데, gets( )는 사용자가 입력한 개행문자 까지 읽어 들이지만 scanf( )는 사용자가 입력한 '\n'를 입력 버퍼에 남겨두게 된다. 다음과 같은 코드를 VS에서 실행시키고 "Hello"를 입력한다. 입력버퍼에 입력되는 글자는 Hello와 아래의 노란 박스 부분에서 확인 할 수 있는 사용자가 입력한 '\n' 그리고 그 뒤에 scanf( )가 붙인 '\n'가 들어있는것을 확인 할수 있다. Hello를 모두 읽고 나면 버퍼에 여전이 '\n'이 남아 있는 것을 확인 할 수 있다. _cnt는 읽기 위해서 입력버퍼에서 남아 있는 문자의 개수 이다. _ptr은 입출력 포인터인데 이동하면서 읽고 난 ..
[feeder] screw와 서보모터 연결 사료를 어떻게 배출 시킬지 생각을 많이 해봤는데 적당한 아이디어가 떠오르질 않았다. 깊이가 깊은 톱니바퀴 모양을 나무로 조각을 해볼까 하다가 3D프린터가 문득 떠올라 구글링 하던 중 괜찮은 사이트를 발견했다. 이 친절하신 분은 도면까지 공개해주셔서 덕분에 수월하게 진행할 수 있게 되었다.https://www.thingiverse.com/thing:27854 http://www.instructables.com/id/Automatic-Arduino-Powered-Pet-Feeder/ 참고 사이트