[Info]Tags categorized posts and contents patterns..

[AJAX] Ajax Code E xamples.. [Book] About the book.. [CSS] CSS Code E xamples.. [DB] Sql Code E xamples.. [DEV] All development stor...

2016년 2월 25일 목요일

[DEV]GET과 POST의 차이..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

다들 아시다시피 GET과 POST는 HTTP프로토콜을 이용해서 서버에 무언가를 전달할 때 사용하는 방식입니다. 웹개발자라면 당연히 알고 있어야 하는 사항이고 이걸 모르면 웹개발자체를 할 수가 없습니다. 상당히 기초적인 부분이긴 한데 잘 모르시는 분들도 있고 해서 미루고 미루던 포스팅을 이제야 합니다. ㅎㅎ GET과 POST 얘기를 하니까 예전 생각이 납니다. 예전이라고 해봤자 불과 2년밖에 되지 않았군요. 졸업을 앞두고 어떤 회사에 면접을 봤었는데 거기 이사님이 저에게 GET과 POST의 차이점이 뭐냐고 물었었는데 전 그땐 그게 무슨말인지도 몰랐죠. 떨어진 이유가 아마 그거이지 싶네요.. ㅎㅎㅎ(지금 생각하면 창피하군요)

어쨌든 처음 웹개발을 하게 되면 한번쯤은 생각하게 되는 문제 입니다. GET과 POST는 머가 다를까.... 하는.... 저도 처음엔 이게 상당히 궁금했습니다. 흔히 얘기하는 GET과 POST의 차이는 다음과 같습니다.(배울때 당시 이해하던 수준정도로만 적습니다.)

  • GET은 주소줄에 값이 ?뒤에 쌍으로 이어붙고 POST는 숨겨져서(body안에) 보내진다.
  • GET은 URL에 이어붙기 때문에 길이제한이 있어서 많은양의 데이터는 보내기 어렵고 POST는 많은 양의 보내기에도 적합하다.(역시 용량제한은 있지만)
  • 즉 http://url/bbslist.html?id=5&pagenum=2 같이 하는 것이 GET방식이고 form을 이용해서 submit을 하는 형태가 POST입니다.
처음 배울때 배운건 이정도뿐이었던 것 같습니다. 위 내용은 맞는말이긴 하지만 이로썬 해결안되는 문제가 있습니다. 그건 언제 GET을 쓰고 언제 POST를 써야 하는가에 대한 문제였습니다. 이건 신입일때 꽤 오랫동안 생각하고 있었던 문제이기도 하는데 딱히 가르쳐 주는 곳은 없었습니다. 지금와서 보면 책에 이부분에 대해 나와있는 책들이 상당히 많이 있습니다만 웹표준에서도 그러하듯이 현업의 개발에서는 "원래의 목적에 맞게 기술을 사용하고 있는가?"에 대해서는 크게 관심이 없고 "어떤 기술이든 기능을 구현할 수 있는가?"에만 관심을 가지는 것이 전반적으로 깔려있기 때문에 이런 부분에 대해서 관심을 가지는 개발자는 빈도수로 봤을때 그리 많지 않은 듯 합니다. 어쨌든 쉽게 말하면 클라이언트에서 서버로 데이터를 전송하려면 GET 아니면 POST밖에 없습니다.(사실 HTTP에는 PUT, DELETE등등 몇가지 더 있지만 그건 이글의 범주에서 벗어나서 언급하지 않습니다. 사실은 잘 몰라서 ㅡ..ㅡ HTTP 1.1 스펙 참조)

id를 넘겨서 게시판의 리스트를 가져온다고 하면 당연히 GET을 쓸 것이고 글을 작성한다고 하면 POST를 작성하는 것이 일반적입니다. 전달해야 될 양이 많을 경우에는 고민없이 POST를 쓰게 되지만 양이 많지 않은 경우에는 GET도 되고 POST도 되기 때문에 고민이 시작됩니다. GET을 써야하나 POST를 써야하나. GET을 쓰면 URL이 깔끔해 지는 효과도 있기 때문에 작은 양을 여러개 전달해야 할 경우에는 POST를 써야하는가 하는 고민을 하게됩니다.(상당히 명백한 차이인듯 하면서 실제로 개발하다보면 고민하게 되는 경우가 좀 있더군요. 저만 그런지 모르겠지만...)


Image by dbking via Flickr

여기서 위의 언급한 차이점 외에 GET과 POST의 중요한 개념이 있습니다.

GET은 가져오는 것이고 POST는 수행하는 것입니다.

이 개념만 잘 생각하고 있으면 상황에 따라서 어느정도 선택을 할 수 있습니다.(물론 그래도 좀 고민되는 예외상황들은 있게 마련이죠.) 좀 자세히 설명하면 GET은 Select적인 성향을 가지고 있습니다. GET은 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태등을 바꾸지 않습니다. 게시판의 리스트라던지 글보기 기능 같은 것이 이에 해당하죠.(방문자의 로그를 남긴다거나 글읽은 횟수를 올려준다거나 하는건 예외입니다.) 반면에 POST는 서버의 값이나 상태를 바꾸기 위해서 사용합니다. 글쓰기를 하면 글의 내용이 디비에 저장이 되고 수정을 하면 디비값이 수정이 되죠. 이럴 경우에 POST를 사용합니다.

이 얘기를 하면 어느곳에서든 반드시 예시로 나오는 것이 Google의 Accelerator 사건입니다.(대표적으로 예를 들게 이거밖에 없나봅니다. 항상 거론되는걸 보면...) Accelerator라는 것은 그이름대로 웹서핑의 속도를 향상시킬 목적으로 구글이 발표한 것이었습니다. 어떤 웹사이트에 갔을때 페이지에 있는 URL등을 Accelerator가 미리 모두 클릭해봐서 사용자가 해당 URL로 이동하기 전에 이미지등의 미리 받아놓을 수 있는 것들을 받아놓는 역할을 해서 웹서핑의 체감속도를 높여주는 것이 목적이었습니다. 캐시때문에 한번 방문한 사이트는 더 빨리 뜨는 것을 이용한 것이죠.

구글러들은 위에서 언급한 GET과 POST의 개념을 확실히 이해하고 이를 당연하다고 생각하는 사람들이었을 테니 이것이 문제가 될꺼라고는 전혀 생각지 못한듯 합니다. 하지만 현실은 그렇지 않죠. 실제 많은 개발자들은 GET과 POST를 용도구분없이 혼용해서 사용했고 Delete같은 곳에도 GET방식을 편의대로 이용한 것입니다. Accelerator는 이것을 구분하지 못하니 URL만 보였다 싶으면 냅다 클릭을 해댄 것이고 사용자가 클릭한 것이 아닌 Bot이 직접 URL로 접근해버리자 해당 데이터들은 Delete를 수행해버려서 메일이나 게시글이 마구 지워지는 사태가 발생하였습니다. 좋은 의도였는데 상당히 안좋은 결과가 되었죠. 우리가 모두 이걸 지켰다면 훨씬 좋은 웹 환경이 됐을 텐데요.

그리고 가져오는 곳에 GET을 사용해야 하는 이유가 하나 더 있습니다. 얼마전에도 관련해서 포스팅한 적이 있지만 웹의 핵심이라고 할 수 있는 Link문제입니다. 기본적으로 웹에서 모든 리소스는 Link할 수 있는 URL을 가지고 있어야 합니다.(퍼머링크(permalink)퍼머링크라면 더 좋겠지만 꼭 퍼머링크가 아니라고 하더라도) 그래야 Link를 할 수 있으니까요. 쉽게 말하면 어떤 페이지를 보고 있을때 다른 사람한테 그 주소를 주기 위해서 주소창의 URL을 복사해서 줄 수 있어야 한다는 것입니다. POST를 할 경우에는 값이 내부적으로 전달되기 때문에 URL만 전달할 수 없죠. 글을 저장하는 경우에는 URL을 제공할 필요가 없기 때문에 POST를 해도 상관이 없는 것이고요.

다른 것들에서도 그렇듯이 GET과 POST도 그냥 만들어진 것이 아니기 때문에 스펙에 정의된 용도대로 사용한다면 위에 언급한대로 부가적으로 얻을 수 있는 이익이 많이 있고 전체 웹을 생각해도 올바르다고 생각합니다.
퍼머링크(permalink) 는 인터넷에서 특정 페이지의 고유한 URL 주소를 뜻한다. 이 주소는 어떤 상황에도 관계없이 항상 동일한 내용을 가지는 페이지로 링크된다는 의미에서, 고유(permanent)한 주소라는 뜻의 permanent link를 줄여 만든 말이다. 한국어로 고유링크, 고유주소 등으로 부르기도 한다. - Wikipedia 발췌

My Comment..
우선 나의 코멘트를 달기 전에.. 위에 취소선이 있는데 그 부분은 포스팅을 가져오면서..
내가 수정 했다.. 이유는.. 햄의 포스팅을 가져오면, 어지간한 링크는 다 클릭해보는데..
특정 사이트 내지는 블로그에 대한 링크는 사라져도 그냥 내비둔다..


고유성이라고 해야되나.. 수정은 안한다..
근데 해당 부분은 햄 블로그 내에서 본인의 글에 링크를 한 것인데..
따라가보니 글이 사라졌더라.. 그래서 해당 부분을 취소선으로 표시해두었다..


그럼 코멘트로 돌아가서.. 해당 글의 제목을 처음 봤을 때는.. 이 시점에서..
왠 get과 post를 설명하지라는 생각을 하게 되었는데.. 읽다보니..
역시나.. 내 생각이 좀 짧았다.. 나도 막연하게 get과 post 를 알고서 쓰는거지..
햄이 설명한것처럼.. 좀 더 상세하게.. 좀 더 명확하게 알고 있는 것은 아니었다..
[어찌보면 내가 블로그를 하고자 마음 먹은게 그런 이유였는데.. 내가 쓰기만 하는
것들에 대한.. 내 나름대로의 정리를 하고자 하는..]

과거에 햄의 글중에 그런 말이 있는데.. 기본이 참 중요하다는..
이 부분도 같은 맥락이라고 보여진다.. 엄청난, 화려한 기술을 알더라도..
그 밑에 깔리는 기본을 간과한다면, 큰 낭패를 볼 수도 있다..
그와 같은 점에서.. 이 글을 옮기면서.. 한 번 더.. 두 항목에 대한 정의와 쓰임새를..
좀 더 깊게 짚고 넘어가게 되는 좋은 기회였지 싶다..

 

[Book] 익스트림 프로그래밍 - 변화를 포용하라, 2판..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

익스트림 프로그래밍 - 10점
켄트 벡.신시아 안드레스 지음, 정지호.김창준 옮김/인사이트

산지는 꽤 되었는데 이제야 읽었습니다. 애자일에 대해서 약간이라도 관심있으시다면 한번 정도는 들어봤을만한 Extreme Programming(XP)에 관한 책입니다. 1판이후 5년이 지난후에 나온 2판인데 보통 2판은 1판의 오탈자나 약간의 변경사항을 가지고 나오는데 추천사등을 보면 1판에서 얘기한 XP이후 켄트벡이 5년동안 얻은 경험을 가지고 완전히 새로쓴 2판이나 다름없다고 합니다.(1판을 보지 않아서 얼마나 달라진건지는 잘 모르겠습니다만...)

최근 제가 관심가지는 분야때문에 그런 건지 모르겠지만 TDD부터 해서 많은 부분에서 켄트벡이라는 이름을 접하게 됩니다. 개인적으로는 한명의 개발자가 전세계적으로 개발이라는 분야에 이토록 큰 영향을 줄 수 있다는 것에 감탄을 하곤 합니다. TDD책에 이어 이 책에서도 켄트벡이라는 사람이 가진 생각과 사상에 감탄하게 되더군요. 이 책을 왜 이제야 읽었나 싶습니다.

켄트벡을 초기에 가치와 원칙을 강조합니다. 가장 중요한 가치를 강조하고 그걸 이루기 위한 실천방법들이 있고 그 가치와 실천방법을 잇는 원칙이 있습니다. 가치는 의사소통, 단순성, 피드백, 용기, 존중을 개발에 있어서 가장 중요한 가치로 두어야 하고 이를 위해서 인간성, 경제성, 상호이익, 자기유사성, 개선, 다양성, 반성, 흐름, 기회, 잉여, 실패, 품질 등등이 있습니다. 그 뒤에 보통 많이 알려진 XP의 실천방법에 대해서 설명하고 있습니다. 흔히 않고 있는 함께 앉기, 짝 프로그래밍, 활력을 유지할 수 있는 만큼만 일하기, 스토리 공유, 10분빌드, 일주일별 주기로 일하기, 지속적 통합, 테스트주도개발, 점진적 설계 등입니다. 각 단계에 대해서 자세히 설명하고 있고 여러가지 상황에 대해서 어떻게 적용을 해야 하는가를 잘 설명해 주고 있다.

책을 읽으면서 느낀 것은 보통 실천방법이 많이 알려져 있는데 실제로 켄트벡이 강조하려고 하는 것은 이 실천방법보다는 가치쪽에 있다는 생각이 듭니다.(물론 켄트벡말대로 너무 추상적이긴 하지만요)  그렇다고 가치만 죽~ 설명하면 말이 안되니까 그걸 지킬수 있게 실청방법을 연구해서 강조한것 인데 켄트벡의 의도와 다르게 우리는 이 실천방법에 더 집중하고 있는듯 합니다.(마음에 와닿는 문서안만들기 같은...)

XP는 절대 그런것이 아니더군요. 오히려 회사가, 조직이 요구하면 문서를 만들어야 한다고 하고 있습니다.(이 역할을 하는것이 PM이죠.) 우린 XP야 하고 독불장군으로 지내는게 아니라 성공적이 프로젝트를 위해서 모든 것을 인정하고 그것에 대해서 대응할 수 있는 극단적으로 적극적인 방법론 이라는 생각이 듭니다. 실제로 책에서도 "우리의 목표는 성공적이고 만족을 주는 인간관계와 프로젝트이지 XP클럽 회원이 되는 게 아니다(켄트벡)"라고 하고 있습니다.

책을 읽으면서 내내 많은 생각이 들었습니다. 어떻게 사람이 이렇게 현실적으로 생각할 수 있을까 하는 감탄과 함께 개발자가 가지고 있는 일반적인 폐쇄성 또는 개발중심적 사고까지도 깨져버리는 느낌이었습니다. 이런 아무도 보지 않을 문서작업을 하는 것에 짜증나곤 하지만 그렇다고 그거에 거부해서 조직 또는 인간관계가 무너지고 혼자서 개발만 하려고 하는것도 전혀 XP다운 생각이 아니었습니다.(좀 찔리는군요) 켄트벡이 말하고자 하는건 훨씬 크게 보는 것이었고 요즘 제가 처한 상황도 있고 해서 많이 공감이 갔습니다.

XP가, TDD가, SVN이 이렇게 좋은데 도대체 왜 안한다는거야?라고 생각하는 것이 아니라 이 팀에서 조금더 효율적으로 성공적으로 개발할려면 뭘 하는게 좋을까 라고 생각하는 게 맞는것 같습니다. 어느새 스스로 제 사고의 폭을 좁혀버렸던것 같은 생각이 들고 있습니다.


인상적인 몇마디...
"나는 다른사람들보다 똑똑하니까 내 능력을 발휘하려면 나를 혼자 내버려 두기만 하면 돼." 같은 사춘기적 앳된 자신감을 넘어서는 것에 대한 이야기다.

갈등이 없는 팀은 없다. 관건은 갈등을 생산적으로 풀 수 있는가다.

변화는 반드시 일어나기 때문에 문제가 되는 것은 변화가 아니다. 그보다는 변화를 극복하지 못하는 우리의 무능력이 문제다.
실용주의 프로그래머를 읽었을때도 그런느낌이 있었는데 "아~ 그렇구나"하고 이해하고 넘어갈 책은 아니라고 생각합니다. 이책을 보고 뭔가라도 해보려고 노력하는게 켄트벡이 바라던 일이라고 생각합니다.(현실은...)

개인적으로 애자일이 약간은 이상론이라고 생각합니다. 온갖 칭찬을 써놓았지만 XP도 아직은 약간 같은 생각을 가지고 있습니다. 큰 그림이 아닌 실천방법에 대한거죠. 많은 부분에 공감하지만 우리의 현실은 책에 써놓은 것보다 훨씬 다양하고 많은 예외사항을 겪게 됩니다. 실천해야지 하면서도 "어떻게?"하면 좀 막막한게 사실입니다. 하지만 그 의도자체는 크게 공감하고 있기 때문에 계속 고민하고 노력을 하면 뭔가 더 보이지 않을까 합니다. 이제 막 XP에 발을 들여놓은 입장이니까요...

[Book] Inside SQL for Beginner..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Inside SQL for Beginner - 4점
권순용.김규태 지음/(주)마소인터렉티브

월간마소의 메일을 받고는 홍보문구에 맘이 좀 와닿았던지 예판인가로 구입했었던 국내 서적입니다. 읽어본 느낌은 책 제목을 잘못지은게 아닌가 싶습니다. Inside SQL, 가장 쉬운 DB와 SQL 이야기, SQL 필독서... 이 책 표지에 써있는 문구들입니다. 하지만 이 책은 오라클 책입니다. 별로 언급은 안하고 있지만 실제로 내용은 모두 오라클을 설명하고 있습니다. 물론 데이터베이스란게 ANSI라는 표준이 있기는 하지만 ANSI만 가지고 설명하기는 한계가 있기 때문에 아예 특정벤더의 데이터베이스를 표방하고 책을 만들던지 아니면 ANSI를 기준으로 설명하지만 설명의 용이성을 위해서 하나의 데이터베이스를 가지고 예를 들면서 설명하는 것이 일반적이라고 생각합니다.

하지만 이 책은 제목에서는 마치 모든 데이터베이스에 적용할 수 있는 지식을 가르쳐 줄듯 하지만 내용은 오라클로 철저하게 타겟팅 되어 있습니다. 데이터베이스에 대한 얘기가 주제가 아니라 SQL이 주제이기 때문에 더 정확히 말하자면 오라클의 SQL인 PL/SQL에 대해서 얘기하고 있습니다. 더 큰 문제는 그렇다는 걸 별로 언급하고 있지 않는다는 것입니다. 이 책에서는 아주 초반에 ANSI표준이 있지만 각 데이터베이스가 각자의 SQL을 가지고 있다고 살짝 설명했을 뿐 PL/SQL이라는 단어는 단 한번도 등장하지 않습니다.

초반에 이책이 오라클을 기준으로 설명하고 있다는 것을 충분히 주지시켜주어야 함에도 오라클이라는 단어도 몇번 등장하지 않고 특정 상황에서만 언급하기 때문에 전체 내용이 PL/SQL이지만 마치 언급한 부분만 오라클에 대한 얘기처럼 느껴질 정도입니다. 이건 이 책이 for beginner라는 이름이 붙었듯이 초급자 용이라는데 더 문제가 있다고 생각합니다. 초급자한테 다 설명한다는게 쉬운건 아니지만 자기가 익힌게 오라클용인지도 모르고 배운다면 문제가 아닐까 싶습니다. JOIN등등 설명하는게 전부 PL/SQL로 설명하고 있습니다.

책의 내용은 Insde SQL for Beginner이라는 제목대로 초급자 용입니다. 아주 기초적인 내용으로 채워져있고 제목대로 대부분 SQL사용법에 대한 설명과 함수에 대한 설명정도입니다. 사실 아는것과 그걸 전달하는 것은 쉽지 않은 거라고 생각은 하고 있습니다. 특히 잘 아는 사람이 잘 모르는 사람을 위해서 설명한다면 더욱 그렇습니다.  이 책의 저자는 타겟팅을 초급자용으로 하면서 너무 많은 것을 전달하고 싶었던 것이 아닐까 싶습니다. 그래서 오히려 설명이 산만한 느낌이 없잖아 있습니다. SELECT 쿼리를 처음 사용법을 설명하면서 굳이 언급하지 않아도 될 서브쿼리얘기를 꺼네면서 뒤에서 자세히 설명한다고 합니다. 이 서브쿼리에 대한 언급은 실제 서브쿼리설명페이지까지 3번이나 언급합니다. 서브쿼리 쓸수 있는데 뒤에서 설명할꺼라고.... 제가 책의 내용까지 검수하겠다는 건 아니지만 SELECT...FROM의 사용법을 설명하면서 고급기술을 또 언급해 버리니까 더 헷갈리겠다는 생각은 좀 들었습니다.

이러한 상황 속에서 이 책의 원고를 살펴보니 SQL 기초부터 튜닝 및 설계 기본 개념까지 한 권으로 모두 익힐 수 있다는 점이 매우 반가울 따름이다.
-(주)러닝스페이스(www.bpan.com)대표이사 최용호-
이 책의 뒤에 붙어있는 추천사중 일부를 발췌한 것입니다. 저분이 누군지는 잘 모르겠지만 저 추천사를 과연 책을 읽고나 작성한건가 싶은 생각이 들정도입니다. 이책은 SQL만 얘기하고 있지 디비 튜닝이나 설계같은건 전혀 언급도 안하고 있습니다. 하나도 안반갑다는 얘기죠. 책 기획의 의도랑 실제 책을 지으면서 나온 결과물과 매치가 안되지 않았나 싶은 생각도 해봅니다. 책 표지의 문구인 "DBA 10년의 노하우가 담긴 SQL필독서"라는 느낌은 전혀없습니다. SQL과 함수의 사용법만 설명할 뿐 노하우나 이 책에서만 전달하고 있는 특별한 내용같은 것은 별로 없었네요.

[Tool]Eclipse 프로젝트 서버Root(/)에서 실행하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

보통 이클립스에서 톰캣등을 연결해서 웹프로젝트를 실행하면 서버루트밑에 프로젝트명이 붙어서 개발할때 상당히 귀찮습니다.

무슨 소리냐 하면 이클립스에서 TestProject라는 프로젝트를 만들고 톰캣을 연동해서(톰캣을따로 설치해서 Deploy형태로 하는 것 말고 이클립스에서 Run As..로 실행할 수 있도록...) 실행을 하면 http://localhost:8080/TestProject/index.jsp와 같은 형태로 실행이 되기 때문에 이미지나 form submit을 할 때 절대경로를 사용하려면 /TestProject/images/01.jpg와 같은 형태로 사용해야 되는데 최종적으로 Deploy될때는 TestProject밑으로 안들어가고 그냥 Root로 들어가는 경우가 많기 때문에 이점은 개발할 때 꽤 귀찮습니다.

그래서 /TestProject라는 경로를 핸들링하기 위해서 <%=CONTEXT_ROOT%>/images/01.jpg와 같이 상수 또는 변수로 만들어서 나중에 배포할 때 상황에 맞게 수정할 수 있도록 하곤 합니다.

이게 이클립스의 설정때문에 그런건줄 알았더니 이걸 수정할 수 있는 방법이 있었습니다.

사용자 삽입 이미지

Project를 처음 생성할 때 항상 무심코 Next를 누르던 과정 중에 Context Root를 설정하는 부분이 있었습니다. 기본값으로 프로젝트명이 자동으로 Context Root로 설정되는데 여기서 이렇게 설정되었기 때문에 톰캣실행시에도 Context Root가 /TestProject/가 되는 것입니다. 여기서 이 Context Root를 공란으로 만들면 Context Root가 /가 되고 톰캣실행시에도 http://localhost:8080/index.jsp와 같은 형태로 실행할 수 있습니다.


또한 이미 Context Root를 기본값인 프로젝트명으로 만들어진 프로젝트도 변경이 가능합니다.

사용자 삽입 이미지

해당 프로젝트의 [Properties] - [Web Project Settings]에서 Context Root를 변경할 수 있습니다. 이렇게 Context Root를 변경하였을 때는 수동으로 톰캣을 한번 껐다 켜야 적용이 됩니다. 그렇지 않고 Run As...로 재가동을 하였을 때는 404 error가 나타납니다.

My Comment..
첨에 포스팅 제목을 보고서.. 이게 먼소리지.. 했는데..
읽다보니.. 내가 종종.. 저 문제로 인해서.. naver 누님에게 물어보고..
수정해서 사용하던 부분들이었다.. 글 자체는 오래 됬지만, 아마도 처음 시작하는..
분들이나.. 단순히 디폴트로 사용하다가.. 문제에 직면하시는 분들에게는..
꽤나 유용한 팁이 될 듯하다.. [이렇게 써놓으니.. 꼭 내가 엄청 개발 잘하는..
사람 같아보이네.. ㅋㅋ.. 절대 아닌데 말이지.. ㅎㅎ..]

[Tool]Eclipse 실행시 JVM terminated 에러가 발생할 때..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/


뭐 큰 문제는 아닌데 항상 적어야지 하다가 이제야 적는군요. 제가 많이 사용하지 않아서 그런지 몰라도 Eclipse 3.2까지는 괜찮았던것 같은데 3.3 Europa나 3.4 Ganymede부터는 처음 설치하고 실행하려고 하면 다음과 같은 에러가 나며 실행이 되지 않습니다..

JVM terminated. Exit code=-1 이라고 나타나면서 다음과 같은 복잡한 에러메시지가 나타납니다.

사용자 삽입 이미지

이클립스가 설치된 폴더에 가면 eclipse.ini라는 파일이 존재하는데 이 파일을 에디터에서 열면 다음과 같이 작성되어 있습니다.

1
2
3
4
5
6
7
8
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256M
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m 

이 문제는 메모리 문제때문에 발생하는 거라고 할 수 있는데 7,8번 라인이 메모리가 설정되 부분인데 최소가 40M, 최대가 512메가로 되어 있습니다. 보통 메모리가 512는 충분히 넘는데도 불구하고 거의 이 문제가 발생하는데 정확하게 어떤 문제 때문에 512메가의 최대메모리가 인식하지 않는지는 아직 파악하지 못했습니다.

어쨌든 -Xmx512m를 -Xmx256m으로 변경하면 정상적으로 이클립스를 실행할 수 있습니다..

My Comment..
요 근래에는 겪지 못했는데.. 과거에는 꽤나 겪어서.. 나도 저런 수정을 많이 했다..
그런데 걍 소소하다고 생각해서 지나쳐버리는..
더욱이 그 때야.. 블로그 이런건 생각도 못했으니.. 더더욱 정리가 안됬지..

[Book]한빛 미디어 도서를 이용한 Java Roadmap..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

한빛미디어에서 "자신만의 자바 로드맵 만들기"라는 이벤트를 한다고 하길래 자바를 만진 시간은 그리 길지 않지만 이젠 약간 어떤 순서로 해야할지 감도 살짝은 왔고(맞든 틀리든... ㅎㅎ) 이벤트 응모하는 겪으로 한번 작성해 봅니다.

저는 웹개발만 하기 때문에 자바로드맵이라기 보다는 자바웹개발 로드맵에 더 가깝다고 할 수 있습니다. 이점 참고하시길 바랍니다. 제가 본 책도 있고 보지 않은 책들도 있습니다.

일단 웹개발을 하려면 모든 것 이전에 웹애플리케이션에서 가장 중요하다고 할 수 있는 HTML과 CSS를 알아야 합니다.

Head First HTML with CSS & XHTML 책표지
자바스크립트 for 웹2.0 책표지
Cascading Style Sheets 핵심가이드 책표지












결국 유저가 보는 것은 HTML파일이므로 HTML과 CSS, JS의 기초를 모르면 일단 웹개발은 전혀 할 수가 없다고 생각합니다. 이 기본정도는 알고 있어야  그위에 자바로 개발을 하던 디비를 연결하든 할 수가 있습니다. 자바개발자가 클라이언트개발까지 한꺼번에 하지 않는게 정상적이고 보통은 웹디자이너가 퍼블리셔가 HTML, CSS를 만들어지기는 하지만 결국은 서버개발자가 마지막으로 파일을 핸들링 해야하고 작은 회사는 html이나 css가 제대로 나오지 않아서 개발자가 손대야 하는 경우도 많고 자바스크립트같은 경우에는 경계가 좀 애매한 부분이 있기 때문에 개발자도 많이 손대야 하는게 사실입니다. 자바 스크립트 for 웹 2.0은 기초적인 내용을 다루고 있기 때문에 초반에 보기엔 괜찮다고 생각한다.

그 다음에는 슬슬 자바에 대해서 공부해야 하기 때문에 JSP를 봐야 합니다.

Head First Servlets & JSP 책표지
JavaServerPages 책표지
모델2로 다시 배우는 JSP 책표지












JSP는 Java를 웹페이지에서 표현하는 방법이기 때문에 가장 기본적이고 처음에 알아야 합니다. Head First Servlets & JSP은 SCWCD를 위한 서적이긴 하지만 JSP와 Servlets에 대한 기본적인 설명이 잘 나와 있기 때문에 여러번 봐도 도움이 될 필요가 있다고 생각합니다. 그냥 스크립틀릿을 이용해서도 개발할 수 있기는 하지만 서블릿과 합해지면서 MVC Model 1, MVC Model 2로 유지보수가 쉽고 구조적이 되도록 해야하기 때문에 패턴에 대해서도 같이 공부해야 합니다.

그리고 웹개발에서는 당연히 데이터베이스가 필요하기 때문에 데이터베이스에 대한 공부도 병행되어야 합니다.

아는만큼 보이는 데이터베이스 설계와 구축 책표지
Head First SQL 책표지
오라클 SQL 튜닝 책표지













업무영역별 데이터베이스 설계와 구축 책표지
Oracle SQL 책표지
30년 노하우로 녹아낸 오라클 9i, 8i 책표지












데이터베이스를 이 타이밍에 거론하기는 했지만 솔직히 데이터베이스 같은 경우는 두고두고 공부해야 할 부분이라고 생각합니다. 회사가 아주 크고 좋아서 쿼리를 짜주는 사람이 따로 있다면 모를까 그렇지 않다면 쿼리는 개발자가 직접 작성해야 하는 경우가 많기 때문에 알아야 합니다. 작은 곳이 아니면 DBA정도는 따로 있기도 하기 때문에 데이터베이스 구축부터 운영까지 하지 않기는 하지만 그래도 그런 부분이 데이터베이스의 기초이기 때문에 전반적으로 알고 있는 것이 쿼리를 짜는데도 도움이 된다고 생각합니다.

그리고 데이터베이스에는 MySQL, MS-SQL등 많은 디비가 있지만 자바하면 기본적으로 오라클을 디비로 생각하고 하는것이 일반적이기 때문에 자바개발을 하려면 오라클에 대해서 깊이 알고 있는 것이 도움이 된다고 생각합니다.

Head First Java 책표지
뇌를 자극하는 Java 프로그래밍 책표지
Java Servlet Programming 책표지












자바성능을 결정짓는 코딩습관과 튜닝 이야기 책표지
자바 퍼포먼스 튜닝 책표지
자바 프로그래밍 실전테크닉 300 책표지













이제 자바를 본격적으로 봐야할 때가 아닌가 싶습니다.(너무 늦었나요? ^^;;) 처음에는 아주 자바의 기초부분만 가지고도 JSP를 이용해서 Java웹개발을 할 수가 있었지만 서블릿도 많이 사용하게 되고 MVC Model 2도 사용하기 시작하면 자바개발의 비중이 높아지기 때문에 자바에 대한 공부가 거의 필수적이라고 생각합니다. 또한 이정도 타이밍에서는 스크립틀릿(<% %>)을 이용한 JSP개발은 지양하고 이제 EL과 JSTL을 사용해야 하기 때문에 실제적으로는 대부분의 로직은 서블릿과 자바쪽에서 하기 때문에 자바의 실력향상은 필수적이라고 생각합니다.

자카르타 스트럿츠 프로그래밍 책표지
스트럿츠 프레임워크 워크북 책표지
Spring 프레임워크












이제 프레임워크를 봐야합니다. 요즘 웹개발에서는 프레임워크를 사용하는게 일반적이고 스트럿츠잉 이젠 좀 지고 있기는 하지만 그래도 사업전반에는 아직 많이 깔려있다고 생각하고 있습니다. 요즘 대세는 Spring으로 가는듯 하더군요. 회사에서 사용하는 프레임워크를 따라 공부해야 하기는 하지만 기초를 어느정도 닦았으면 프레임워크를 이용해서 자바웹개발을 향상시켜야 하고 프레임워크에서는 많은 개념과 기술들을 제공하고 있기 때문에 프레임워크를 공부하면서 많은 것을 얻을 수 있습니다.

윈도우프로젝트 필수 유틸리티 책표지
이클립스 프로젝트 필수
이클립스 기반 프로젝트 필수 유틸리티 책표지












관련 툴에 대한 지식도 쌓아야 합니다. 기본적으로 자바개발하면 이클립스를 사용하고 그외에 넷빈즈나 IntelliJ같은 툴들이 있기 때문에 이런 IDE에 대해 잘 파악하고 있으면 개발속도를 크게 향상 시킬수 있습니다. 그 외에 형상관리는 하는 CVS, SVN 그리고 빌드툴인 Ant, TDD를 위한 JUnit와 통합툴등 개발자가 개발에만 집중하고 실수를 줄일 수 있도록 하는 다양한 도구들이 많기 때문에 이런 부분에 대한 익숙해지는 거나 공부는 개발을 공부하는 내내 병행되어야 한다고 생각합니다.

자바와 XML 책표지
XML 파워레퍼런스 책표지
자바웹서비스 책표지



.








XML은 다양한 용도로 사용되기 때문에 XML에 대한 공부를 해야합니다. 최근에는 REST때문에 약해지긴 했서도 아직은 꽤 비중이 있다고 생각하는 웹서비스를 공부해야하고 거기에는 필수적인 XML도 파악해야 합니다. 이런 부분도 파악하고 있어야 더 수준 높은 개발자가 될 수 있다고 생각합니다.

웹개발이라는 것 자체가 워낙 많은 부분이 필요하기 때문에 로드맵으로 정리하는게 쉽지 않군요. 더군다나 저도 아직 다 나아가지 못하고 생각만으로 잡아놓은 부분도 같이 작성하려다 보니까 더 어렵네요. 기본적으로 자바웹개발이라는 것을 중심으로 로드맵을 작성하였습니다. 제가 잘못 생각한 부분이 있으면 지적해 주시면 감사하겠습니다.

한빛미디어 설문
1. 현재 하시는 일은 무엇인가요?
        ASP와 자바를 다루는 웹개발자입니다.(다른건 못하고 웹개발만 해요.. ㅎ)
2. 로드맵에서 각 단계별로 같이 보면 좋은 책이 있나요?
       책을 이용한 공부외에도 각종 블로그나 개발사이트를 통해서 실시간적인 개발에 관한 정보를 입수하면서 최근에 트랜드를 이해하는 것이 중요하다고 생각합니다.
3. 로드맵에 대한 자신의 생각을 적어주세요.
     다른 사람의 로드맵을 그대로 따라하기 보다는 초기엔 참고하고 따라하면서 점점 자신만의 로드맵을 구상하는게 좋다고 생각하고 있습니다.

My Comment..
이 포스팅의 목적은 어차피 햄 입장에서 봤을 때는.. 이벤트에 목적을 두고..
두루두루 목적으로 작성을 했는데.. 위에 나열된 책들을 보니.. 한.. 20% 본건가..
나도 책을 참 멀리하긴 한다.. ㅎㅎ.. 

이벤트는 어차피 사골국 시적인.. 이 글을 갖고온 이유는.. 
내가 햄의 블로그를 거의보고..
나중에 내 포스팅도 하는 와중에..
어떠한 특정 파트에서 책이 필요할 때 참고를 하기 위해서..
[Book] 카테고리도.. 같은 맥락이라고 보면 될듯한..





[Tool]Ubuntu 8.10에 Ruby 설치하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

요즘 노트북의 활용성을 높이려고 Ubuntu를 설치해서 이것저것 하고 있는데 그중 하나가 RoR개발을 우분투에서 하는겁니다. 전에 책 예제를 따라할때는 InstantRails를 이용해서 그냥 했었는데 리눅스의 특성도 그렇고 RoR개발은 콘솔을 잘 활용하는게 더 좋은 것 같아서 처음부터 하고 있습니다.

그래서 일단 Ruby를 설치해야 되는데 윈도우즈랑 많이 달라서 많이 해매고 있습니다. "프로그래밍 루비"를 보면서 따라하고 있는데 이 책에선 많은 리눅스가 루비를 포함하고 있다는데 Ubuntu 8.10에는 포함되어 있지 않았습니다. 그래서 설치를 시도했는데 제가 리눅스에 많이 익숙하지 않은 관계로 결과적으론 설치했지만 중간에 필요없는 과정이 있을 수도 있습니다.

일단 좀 익숙한 우분투의 시냅틱 꾸러미 관리자를 이용해서 루비를 설치했습니다.

사용자 삽입 이미지

이것저것 시도하다가 결국은 다 설치했습니다. ruby는 1.8버전을 사용했는데 결국 해결은 이 설치로 해결하지 않았기 때문에 상관없을것 같다고는 생각하지만 확인하지 못했기 때문에 제가 설치한 루비관련을 함께 올립니다. 나중에 Ubuntu를 재설치하게 될때 다시 테스트해서 정리하게 되면 다시 포스팅을 수정하도록 하겠습니다.

사용자 삽입 이미지

이렇게 다 설치했는데도 불구하고 터미널에서는 루비가 제대로 설치되었는지 확인하기 위해서 ruby -v 를 입력해서 설치되어 있지 않았다고 자꾸 나옵니다. 그래서 책도 찾아보고 인터넷도 찾아봤는데 딱히 해결법을 찾지 못했습니다. 근데 역시 컴퓨터를 믿었어야 했든데..... 해결은 아주 가까운 곳에 있었습니다. 터미널에서 ruby가 설치되어 있지 않다고 나오면서 알려준 명령어가 바로 해답이었습니다.(우분투는 똑똑하군요 ㅡ..ㅡ)

사용자 삽입 이미지

sudo apt-get install ruby 명령어를 사용해서 ruby를 인스톨하니까 정상적으로 잘 설치가 되었습니다. 위 스크린샷처럼 ruby -v명령어로 1.8.7버전이 잘 설치되었습니다.


이번엔 대화형 루비 셀인 irb를 설치해보겠습니다. irb도 루비와 설치가 동일합니다.

사용자 삽입 이미지

똑같이 irb가 설치되어 있지 않다고 나오는데 sudo apt-get install irb 명령어를 통해서 설치를 하면 irb가 정상적으로 실행되는 것을 볼 수 있습니다. 정리하고 보니까 아주 쉬운과정인데 처음 해보느라고 고생을 꽤 했네요. 역시 모르면 몸이 고생할 수밖에 없군요.(터미널을 반투명하게 해놔서 캡쳐화면이 깨끗하진 않군요. ㅡ..ㅡ)

이 설치명령어는 반드시 su권한을 가지고 해야되기 때문에 sudo를 반드시 입력해야 합니다. 해보진 않았지만 그렇지 않으면 ruby를 사용할 때마다 su권한이 필요하다고 하더군요.

[CSS]CSS의 Media Type에 대해서..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

언젠가 부터 CSS를 불러들이는 소스에서 Media Type를 지정하는 것을 봤다. 처음 본건 이 블로그 엔진이기도 한 TextCube에서였던것 같다. CSS는 이런 자원에 대해서 설명되어 있는 책을 찾기가 쉽지 않아서 궁금하면서 그냥 미루고 있었는데 이번에 알게 되었다.

1
2
<link rel="stylesheet" media="screen" type="text/css" href="/skin/balance_black/style.css" />
<link rel="stylesheet" media="print" type="text/css" href="/skin/balance_black/styles/print.css" />

이 블로그에서도 CSS가 위처럼 지정된다. 여기서 media가 screen이나 print로 지정되어 있다. 이 Media Type를 얘기하는 거다.

all : 모든 종류의 장비
aural : 목소리나 사운드에 대한 장비
braille : 점자 피드백 장비
embossed : 페이지 점자 프린터
handheld : 소형 또는 휴대용 장비
print : 프린터
projection : 슬라이드 같은 프리젠테이션
screen : 컴퓨터 화면
tty : 텔레타이프나 터미널 같은 고정간격 글자를 사용하는 미디어장비
tv : 텔레비전 같은 장비

이건 프린터나 모바일용을 위해서 페이지를 따로 만들지 않고 페이지는 그대로 놔둔채로 CSS규칙만으로 각 장비에 알맞은 화면을 구성하여 보여줄 수 있는 것이다. 이중에 주로 사용할 것은 screen, print정도겠지만 지정만 잘 해놓으면 페이지 하나만 가지고 여러가지 접근성을 제공할 수 있으니 아주 편리한 거였군... ㅎ

미디어 타입은 대소문자를 가리기 때문에 소문자로 적어주어야 한다.

My Comment..
OMG 다.. 오 마이 가뜨.. 포스팅을 옮겨오면서..
머 이런게 있나.. media 는 어디에 쓰는 물건인고..?? 라는 생각을 했는데.. ㅋㅋ..
ㅡㅡ.. 된장.. 지금 일하는 BC 에서도 쓰고 있었다..

혹시나 해서 이클립스에서 검색해보니.. 있다..한 두개가 아닌..
은근 마니.. 쓰고 있더라.. 이런 이런.. 퍼블은 디자인팀에서 보내주면..
내가 개발해야 될 부분 내지는 틀만 맞추고.. 나머지 부분은 전혀 신경을 안썼는데..

이 글 덕분에.. 저렇게 선언하는 부분이 있었구나 하고 알게 되었넹.. ㅎㅎ..


[Book] 테스트 주도 개발 (Test Driven Development: By Example)..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

테스트 주도 개발 - 10점
켄트 벡 지음, 김창준 외 옮김/인사이트

몇년전부터 애자일과 함께 큰 이슈가 되고 있는 TDD. 드디어 책을 봤다. ㅎ 1년반동안 개발을 하면서 테스트의 중요성은 크게 느끼고 있었다. 아주 작은건 그나마 괜찮지만 조금만 규모를 큰걸 만들면 계속 제대로 돌아갈 것인가 하는 두려움이 있고 기능을 추가해가면서 매번 다 테스트를 할 수도 없고 공통모듈 수정이나 리펙토링을 할때는 특히 다른 사이드이펙트가 있을지 걱정되는 것은 별수 없는 일이다.

이때문에 완벽히는 아니더라도 이에 대한 안전장치가 있었으면 하는 마음이 계속 있었고 그것중 하나로 TDD에 대한 필요성을 꽤 느기고 있었고 TDD가 무엇인가 정도가 아닌 실개발에 TDD를 도입하고자 하는 마음으로 이 책을 봤다.

TDD세미나도 가본적 있고 그동안 좀 관심있게 지켜보고 있었는데(지켜만 봤다. ㅡ..) TDD엣 Driven의 개념을 내가 망각하고 있었던 듯하다. 내가 생각하고 있었던 것은 Development with Test 정도였던 것이다. 아주 명확한 개념인데도 어느새 개발을 위한 테스트 정도로만 생각하고 있었던 것이다. 이책에서는 그 개념을 확실히 설명해 주고 있다. 테스트부터 만들고 개발을 하는... 흠.... 말은 쉽지만....

켄트백의 이미지대로 장황하게 개념 설명하고 그런것 보다는 그냥 예제를 통해서 처음부터 끝까지 설명해주고 있다. 아주 간단한 예제부터 시작해서 TDD를 하는 것을 보여주고 TDD에서 핵심적으로 신경써야 되는 개념들과 패턴들에 대해서도 자세하게 보여준다. 초반에는 자바로 설명하고 중반부터는 파이썬을 이용해서 예제를 보여주고 있다.

뭐 당연한거지만 TDD는 간단한 테크닉정도를 넘어서기 때문에 이 책한권 보고 TDD를 적용하기는 어렵다. 책이 설명을 못했다는게 아니라 그만큼 TDD를 적용한다는게 기존의 개발방식 자체를 바꾸는 거라 쉽지 않을꺼라고 생각된다. 하지만 할수만 있다면 그 이점을 상당히 크리라고 생각된다. 몇년사이에 TDD도 꽤 자리잡아서 이것저것 테스트프레임워크도 많고 할만해 졌다고 생각한다. 물론 초기에는 도입에 상당히 어려움이 있을꺼라고 생각하고 여기있는 개념을 한방에 이해하기는 어렵지만 옆에두고 계속 참고하면서 몸에 익히면 좋을 듯 하다.

나도 이제 TDD 좀 해보자라는 생각에 기대하고 있다. ㅎㅎㅎ

[Tool]Ubuntu 8.10에 Aptana Studio 설치하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

요즘 리눅스에 좀 길을 들이고 있는 관계로 Ubuntu에 개발환경을 설정하고 있는데 Eclipse는 아무런 문제가 없이 설치가 됐는데 aptana Studio는 제대로 되지 않았다. aptana가 Eclipse 기반이기 때문에 동일할 꺼라고 생각했는데 사용하려고 Standalone버전을 받아서 설치를 진행하니까 설치과정에서는 아무런 문제가 없었지만 실행을 하니까 다음과 같은 에러메시지가 나타났다. (물론 이클립스를 설치했다고 쓴것과 같이 JRE는 이미 설치한 상태이다. JRE가 없으면 이클립스나 aptana나 돌릴수가 없다.)

Aptana Sudio 실행시 SWT 에러

Java의 GUI라이브러리인 SWT의 문제인듯 보인다. 워크벤치 설정후에 위와같은 메시지가 뜨고 이유야 어쨌든 SWT문제로 aptana Studio를 실행하지 못하고 종료되어 버린다.

위 리눅스는 Ubuntu 8.10 Intrepid Ibex인데 찾아보니 Aptana Studio FAQ에 해당 내용이 있었다. 링크에 사용법이 나오지만 방법을 정리하면 다음과 같다.

  1. Apnata Studio에 압축을 풀어준다. 위 링크에서는 /usr/local/aptana에다 풀라고 했지만 위치는 원하는 것 어디든지 별로 상관이 없다.
  2. xulrunner 1.8.*를 설치한다. XULRunner사이트에서 다운로드가 가능하다.
  3. xulrunner가 설치된 위치를 확인한다.
  4. runAptana라는 이름의 파일로 aptana의 환경을 설정하는 스크립트파일을 만들고 이 파일을 실행한다.
나같은 경우는 2번 과정에서 그냥 시냅틱 꾸러미 관리자를 이용해서 xulruner를 설치해 주었다.  편리한 시냅틱... ㅎㅎㅎㅎ

시냅틱 꾸러미 관리자 xulrunner 설치 화면

시냅틱을 이용해서 설치한 xulrunner은 /usr/lib/xulrunner에 설치가 되었다. 이 위치를 가지고 runAptana라는 파일을(꼭 파일명이 이럴 필요는 없지만...) 생성하고 에디터로 다음 스크립트를 입력한다.

1
2
export MOZILLA_FIVE_HOME=/usr/lib/xulrunner
/home/outsider/Utilities/aptana/AptanaStudio

MOZILLA_FIVE_HOME에 xulrunner의 위치를 설정해 주고 Aptana가 설치된 폴더의 AptanaSudio라는 실행파일을 지정하명 된다.(aptana까지가 폴더위치이고 AptanaStudio는 실행파일이다.) 이렇게 설정하고는 Aptana Studio를 실행할 때 항상 runAptana를 이용해서 실행하면 Aptana Studio가 잘 실행된다.

[HTML]form에 input type=text가 1개만 있으면 엔터누르면 서밋이 된다고???..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

지난주에 OKJSP에서 놀다가 신기한 질문을 봤다. "input type="text"에서 enter 를 누를 경우 알아서 메소드를 탑니다."라는 제목이었는데 가끔 내가 아는 내용에 대해서는 답변을 달기 때문에 제목만 보고 submit버튼 달려있거나 input type="image"가 있거나 그렇겠지 하고 들어가서 봤다.(질문하신 분을 무시한다기 보다 빈도수에서는 잘 모르시는 분들의 질문도 꽤 되기 때문에...)

소스를 한참 봤는데 아무런 이상이 없었다. 서밋버튼도 없는데 이게 서밋이 된다고? 설마~~ 하고는 넘어갔는데 좀 이따가 다시 그 글을 클릭해 봤더니 옆차기님이 답변을 달아 놓으셨다.

페이지 안에 input type="text" 하나만 있을때는 폼안에서 엔터를 치면 sumbit() 이 되어버리더라구요..
정확한 이유는.. 다른분이 자세히 설명해 주실겁니다.. ^^;;
input type="text" 에서 엔터를 실행했을때 실행을 막어버리거나..
보이지 않은 input type="text" 하나 만들어놓은 꼼수도 있는데...
.. 꼼수일뿐이 겠지요 ㅎㅎ...
더 깜놀....  input text가 1개만 있으면 엔터누르면 서밋이 되어버린다고? 설마~ 하고 Aptana를 켰다. 그리고 input text가 한개만 있는 HTML파일을 만들었다.

1
2
3
<form method="post" action="./new_file3.html">
    <input type="text" name="test" />
</form>

아무것도 없는 소스이다. submit버튼이 있을 경우는 상식적으로 당연히 엔터를 누르면 서밋이 발생해야 하지만 이게 왜....??? 근데 진자 Submit이 된다 ㅡ...ㅡ  버그인가? 하고 확인들어갔다. IE6, IE7, FF2, FF3, Opera, Safari, Chrome할 것없이 모조리 같은 현상이 발생한다. 이게 표준인가? 원래 한개만 있으면 서밋되게 만들어 놓은 것인가? selectbox나 radio, checkbox같은 게 있어도 상관이 없다. 그냥 input text가 한개 있으면 서밋되어 버린다.

궁금해 미치겠다...... 겁나 찾아봤다. 이런 문제(혹은 버그라고도 얘기하는데 버그는 아닌 느낌이다. 그냥 내 느낌에...)에 대한 언급은 있는데 해결책들만 좀 있지 명확히 왜 이런게 발생하는 지에 대한 얘기는 전혀 없다. 외국사이트도 좀 많이 찾아봤는데 영어가 짧아서 잘 안찾아지드라... 흠....

그래서 찬찬히 고민을 해봤다. 폼안에 input이 1개만 있다라... 단순히 생각하면 1개만 있으면 당연히 전송할려고 한거니까 그냥 바로 해주는건가? 싶었는데 또 그렇지도 않다. 그럼 라디오는? 셀렉트박스는.... 예넨 인풋아냐? 무조건 submit버튼이 있을때만 엔터에 반응하게 하면 통일된 인터페이스아닌가? 왜 이런 현상이 웹표준도 서로 제대로 못 맞추는 브라우저가 한결같이 지키고 있을걸까... 몇일 고민했는데 죽어도 모르겠다. 그냥 gg쳤다 ㅡ..ㅡ

어쨌든......
위의 OKJSP질문 답변에도 나왔지만 대부분의 내용의 해결책은 비슷하다. 가장 일반적인 게 form에 onsubmit()으로 자바스크립트 함수 걸어놓고 엔터키가 먹었을때 input이면 return false;로 submit을 막는 것이다. 머 가장 심플한 방식이다. 브라우저 호환성까지 생각할려면 소스도 복잡하고 해서 소스는 생략한다.

두번째 방법은 보이지 않는 input text를 두는 방법이다.

1
2
3
4
<form method="post" action="./new_file3.html">
    <input type="text" name="test" />
    <input type="text" style="display: none;" />
</form>

아주 단순한 꼼수로 해결을 한 방식이다. input text가 1개만 있을때 이런 현상이 나타나니까 2개 만들어주고 1개 감추어 준거다. 스타일을 visibility: hidden;로 할 수도 있지만 비져빌리티는 자리를 차지해서 디스플레이로 처리해 주는게 더 낫다고 생각한다. 이렇게 하면 input text가 2개라서 엔터쳐도 서밋이 발생하지 않는다.

2가지를 보았을 때 개인적으로는 두번째 방식이 훨씬 나은 방식이라고 생각한다. 효과는 동일하고 둘다 꼼수이기는 하지만 기본적으로 HTML로 해결할 수 있다면 자바스크립트를 쓰지 않고 HTML로만 해결하는 것이 접근성 면에서 훨씬 좋다고 생각하기 때문에.....

궁금해서 포스팅하긴 했는데 결과적으로는 아무것도 전달하지 않는 포스팅이 되어버렸다. 근데 사파리하고 구글 크롬은 인풋 텍스트가 2개라도 엔터누르면 서밋이 된다는거... ㅡ..ㅡ

덧) 이 문제대해서 좀 정확히 알고 계신 분이 있으면 관련 링크나 정보를 알려주시면 정말 감사하겠습니다.

[Book] RESTful 웹 서비스 - 웹 서비스의 진화..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

RESTful 웹 서비스 - 4점
Richardson, Leonard.Ruby, Sam 지음, 강정민 옮김/정보문화사

요즘 REST (Representational State Transfer)에 대한 얘기를 많이 들어서 당장 구현하지는 않더라도 실제 기술에 대해서 좀 파악해 놓을 필요가 있다고 생각해서 이 책을 보았다. 물론 다른 리뷰들을 보면 알겠지만 이 책에 대한 번역이 개판이라는 리뷰들이 대다수이다.

일단 번역에 대한 얘기를 해보자. 내가 이 책을 읽어본 느낌으로는 거의 처음 번역하면서 1차로 임시로 해놓은 것을 그대로 가져다가 인쇄해버린 느낌이다. 초반의 번역은 완전히 엉망이고 중반을 넘어가면서부터는 초반보다는 나아지지만 그래도 엉망이건 마찬가지이다. 다음을 보자.

대부분 웹서비스는 XML문서를 되돌려 보내준다. 그러나 더 커지는 숫자가 JSON-formatted문자열로 연속되면서 간단한 데이터 스트럭처를 되돌려준다. (이게 뭔 소린가? 둘째문장의 주어가 이상하자나... 앞의 문장과도 전혀 안이어지고....)

나는 신중히 Roy Fielding보다 깊게 다뤄보고 표준 내에서 W3C보다 더 멀리 나가본다. (대충 무슨 의미인지는 이해하겠지만 영어의 상용구를 어순을 그대로 번역한 느낌?)

애플리케이션은 리소스처럼 데이터의 흥미로운 면이 있다면 Addressable하다. (이건 어디 말이야..)

1990년대 중반까지 ftp://URI는 FTP사이트에 파일을 기술하기 위해 사람들은 ftp.example.com 위의 익명의 FTP session을 시작하라. (뭔 주어가 2개냐...)

PUT이나 DELETE요청은 idempotent해야 한다. (이걸 번역이라고 한건가? idempotent이 쉬운 단어도 아니고 영문을 그대로 사용할 필요가 있다면주석을 따로 달거나 해야하는거 아닌가? 결국"멱"이라는 얘기를 하고 싶은건데 그렇다고 다른 부분에서는 멱이라는 단어는 계속 사용하고 있고더 헷갈리게 영단어와 번역어를 혼용해서 쓰고 있다.)

대충 확 신경쓰이는 말만 적어봤다. 머 저런게 대표적이고 저 외에도 대부분의 말들이 혼란스럽게 번역이 되어 있다. 아주 주의깊게 보고 있으면 정확히 뭔 내용인지는 알 수 있는 부분도 있지만 전체적으로 이해가 잘 안되는 어순을 가지고 어려운 기술을 이해하려니까 개념은 자꾸 안드로메다고 가기 일수이다. 문장이 대부분 영어어순인 느낌이다. 번역이란 것은 영어를 한글로 하는 것 이상의 한국문화와 어법에 맞게 수정이 가해져야 하는데 이건 그런것이 없다. 쉽게 말하면 "나는 그녀를 좋아한다. 그녀는 옆집사는 여자다."라는 것 같은 처음 영어배울때 식의 번역같은 느낌이다. 가뜩이나 내용도 어려워 죽겠는데.. ㅠ..ㅠ

그럼 책 얘기를 해보자. 일단 다 보긴 했는데 REST의 개념 정도만 파악한 느낌이다. 번역이 크게 걸리긴 하지만 기술 자체가 좀 어렵다는 느낌도 있긴 하다. 흠. 그래도 이 책의 분량과 읽은 노력을 생각했을 때는 상당히 아쉬운 이득이다. 쩝;;;;

구성자체는 괜찮은 느낌이다. 저자가 나름대로 REST라는 것을 이해하기 위해 고심한 것 같고 책 범위 내에서 최대한 다양한 것을 중요도있게 다룰려고 노력한 느낌은 든다. 소스의 대부분이 Ruby on Rails라고 되어 있기 때문에 내가 이해는 못했지만 REST를 하면서 필요한 케이스에 대해서 다양하게 소스를 제공해서 개발자가 바로 이해할 수 있게 신경 쓴 느낌이다.

물론 이런 모든 게 번역으로 인하여 제대로 전달되지 않은 것은 한명의 웹개발자로서 아쉬운 일이고... REST라고 하면 선택할 수 있는 책이 이 책밖에 없다는 것도 안타까운 일이다. 그래도 뭐 아쉬운대로 REST를 사용하려면 하나 옆에두고 필요한 기술단위로 참고하면서 쓸 정도는 될것 같다. 일단 대안이 없으니까... 쩝;;;

[Tool]SVN(Subversion), Trac 백업하기..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

Trac이나 SVN을 사용하다보면 어떤 이유이던지 백업을 할 필요가 있어진다. 여태는 할 필요가 없거나 할 가치가 없거나 아님 사용하지 않거나였지만 이젠 백업이 좀 필요해서... 만약을 위해서이기도 하고 서버이전을 위해서 이기도 하고.....



Subversion 백업

사용자 삽입 이미지

여기서는 Visual SVN을 사용하고 있는데 경로만 좀 다를뿐 상관없을꺼라고 생각한다. 백업은 svnadmin.exe를 이용해서 하고 이 파일은 SVN Server가 설치된 경로의 bin폴더 안에 들어 있다.

svnadmin.exe hotcopy [저장소위치] [백업위치]

위와같이 실행하면 된다. [저장소위치]는 백업하고자 하는 프로젝트의 레파지토리 위치이고 [백업위치]는 백업을 어디다 할 것지이다. 위 이미지의 경우에서 [백업위치]는 C:\traback\까지만 만들어주면 된다. svn이라고 지정된 폴더는 위 명령어를 실행할때 자동으로 생성되며 svn폴더가 이미 생성되어 있으면 충돌나서 백업 실행이 되지 않는다.  백업은 그냥 파일 덤프뜬것처럼 똑같은 형태로 그대로 된다. 복구는 아직 해보지 않았지만 폴더구조가 똑같은 걸로 보아 그냥 프로젝트 만들어서 붙혀넣으면 되지 않을가 싶다.



Trac 백업

사용자 삽입 이미지


Trac백업도 SVN 백업과 거의 동일하다 트랙은 trac-admin.exe를 사용해서 백업하고 Trac을 쓴다는 것은 파이썬을 깔았을 것이므로 이 파일은 파이선 설치경로 아래 Scripts아래에 들어 있다.

trac-admin.exe [프로젝트경로] hotcopy [백업위치]

위처럼 명령어를 사용하면 되고 이면에는 hotcopy 명령어가 중간에 들어 있다. 프로젝트 경로는 Trac에서 백업하고자 하는 프로젝트가 지정되어 있는 경로의 위치이고 백업위치는 SVN과 마찬가지로 최종폴더는 자동생성하므로 미리 생성해 놓지 말아야 한다. SVN과는 다르게 Hotcopy done.라는 메시지가 나타나고 백업이 완료된다. 이것도 마찬가지로 파일을 그대로 덤프떠서 가져와버린다.

복구는 아직 안해봐서.. ㅡ..ㅡ

[Talk]소프트웨어 기술자 신고제?? 정치인이나 좀 관리하시지..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

원래 기술적인거나 사적인거 외에는 잘 포스팅 안하는데 이건 해야겠다.....

나라에서 소프트웨어 기술자... 쉽게 말해 컴퓨터 프로그래밍으로 먹고 사는 개발자들을 직접 나서서 관리해 주시겠단다.  자세한 얘기는 빈꿈emptydream님"소프트웨어 기술자 신고제 - 정부가 SW 기술자 경력 관리 한단다"를 보면 반대하시는 입장이긴 하지만 IT가 바라보는 소프트웨어 기술자 신고제라는 제도에 대한 생각을 잘 요약해 주신듯 하다. 자세히 알고 싶으면 위 링크를 따라가 보시고 간단히만 보고 싶으면 빈꿈님으로 부터 퍼온 아래의 만화를 봐주시면 되겠다.

빈꿈님읜 소프트웨어 기술자 신고제 설명 카툰
http://www.emptydream.net/2768

이게 내용이다. 공공쪽에 붙어먹고 있어서인지 이 제도를 작년에도 알고는 있었다. 자세히까지는 아니었지만.... 어쨌든 간에 그때는 분위기가 이런 분위기가 아니었고 이제 법안 올릴려고 본격적으로 하는건지 통과해서 시작이 된건지 웹에서 이 얘기가 많이 나온다.(대개 그렇듯 개발자는 그리 주류는 아니기에 그렇다고 메인 토픽에 올라갈 정도까진 아니다...)

솔직히 완전 이해타산적으로 딱 따져놓고 말하면 이 제도는 표면적인 내용만 봤을때는 나한테는 해가 될것도 없다. 그럴것이 난 대학교 4학년때 정보처리기사 따고 졸업했고 그리고 취업했고 경력1년 6개월차에 첫회사는 아직 안망하고 살아있고 정규직이다. 난 저기서 여러 조건을 잘 피해와서 내 경력을 인정받고 나라에서 넌 1년 6개월이야라고 인정해 줄 수 있다는 것이다. 훨씬 오래 일했어도 저 조건에 재수없으면 나랑 비슷한 연차 인정 받을수도 있다는 것이다. 그리고 난 정규직으로 차지하고 앉아서 그럭저럭 하다보면 내 연차는 꽉꽉 채워진다 이 말씀이시다.

그럼에도 난 저 제도를 죽도록 싫어한다. 어느 병진이 저런 생각을 했는지 모르겠다. IT의 일상의 연차뻥튀기를 막아보겠다는 생각만으로 저따위 제도가 나올수 없는것 같다. 지네가(여기선 공무원이나 정치인이겠지...) 보기에는 별 기술도 없어 보이는 것들이 연차 얼마다 해서 돈 받아가는게 눈꼴시러웠고 뭐 의논하면서 어려운말 써가면서 무시받는 것도 기분 안좋아서 한번 당해봐라라고 만들지 않고서야 저런 생각을 할 수 있는가 싶을 정도이다.

하나하나 조목조목 따져 보자는 것은 아니고 정보처리기사가 머 대단한 자격증이라고 그걸 기준으로 삼냐? 나 대학 졸업할 때 컴파일의 컴도 잘 몰랐다. 학점도 개판이다. 군대갔다와서 좀 바짝해서 겨우 3점 만들었다. 그래도 정보처리기사 땄다. 한번 떨어졌는데 왜 떨어졌냐고? 시험은 붙었는데 학점이 3학년 이수학점이 안되서 떨어졌다.(별소릴 다하네 ㅡ..ㅡ) 그리고 학점 채우고 다시 봐서 붙었다. 필기부터 실기까지 한 5시간 공부했나? 셤전날 저녁까지 놀다가 자기전에 좀 보고 자고 그러고 그냥 붙었다. 대개 떨어지면 방심해서 떨어졌지 어려워서 떨어지진 않을 시험이다. 비전공자에겐 어렵다지만 그래도 비전공자중에 가장 많이 따는 자격증중 하나가 정보처리 기사인걸로 알고 있다. 이걸 기준으로 한다고?? 미치고 환장...

일단 정부가 손수 날 관리해주겠다는게 맘에도 안들고 저건 경력 뻥튀기를 막기는 커녕 오히려 더욱 만들어 낼것으로 보인다. 정보처리기사 없이 고급으로 일하던 사람은 갑작스런 이런 상황에 IT떼려치는 사람이 허다할 것이고 개발의 개자도 모르다가 회사에서 서류찍어줘서 고급개발자 되는 사람들이 넘쳐날 것이다. 그리고 그런 애들이 어깨 힘주고 다니겠지... 고급이라고.... 그런 애들 밑에서 배우면서 또 본의아니게 허당 개발자들 나오는거고.....

지금도 공공SI보면 내 세금이 어떻게 쓰이는지에 눈물이 날 지경인데 이걸 더 막장으로 만들겠다고.... 순진한건지 멍청한건지..... 머 IT에 공공만 있는건 아니니까 세상이 바로 뒤집어 지지는 않겠지만 무슨 생각으로 만드는건지 정말 정말 궁금할 따름이다.....

올해부터 정보처리기사 응시료를 2-3배쯤 받으면 모자란 세금 충당을 잘 되겠다........ 쓸말은 많은데 정리도 잘 안되고 쓸수록 흥분되는것 같아서. 이만 자제를...... ㄷㄷㄷㄷㄷㄷㄷ

My Comment..
이 글이 햄 블로그 기준 2009년 2월 이다.. 그 때도 여전히 공공사업을 하는 첫 회사에..
있었을 때였는데.. 그 때 한참 이슈가 되면서.. SW 기술자 신고를 했었다..
서류 열심히 뽑고 맞추고 해서 말이지.. 근데 그 때는 크게 생각을 못했다..

그런데 지금 시점에서나.. 2009년에서 몇 년뒤에는 짜증이 나는 항목이었다..
햄 말대로.. 개발의 개자도 모르는 것들이.. 경력 채웠다고 고급이 되거나..
대학원 나왔다고, 자격증 꼴랑 하나 갖고 있다고.. 고급, 특급이 되곤 했으니..
[물론 나도.. 자격증에 대학원에 다 갖고 있고, 나오긴 했지만.. 내가 자격증을 따거나
대학원을 나온건.. 저 시점도 아니고, 요건을 만족하기 위해서도 아니었다..]

무튼 그런거 보면서 참 개탄 스럽고.. 우리 나라가 한심했었다.. 말로는 IT 강국이..
어쩌고.. 떠들고 다니니.. ㅋㅋㅋ.. 참 웃기지.. 근데 더 웃긴건.. 몇 년 뒤였으니..
2012년.. 후반기에.. 기술자 신고제도 폐지.. 단순히 경력관리용으로 쓴단다..

그동안 저놈의 SW기술자 신고제도 때문에 들어간 내 세금은 어쩔.. 짜증.. ㅎㅎ..
항상 우리나라의 국가예산은.. 다 멍청한 높으신 분들 덕분에.. 개같은 곳에 쓰인다능..
[저런 제도를 만드는 놈들은.. 개발이란 것을 알기는 할까.. 진정 궁금.. ㅡㅡ..]

각설하고.. 요새 어디선가 들었는데.. 더 황당하게도.. SW 기술 경력을..
요건이 만족하는 사람을 시험을 보고 등급을 매긴다는.. 얘기도 흘러나오더란..
할 일이 그렇게나 없나.. 좀 생산성 있고, 진정으로 미래 지향적인것에 투자가 되고..
개선이 되었으면 좋겠다.. 제발 좀.. 정력[정신력] 낭비 말고 말이다..

[Tool]오픈소스 MySQL 모델링 툴 :: DB Desinger..

출처 : Outsider's Dev Story https://blog.outsider.ne.kr/

웹사이트 작업을 하면 선행되어야 하는 것들 중 하나가 ERD이다. 다른 사람들은 어떤지 모르겠지만 보통은 ERD작업에서 대표적인 ERWin이기는 한데 워낙 비싼 녀석이고 회사는 불법소프트웨어 단속이다 머다 하면서 마땅히 해결책도 주지 않은채 ERD는 내놓아야하는 상황속에서 찾아낸 툴이 DB Designer라는 툴이다.(마침 프로젝트가 MySQL이기도 했다.)

사용자 삽입 이미지

DB Designer4Fabulous FORCE라는 회사에서 만든  모델링 툴로 MySQL에 최적화 되어서 만들어진 오픈소스 프로그램인데 다른 데이터베이스에도 사용이 가능하다. GNU GPL로 배포되고 맘대로 사용이 가능하다.(작년부터는 내 개발환경의 대부분이 오픈소스화 되어가고 있는데 좋은 현상이라고 생각한다.) 이 포스팅을 하면서 알게 된 것이 DBDesigner4가 MySQL Workbench로 대체되었다는 것을 알게 되었다. 이 대체되었다는 것의 정확한 의미는 모르겠지만 설명에 보면 fabFORCE의 창립자이자 DBDesigner4의 주도적 역할을 한 Michael G.Zinner이 MySQL Workbench를 만든 Sun Microsystems의 개발툴 팀을 이끌고 있기 때문에 앞으로의 개발은 Workbench로 진행된다는 의미로 보인다.(아직 Workbench는 안써봐서...)

어쨌든 DB Designer 4도 다운로드 페이지를 통해서 여전히 다운로드가 가능하다.(언제까지 제공할런지는 모르겠지만...)

사용자 삽입 이미지

ERWin과는 좀 다르긴 하지만 처음 깔아도 약간 만져보면 크게 부담감이 없을 정도로 생겨주셨다. 일일이 설명안해도 대충 머하는 지 알수 있을 정도이다.

사용자 삽입 이미지

[Options] - [DBDesigner Options] - [Database Options]에 가면 기본적인 ERD의 데이터베이스 타입을 결정할 수 있는데 옵션에는 여러가지 데이터베이스를 설정할 수 있다고 되어 있는데 막상 바꿀려고 해도 바뀌지 않는다. 소개에도 밝혔듯이 MySQL 최적화로 되어있어서인지 MySQL로만 ERD를 그릴 수 있다. DB연결해서 리버스엔지니어링해서는 다른 데이터베이스도 가능한것 같은데 기본적으로는 MySQL만 가능하다. DBDesigner Folk가 DBDesigner을 다른 데이터베이스에도 사용할 수 있게 빠져나온 거라는데 해봤는데 그것도 MySQL말고는 어떻게 하는지 모르겠더라...

사용자 삽입 이미지

메뉴는 다른건 크게 필요없고 핵심인 옆의것들만 보면 될것 같다. 맨위의 아이콘은 여러 테이블을 그룹화 해주는 Region아이콘이고 두번째가 가장 많이 쓸 테이블을 만들 아이콘이다. 그리고 아래의 3개가 1:n, 1:1, n:m의 관계를 설정해 주는 아이콘이다.

사용자 삽입 이미지

디비디자이너에서 그리면 위 화면처럼 그릴 수 있다. MySQL만 된다는 건 아쉽기는 하지만 아쉬운 환경에서 ERD 모델링정도 한다는 차원에서도 충분한것 같다. 파워포인트나 손으로 그릴수는 없지 않은가... ㅎ

사용자 삽입 이미지


[Display] - [Notation] 설정을 통해서 관계 아이콘의 다양한 설정도 가능하다. 보통은 Crows Foot이라고 되어 있는 형태를 나는 많이 쓰긴 하지만 그런거야 상황에 따라 다른거니까. 테이블에 대한 표현방식도 [Display] - [Table Columns]의 설정을 통해서 원하는 형태로 다양하게 표현할 수 있다. 다만 ERWin처럼 논리디비와 물리디비를 같이 만들어서 바꾸어가면서 볼 수 없다는 건 무척이나 아쉬운 점이긴 하지만 무료라는 점을 감안한다면 충분히 납득할 정도의 수준이라고 생각한다. 이젠 Workbench로 바뀌었다니까 다음부터는 Workbench를 써보려고 생각중....

My Comment..
흠.. 이런 Tool 이 있었구나.. DB 모델링 설계를 많이 해보건 아니지만..
그냥 기본 주어진 것에 대해서 살을 붙이곤 했는데..
항상 ERWIN 으로 하던지.. Rational Rose 를 사용해서 DB 설계를 했었던..

이런 새로운 Tool 이 있다는 것을 알게되서 글을 가져와본당..