'개발공부'에 해당되는 글 20건

  1. 2019.08.18 [Spring] 03. VIEW 파일 추가.
  2. 2019.08.16 [Spring] 02. 컨트롤러 추가
  3. 2019.08.14 [Spring] 01. 프로젝트 생성
  4. 2016.10.12 [IT지식] 애자일 - 칸반
  5. 2016.09.25 [IT 지식] 애자일 - 스크럼
  6. 2015.12.25 [Spring] 06. Spring security 적용하기 (3)
  7. 2015.12.06 [JAVA / JSP] MVC 패턴
  8. 2015.12.06 [Spring] 06. Spring security 적용하기 (2) 2
  9. 2015.11.14 [Spring] 06. Spring security 적용하기 (1)
  10. 2015.11.01 [HTML] <table> 사용하기

[Spring] 03. VIEW 파일 추가.

개발공부/Spring 2019. 8. 18. 16:20

pom.xml 파일을 열어서 dependency를 추가.

		<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		    <version>1.2</version><!--$NO-MVN-MAN-VER$-->
		</dependency>
		<!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
		<dependency>
		    <groupId>org.apache.tomcat.embed</groupId>
		    <artifactId>tomcat-embed-jasper</artifactId>
		    <version>9.0.24</version><!--$NO-MVN-MAN-VER$-->
		</dependency>

google에 maven repository 검색 -> 사이트 내에서 검색하면 나옴.

 

프로젝트에서

main/resources/application.properties 파일 오픈.

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

추가.

 

webapp폴더 하위에 spring.mvc.view.prefix에 설정한 구조와 같도록 디렉터리 생성.

컨트롤러 파일 오픈후, 아래 내용 입력.

	@RequestMapping("/page")
	public ModelAndView page() {
		ModelAndView mv = new ModelAndView("tester");
		mv.addObject("text", "tester2");
		return mv;
	}

 

위에 spring.mvc.view.prefix 에서 설정한 디렉터리에 ModelAndView 에서 설정한 파일명으로 파일 추가.

ex) /WEB-INF/jsp/tester.jsp

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
${text }
</body>
</html>

파일내용 입력.

mv.addObject("키", "데이터");

 

tester.jsp 에서 ${키} 하면 컨트롤러에서 셋팅된 데이터가 나옴.

 

 

 

 

:

[Spring] 02. 컨트롤러 추가

개발공부/Spring 2019. 8. 16. 10:39

새로운 컨트롤러 추가.

 

새로운 패키지 생성.

 

새로만든 패키지에 새로운 클래스 생성.

 

새로만든 클래스를 @Controller 어노테이션을 붙여서 컨트롤러로 등록.

클래스 안에 @RequestMapping("/hello") 를 추가하여 /hello로 접근시 아래 매소드가 실행되도록 적용.

 

http://localhost:8080/hello 접속.

화면이 나오지 않음... 왜그럴까.. 한참고민.

구글링 결과, 컴포넌트 스캔이 필요하다는것을 알게됨.

이전 글에서 DB관련 문제때문에 서버가 뜨지 않았을때, 어노테이션으로 처리하던 파일에 들어감. (*Application.java)

거기에 @ComponentScan("com.example")를 추가 후 저장.

다시 http://localhost:8080/hello 접속.

Hello Spring Boot World! 가 나오는것을 확인.

 

나는 프로젝트 생성시 시큐리티도 추가해서 시큐리티 관련 설정을 더 추가함...

관련 설정을 해주지 않을경우, /hello 접근시 시큐리티가 'ㅇㅇ 안돼 돌아가' 시전..

그래서 구글링해서 해당 설정을 추가 후 화면을 볼수있었음.

 

 

:

[Spring] 01. 프로젝트 생성

개발공부/Spring 2019. 8. 14. 00:13

완전 공부용으로 새로 시작!

 

이클립스 Project Explorer 우클릭 -> New -> Project... 선택

 

Spring Boot 폴더안에 Spring Starter Project 선택

 

기본적으로 입력이 되어있음.

입맛에 맞게 수정. Packaging만 War로 수정하였음.

 

Frequently Used는 최근에 선택했던 친구들.

원하는 기능들을 체크한 뒤에 Finish 클릭.

 

프로젝트 우클릭 -> Run As -> Spring Boot App 클릭 하면 프로젝트가 실행됨.

 

실행시 콘솔에 위와같은 내용이 나오고 서버가 제대로 뜨지 않을경우, DB관련 설정이 없어서 생기는 현상.

방법은 2가지 있음.

 

  1. 어노테이션을 추가하는 방법.
    1. 생성된 패키지 안에 *Application.java 파일을 연다. (스프링부트 메인 클래스)
    2. 해당 클래스 안에 @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) 을 추가한다.
  2. DB정보를 추가하는 방법.
    1. src -> main -> resources -> application.properties 파일 오픈.
    2. 아래 정보 본인의 DB에 맞게 수정하여 입력.
      spring.datasource.url=jdbc:mysql://localhost/databasename 
      spring.datasource.username=root
      spring.datasource.password=root
      spring.datasource.driver-class-name=com.mysql.jdbc.Driver


서버실행.

 

콘솔에 정보가 출력되면서 서버 올라감.

 

페이지 확인결과 서버 제대로 올라감. (스프링 시큐리티 추가해서 기본 로그인 페이지가 뜸.)

:

[IT지식] 애자일 - 칸반

개발공부/IT 지식 2016. 10. 12. 10:26

안녕하세요~ 콤트입니다!!

요즘 방법론 공부를 좀 하다보니 이런거만 올리게 되네요 ㅋㅋㅋ

역시나 이것도 제가 공부한내용 정리할겸 올립니다~


1. 칸반이란?


칸반! 저는 이전 포스팅에서 스크럼에대한 책을 읽다가  '테스크 칸반' 이란 단어로 처음 접했습니다.

그냥 백로그를 붙여놓고 이동시키는 보드를 칸반이라고 생각했었는데, 다른 책을 읽으면서 보니 '칸반' 이라는 방법론이 있더라구요.

스크럼이랑 상당히 비슷해보였습니다. 하지만 뚜렷한 차이점도 있었습니다.

칸반은 스크럼의 테스트칸반처럼 보드에 백로그를 정리하고, 백로그 메모를 이동시키면서 무슨일을 하고있고, 무슨일을 했고, 무슨일이 남았는지를 보드만 봐도 알수있게 해두었습니다.

아래에서 스크럼과 칸반의 차이점을 설명하면서 더욱 상세하게 말씀드릴께요.



2. 스크럼과 칸반의 차이점


스크럼 

 칸반

 기간을 고정시키고 이를 반복(이터레이션)수행한다.

 기간이 고정된 반복(이터레이션)은 선택사항이다.

고정된 기간이 아닌 작업중심으로 운영이 가능하다.

 유닛을 구성하여, 유닛이 이번 반복에 할 일을 결정, 한다.

약속은 선택사항이다.

 계획 및 공정개선에 속도를 기본지표로 사용한다.

 계획 및 공정개선에 리드타임을 지표로 사용한다.

 교차 기능 팀(유닛)을 규정한다.

 교차 기능 팀(유닛)은 선택사항이다. 특정 업무의 전무가로만 구성된 팀도 허용된다.

 작업단위를 한 스프린트안에 완료될 수 있을정도의 크기로 나눠야한다.

 작업단위를 특별히 규정하지 않는다.

 번다운 차트를 사용한다.

 차트를 사용하지 않아도 상관없다.

 WIP 리밋을 간접적으로 한다.(한 스프린트 단위)

 WIP 리밋을 직접적으로 한다. 

 추정하도록 규정한다.

 (이 작업이 얼마나 걸릴지 스토리포인트를추정하여 이를 결정한다.)

 추정은 선택사항이다.

 스프린트중에는 아이템을 추가할 수 없다.

 수용가능한 작업이면 새로운 아이템을 추가할수있다.

 역할울 규정한다.

 역할은 선택사항이다. 역할을 정하지 않아도 된다.

 스프린트를 반복할때마다 보드를 초기화한다.

 보드 내용은 계속 유지한다. 

 제품 백로그에 우선순위를 정해야한다.

 우선순위를 정하는것은 선택사항이다.


스크럼과 칸반의 파이점을 표로 정리해봤습니다.

위 내용을 보시면 스크럼의 경우 '~을 한다.' 또는 '~ 없다' 라는 단어가 많이 들어가있습니다.

반대로 칸반의 경우 '~ 선택사항이다''~ 않는다' 와 같이 특별한 규칙을 규정하는것이 거의 없습니다.

이는 칸반이 스크럼에비해 자유도가 굉장히 높다고 보여집니다.

기업 및 프로젝트의 특성에 맞춰서 유동적으로 변화가 가능하다는 것으로 보여집니다.

물론 스크럼 또한 유동적으로 변화가 가능하지만, 규정되고 지켜야하는 작업(스프린트 회의, 스프린트 종료때 나와야하는 결과물 등)이나, 역할(스크럼 마스터 등)들이 있습니다.

이런것들에 비해서 상대적으로 자유도가 높다고 생각됩니다.


요즘 개발 방법론에 대해서 잠깐 보면서 보고 읽은것들을 간단하게나마 정리하였습니다.

칸반은 스크럼에 비교해서 정리하는것이 그나마 이해가 편했던거같아서 이렇게 정리했습니다.


이상 마치겠습니다!!



참고서적 : 칸반과 스크럼 (인사이트 http://book.naver.com/bookdb/book_detail.nhn?bid=7204139)


'개발공부 > IT 지식' 카테고리의 다른 글

[IT 지식] 애자일 - 스크럼  (0) 2016.09.25
:

[IT 지식] 애자일 - 스크럼

개발공부/IT 지식 2016. 9. 25. 15:13

안녕하세요~ 오랜만에 포스팅을 하네요ㅠㅜ

게을러터져서 포스팅은 안하다가.. 이번에 공부한게 좀 헷갈려서 정리할겸 올려봅니다!!

틀린부분이 있으면 말씀해주세요~


1. 애자일이란?


타이틀을 '애자일이란?' 으로 달았지만, 명확하게 애자일이 뭐다! 라고 정의하기가 참 힘이드는거같아요.

이애한대로 그냥 쭉 풀어쓰면, 하나의 프로젝트를 진행하는 과정에서 유동적으로 사용자의 요구 및 작업중 발생하는 이슈사항을 적당히 수용하면서 진행하는 것으로 이해했습니다.


다시말하면, 프로젝트 초기에 기획이 완전히 확정되고, 기획서에만 맞춰서 개발하는것이아니라 프로젝트를 진행하면서 가각의 기능들을 세분화하고 이 기능들을 하나하나 개발하면서 테스트를거쳐 작업을 진행하며 중간중간 발생하는 사용자의 요구사항을 무리하지않는 범위내에서 수용함과 동시에 개발중 발생하는 이슈들을 같이 처리하면서 프로젝트를 완성해나가는것으로 이해하였습니다.


써놓고 나름대로 정리하면서 적었는데 이것도 좀 헷갈릴수가 있는거같아요ㅠㅜ

저는 애자일 방법론 중에서 '스크럼'에 대해서 간단히 이야기해보겠습니다.



2. 스크럼이란?


'스크럼'은 애자일 개발 방법론중에 하나라고 이해하시면 될것같습니다.

프로젝트를 1달정도의 단위로 끊어서 진행한다고 보시면 됩니다. 그렇다고 진짜로 딱 끊는것이 아니라 그정도의 주기를 계속 반복해나가면서 프로젝트를 진행하 나가는겁니다.


자, 여기서 프로젝트를 진행하는데 한달정도로 끊는것은 무슨말이며, 이것을 반복한다는것은 무슨말일까요??

스크럼은 실무자들을 한곳으로 모아서 팀을 만듭니다. 이 팀에 속한 멤버들은 각자 팀이 다를수도있으며 같을수도 있습니다.

기획자, 개발자 등등 모든 실무자들이 모인것입니다. 그다음 실무자들이 모여 한곳에서 회의를 하고 할일들을 뽑아낸뒤에 이를 언제까지 하겠다 하고 작업을 시작하고, 이를 일정주기를 정해서 반복합니다.


자, 여기서 보시면 '실무자들이 모인다' 이를 '유닛' 이라고 합니다. 그냥 간단하게 팀으로 생각하셔도 무방하다고 생각됩니다. 그러나 용어를 알아야지 커뮤니케이션이 된다고 생각하기때문에 적어둡니다, 제가 용어에 엄청 약하거든요... 그래서 적었어요ㅠㅜ

그리고 다음!! '한곳에서 회의를 한다' 이것을 '스크럼'이라고 입니다. 프로젝트의 실무자들이 모여서 회의를 하는 것입니다.

그다음 '할일들을 뽑아낸다' 이것은 '백로그' 라고 합니다. 이것들을 전부 처리해야하는것입니다. 이는 완전하게 확정된것이 아니며 경우에따라 늘거나 혹은 줄어들수도 있습니다. 줄어들일은 거의 없을거같지만...

그리고 마지막! '언제까지 작업을 하겠다' 이를 '스프린트' 라고 합니다. 스프린트는 개발주기를 이야기합니다.

보통은 1달정도로 잡고 작업한다고 하는데, 이는 프로젝트나 팀의 특성에따라 기간이 조정될수도 있습니다.


자 이제 용어들을 이용하여 스크럼을 설명해 보면, '유닛들이 한곳에서 모여 스크럼을하고, 백로그를 만들어서 스프린트를 반복한다.'가 되겠네요.

위에 설명한 용어들이 가장 기본이 되는것들이라고 생각합니다.


3. 스크럼 프로세스


(이미지 출처 : http://jinhojapan.tistory.com/72)


자 이미지를 간단하게 설명해보겠습니다.

제품책임자가 요구사항을 나열합니다. 이는 제품 자체의 백로그가 됩니다. 다시말해서 제품 전체의 일감이 되는것입니다. 이를 '제품 백로그'라고 합니다.


그럼 유닛(팀)이 모여서 스크럼을하여 스프린트 백로그를 생성합니다. '스프린트 백로그'란 한 스프린트동안 작업할 일감을 말합니다.


이제 스프린트가 시작되면, 유닛들은 각자 작업에 들어가고, 스프린트 기간동안 일일스크럼을 하게됩니다.

'일일스크럼'이란 스프린트기간중에 매일 간단하게 회의를 하는것을 말합니다.

이 스크럼 중에 '어제 작업한 일', '오늘 작업할 일', '현재 장애가 되고있는 일' 등을 공유하여 작업이 잘 이루어지는지를 서로 공유합니다.

일일스크럼은 보통 20분 내외로 간단하게 이뤄진다고 합니다. 일일스크럼은 직접 해봐야 정확한 정보를 제공할 수 있을거같은데, 제가 아직 스크럼을 해보지 않아서 공부한대로 적어봤습니다.


이 스프린트가 끝나면 테스트 및 리뷰가 가능한 결과물이 나와야합니다. 이를 '인크리먼트' 라고 합니다. 인크리먼트는 출시할수있는 수준의 결과물이 나와야 합니다.


스프린트가 끝나면 리뷰를 합니다. '리뷰'란 제품책임자 및 담당자와 실무자들이 모여서 결과물이 제대로 작동되는지 확인하는것이라고 생각하시면 됩니다.

리뷰를 통해서 작업자들은 자신들이 작업한 내용을 확인 가능하고, 제품책임자는 프로젝트가 잘 진행되고있는지를 가시적으로 확인이 가능합니다.


스프린트가 끝나면 해야할일이 하나 더 있습니다. 그것은 바로 회고입니다. '회고' 스프린트를 진행하면서 잘된점과 개선이 필요한점을 이야기하여 다음 스프린트를 더욱 원활하게 진행할 수 있도록 하는것을 말합니다.


이러한 스크럼의 과정을 전체적으로 관리하는사람을 '스크럼마스터'라고 합니다.

스크럼마스터는 유닛을 통제하는것이 아니라, 스프린트 및 스크럼이 진행되는데 있어서 방해가되는 요소로부터 유닛을 보호하고, 스크럼중에 필요한 부분을 지원해주는 사람으로, 유닛들을 통제하는것이 아니라 유닛들의 작업환경을 개선 및 보조해주는 역할입니다.


스크럼에대해 간단히 정리해 보았습니다.

여기에 작성한 내용이 전부는 아니며, 조직 및 프로젝트의 특성에따라 다를수도 있습니다.


참고서적 : 애자일개발과 스크럼 (한빛미디어 http://book.naver.com/bookdb/book_detail.nhn?bid=7877159)


이상 마치고 다음에는 언제 포스팅할지 참 기대되네요ㅠㅜ 이왕이면 빨리 오겠습니다!!




'개발공부 > IT 지식' 카테고리의 다른 글

[IT지식] 애자일 - 칸반  (0) 2016.10.12
:

[Spring] 06. Spring security 적용하기 (3)

개발공부/Spring 2015. 12. 25. 21:04

제가 작성중에빼먹은 부분이 있었네요ㅠㅠ

다음 프로젝트 생성하고 셋팅하다가 발견했어요ㅠㅠ


<!-- 스프링 시큐리티 -->

<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>

</filter>

<filter-mapping>

<filter-name>springSecurityFilterChain</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>


이거를 web.xml에 추가해주시면 됩니다ㅠ

</web-app> 안에다가요ㅠ  

:

[JAVA / JSP] MVC 패턴

개발공부/JAVA / JSP 2015. 12. 6. 19:16

안녕하세요 콤트입니다.

이번에는 MVC 패턴에 대해서 이야기해보겠습니다.


1. MVC란?


Model View Controller의 약자입니다.

어플리케이션을 크게 모델, 뷰, 컨트롤러로 구분하고, 결합도를 최소화 하는 패턴이라고 합니다.


각 부분들에 대해 이야기해보겠습니다.


1-1. Model


모델은 어플리케이션의 비즈니스 로직 부분을 이야기합니다.

DB에서 데이터를 가져오고, 어플리케이션에 필요한 서비스를 수행하는 부분입니다.


1-2. View


뷰는 말그대로 사용자에게 보여지는 영역입니다.

JSP 파일이 주를 이룹니다. 모델에서 처리하여 보내진 정보를 보여주는 영역입니다.


1-3. Controller


컨트롤러는 모델과 뷰 사이에서 요청의 흐름을 컨트롤하는 부분입니다.

사용자의 요청을 받아들이면, 컨트롤러는 요청에 해당하는 비즈니스 로직을 호출하여 요청을 처리학나, 데이터를 가져오거나 처리하고, 결과를 뷰로 포워딩하여 사용자가 결과를 확인하게하는 기능을 합니다.



2. MVC 패턴 모델1과 모델2


MVC 패턴에는 모델1모델2가 존재합니다.

각각의 모델에 대해서 알아봅시다.


* 용어설명

DTO : Data Transfer Object의 약자로 데이터를 담아 움직이는 객체를 뜻합니다.

사용자가 입력한 데이터(회원가입 정보, 로그인시 계정 및 패스워드 등등)나, 사용자가 요청한 데이터(게시판 목록, 게시글 내용 등등)을 담아서 흐름을 따라 움직입니다.


DAO : Data Access Object의 약자로 데이터를 저장하고있는 데이터베이스에 접근하는 객체입니다.

사용자가 요청한 데이터가 DTO에 담겨져서 넘어오면 DAO는 DTO에 있는 데이터들을 이용하여 DBMS에 쿼리를 날려서 데이터를 저장하거나, 가져옵니다. 


2-1. 모델1


모델1은 컨트롤러 부분과 뷰 부분이 같이있다고 생각하시면 됩니다.

(이미지 출처 : http://blog.daum.net/gunsu0j/165)


위 이미지를 보시면 컨트롤러와 뷰가 같이 존재합니다.

사용자가 페이지에 접근하면, JSP 페이지 내에서 직접 비즈니스로직을 호출하여 요청을 처리하고 그 결과를 그대로 JSP페이지에 전달하여 사용자에게 보여지게 됩니다. JSP 페이지 내에서 스크립트릿(<% %>)으로 자바코드를 작성하여 비즈니스로직 클래스를 import하고, 메소드를 호출하여 나온 결과값을 그대로 처리한다고 생각하시면 됩니다.


* 장점

1. 개발 초기에 크게 설정이 필요가 없어 빠른 개발이 가능하다.

2. 복잡한 설정이 들어가지 않기떄문에, 접근이 용이하다.


* 단점

1. 컨트롤러와 뷰가 같이 묶여있어 병행작업이 힘들다.

ex) 페이지의 비즈니스로직 부분과, 뷰 부분에 수정사항이 생겼을 경우, 비즈니스로직과 뷰 부분이 같은파일에 있기 때문에 작업이 순차적으로 진행되어야한다.

만약 SVN이나 git을 이용하여 코드를 공유할 경우, 각자의 PC에 있는 파일로 작업한 후에 커밋을 하면, 충돌이 일어나서 코드를 정리해주어야 한다. 이를 막기위해선 한사람이 수정을 끝낸후에 커밋을 하면, 다음사람이 커밋내용을 업데이트 받아서 작업을 진행하여야 한다.

2. 자바 코드와, JSP & HTML 이 섞이기 때문에 코드가 복잡해진다.




2-2. 모델2


모델2는 모델1에서 뷰와 컨트롤러가 나뉘었다고 생각하시면 됩니다.

(이미지 출처 : http://blog.daum.net/gunsu0j/165)


모델1 이미지와 거의 비슷하지만, 컨트롤러와 뷰가 분리되어있는것을 볼 수 있습니다.

모델2로 작업을 진행할 경우 모델1에서 복잡했던 코드는 한층 간결해집니다. 사용자의 요청을 컨트롤러가 받아서 비즈니스로직을 호출한 후에, 처리된 결과를 컨트롤러가 뷰로 포워딩해줍니다. 이로서 뷰는 넘겨받은 결과에 대한 화면을 보여주기만 하면 됩니다.


* 장점

1. 모델1에 비해서 코드가 한결 간결해진다.

2. 분리된 코드로 인하여 유지보수가 편해진다.

3. 확장이 용이하다.


* 단점

1. 개발 초기에 설정이 필요한 부분이 모델1보다는 많기때문에 실질적인 작업이 들어가기까지 시간이 걸린다.

2. 개발자가 모델2 아키텍쳐에 대한 이해가 필요하다.

(모델1 역시 이해가 필요하지만, 그보다 더 수준높은 이해를 필요로 한다.)

3. 코드가 분리되면서 관리해야할 파일이 많아진다.





'개발공부 > JAVA / JSP' 카테고리의 다른 글

[JAVA] 메소드 오버로딩 & 오버라이딩  (0) 2015.08.18
:

[Spring] 06. Spring security 적용하기 (2)

개발공부/Spring 2015. 12. 6. 15:46

음... 어... 이어쓴다그러고 한달이 지났네요..ㅠ 게을러서 죄송합니다ㅠ

주말되면 그렇게 쉬고싶더라구요ㅠㅠ

변명좀 하자면 운동도 좀 하고 그러면 그냥 쉬고싶어서..ㅠㅠ

바로 시작하겠습니다ㅠ


이전내용 : http://comtk.tistory.com/20


2. 시큐리티 파일 생성


잠시 이전에 올려두었던 'security-context.xml'을 보고가겠습니다.





오늘은 여기서 이 있는 파일들만 설명드리겠습니다.

이전글에 전체 파일들에 들이 막 찍혀있는건 그파일들을 손댔다는뜻인데, http://comtk.tistory.com/10 이 글에 있는 내용의 작업들을 한겁니다. DB가서 데이터 가져오는 작업을 한것이죠. 어떤작업을 한것인지는 설명드리겠습니다.



2-1. CustomizeUserDetailsService


위 이미지에서 맨 아래부분을 확대해보겠습니다.


위 이미지를 보시면 'authentication-provider' 를 보시면 'customizeUserDetailsService라고 되어있습니다.

권한에 대한 처리를 'customizeUserDetailsService'에서 제공받는다는 의미로 생각됩니다.


첫번째 을 보시면 'loginAction 구현' 이라는 주석이 달려있습니다.

저 클래스에서 권한과 로그인에 대한 부분을 같이 처리하고있습니다.


해당 클래스의 내용을 확인해보겠습니다.




위에서부터 차근차근 설명해보겠습니다.

이 클래스는 'UserDetailsService'를 상속받아서 만들어야 합니다.

네 그래야만 해요. 그래야지 저대로 쓸수있어요. 따로 설정을 해주지않으면 스프링은 저 클래스를 사용해서 권한 및 로그인에 대한 처리를 한다고 알고있습니다. 그래서 클래스를 상속받아서 메소드를 입맞에 맛게 오버라이딩 한 후에 사용해야 합니다.


그 다음으로 변수들을 보겠습니다.


이 변수들은 사실 꼭 필요한것은 아니지만.. 잠시후에 계정의 권한을 위해서 만들어둔 변수들입니다.

위에서부터 하나씩 설명하지면 '사용 가능한지', '계정이 만료되지 않았는지', '자격이 만료되지 않았는지', '계정이 잠기지 않았는지' 체크하는 변수들입니다.


그 다음줄은 사용자가 입력한 계정명으로 해당 계정을 찾아서 가져옵니다.

그 아랫줄에서는 그 계정에 대한 상태를 가져와서 if문에서 하나하나 비교해서 상태에 맞게 계정정보를 설정해줍니다.


다음줄로 넘어가겠습니다.



저는 권한을 DB에 저장하여 사용하고있습니다.

DB에서 권한목록을 가져와서 권한을 추가해줍니다. 위 이미지에서 가지고있는 권한중에 'Anonymous'가 있을경우, 권한목록을 따로 생성하지않는것을 볼 수 있습니다. 이는 위 내용은 손님이 아닌 그 이상의 권한을 가진 사람들에 대한 권한처리를 위해 작성된 것임을 알려드립니다. 각 프로젝트의 특성에 맞게 권한을 부여해주시는것이 바람직합니다.


이제 설정한 권한 및 계정상태를 member에 담아서 리턴해줍니다.


이 과정이 끝나면 로그인이 되거나, 로그인에 실패하거나 둘중 하나의 상황을 맞이하게 됩니다.


먼저 성공했을때의 상황을 보겠습니다.



2-2. CustomizeAuthenticationSuccessHandler


맨 위 이미지에서 두번째 에 해당하는 클래스입니다.

로그인이 성공했을 경우를 보여줍니다.



이 클래스 역시 다른 클래스를 상속받아서 사용합니다.

저는 로그에 '성공' 이라는 텍스트를 찍고 메인페이지로 이동하도록 작업했습니다.



2-3. CustomizeAuthenticationFailureHandler


맨 위 이미지에서 세번째 에 해당하는 클래스입니다.

로그인이 살패했을 경우를 보여줍니다.


이 클래스 역시 다른 클래스를 상속받아서 사용합니다.

저는 로그에 '실패' 라는 텍스트를 찍고, 어떤이유로 로그인에 실패했는지 로그를 남깁니다.

이후 페이지는 다시 로그인페이지로 이동합니다.


2-4. encoder


이부분은 따로 파일을 만들지 않고 기본 스프링 인코더를 사용했습니다.

그러나, 따로 암호화 모듈을 사용하여 사용하셔도 됩니다.


'class'부분을 수정하여 사용하시면 됩니다.



3. 부가적인 설정


자 이제, 로그인 및 계정에 대한 권한설정 부분을 하였습니다.

그럼 이제 권한을 사용하여야 하는데... 어떻게 사용할까요...

손님이 접근가능한 부분과, 관리자가 접근가능한부분등 각 권한에 따라 접근 및 행동에 제약이 있어야지, 그렇지않으면 권한이 의미가 없습니다.




을 보시면 '@secured("ROLE_USER")'가 보이실겁니다.

이 한줄로 사용자의 접근을 통제할 수 있습니다.

위 이미지처럼 메소드 위에 써놓으면 해당 메소드는 저 권한이 있는 사용자만 접근이 가능하게 됩니다.

그러나, 메서드별로 해놓으경우 각 메소드마다 다 써줘야하는 번거로움이 있습니다.

class 위에 적어놓으시면 클래스 내의 모든 메소드는 선언되어있는 권한이 있는 사용자만 접근 가능합니다.

그렇기때문에 권한 및 기능별로 클래스를 잘 나누어 사용하는것이 좋습니다.

그럼 한줄만 추가 및 수정하는것으로 사용자의 접근을 통제 가능하게 됩니다.


이외에도 여러가지 설정이 더 있겠지만, 이정도면 기본적인 로그인 및 권한, 접근제어등에 대해서 사용이 가능하다고 생각됩니다. 혹시 내용중에 틀린부분이 있다면 지적해주시면 감사하겠습니다. 그래야 저도 더 공부가 되니까요!!


다음번엔 무엇을 해볼까요.. 뭔가 더 있을텐데... 아참 스프링 4.0이 나왔다는데 그것도 날잡아서 시작해봐야겠어요!!

다른 카테고리도 글을 써야하는데 참... 할게많네요ㅠ 어 어떻게 마무리를 하지.. 음.. 다음에 또 봐요!!

































:

[Spring] 06. Spring security 적용하기 (1)

개발공부/Spring 2015. 11. 14. 20:12

안녕하세요~ 오랜만에 'spring' 에 포스팅하는거같네요ㅠㅠ

사실 제가 시큐리티하다가 멘탈이 깨져서... 거의 못했었어요ㅠㅠ

뭐 다른일도 있긴했는데 그건 다 핑계고 메인은 시큐리티하면서 로그인만드는데 안되서 멘탈나갔지요ㅠㅠ

오랜만에 쓰는데 잘 정리할 수 있을지 모르겠습니다...

일단 시작해볼께요!!


1. 설정


1-1. 파일구조


빨간 점이 찍혀있는 파일 및 폴더는 이번에 설정하면서 수정 혹은 생성되는 파일들입니다.

이전거에 비해서 엄청나게 이미지가 길어졌어요...ㅠㅠ


1-2. security-context.xml


먼저 새로운 파일을 하나 만들꺼에요.

'security-context.xml'을 만들어줍니다.



잘 안보이시죠..ㅠ 눌러서 보세요ㅠㅠ

이거 내용이 짱짱많아요...ㅠㅠ 이거 언제 다하지... 하.. 얄개님이 그림그릴때 이런느낌이었을까ㅠㅠ

얄개님을 안다면 당신은 픽플! ㅋㅋㅋ 정신빠진소리나 하고 않아있지만 이해좀 해주세요.. 이거 어케정리해야할지 막막함 ㅋㅋ


1-2-1. http


자 일단 http 안에 내용들을 설명해볼께요.

이걸 주석안달고 굳이 설명하는 이유는 내가 공부하기위함입니다. ㅋㅋ

많으니까 좀 간략히 설명할께요.


auto-config : 저거를 ture로 하면 아무것도 가장 기본적인 로그인페이지가 생성됩니다. 저는 따로 페이지를 만들었기때문에 false로 했는데 true로 하고 만들어도 상관없어요. 원래는 권한부여에 대한 설정을 하는곳인데 true로 해두시면 그 설정을 기본설정으로 자동으로 설정하겠다는 뜻이 됩니다.


use-expressions : 이건 말로 설명하기가 좀 애매해서 링크를 첨부합니다. http://cafe.daum.net/_c21_/bbs_search_read?grpid=1DpW4&fldid=Pgo7&datanum=1


create-session : 이 값을 never로 셋팅한 경우, 사용자는 권한이 필요한 페이지로 접근시 로그인페이지로 리다이렉트되면서, 로그인하기 전까지 세션아이디가 생성되지 않는다고 합니다. 다른 여러가지 값들이 있읉터인데 찾아보지 않았어요. 필요하신분은 직접 구글링해보시는게 좋을거같습니다.


disable-url-rewriting : url에 jsessionid가 붙는것을 방지해준다.



1-2-2. intercept-url


url 패턴에 대한 설정이 가능합니다.


pattern : 요청을 중간에 가로챌수있는데, 그 가로챙 요정에 대한 패턴을 정의해줍니다. 해당패턴에 일치하면 가로채서 그에맞는 권한을 갖고있는 사용자만 접근 가능하게 할 수 있습니다.


access : 사용자가 접근할 수 있는 권한을 설정합니다. 저는 로그인페이지만 지정해서 모든사용자가 접근 가능하도록 permitAll로 설정하였습니다. 이 역시 다른값들이 많은데, 그에대한건 직접 구글링을 해보시기 바랍니다.



1-2-3. form-login


login form 및 login 자체에 대한 여러가지 설정을 할 수있습니다.


login-page : 로그인 페이지의 url을 설정합니다.


username-parameter : 사용자 계정명을 어떤 파라미터명으로 받을지 설정합니다. 이부분은 나중에 form안에 input 테그의 사용자 계정명을 입력하는부분의 name과 동일해야합니다.


password-parameter : 사용자 계정에 대한 패스워드를 어떤 파라미터명으로 받을지 설정합니다. 이부분 역시 나중에 form안에 input 테그의 패스워드를 입력하는부분의 name과 동일해야합니다.


login-processing-url : 로그인을 처리하는 url입니다.


authentication-success-handler-ref : 로그인 성공시 해당 클래스로 이동하여 성공시에대한 처리를 따로 할 수 있습니다.


authentication-failure-handler-ref : 로그ㅇ니 실패시 해당 클래스로 이동하여 실패시에대한 처리를 따로 할 수 있습니다. (로그남기기, 해당 계정명의 로그인 실패횟수 올리기 등등..)



1-2-4. logout


logout을 할경우 그에대한 설정을 할 수 있는 부분입니다.


invalidate-session : 세션을 삭제할건지 설정합니다.


logout-url : 로그아웃을 실행할 url을 설정합니다. 내용은 따로 구현하지 않아도 무방합니다.


logout-success-url : 로그아웃 성공시 리다이렉트되는 url을 설정합니다.


delete-cookies : jsessionid, remember-me 등 로그인에 관련된 쿠키 및 세션을 삭제합니다.



1-2-5. remember-me


remember-me는 자동로그인에 대한 내용입니다.


token-validity-seconds : 해당 세션을 얼마나 유지할지 설정합니다. 따로 로그아웃하지 않는이상 브라우저를 완전히 닫은뒤에 접근하여도 자동으로 로그인됩니다.


key : 이건 제가 좀 더 알아봐야할거같습니다. 시큐리티도 방금완성한마당에..




1-2-5. authentication-manager


로그인을 어떻게 처리할지에 대해 설정합니다.


authentication-provider에서 설정한 user-service-ref의 id를가진 클래스로 접근하여 로그인을 처리합니다.

로그인을 처리할때 password-encoder에 설정된 encoder를 이용하여 사용자가 입력한 패스워드를 암호화하여 비교하고, 해당 계정에 맞는 패스워드인지 확인합니다.




 1-3. web,xml




web.xml에 스프링 시큐리티를 설정한 파일을 추가해줍니다.


자 이렇게 설정파일은 전부 설정했습니다.

이제 내용만 채우면되는데... 그게 참 쉽지않네요ㅠㅠ

내용채우는 부분은 제가 좀 더 정리한 후에 하는게 나을거같아서 급하게 설정파일만 설정해놓고 마무리합니다.ㅠㅠ

이거한다고 돌아가진않아요ㅠㅠ 왜나면 이건 커스터마이징한상태를 올리는거라 저기서 <beans:bean>의 클래스드를 생성하여 안에 내용을 채워줘야합니다.


기본적인 내용 및 제가 구글링하시라고 했던 내용들은 아래 링크를 걸어둔 블로그에서 확인해보시면 편하실실겁니다!!


가장 기본적인 시큐리티 부분을 하시려한다면 안에 security_context.xml 안에 내용을 다 지우시고, 


<?xml version="1.0" encoding="UTF-8"?>

<beans:beans 

xmlns="http://www.springframework.org/schema/security" 

xmlns:beans="http://www.springframework.org/schema/beans" 

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans

           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

           http://www.springframework.org/schema/security

           http://www.springframework.org/schema/security/spring-security.xsd">



<http auto-config="true"  use-expressions="true">

<intercept-url pattern="/-" access="permitAll" />
</http>

<authentication-manager>
<authentication-provider>
<user-service>
<user name="guest" password="guest" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>


</beans:beans>

이것만 입력하신다음에 해보시면 기본 로그인페이지를 확인하실수 있습니다.

'프로젝트명/spring_security_login' 여기로 접근하시면 됩니다.


나머지내용은 얼른 정리해서 조만간 포스팅하겠습니다!!

다음에 또 뵈요!!






:

[HTML] <table> 사용하기

개발공부/HTML 2015. 11. 1. 20:08

안녕하세요 콤트입니다.

스프링으로 포스팅을 하다가 스프링 시큐리티에서 막혀서 낑낑대다가...ㅠ 잠깐 쉬었어요ㅠㅠ

뭐 나름대로 이것저것 하기는 했는데... 다 변명이죠 뭐ㅠ 그냥 게을러졌습니다ㅠ

그래서 이번에는 기분전환겸 HTML을 해볼까합니다.


처음엔 'table에대해서 해볼까합니다.


1. 특징

어떤 데이터를 줄과 칸을 딱딱 맞춰서 아주 깔끔하고 보기좋게 보여주는데 사용하기 편한 테그입니다.

'table로 작업하면 굳이 줄맞추려고 CSS를 작성하지 않아도 틀 안에서 자기들끼리 정리되어서 보여집니다.

그래서 'table을 이용하여 화면 레이아웃을 작성하시는 분들을 여럿 봤습니다.

'table > tr > td > table >tr ...' 이런방식으로 화면의 레이아웃을 작성하시는 분들이 있습니다. 물론 이렇게 작성이필요한 경우도 있을겁니다. 하지만 이건 용도에 맞지않게 사용된 예라고 생각됩니다. 물론 지극히 개인적인 생각이에요.



2. 장점 및 단점


2-1. 장점

'table은 데이터를 표현하는데 아주 잘맞는 테그라고 생각합니다. 데이터를 받아서 화면에서 깔끔하게 뿌려줄수있기때문이죠. 크게 손대지않아도 어느정도는 정렬이 되어있습니다. 여기서 CSS를 좀 이용해서 더 보기 편하게 혹은, 사용하기 편하게 조정할 수 있습니다.


2-1. 단

시간이 오래걸립니다. 'table은 화면에 표현되는시간이 상당히 오래걸리는것으로 알고있습니다. 특별한 액션이 있는 테그를 제외하면 탑3안에 들것으로 예상됩니다. 그래서 'table' 로 레이아웃이 잡혀있는 페이지는 접속하는데 시간이 더 오래 걸립니다. 제가 'table' 이 오래걸린다고 알고있어서 그렇게 체감되는것일지도 모르지만.. 적어도 저는 그래요.



3. 샘플

맨 아래 테이블과 관련하여 간단한 샘플파일을 하나 업로드해놓도록 하겠습니다.

너무 간단한것이라 다들 아실거같지만.. 그래도 혹여나 모르는것이 있을지도 모르는 분들을 위하여 업로드합니다.

잘 사용하지 않는것들도 간혹 보이실수도 있는데 알아두시면 유용해요.





소스

index.html



: