Spring Framework ¶
Spring Security ¶
- 스프� 시�리티 사용 준비
- UserDetail - 스프ë§� 시í��리티가 ì‚¬ìš©í• ìˆ˜ 있는 User ê°�ì²´ 만들기
- 현재 로그ì�¸ 한 사용ìž� ì •ë³´ ê°€ì ¸ì˜¤ê¸°
- SecurityContextHolder를 �용하는 법
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); String name; if (principal instanceof UserDetails) { name = ((UserDetails)principal).getUsername(); } else { name = principal.toString(); }
- Spring dependency injection� �용하는 법
public String write(@RequestParam("title") String title, @RequestParam("contents") String contents, Model model, Principal principal) { ... page.edit(contents, userRepository.get(principal.getName())); ... }
- SecurityContextHolder를 �용하는 법
- spring security tab library
- spring securityì—� ê´€ë ¨ë�œ 기능들ì�„ html/jsì—�서 쓸 수 있다.
- spring securityì—� ê´€ë ¨ë�œ 기능들ì�„ html/jsì—�서 쓸 수 있다.
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="sec" %> ... <sec:authorize ifAllGranted="ROLE_USER"> <input id="contents_edit" type="textarea" class="page_edit" value="${page.contents}" /> <a href="#" class="page_edit" id="save">save</a> </sec:authorize> ... <sec:authorize url="/login"> <a href="logout">Logout</a> </sec:authorize>
- Spring Securityì�˜ Role Voter는 "ROLE_" ì ‘ë‘�어를 사용한 ì ‘ê·¼ ì†�성만 처리한다. 단 ì ‘ë‘�어는 커스터마ì�´ì§•ì�´ 가능하다.
Hibernate ¶
- ORM(Object Relation Mapping) í”„ë ˆìž„ì›Œí�¬. Java persistence, EJB3.0ì�„ ê°™ì�´ 알면 좋다.
- Lisence : LGPL
JSP ¶
Markdown ¶
- 위키 문법ì�„ 별ë�„로 ì •ì�˜í•˜ê³ 파서를 구현하는 ëŒ€ì‹ Markdownì�„ 사용하기로 ê²°ì •í–ˆë‹¤.
- Markdown�란 : wiki:Markdown
- 위키피디아를 ì°¸ê³ í•˜ì—¬ Java로 구현ë�œ Markdown implementation 중 Pegdownì�„ ì„ íƒ�했다.
- MarkdownJ, MarkdownPapers는 문서가 ë¶€ì‹¤í•˜ê³ ë‚¨ì�€ ë‘� 구현체 중 Pegdownì�´ 위키 ì œëª©ì�„ 통한 페ì�´ì§€ ë§�í�¬ë¥¼ ë�” 간편하게 ì§€ì›�해서.
- 아주 간단한 Pegdown 사용 예
- pom.xml� dependency 추가하기
<dependency> <groupId>org.pegdown</groupId> <artifactId>pegdown</artifactId> <version>1.1.0</version> </dependency>
- markdown text를 html 문�열로 변환
String html = new PegDownProcessor().markdownToHtml("markdown text");
- pom.xml� dependency 추가하기
- MarkdownJ, MarkdownPapers는 문서가 ë¶€ì‹¤í•˜ê³ ë‚¨ì�€ ë‘� 구현체 중 Pegdownì�´ 위키 ì œëª©ì�„ 통한 페ì�´ì§€ ë§�í�¬ë¥¼ ë�” 간편하게 ì§€ì›�해서.
- Markdown�란 : wiki:Markdown
CGLIB ¶
- CGLIB는 코드 ìƒ�성 ë�¼ì�´ë¸ŒëŸ¬ë¦¬ë¡œì„œ(Code Generator Library) 런타임ì—� ë�™ì �으로 ìž�ë°” í�´ëž˜ìФì�˜ 프ë¡�시를 ìƒ�성해주는 기능ì�„ ì œê³µ(펌) ì�´ë�¼ê³ 한다.
후기 ¶
8ì›” 30ì�¼ ¶
- 김수경
- 2주? 까지는 아니지만 1.5주만ì—� 스터디를 재개했ë�”니 ì�´ì „ 소스 코드가 잘 기억ì�´ 나지 않아 난ê°�했다. 틈틈ì�´ 소스 코드를 봤다면 ì�´ë ‡ê²Œê¹Œì§€ 기억ì�´ 안 나지는 않았ì�„í…�ë�° ê·¸ë�™ì•ˆ ì†�ì�„ ë†“ê³ ìžˆì—ˆë�”니... 다ì�Œì—” ì�´ëŸ¬ì§€ ë§�아야지.
- 처ì�Œì—� 소스 코드 짜면서 ì�¼ë‹¨ ë�Œì•„가게 만들ìž�!! 는 마ì�Œìœ¼ë¡œ 코딩ì�„ í–ˆë�”니 바꿔야 í• ë¶€ë¶„ì�´ 아주 많아졌다. ì•„ë¬´ë ‡ê²Œë‚˜ ì§œë ¤ëŠ” ê±´ ì•„ë‹ˆê³ ê°œë°œì�´ 너무 지연ë�˜ë‹¤ê°€ í��지부지 ë�˜ëŠ” 게 싫어서 ê·¸ë ‡ê²Œ 한 ê±´ë�° ì§€ì†�ì �으로 개발하다가 íŠ¹ì • 부분ì�„ ê³ ì³�ì•¼í• ì‹œê¸°ì—� 기민하게 ê³ ì¹˜ì§€ 않으면 답ì�´ 없는 코드가 ë�˜ëŠ” 것 같다.
- 그래서 오늘 ëŠ�ë‚€ 게 ì�´ 코드는 ë�°ë¯¸ 무어 코드ë�¼ê³ …
- 그래서 오늘 ëŠ�ë‚€ 게 ì�´ 코드는 ë�°ë¯¸ 무어 코드ë�¼ê³ …
- TODO : write/delete 등 함수 단위로 security ì„¤ì • 필요함
- 2주? 까지는 아니지만 1.5주만ì—� 스터디를 재개했ë�”니 ì�´ì „ 소스 코드가 잘 기억ì�´ 나지 않아 난ê°�했다. 틈틈ì�´ 소스 코드를 봤다면 ì�´ë ‡ê²Œê¹Œì§€ 기억ì�´ 안 나지는 않았ì�„í…�ë�° ê·¸ë�™ì•ˆ ì†�ì�„ ë†“ê³ ìžˆì—ˆë�”니... 다ì�Œì—” ì�´ëŸ¬ì§€ ë§�아야지.
- 서지혜
- 오늘� 위키 문법� 구현하기로 하였다.
- 위키ì�˜ 문법ì�„ 구현하기로 하였는ë�° ì§�ì ‘ 파서를 구현하기보다 Markdownì�˜ 파서를 사용하면(Markdown 문법ì�„ 사용해야 하지만) íŽ¸ë¦¬í• ê²ƒ 같아(명백해서 ì¦�ëª…í• í•„ìš”ê°€ 없다!) Markdown 파서중 pegdownì�„ 쓰기로 ê²½ì •. Java 언어 기반ì�˜ 파서중 그나마 문서화(GitHubì�˜ 소개페ì�´ì§€)ê°€ 잘ë�˜ì–´ìžˆì–´ì„œ....
- 아무튼 pegdownì�€ 무지무지 ì‰¬ì› ëŠ”ë�°(new Pegdown().markdownToHTML(/* String 콘í…�ì¸ */) ì �용하는ë�°ê¹Œì§€ 시간ì�´ ì˜¤ëž˜ê±¸ë ¸ë‹¤. 하나 ê³ ì¹˜ë©´ 다른 ì—�러가 ë‚˜ê³ ì—�러랑 ìŠ¤ë¬´ê³ ê°œí–ˆì�Œã…‹ã…‹
- 당시엔 ì �ì ˆí•œ ê²°ì •ì�´ë�¼ ìƒ�ê°�했었ì�„ í…�ë�° ì�´ì œë³´ë‹ˆ 경악?스러운 부분ì�´ 있었다. ê²°ì •ì—� 대한 ì�´ìœ 를 기ë¡�í•´ë‘�ìž�.
- 위키ì�˜ 문법ì�„ 구현하기로 하였는ë�° ì§�ì ‘ 파서를 구현하기보다 Markdownì�˜ 파서를 사용하면(Markdown 문법ì�„ 사용해야 하지만) íŽ¸ë¦¬í• ê²ƒ 같아(명백해서 ì¦�ëª…í• í•„ìš”ê°€ 없다!) Markdown 파서중 pegdownì�„ 쓰기로 ê²½ì •. Java 언어 기반ì�˜ 파서중 그나마 문서화(GitHubì�˜ 소개페ì�´ì§€)ê°€ 잘ë�˜ì–´ìžˆì–´ì„œ....
- ìŠ¤ë¬´ê³ ê°œ
- ì�´ì „ì—� ë�Œì•„ê°€ë�˜ 것ì�´ 안ë�Œì•„ê°€ 코드를 보니 테스트를 위한 Mock ê°�체를 ì°¸ì¡°í•˜ê³ ìžˆì—ˆë‹¤. ì‹¤ì œ ê°�체는 구현ì�´ ë�œ ë�˜ì–´ìžˆì—ˆì�Œ. 테스트를 하기 위한 구현ì�„ 했었다는 것ì�„ 알게ë�˜ì—ˆë‹¤. 테스트용 코드가 Mock ê°�체를 벗어나 ì‹¤ì œ ê°�ì²´ì—�ë�„ 묻어있었ì�Œ. 당시엔 확장과 변화를 위해 ì •í•œê±¸ í…�ë�° 지금보니 왜 ì�´ëŸ´ê¹Œ?
- 그건 우리가 ì�´ 프로ì �트(ê·¸ë¦¬ê³ ì½”ë“œ)ì—� 대해 ë�” 잘 알게 ë�˜ì—ˆë‹¤ëŠ” 뜻. 과거ì�˜ ê²°ì �ì�„ 발견하는 것ì�€ 좋ì�€ ì‹ í˜¸ë‹¤.
- 그건 우리가 ì�´ 프로ì �트(ê·¸ë¦¬ê³ ì½”ë“œ)ì—� 대해 ë�” 잘 알게 ë�˜ì—ˆë‹¤ëŠ” 뜻. 과거ì�˜ ê²°ì �ì�„ 발견하는 것ì�€ 좋ì�€ ì‹ í˜¸ë‹¤.
- ì�´ì „ì—� ë�Œì•„ê°€ë�˜ 것ì�´ 안ë�Œì•„ê°€ 코드를 보니 테스트를 위한 Mock ê°�체를 ì°¸ì¡°í•˜ê³ ìžˆì—ˆë‹¤. ì‹¤ì œ ê°�체는 구현ì�´ ë�œ ë�˜ì–´ìžˆì—ˆì�Œ. 테스트를 하기 위한 구현ì�„ 했었다는 것ì�„ 알게ë�˜ì—ˆë‹¤. 테스트용 코드가 Mock ê°�체를 벗어나 ì‹¤ì œ ê°�ì²´ì—�ë�„ 묻어있었ì�Œ. 당시엔 확장과 변화를 위해 ì •í•œê±¸ í…�ë�° 지금보니 왜 ì�´ëŸ´ê¹Œ?
- 사소한 ê²°ì •ì�´ë�¼ë�„ ê²°ì •ì�„ í• ë•Œì—�는 ì�´ìœ 를 ì �ì–´ì•¼ê² ë‹¤.
- ê³µë¶€í• ê²Œ 많다.
- 좀 오래한 Spring, Hibernateë�„ ì–´ë ¤ì›€. CGLib, Spring Security, JSP, Session 찾아ë´�ì•¼ê² ë‹¤.
- 쓰는건 쉽지만 작�� 모른다.
- 좀 오래한 Spring, Hibernateë�„ ì–´ë ¤ì›€. CGLib, Spring Security, JSP, Session 찾아ë´�ì•¼ê² ë‹¤.
- 바퀴 다시만들기
- 오픈소스ì�¸ pegdownê³¼ 문법 Markdownì�„ 쓰니까 ì™„ì „ 편함
- 시간ë�„ 얼마 ì•ˆê±¸ë ¸ë‹¤. 구현시간ì�´ ë§Žì�´ 단축ë�˜ì–´ì„œ 위키쓰기질 하게ë��ì�Œ.
- 오픈소스ì�¸ pegdownê³¼ 문법 Markdownì�„ 쓰니까 ì™„ì „ 편함
- 오늘� 위키 문법� 구현하기로 하였다.
9ì›” 13ì�¼ ¶
9ì›” 19ì�¼ ¶
- 김수경
- 서지혜
- �서 화나는 �� 많다. ��.....
- ì�´ì „ (ë¦¬ë¹„ì „ 9)ì—�서는 jsp ì—�서 pageContext.getAttribute("page")로 Responseì�˜ page를 불러올 수 있었는ë�° ë¦¬ë¹„ì „ 10부터 pageContext.getRequst().getAttribute()(ë˜�는 request.getAttribute)를 해야 page를 불러올 수 있다. 왜지? ëª¨ë¥´ê² ì�Œ. 한참헤멤
- Scope와 관계가 있� 것 같다.
- Scope와 관계가 있� 것 같다.
- Jasper는 JSP를 java로 변환해 실행시키는 엔진� 것 같다.
- home.jsp는 home_jsp.java로 변환�는 �
- home.jsp는 home_jsp.java로 변환�는 �
- �서 화나는 �� 많다. ��.....
9ì›” 20ì�¼ ¶
- 김수경
- login.jsp 를 만들어서 커스터마ì�´ì§• 한 로그ì�¸ 페ì�´ì§€ë¥¼ ì‚¬ìš©í• ìˆ˜ 있게 ìˆ˜ì •í–ˆë‹¤.
- 그런ë�° Remember meê°€ ì œëŒ€ë¡œ ë�™ìž‘ 안 함.
- 그런ë�° Remember meê°€ ì œëŒ€ë¡œ ë�™ìž‘ 안 함.
- save를 누르면 ì €ìž¥ë�œ ë‚´ìš©ì�´ 바로 ë°˜ì˜�ë�˜ì–´ì•¼í•˜ëŠ”ë�° ìƒˆë¡œê³ ì¹¨ 해야 ë°˜ì˜�ë�œë‹¤.
- login.jsp 를 만들어서 커스터마ì�´ì§• 한 로그ì�¸ 페ì�´ì§€ë¥¼ ì‚¬ìš©í• ìˆ˜ 있게 ìˆ˜ì •í–ˆë‹¤.
- 서지혜
- 로그ì�¸ì�„ 하면 login, signup등ì�´ 안보ì�´ê²Œ í•˜ê³ ì‹¶ë‹¤
- spring securityì�˜ tag libraryì�˜ ifAllGranted, ifNotGranted등ì�„ ì‚¬ìš©í• ìˆ˜ 있다.
- spring securityì�˜ tag libraryì�˜ ifAllGranted, ifNotGranted등ì�„ ì‚¬ìš©í• ìˆ˜ 있다.
- 로그�� �어있는지 view단�서 확�하는 기능� 필요하다
- 페ì�´ì§€ë¥¼ 타ì�´í‹€ë¡œ 검색 í• ê²½ìš° 어떻게 페ì�´ì§€ 타ì�´í‹€ì�„ 받아서 검색ì�„ 한 ë’¤ 결과를 ë�Œë ¤ì£¼ê³ , 없는 페ì�´ì§€ëŠ” 새로 만들 수 있게 í• ê¹Œ?
- 보통 페�지 타�틀� GET으로 받는듯.
- url mapping 어떻게 하지?
- pagdown� page ��는 localhost:8080/simplewiki/를 localhost:8080/타�틀로 바꿔버린다.
- �래 localhost:8080/로 나오는거 아닌가?
- �래 localhost:8080/로 나오는거 아닌가?
- ViewResolver? Intercept Handler?
- 보통 페�지 타�틀� GET으로 받는듯.
- ê°œì�¸ ì‹ ìƒ� í„¸ê¸°í•˜ê³ ë†€ì•˜ì�Œ. 다들 ë�•ì�´ë�¼ 별로 재미없었다.
- mac eclipseì—�서 tomcat ì˜¬ë¦¬ê³ ì‹¶ì�€ë�° caltalina를 못찾는다
- 로그ì�¸ì�„ 하면 login, signup등ì�´ 안보ì�´ê²Œ í•˜ê³ ì‹¶ë‹¤
9ì›” 27ì�¼ ¶
10ì›” 11ì�¼ ¶
- 김수경
- 서지혜
- Pageë˜�는 User ê³„ì • ì‚ì œì—� 대한 ê³ ë¯¼. Page는 ì‚ì œë�„ History로 남는다. ì‚ì œí–ˆë‹¤ê°€ ê°™ì�€ ì�´ë¦„으로 다시 만들면 history는 남아있ì�Œ. 그러나 User는 ì‚ì œí•´ë�„ id는 남아서 historyì—� ì¡´ìž¬í•´ì•¼í•˜ê³ ê°™ì�€ id로 다시 만들면 기존 ì •ë³´ ì‚ì œê°€ í•„ìš”. 그래서 Userì�˜ ì†�성중 id와 다른 ì •ë³´(password, e-mail등..)를 분리하였다.
- Pageë˜�는 User ê³„ì • ì‚ì œì—� 대한 ê³ ë¯¼. Page는 ì‚ì œë�„ History로 남는다. ì‚ì œí–ˆë‹¤ê°€ ê°™ì�€ ì�´ë¦„으로 다시 만들면 history는 남아있ì�Œ. 그러나 User는 ì‚ì œí•´ë�„ id는 남아서 historyì—� ì¡´ìž¬í•´ì•¼í•˜ê³ ê°™ì�€ id로 다시 만들면 기존 ì •ë³´ ì‚ì œê°€ í•„ìš”. 그래서 Userì�˜ ì†�성중 id와 다른 ì •ë³´(password, e-mail등..)를 분리하였다.
11ì›” 01ì�¼ ¶
- 김수경
- 서지혜
- Userê°€ 탈퇴시ì—�ë�„ userId는 남아 있어야 하며 탈퇴한 id로 ê°€ìž…í• ìˆ˜ 있어야 하는 ì�´ìŠˆ í•´ê²°ì�„ 위해 Userì—�서 userId(String type)와 password,..(UserInfo.class)를 분리하였다.
- User는 UserInfo를 가진다.( Composite)
- User안ì—�서 UserInfo는 Nullable Columnì�´ì§€ë§Œ ì�´ë¯¸ 존재하는 UserInfo를 ì‚ì œí• ë•ŒëŠ” ForeignKey Contraint로 ì�¸í•´ ì—�러가 ë°œìƒ�ë�œë‹¤..
- User와 UserInfoì�˜ í�¬í•¨ 관계를 ë³€ê²½í•˜ë ¤ 했으나 논리ì �으로 ë§žì§€ 않아 버림.
- 회ì›�탈퇴시 UserInfo를 ì‚ì œí•˜ëŠ” 것ì�´ 아니ë�¼ 안ì�˜ field들ì�„ null등으로 초기화 하기로 í–ˆì�Œ... + 탈퇴한 회ì›�ì�¸ì§€ flag
- ë�” 좋ì�€ 방법ì�´ 있ì�„ì§€ ê³ ë¯¼.
- User는 UserInfo를 가진다.( Composite)
- 간단한 ë¬¸ì œì�¸ë�° (내게) 우아한 해결방법ì�´ 없다. ì¢Œì ˆ.
- 본스치킨 ì–‘ì �ì�€ë�° 너무 비싸. 18000ì›�ì�¸ë�° 치킨ì�€ ë‘� ì†�바닥 ë§Œí�¼ ì™”ì�Œ.
- Userê°€ 탈퇴시ì—�ë�„ userId는 남아 있어야 하며 탈퇴한 id로 ê°€ìž…í• ìˆ˜ 있어야 하는 ì�´ìŠˆ í•´ê²°ì�„ 위해 Userì—�서 userId(String type)와 password,..(UserInfo.class)를 분리하였다.
11ì›” 21ì�¼ ¶
- 김수경
- 서지혜
- Pageì�˜ History 보기 기능 ì„¤ì •
- url "/"ì—� Pageë‚´ìš© 보기와 Page historyì�˜ ë‚´ìš© 보기 ë‘�가지 기능ì�„ ë§¤í•‘í•˜ë ¤ 했다.
- 다른 행위(page content view, page history view)를 하지만 ë�” í�° 행위(page view)ì�˜ subsetì�´ë¯€ë¡œ Request주소는 같게 í•˜ê³ parameter를 달리해 ë‘� 행위를 êµ¬ë¶„í•˜ë ¤ 했다.
- 다른 행위(page content view, page history view)를 하지만 ë�” í�° 행위(page view)ì�˜ subsetì�´ë¯€ë¡œ Request주소는 같게 í•˜ê³ parameter를 달리해 ë‘� 행위를 êµ¬ë¶„í•˜ë ¤ 했다.
- 컨트롤러 함수ì—� ì�¸ìž�를 다르게 해서 OverLoadingí•˜ë ¤ 했으나 ResuestMappingì�´ 같아서 Springì�´ Ambiguous Mapping Exceptionì�„ ë°œìƒ�시켰다.
- RequestMappingHandlerMappingì�˜ 매핑 í…Œì�´ë¸”ì�„ 보니 { URL , methods= Method 타입 , params=[],headers=[],consumes=[],produces=[],custom=[]}등으로 Request를 êµ¬ë¶„í•˜ê³ ìžˆì—ˆë‹¤.
- RequestMappingHandlerMappingì�˜ 매핑 í…Œì�´ë¸”ì�„ 보니 { URL , methods= Method 타입 , params=[],headers=[],consumes=[],produces=[],custom=[]}등으로 Request를 êµ¬ë¶„í•˜ê³ ìžˆì—ˆë‹¤.
- @RequestMapping 어노테ì�´ì…˜ì�˜ ì„¤ì •ê°’ë“¤ 중ì—� params를 ì�´ìš©í•´ 파ë�¼ë©”í„° 등ë¡�ì�„ í• ìˆ˜ 있다. ì�´ë ‡ê²Œ 하면 íŠ¹ì • 파ë�¼ë©”í„°ê°€ 넘어올 때ì—�ë§Œ RequestMappingì�„ í• ìˆ˜ 있다.
- ì�´ë¥¼ ì�´ìš©í•´ RequestMappingì�˜ valueê°’, Method 타입ì�´ 같아ë�„ íŠ¹ì • 파ë�¼ë©”í„°ì�˜ ìœ ë¬´ë¡œ 리퀘스트 핸들ë§�ì�„ ë‹¬ë¦¬í• ìˆ˜ 있다.
- 예를들어 @RequestMapping(value = "/helloworld", method = RequestMethod.GET)와 @RequestMapping(value = "/helloworld", method = RequestMethod.GET, params="param=param")ì�€ 다르다. ê°�ê°� 다른 함수ì—� mappingë� 수 있다.
- ì�´ë¥¼ ì�´ìš©í•´ RequestMappingì�˜ valueê°’, Method 타입ì�´ 같아ë�„ íŠ¹ì • 파ë�¼ë©”í„°ì�˜ ìœ ë¬´ë¡œ 리퀘스트 핸들ë§�ì�„ ë‹¬ë¦¬í• ìˆ˜ 있다.
- url "/"ì—� Pageë‚´ìš© 보기와 Page historyì�˜ ë‚´ìš© 보기 ë‘�가지 기능ì�„ ë§¤í•‘í•˜ë ¤ 했다.
- Login하지 ì•Šê³ Page를 ìƒ�ì„±í• ìˆ˜ 있는 ë¬¸ì œ
- FrontPageê°€ ì—†ì�„ 때ì—�는 Loginì�„ 하지 않아ë�„ Page create를 í• ìˆ˜ 있었다.
- spring securityì—�서 "/create" urlì—� authenticationì�„ ì„¤ì •
- ui�서 Signup하는 부분� 다른 페�지로 추출
- RequestMappingì�˜ method 타입ì�„ ì�´ìš©í•´ signup 페ì�´ì§€ 호출과 ì‹¤ì œ signupì�„ 구분하여 핸들ë§�
- ì�´ê±´... ì�Œ.. "signup í�¼ì�„ ë‹´ì�€ 페ì�´ì§€ë¥¼ 호출" í• ë•Œì™€ "사용ìž�ì�˜ ID와 PASSWORD를 ì „ë‹¬í•´ 로그ì�¸ 처리를 하는" 경우가 ê°™ì�€ Request Nameì�„ 가지게 ë�˜ì„œ..
- ì�´ê±´... ì�Œ.. "signup í�¼ì�„ ë‹´ì�€ 페ì�´ì§€ë¥¼ 호출" í• ë•Œì™€ "사용ìž�ì�˜ ID와 PASSWORD를 ì „ë‹¬í•´ 로그ì�¸ 처리를 하는" 경우가 ê°™ì�€ Request Nameì�„ 가지게 ë�˜ì„œ..
- spring securityì—�서 "/create" urlì—� authenticationì�„ ì„¤ì •
- ì�´ì œ 로그ì�¸ë�˜ì§€ 않ì�€ 사용ìž�ê°€ 페ì�´ì§€ ìƒ�성ì�„ ìš”ì²í•˜ë©´ Spring Securityì—� ì�˜í•´ Signup 페ì�´ì§€ë¡œ ì�´ë�™ë�œë‹¤. ë�—
- FrontPageê°€ ì—†ì�„ 때ì—�는 Loginì�„ 하지 않아ë�„ Page create를 í• ìˆ˜ 있었다.
- Pageì�˜ History 보기 기능 ì„¤ì •
11ì›” 29ì�¼ ¶
- 김수경
- 서지혜
- ìž…ì�„ 함부로 놀린 죄로 ë°±ë§�í�¬ì—� 대해 ê³ ë¯¼ì¤‘. ìƒ�ê°�보다 까다로운 ì£¼ì œì—¬ì„œ 당황, 위키페ì�´ì§€ì�˜ backlink 설명ì�€ 너무 부족하구만..
- linkbackì�€ ë�ì§€?
- backlink는 ìž�ì‹ ì�„ 참조하는 ë§�í�¬ë“¤ì—� 대한 참조(ì—참조)ì�´ê³ , linkbackì�€ backlink하는 방법들ì�´êµ°.
- backlink는 ìž�ì‹ ì�„ 참조하는 ë§�í�¬ë“¤ì—� 대한 참조(ì—참조)ì�´ê³ , linkbackì�€ backlink하는 방법들ì�´êµ°.
- ìž…ì�„ 함부로 놀린 죄로 ë°±ë§�í�¬ì—� 대해 ê³ ë¯¼ì¤‘. ìƒ�ê°�보다 까다로운 ì£¼ì œì—¬ì„œ 당황, 위키페ì�´ì§€ì�˜ backlink 설명ì�€ 너무 부족하구만..
12ì›” 6ì�¼ ¶
- 김수경
- Javaì—�서 Matcher를 ì‚¬ìš©í• ë•Œ matches()는 ì „ì²´ê°€ ì™„ì „ížˆ ì�¼ì¹˜í•˜ëŠ” 것만 ì°¾ì•„ì£¼ê³ find()는 substringì�¼ 때ë�„ 찾아준다. 예를들어 'abcde'ì—�서 'bcd'를 ì°¾ì�„ 때 matches를 사용하면 못 ì°¾ê³ find를 사용하면 ì°¾ì�Œ.
- Javaì—�서 Matcher를 ì‚¬ìš©í• ë•Œ matches()는 ì „ì²´ê°€ ì™„ì „ížˆ ì�¼ì¹˜í•˜ëŠ” 것만 ì°¾ì•„ì£¼ê³ find()는 substringì�¼ 때ë�„ 찾아준다. 예를들어 'abcde'ì—�서 'bcd'를 ì°¾ì�„ 때 matches를 사용하면 못 ì°¾ê³ find를 사용하면 ì°¾ì�Œ.
- 서지혜
- backlink 처리 í”„ë¡œí† íƒ€ì�´í•‘ 중
- Javaì�˜ Matcher 중 find()와 matches()ê°€ 패턴매ì¹ê³¼ ê´€ë ¨ì�´ 있는걸로 ì•Œê³ ìžˆëŠ”ë�° 찾아서 다시 ì“°ê² ë‹¤.
- backlink 처리 í”„ë¡œí† íƒ€ì�´í•‘ 중










