웹개발시 소스버젼관리 툴 사용

망치의 이미지

일반적인 Apahce PHP MySQL 을 이용한 개발 및 운영환경에..
CVS 나 SVN 을 이용해 소스를 관리할경우 어떤 장점이 생기는건지 궁금합니다.

글구 서버는 리눅스에 개발환경은 윈도우고.. 작업마친뒤 ftp 로 서버에 업로드해서 덮어씌우는 식인데 요런 업데이트 과정은 그대로 두면서도 버젼관리를 적용할수도 있는건가요?

youlsa의 이미지

최소한 서로 엎어쓰는 경우를 피할수 있지 않을까요? 개발자 2명이 서로 동일한 곳에 엎어 쓴다거나 하는...
예전의 특정 시점으로 복구하기도 쉽고... 백업도 쉽고..

저는 혼자 뭐 할 때에도 SVN 없이 일 안합니다. ^^

=-=-=-=-=-=-=-=-=
http://youlsa.com

=-=-=-=-=-=-=-=-=
http://youlsa.com

dragonkun의 이미지

누군가와 같이 작업하신다면, 다른 사람이 작업한 내용 덮어버리신 적은 없나요?

이미 ftp에 파일 덮어 써버렸는데 다시 예전으로 돌리고 싶으셨던 적은 없나요?

지금 작업본은 그대로 두고 시험 삼아서 뭔가를 적용해 보고 싶은데, 덮어 쓰기엔 좀 그렇고 서버엔 올려놔야겠고.. 했던 적은 없나요?

한가지라도 경험이 있으시면 소스 버젼 관리 틀을 사용할 것을 권장합니다. :)
----
Emerging the World!

Emerging the World!

ageldama의 이미지

일단 몇가지 생각나는대로 적어볼게요. ^^

종래의 방식과 비교해서 좋은점은요.

* 변경사항에 대해서 누가 어떻게 변경했는지에 대한 일괄적인 기록이 생깁니다. (diff, log, blame, annotation...)

* 혹여 예전에 작업했던, 그리고 지금은 지운 코드가 있다고 하더라도 이를 저장소 기록에서 다시 찾을 수 있습니다.

* 공동작업의 경우 누가 어떤 파일에서 어떻게 작업했는지 통계적으로 알 수 있습니다.

* 끝없는 날자별, 버젼별 zip 파일들을 만들 필요가 없습니다. :-)

저 같은 경우는 중앙에 저장소를 두고, 로컬에서 (리눅스, 윈도우)에서 체크아웃해서 작업하고 작업 내역을 커밋해서 올리고, 서버측에서는 마찬가지로 체크아웃한 워킹카피를 이용해서 서비스를 하고, 업데이트를 해야할 경우에는 단순히 서버측 워킹카피를 svn update등을 이용해 업데이트해요...

혹시나 업데이트가 잘못된 경우나 버그가 있어 예전으로 긴급히 되돌릴때도 파일 복사나 그런것들이 아니라 특정 리비젼(안정한)으로 다시 업데이트 하는것만으로 되돌리거나 하는것도 있죠.

여러명이 공동작업을 하는 경우에는 반드시 필요하며, 혼자서 작업을 하시더라도 중앙저장소를 두시고 이를 사용하는것이 바람직하다고 생각합니다.

----
The future is here. It's just not widely distributed yet.
- William Gibson

M.W.Park의 이미지

개발과 배치(deploy)를 섞어서 생각하시고 계신듯합니다.

개발작업에는 무조건 버전관리를 해야하고요.
적정수준의 테스트를 거친 버전(snapshot 이라고도 부르죠)을 배치한다고 보시면 될듯합니다.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

antz의 이미지

말씀하신데로 웹은 deploy 때문에 버전관리 툴을 꺼리는것 같습니다.
전에 웹개발자 분들과 같이 일할때 버전관리 툴을 적용했으면 해서
이런저런 궁리를 해봤지만 쉽지 않더군요.

또하나 굳이 들자면, 웹은 웹디자이너와 일을 많이 하는데요.
웹디자이너까지 버전관리툴을 익히는건 어려운것 같더군요.

Subversion의 WebDav 기능인가? 그게 윈도즈 탐색기로 공유가 되서
파일을 떨구면 따로 commit 메시지 적지 않아도 자동으로 버전관리가 된다는 것을
보고 "멋지군... 이것이면 웹디자이너도 쓰겠다." 싶은 생각은 했습니다만...

웹 쪽에서 버전관리를 어떻게 할지는 고민을 더 해봐야 할것 같습니다.


Blog : http://lum7671.wordpress.com, http://lum7671.egloos.com

cwryu의 이미지

웹뿐만 그런게 아니라 분야별로 버전관리툴을 싫어하는 핑계가 하나둘씩은 있더군요.

진짜 이유는 모르는데 배우기 싫어서인것 같지만...

소타의 이미지

CVS, SVN을 쓰면 배포 시에도 편해집니다.
ftp로 바꾼 파일 선택해서 올리거나 다 덮어 씌우는 것보다 그냥 업데이트 해주면 자동으로 변경된 파일만 갱신되니까요.
게다가 서버 한 두대면 모를까 수십대 있으면 스크립트 하나 짜서 한 방으로 모든 서버에 변경된 것만 업데이트 할 수도 있고요..

당연한 장점 말고도 이런것도 있다능 ㅋ
안써보면 몰라요~

academic의 이미지

배포시에 export가 아니라 update를 하시는 건가요?

그러면 .svn 같은 것이 그대로 남아 있어서 신경쓰이던데...

제가 잘못 알아들은 건가요?

--
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

----
academic은 제 고등학교 때 동아리 이름입니다.
academic, 아주 가끔은 저도 이랬으면 좋겠습니다.

lacovnk의 이미지

개인적으로 쓰는 사이트들은 그렇게 합니다.
어차피 .으로 시작하는 것은 외부 액세스가 안되게 apache에 설정되어있으니 상관 없죠 ㅎㅎ
아니면 .svn은 아파치가 못읽게 해버리면 되겠군요..

kirrie의 이미지

저도 버전관리가 뭐냐... 하고 지내다가 최근에 섭버전을 도입해서 (혼자라도)
쓰고 있습니다. 클라이언트는 윈도우즈고 서버는 우분투.

tortis.. svn (스펠링을 아직 다 못외워서;;)를 쓰고 있는데, 수정을 하면
초록색 체크 표시가 빨간색 물음표로 바뀝니다. 커밋을 해주면 수정된 파일이
차르르륵 올라가면서 리비전이 업데이트 됩니다.

이... 이 쾌감은.. ftp로는 절대로 못느낍니다.
리비전 업데이트 되는 순간 온몸이 부르르 떨립니다. -_-)=b
--->
데비안 & 우분투로 대동단결!

--->
데비안 & 우분투로 대동단결!

M.W.Park의 이미지

간간이 글이 올라와서 deploy 및 자동화 관련 한마디만 더 첨언합니다.
maven같은 도구를 쓰시면(w/ deploy plugin), deploy되는 파일들을 만들어서 타겟 서버에 자동으로 업로드 할 수있습니다(deploy goal).
dependency를 test로 걸어 놓으면, 모든 테스트가 통과한 후에 deploy합니다.
java web 개발의 경우 아주 편리하게 maven을 이용할 수 있고, 다른 환경도 지원이 추가되고 있는 상태입니다.

비슷하게 deploy용 스크립트를 만들어서 쓸 수도 있겠지요. test -> export -> upload등을 단계적으로 수행하게 만들면 될 것입니다.

또한 지속적 통합 도구(continuum이나 cruiseControl 등) + maven을 사용하면 source repository에 변경점이 생기면 자동으로 빌드, 테스트 보고서를 작성해주고, 테스트 문제 없을시 타겟 머신에 deploy까지 자동으로 하는 구성을 만들 수도 있습니다.

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

-----
오늘 의 취미는 끝없는, 끝없는 인내다. 1973 法頂

antz의 이미지

natas999의 이미지

현재 Apache + PHP + MySQL 환경에서 개발하고 있습니다. 소규모 팀이며, 제품은 완성되어 실제 배치되었지만 고객의 요구나 버그 수정, 기능 추가 등 개발 소요는 항상 존재합니다.

지금은 소스코드 관리 시스템을 사용하지 않고 있습니다. 소스코드를 여기저기 서버에 카피 해 두고 개발소요가 있을 때 마다 1~2명씩 집중적으로 작업해서 충돌문제는 거의 나타나지 않지만, 역시 이력을 남기지 않고 있다는 점이나 향후의 개발 소요등을 생각해서 소스코드 관리 시스템의 도입을 적극적으로 추진하고 있습니다.

고민중인 문제는, 개발 중 테스트에 관련한 것입니다.

웹 개발이라 개인별로 작업사본마다 테스트 환경을 따로 만드는 점에는 어려움이 있습니다. (설계상, 작동하는 도메인이 한정되어 있고, 데이터베이스 내용에 따라 테스트 결과가 달라진다는 점 등)

테스트용으로 작업 사본을 따로 만들어서 사용하거나 일일이 테스트서버로 배치작업을 하는 데에는 그만큼 작업소요가 발생한다는 문제점이 생깁니다. (개발자의 작업사본에서 작업한 내용을 리포지토리로 커밋 한 후 테스트 서버의 작업사본에서 업데이트 한다던지, 개인이 작업사본에서 커밋한 후 익스포트나 디플로이 툴을 사용해서 배치한다던지 모두 수작업일 수 밖에 없는 걸로 알고 있습니다.)

좋은 해결 방법이 있으면 소개 부탁드립니다.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

송효진의 이미지

APM 정도는 자신의 컴이 테스트서버가 될 수 있습니다.
자신의 svn 디렉토리를 바로 로컬 APM document_root 로 만들어 실험하고,
이상없으면 바로 commit 하면 간단할 것 같습니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/

natas999의 이미지

apm정도는 자신의 컴이 테스트 서버가 될 수 있다는걸 모르면서 이쪽에서 밥벌어 먹고 있는 사람 아닙니다.

설계상 제약이 있고(접속 도메인 검사 등), 디비구성을 동기화 하기가 힘들다는 문제점을 밝혔습니다만, 졸필인지라 전달이 안 된 모양이군요.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

송효진의 이미지

'개인 테스트 공간' 에 대한 답변으로서 꽤 적절하다고 생각합니다. :)

C:\windows\system32\drivers\etc\hosts
mydomain 127.0.0.1

ssh -L 3306:localhost:3306 mydomain

이것이 정 어렵다면 테스트공간을 딱 하나 만들어서 사용해도
대략의 목적은 이룰 수 있겠죠.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/

natas999의 이미지

제가 개발한거 딴 사람도 테스트 해야 될꺼 아닙니까. 반대 경우도 있고요. 기본적으로 공동 작업인데 혼자만 테스트 한다고 될 일이 아니라는 건 잘 아시잖아요. 그리고 호스트 파일 바꾸면 다른 사람꺼 테스트 할 때 또 그 호스트 파일을 바꾸는 작업이 생기잖아요.

테스트 공간을 딱 하나만 만들면 각자 커밋 한 후에 테스트 공간으로 다시 배치 작업을 해야되잖아요. 저는 이게 귀찮다는 거거든요.

버전관리시스템으로 최대한 일손을 줄이는 게 목적이지 반대로 작업량이 늘어나는 게 고민이라는겁니다.

글솜씨가 부족해서 전달이 안되는 모양이네요. 죄송합니다.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

송효진의 이미지

다 귀찮으면 테스트 환경에서 수정하는건 그냥 ftp 로 하고,
그 테스트 환경을 주기적으로 commit 하면,
적어도 손쉬운 백업 & 복구는 될겁니다.
변경사항만 알아서 commit 되기 때문에
trac 같은 웹인터페이스로 보면 과거 내역보기도 쉬우니까요.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/

natas999의 이미지

그것도 생각 안해본건 아니지만 이력(블레임이라든지)이 제대로 남지 않는 문제 및 혹시 있을 수 있는 충돌 문제 때문에 일찌감치 고려대상에서 제외했습니다.

도움말씀 감사합니다.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

natas999의 이미지

덧붙여서 제가 제일 적당하다고 생각하는 방법은,

리파지토리를 실시간(혹은 각 개발자로 부터 커밋이 일어나는 시점)으로 감시해서 변경사항을 자동으로 테스트용 작업 사본에 업데이트 (혹은 익스포트나 디플로이) 해주는 툴이 있다면 그걸 사용하고 싶은데 그런 툴이 있는지 없는지를 몰라서 질문을 드린겁니다.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

익명 사용자의 이미지

svn 에 hook 기능을 검색 해보시면 될거예요.
그중 post_commit 시점에 웹서버에 svn checkout 해줌 됩니다.

뭐랄까 언어에선 이벤트 컨트롤러 같은 느낌이죠.

bushi의 이미지

SCM 을 SCM 이 아니라 backup/file server 용도로 사용하면 그렇게 됩니다.

개발자 각자가 자신이 테스트할 수 있는 환경을 구성할 수 없다면, 그건 개발 불량입니다.
애초에 '테스트'라는 것 자체에 대한 계획 없이 난개발을 했다는 거죠.
CPU 도 에뮬레이션 해서 개발환경을 구축하는 마당에,
그까짓 db 서버가.. domain 이... 정도가 걸림돌이 될 정도면 막장입니다.
(언젠가 kldp 게시판에 올라온 질문 중에... 소스코드를 SCM 에 commit 하는 시점에서
AA.com 따위의 문자열을 BB.com 따위로 바꿀 수 있냐던 글이 생각나는군요.)

SCM 을 운용하는 데, 어째서 다른 사람의 것을 내가 테스트 못하나요 ?
필력이 떨어져서가 아니라 말이 앞뒤가 안 맞아서 오해를 불러 일으키는 겁니다.

1. 각자 테스트 환경을 구축할 수 없고,
2. 누구든 간에 다른 사람들의 코드를 테스트 할 수 있어야 하고,
3. 이걸 SCM 으로 해결하고 싶다.

테스트 환경이 구축된 file server 가 필요하신겁니다.

OTL

natas999의 이미지

맞습니다. 처음부터 설계불량 맞구요. 고려도 안했으니까요.

설계 다시 하는데 비용 엄청 듭니다. 그 비용 들일 생각 없구요. 막장이라고 해도 할말 없습니다.

어떻게 하면 저희 프로젝트에 도움이 된다는 내용인지 잘 이해가 안되지만
우리팀 리더로 들어와 주실께 아니라면 그런 비난은 사양하고 싶네요.

감사합니다.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

# emerge girl-friend
Calculating dependencies
!!! All wemen who could satisfy "girl-friend" have been masked.

송효진의 이미지

sshfs 처럼 svnfs 가 있으면 좋겠다는 생각을 해봅니다.
svn 저장소를 그냥 마운트 하고 신나게 수정하면 그것이 바로 commit 이고,
남이 다른 파일을 수정한 것은 적용되어 나올테고,
혹 같은 파일을 서로 commit 한다면 my.file.diff 같은 새 파일이 생성된다거나 하는식으로
일을 단순화 시키면 공동작업시 특별한 세팅도 필요 없고 많이 편할듯 합니다.

emerge money
http://wiki.kldp.org/wiki.php/GentooInstallSimple - 명령어도 몇개 안되요~
http://xenosi.de/

koeikim의 이미지

웜이나 backdoor 감염시 확인 및 조치가 빠릅니다.

예전 회사 웹팀이 서버에 직접 개발하는 테러를 해서 원본이 없다는 얘기를 들었을 때 위의 생각이 들더군요 lol

(웹팀이 따로 있을만큼 큰 회사였죠 (400-500명 수준의.... :$ )

망치의 이미지

우리회사보다 더 암울하네요.. 규모면에서 차이가 큰데..
웹사이트가 주수입원은 아니었나봐요?

---------------------------------------
http://www.waitfor.com/
http://www.textmud.com/

익명 사용자의 이미지

그때는 svnserve에 post_commit (hook) 기능이 없었나요?

누군가 commit 하면 실제 웹서버 에서도 checkout 되게 할수 있는데...;;

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.