본문 바로가기
728x90
반응형
SMALL

Java46

로그인과 로그아웃 처리 스프링 시큐리티의 내부 구조는 상당히 복잡하지만, 실제 사용은 약간의 설정만으로도 처리가 가능하다. 앞에서 설계한 몇 개의 URI에 대한 접근 제한을 통해서 간단히 스프링 시큐리티의 적용 방법을 알아보자 접근 제한 설정 security-context.xml에 아래와 같이 접근 제한을 설정한다.; 특정한 URI에 접근할 때 인터셉터를 이용해서 접근을 제한하는 설정은 를 이용한다. pattern이라는 속성과 access라는 속성을 지정해야만 한다. pattern속성은 말 그대로 uri의 패턴을 의미하고, access의 경우는 권한을 체크한다. 이경우 /sample/member라는 uri는 role_member라는 권한이 있는 사용자만이 접근가능하게 된다. access의 속성값으로 사용되는 문자열은 1. 표현.. 2021. 10. 18.
Spring Web Security 직접 프로젝트를 통해서 스프링 시큐리티의 동작을 먼저 살펴보자 스프링 시큐리티 스프링의 여러 하위 프로젝트 중에 하나이므로,https://spring.io/projects/spring-security Spring Security Spring Security is a framework that focuses on providing both authentication and authorization to Java applications. Like all Spring projects, the real power of Spring Security is found in how easily it can be extended to meet custom requirements spring.io 그리고 다양한 처리를 위.. 2021. 10. 18.
쓰레드의 동기화(4) volatile 싱글 코어 프로세서가 장착된 컴퓨터에서는 크게 문제가 없이 실행될 것이다. 그러나 요즘 대부분 멀티코어 프로세서가 장착된 컴퓨터를 사용하기 때문에, 문제가 많아질 수 있다. 왜냐하면 멀티 코어 프로세서에서 코어마다 별도의 캐시를 가지고 있기 때문이다. 코어는 메모리에서 읽어온 값을 캐시에 저장하고 캐시에서 값을 읽어서 작업한다. 다시 같은 값을 읽어올때는 머넞 캐시에 있는지 확인하고 없을 때만 메모리에서 읽어온다. 그러다보니 도중에 메모리에 저장된 변수의 값이 변경되었는데도 캐시에 저장된 값이 갱신되지 않아서 메모리에 저장된 값이 다른 경우가 발생한다. 그래서 변수 stopped의 값이 바뀌었는데도 쓰레드가 멈추지않고 계속 실행된다. 변수에 volatile을 붙이는 대신에 synchron.. 2021. 10. 16.
쓰레드의 동기화(3) Lock과 Condition을 이용한 동기화 동기화 할 수 있는 방법은 synchronized블럭 외에도 java.util.concurrent.locks패키지가 제공하는 lock클래스들을 이용하는 방법이 있다. lock 클래스의 종류는 다음과 같다. ReentrantLock // 재진입이 가능한 lock, 가장 일반적인 배타 lock ReentrantReadWriteLock //읽기에는 공유적이고, 쓰기에는 배타적인 lock StampedLock //ReentrantReadWriteLock 에 낙관적인 lock의 기능을 추가 ReentrantLock 은 가장 일반적인 lock이다. reentrant(재진입할 수 있는)이라는 단어가 앞에 붙은 이유는 우리가 앞서 wait(), notify()에서 배운것 처.. 2021. 10. 15.
쓰레드의 동기화(2) 동기화 하는 이유 : 한 쓰레드가 진행 중인 작업을 다른 쓰레드가 간섭하지 못하도록 막기위함 동기화의 단점이 동기화를 하면 데이터는 보호는 되지만 비효율적이다. 한번에 한쓰레드만 사용되니까! 그래서 동기화를 하면 프로그램의 효율이 떨어진다. 그래서 그 떨어진 효율을 높이기 위해서 만들어진 메서드가 wait, notify를 사용한다. 즉 synchronized로 동기화 해서 공유 데이터를 보호하는 것 까지는 좋은데, 특정 쓰레드가 객체의 락을 가진 상태로 오랜 시간을 보내지 않도록 하는 것도 중요하다. 만일 계좌에 추름할 돈이 부족해서 한 쓰레드가 락을 보유한 채로 돈이 입금될때까지 오랜시간을 보낸다면, 다른 쓰레드들은 해당 객체의 락을 기다리느라 다른 작업들도 원활히 진행되지 않기 때문이다. 이러한 상황.. 2021. 10. 15.
파일업로드 마무리 게시글 등록 시 첨부파일 추가, 삭제 0 게시글 삭제 시 첨부파일과 데이터 삭제 0 게시글 수정 시 첨부파일과 데이터 변경 0 실제 구현화면 프로젝트 처리 1주일간의 짧은 레이싱이 끝났다. 3일은 첨부파일기능을 실습해보았고 나머지 3일은 내 기존 프로젝트에 적용시켜보았다. 난 마스터브랜치에서 새로 브랜치를 생성해서 업로드 파일기능구현을 시켰다. 이제 이것을 풀리퀘스트로 합쳐보겠다. 깃허브에서 풀리퀘스트 하는법 상단의 컴패어 및 풀리퀘스트를 눌러보자 그리고 해당 브랜치에 설명을 간략하게 넣는다. 첨부할게있으면 첨부해도좋다. 그럼 Create pull request를 눌러서 최종으로 진행하도록하자 커맨트를 남길게 있으면 남기고 커밋을 하자 머지 풀리퀘스트를 통해서 지금 뻗어나온 브랜지, 즉 가지를 다시 몸통.. 2021. 10. 15.
프로젝트(6)-잘못된 파일 처리 Ajax를 이용해서 첨부파일을 사용하면 사용자가 게시물을 등록하거나 수정하기 전에 이미 업로드 시킨 파일들을 볼 수 있다는 장점이 있지만, 다음과 같은 문제가 생긴다. - 첨부파일만을 등록하고 게시물을 등록하지 않을 떄의 문제 파일은 이미 서버에 업로드 되었지만, 게시물을 등록하지 않았으므로 의미 없이 파일들만 서버레 업로드된 상황 - 게시물을 수정할 때 파일을 삭제했지만 실제로 폴더에서 기존 파일은 삭제되지 않은 문제 데이터베이스에는 기존 파일이 삭제되었지만, 실제 폴더에는 남는 문제 이는 사용자가 Ajax로 어떤 작업을 한 후에 비정상적으로 브라우저를 종료하거나 페이지를 빠져나가는 문제이다. 이 문제를 해결하는 핵심은 정상적으로 사용자의 게시물에 첨부된 파일인지 아니면 사용자가 게시물을 수정할때 업로.. 2021. 10. 15.
프로젝트(5)-게시글 수정 및 기타작업 앞서 말한것과 같이 수정은 사실상 첨부파일의 등록 작업과 유사하다... 첨부파일이라는게 개념 자체가 수정이 아닌 기존 파일을 삭제하고, 새로운파일을 추가하고 등등 그러니 기존의 게시물등록과 비슷하게 작업을 해보자 그리고 해당 업로드할때 좀 이쁘장하게 나오도록 css파일을 따로 놓았다.. 프로젝트 막바지에는 js파일을 따로 또 분리해서 정리하겠다... 화면에서 첨부파일 수정 게시물의 조회화면과 유사하지만 첨부파일 데이터를 보여주면서 삭제가 되도록, 첨부가 되도록해야한다. 은근 까다로왔다 나에겐; 천천히 해보자 우선 modify.jsp 파일일부에 첨부파일 폼을 넣어준다 첨부파일을 수정하기 위해서 게시물을 등록할 때 사용했던 버튼과 파일을 교체하기 위한 이 필요하니 추가해준다. Files 126번 게시글을 지.. 2021. 10. 15.
프로젝트(4)-게시물 삭제 게시물을 삭제할 떄는 게시물이 포함된 첨부파일 역시 같이 삭제할 필요가있다. 단순히 DB상에서 삭제 뿐만아니라 실제 폴더 내의 파일도 같이 삭제되어야 한다. 첨부파일 삭제 처리 첨부파일과 관련된 SQL은 BoardAttachMapper 인터페이스와 XML파일에 작성되어있으니 이부분에 추가를 해주자 public void delete(String uuid); 삭제처리할 메서드이다. 그리고 실제 SQL은 XML매퍼에 작성한다. delete from tbl_attach where uuid = #{uuid} delete tbl_attach where bno = #{bno} 하나삭제와 종합삭제를 넣었다. 하나삭제는 기존에 있지만 종합삭제/전체삭제도 그아래 추가해주었다. BoardServiceImpl변경 BoardS.. 2021. 10. 15.
프로젝트(3)-게시물 조회 게시물의 조회에서는 첨부파일을 다운로드 하거나, 원본 이미지의 파일을 볼 수 있는 기능을 사용한다. 게시물의 조회에서 고민해야 하는 내용은 첨부파일을 한번에 볼것이닞, Ajax을 이용해서 별도로 처리할 것인지 결정해야한다. 게시물의 정보는 tbl_board 테이블에 기록되어있고, 첨부파일의 정보는 tbl_attach에 기록되어 있기때문에 화면에 두 테이블이 있는 정보를 사용하기 위해서는 다음과 같은 방식을 고려해야 한다. -BoardVO 객체를 가져올 때 join을 처리해서 한꺼번에 게시물과 첨부파일의 정보를 같이 처리하는 방식 DB를 한번만 호출 하게 되므로 효율적이지만 MyBatis쪽에서 처리해야 하는 일이 많아진다. -JSP에서 첨부파일의 정보를 AJax를 이용해서 처리하는 방식 다시 쿼리를 처리해.. 2021. 10. 15.
쓰레드의 동기화 싱글 쓰레드 프로세스의 경우 프로세스 내에서 단 하나의 쓰레드만 작업하기 때문에 프로세스의 자원을 가지고 작업하는데 별 문제가 없지만, 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다. 만일 쓰레드 A가 작업도중에 다른 쓰레드 B에게 제어권이 넘어갔을때, 쓰레드A가 작업하던 공유데이터를 B가 임의로 변경하였다면, A가 제어권을 받아 나머지 작업을 마쳤을때, 원래 의도했던 것과는 다른 결과를 얻을 수 있다. 멀티쓰레드 프로세스에서는 여러 쓰레드가 같은 자원을 공유하기 때문에 메모리도 공유함, 어떤 한 쓰레드가 작업하는 것을 마치지 못하고 다른쓰레드에게 차례가 넘어갔을 때 그 쓰레드가 다른 쓰레드에게 영향을줄 수가있다. 그래서 작업이 끝나지 않은 경우에 다른쓰레드가 다른쓰레드가 그 작업.. 2021. 10. 15.
쓰레드 제어문(4) join() 지정된 시간동안 특정 쓰레드가 작업하는 것을 기다린다. 무슨말이야 A라는 쓰레드와 B라는 쓰레드가 있는데 A라는 작업을 하다가 B가 작업을 끝낸뒤 A쓰레드가 더 진행되게 하도록 해준다. void join() //작업이 모두 끝날 때까지 void join(long millis) // 천분의 일초동안 void join(long, millis, int nanos) // 천분의 일초 + 나노초 동안 그리고 sleep() 와 동일하게 에외처리를 한다. try{ t1.join(); }catch(InterruptedException e){} 만약 interrupt가 발생하면 멈추던걸 멈추고 실행한다. 시간을 지정하지 않으면 , 해당 쓰레드가 작업을 모두 마칠때까지 기다린다. 작업 중에 다른 쓰레드의 작업.. 2021. 10. 14.
728x90
반응형
LIST