[넋두리] 공부를 하다보니

넋두리 2015. 9. 13. 17:17

요즘 spring 공부를하면서 블로그를 작성하고있다.

틈틈히 공부 이외에 알고있던것도 정리해서 블로그에 올릴생각이다.


그런데, 진행하다보니 나에게 개발을 알려준사람과 너무 비슷한느낌이 든다 싶었다.

그냥 그사람에게 배웠고, 같이 오래 작업하다보니 그려려니 했는데, 오늘 spring + mybatis 설정을 공부하고, 블로깅하려고 하다보니 어느샌가 그사람이 설정해놓은것을 보고있더라. 보고있다기보다 복붙을 하고있더라..

물론 그냥 생각없이 복붙한건 아니다. 나름대로 검색해보고 궁금증을 하나하나 해결하면서 진행한거긴한데.. 


사실 나는 프로젝트를 진행은하면서 프로젝트 설정등은 내가 작업한적이 거의 없다...

같이 작업하던 사람이 설정을 다 해주고 개발을 들어가도 좋다고 알려주면 그 위에서 놀기만했지, 내가 그 판을 만든적이없었다. 그래서 지금 spring 공부도 하는거고... 이러다가 진짜 한번도 못해보고, 나중에도 못할까봐.

물론 이전에 한번도 없는건 아니지만, 그때는 그냥 '아 이거이거 필요한가보다' 하고 복붙만 해서 이게 뭔소리인지 알지도못하고 썼었다. 지금이 그때와 다른건, 내가 하나하나 검색해보고 이해해보려고하고있다는 정도??

그런데 나는 계속 복붙을 하고있으니, 공부를 한다기보다 복붙하는데 죄책감? 정당화? 하려고 그것들을 검색해가면서 작업하는 느낌이 든다. 갑자기 비겁해보임.. 그래서 지금 막 설정하다가 자괴감같은게 들어서 반성문쓰듯이 쓰고있는중이다. 뭔가 이러면 안될거같은 느낌이 드는데.. 


사실 다른사람이 작성한거 보고 그대로 복붙해서 따라하는거랑 크게 다를것이 없다고 생각할수도있다. 그런데 자주보던게 보기도 편해서 그런건지... 계속 그사람이 작성한거만 보게된다. 특별히 주석이 달려있거나, 설명은 없지만 어떻게 이렇게 동작하는지는 어느정도 이해가 간다. 이건 왜작성하였고, 이건 어디에 쓰는거고 등등.. 뭐 어직까지는 써보던거를 공부하는거니 그럴수있다 싶기도하고, 그사람이 이전에 설명도 좀 해주고, 이전이랑 조금씩 달라졌지만 그 과정을 봐서 그런건가 싶기도하고.. 모르겠다 그냥.. 일단 내가 좀 이해하는것도 이해하는거고, 오늘 작업한 내용을 올리는것은 한번 물어보고나서 결정해야겠다. 오늘 작업한건 내가한것이 아니라 그냥 복사붙여넣기 한것이니까.


형 그사람이라해서 미안. 적다보니 이미 다 '그사람' 이라고 해서 바꾸기 힘들었어..ㅋ

:

[Spring] 04. Spring + tiles 설정

개발공부/Spring 2015. 9. 9. 00:17

안녕하세요! 1주일만에 작성하는거같네요ㅠ

게을터러져서 참... 이러면 안돼는데 왜이럴까..ㅠ

헛소리 그만하고 바로 시작하겠습니다ㅠ!


1. tiles란?

 

화면을 구성하는데 있어서 하나의 파일이 아닌 여러부분을 따로 작업해서 하나로 묶어 화면에 보여주는것을 말합니다.

예를들어서 한 화면에 레이아웃이 header, content, footer로 구성되어 있으면 각 부분을 파일로 만들어서 여러 페이지에서 내용만 바꿔가면서 모든페이지에 header와 footer를 보여주는것이 가능합니다.

물론 하나의 파일에 전부 때려박아도 가능은하지만.. 뭔가 수정할때 페이지수만큼 수정이 필요합니다.

 

JSP에는 이미 include 기능이 있는데 굳이 tiles를 쓰는 이유가 있을까요?

저도 tiles를 전부 이해한게 아니라서 뭐라 설명은 못드리는데... 일단 include보다 편합니다.

그대신 사용하기전에 설정이 필요해요. 레이아웃 요소들부터 레이아웃의 틀까지 만들어줘야합니다.

 

편리함으로 예시를 하나 들어보면, 만약에 페이지수가 50장정도 되는 웹사이트가 있다고 가정합니다.

이 웹사이트의 header부분에 수정이 필요해서 header에 해당하는 jsp파일을 수정했습니다.

이럴경우 include와 tiles를 사용했을때 둘다 나머지를 따로 수정할필요가 없습니다.

알아서 모든 페이지들에 수정한 header가 적용되기 때문이죠. 그러나, 수정사항으로 header파일이 하나 더 생기게 된다면 어떻게될까요? 특정 페이지들에 대해서 새로만든 header파일이 적용되어야 한다면, 그페이지들 모두를 수정해야 할겁니다. 하지만 tiles를 사용하면 이런경우에도 크게 작업이 들어가지 않습니다. 이유는 설정부분을 설명하면서 차차 알아가보겠습니다.

 

2. 설정

 

자 이전에 올렸던 글에 이어서 계속 작업하도록 하겠습니다.

이전글은 아래 따로 링크를 걸어두었습니다.

[Spring] 03. Spring 프로젝트 생성 : http://comtk.tistory.com/7

 

2-1. 파일구조

 


 파일구조 입니다.

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

 

2-2. pom.xml

 

먼저 pom.xml을 보겠습니다.

 

 

 

pom.xml 에서 <dependencies></dependencies> 사이에 tiles dependency를 추가해주세요.

자 여기서  pom.xml은 뭐고 dependency를 선언하는이유는 무엇일까요??

 

pom.xml은 간단하게 설명하면 필요한 라이브러리를 추가하는곳 이라고 말씀드리고싶네요. 라이브러리들의 버전관리 등을 할수있어요. 그런데 사실 저도 잘 몰라요..ㅠ 공부할게 산더미입니다ㅠㅜ 일단 당장 필요한 부분만 설명드리면서 넘어가고있어요ㅠ 이후에 저도 다시 살펴볼 예정입니다ㅠㅜ!! 필요한 라이브러리를 추가하는 방법은 pom.xml<dependencies></dependencies> 사이에 필요한 라이브러리의 dependency를 추가해주면 됩니다. 그럼 나머지는 maven이 알아서 얍얍 하고 추가해줄겁니다.(인터넷 저장소에서 다운받아줘요!!)

배포판으로 export하면 라이브러리들이 추가되어서 쨔쟌! 하고 나옵니다.

 

2-3. root-context.xml

 

 

 

이미지가 가로로 좀 길어서 잘 보이실지 모르겠네요ㅠ

자 이번엔 root-context.xml입니다. root-context.xml를 열어보시면 아마 엄청 깨끗할겁니다. 저는 그랬어요.

자 그럼 아래 공간을 좀 주시고 <!-- tiles --> 아랫부분부터 </beans> 사이의 내용을 적어주시면 됩니다.

다 일일이 타이핑하셔도 되는데, 오타나면 에러나잖아요ㅠ ctrl+space 사용해서 자동완성으로 얍얍 하고 추가해주세요.

 

2-4. servlet-context.xml

 

자 이번엔 servlet-context.xml 입니다.

<beans:beans></beans:beans> 사이에 주석처리된 부분 아래 내용을 추가해주세요.

첫번째 bean은 아직 좀 더 공부해봐야 뭔가 말을해드리기 좀 애매하네요ㅠ 제가 아직 많이 못알아봤으니 패스ㅠ

두번째 bean은 tiles의 설정에 대한 class입니다. 아래 value 경로에 tiles에 대한 설정파일이 들어있다는것을 정의해주고 있습니다.

 

2-5. tiles.xml

 

이번엔 tiles.xml 입니다.

tiles에 대해 정의되어있는 내용입니다.

 

하나씩 살펴보면 먼저 맨 첫줄 name이 layout인 줄부터 보겠습니다.

definitiontemplate는 만드신 파일에 맞게 작성해주시면 됩니다. name은 편하신대로 해주시면 돼는데 이왕이면 의미있는걸로 지어주세요. aaa, asd 이런거 하지 마시구요.

먼저, nametiles-definitions에서 사용할 이름을 정의해놓은 것입니다. 뒤에 속성에 valuetemplate에 따라서 사용하는부분이 달라집니다.

template는 말그대로 템플릿 입니다. 레이아웃의 틀이되는 파일을 적어놓은 곳입니다.

어떤 모양으로 어떻게 설정할지는 각자 알아서 작성해주시면 됩니다.

제가만든 파일내용은 잠시후에 보여드리겠습니다.

 

두번째 <put-attribute/>를 보겠습니다.

보시면 template 안에 속성처럼 들어가있습니다. 이게 무슨말인가 하면, '해당 template에서는 이런 이름으로 이런파일을 가져다 쓰겠다' 라고 정의한 것입니다. 위에서 보시다시피 필요한만큼 정의해주시면 됩니다.

template이 정의되어있는 definition<put-attribute/>를 작성하면 해당 템플릿의 레이아웃에서는 고정적으로 보여지게 됩니다. 변화가 없이 모든페이지에 들어가는 header 또는 footer를 이런식으로 많이 설정해서 사용합니다.

 

그 다음 definition을 보겠습니다.

먼저 name을 보시면 name이 이상합니다. '*/*' 이라고 되어있는데 이게 무슨뜻일까요??

이것은 controller에서 return을 '*/*' 다시말해서 '경로/파일명' 이런식으로 넘겨주는데, 그에대한 패턴을 적어놓은 것입니다. 패턴이 name과 일치할경우 해당 definition이 캐치하여 그에맞는 content를 보여주는것입니다.

다음으로 definitiontemplate가 아닌 extends 라는 속성이 보입니다. 그 안에 값은 templatename값이 들어있네요. 이게 무슨의미일까요?

이건 해당 definition은 레이아웃을 설정하지 않고, 이미 설정되어있는 레이아웃을 사용한다는 의미입니다.

nameextends를 합쳐서 definition을 설명해보면 'name에 해당하는 패턴으로 controller에서 리턴을 해주면 extends의 값과 일치하는 레이아웃에 content를 보여주겠다' 가 되는것입니다.

 

자 그럼 그 안에 <put-attribute/>를 보겠습니다.

name을 보시면 'content' 라고 적혀있습니다. 그런데 이건 내용만있어요. header나 footer가 따로 없습니다.

그럼 이 파일이 보여질대는 header와 footer가 나오지 않을까요??

그렇지 않습니다. 위 definition에서 어떤 레이아웃을 사용할지 extends에서 정의하였고, 그 레이아웃에는 header와 footer가 설정되어있습니다. 그 레이아웃에 맞는 header와 footer이 같이 나오는겁니다. content는 해당 파일의 내용에 따라 계속 바뀌겠죠.

 

자 다음은 value를 보시면 '{1}/{2}.jsp' 라는것이 보입니다.

전에는 파일의 경로와 파일명이 적혀있었는데 이건 무슨의미일까요??

아까 definitionname의 패턴을 보면 '*/*'이었습니다. 이 패턴으로 결과가 오는 친구들을 캐치해서 contnet를 보여주는데, 이때 이 값이 '경로/파일명'이라고 위에 설명하였습니다. 이 경로와 파일명이 {1}{2}에 들어가는겁니다. 숫자는 *의 순서에 맞게 적어주시면 됩니다.

 

2-6. 레이아웃 및 기타 파일들

 

 

먼저 레이아웃이 되는 파일을 보겠습니다.

<tiles:insertAttribute>만 설명드리면 될거같네요.

나머지는 그냥 HTML이니 넘어가겠습니다. id와 <tiles:insertAttribute>의 name이 같아서 헷갈리실수도 있는데 달라도 전혀 지장없습니다.

 

<tiles:insertAttribute>가 작성된 부분이 아까 정의했던 파일들이 들어가는 부분들입니다.

해당 파일들이 어떻게 자기위치를 찾아가는지는 벌써 감이오신 분들도 있을겁니다.

아까 tiles.xml에서 name을 적어주셨는데, 그 name에 맞게 해당 파일들이 적용됩니다.

설정을 잘 하시면 레이아웃과 tile로 쓸 파일들을 여러개 만드시고 각각 해당 레이아웃에 맞는 각각의 타일들을 적용시키는것도 가능합니다.

 

tile들(header, footer)과 메인페이지를 보겠습니다.

내용이없으니 설명은 따로 적지않고 이미지만 올리겠습니다.

 

 

 

위에서부터 순서대로 header, footer, home 입니다.

 

마지막으로 controller에서(controller 하나밖에 없는거 다 알아요. 그거맞으니까 그거 열어보세요 ㅋㅋ) return'home' 에서 'main/home'로 바꿔줍니다. 이거는 제가 이미지를 준비 못했네요ㅠ

 

3. 결과화면

 

자 이제 설정은 다 했고, 결과를 보겠습니다.

 

 

위에 보시면 각각 파일들은 따로 작성되어 있는데 결과에서는 합쳐져서 나오는것을 볼 수 있습니다.

다음번엔 뭘할지 생각은 해뒀는데 금방 할수있을지 모르겠네요ㅠ

다음번엔 MyBatis를 적용해볼까 합니다.

다음번에도 열심히 적어볼께요!!

몇분이나 보시는지 모르겠지만... 많이들 봐주셨으면합니다 ㅋㅋ 다음시간에봐요!!


 

'개발공부 > Spring' 카테고리의 다른 글

[Spring] err-02. spring 한글 깨짐  (0) 2015.09.13
[Spring] err-01. @Autowired  (0) 2015.09.13
[Spring] 03. Spring 프로젝트 생성  (7) 2015.08.25
[Spring] 02. Spring 플러그인 추가  (0) 2015.08.24
[Spring] 01. Spring AOP  (0) 2015.08.23
:

[넋두리] 스프링3.2가 아니었어...

넋두리 2015. 9. 3. 11:04

이클립스에서 STS 받아서 룰루랄라하고 스프링 프로젝트 만들고나서 '이제 타일즈를 해볼까!' 하고

pom.xml에 타일즈 룰루랄라 집어넣고 해보자! 해서 servlet-context.xml 들어가서 tiles3을 해보려 했더니

에러가 똭!! 아 왜 에러지 내가 뭐 잘못했나 해서 여기저기 두리번 두리번...

ctrl+space 눌러가면서 해보니 tiles3이 아니라 tiles2는 무리없이 추가가 되네?!

 

아니 이클립스양반 이게 무슨소리요... 왜 안돼나여... 3도 해주세요... tiles3 쓰고싶어요... 뭐가다른지는 공부해봐야 할지만 그래도 쓰고싶어요... 높은버전 쓰고싶어요.. 이러고있는데

문뜩 tiles3은 스프링 3.2버전 이상부터만 된다는게 생각남.

 

아... 설마.. 안돼.. 제발 하느님.. 지저스... 하고 스프링 버전을 봤더니 3.1.1이네요... 으아.. 내시간... STS가 날 배신했어...

다른사람들 블로그 찾아가서 기웃기웃하면서 STS 받는거 보니 다들 3.2 잘만받더만... 왜 내 마켓에는 3.2가 안보이나...

3.2로 숫자 슥 바꿔봤더니 안돼서 그냥 스프링가서 이클립스 다운받고 재설정...ㅠㅜ

 

다시해봐야지!

 

 

 

: