반응형

제목에 나열되어 있는 워터풀, 애자일, 린은 프로젝트 방법론이다.

프로젝트 방법론이란 어떠한 프로젝트를 어떤 순서로 어떤 방식으로 개발할지를 정의한 것이라 보면된다.

각각 어떤 차이가 있는지 알아보도록 하겠다.

 

폭포수(Waterfall)

폭포수(Waterfall) 방법론은 아주 오래전부터 쓰여오던 방식이다.

기획->디자인->개발->테스트(검증)->런칭 이렇게 순서대로 다섯가지의 과정을 거치게 된다.

반드시 위의 순서대로 프로젝트가 진행되어야 한다.

어떤 서비스를 개발할 때 해당 서비스에 대한 기획이 모두 완료되면, 디자인팀에서 해당 기획에 대한 디자인을 진행하고, 디자인이 모두 완료되면 개발팀에서 해당 기획과 디자인을 가지고 개발을 진행하게 된다.

최종적으로 테스트하여 문제가 없다면 서비스를 런칭한다.

이 작업의 장점은 어떤 파트에서든 순조롭게 진행된다면 가장 이상적인 방법론이 된다.

또 현재 단계의 진행이 끝나야 다음 단계를 진행할 수 있는 특성 때문에 진행 상황을 파악하기가 더 수월하다는 것이다.

반대로 개발까지 진행을 했는데 기획이 변경된다던지, 디자인이 변경된다던지 한다면,

변경할 부분이 많아지기 때문에 다른 방법론에 비해 유연하게 대처하기 어렵다는 단점이 있다.

대기업에서는 아직도 많이 쓰이는 프로젝트 방법론이지만, 현실적으로 모든 파트가 순조롭게 진행되는 경우가 드물기 

때문에 이런 순차적인 개발 과정은 비효율적으로 보여진다.

 

애자일(Agile)

애자일 방법론은 워터풀의 비효율적인 부분을 개선하기 위해 등장하였다.

워터풀처럼 순차적인 과정을 거치지만, 그 과정을 짧게 거치게 된다.

'기획->디자인->개발->테스트'의 과정을 빠르게 거치며 프로토타입부터 살붙이기 형태로 개발해나가는 방식이다.

아무래도 폭포수 방법론에 비해 개발 주기가 짧기 때문에 기획이나 디자인이 변경되어도 그 부담이 훨씬 적어지게 된다.

잘못될 수 있는 부분을 미리 잡아가는 부분이 폭포수 방법론에 비해 엄청난 장점이 될 수 있다.

A,B,C 기능이 포함된 앱을 개발한다고 가정할 때, 애자일 방법론을 개발하게 되면,

A 기능에 대한 기획->디자인->개발->테스트가 이루어지고,

B 기능에 대한 기획->디자인->개발->테스트가 이루어지는 형태로 개발 진행이 된다.

즉, 어떤 문제가 발견됐을 때 비교적 덩치가 작은 상태에서 수정하기 때문에 문제 해결 시간이 줄어들 수 밖에 없다.

또한, 결과물을 일부 기능들이 완료될 때마다 프로토타입 형태로 보고 피드백을 할 수 있으므로 보다 더 효율적인 프로세스 진행이 된다고 볼 수 있다.

점점 변화가 빨라지는 세상에 살고 있기 때문에 애자일 방법론이 더 빛을 보는게 아닌가 싶다.

 

린(Lean)

린 방법론을 설명하기 위해서는 '린 제조'를 먼저 알아야 한다. 린 제조는 도요타가 사용한 제조 방식인데,

불필요한 설비나 인력을 줄여서 낭비를 줄이는 방식이다. 즉, 린 방법론은 어떤 낭비될 수 있는 부분을 제거하여

고객에게 더 빠르게 프로덕트를 제공할 수 있는 방법론이다.

프로덕트 기획을 하고 개발을 진행하는데 만약 고객이 원치 않는 불필요한 기획이 있다면 어떨까?

이를 개발하는 시간은 모두 낭비되는 시간이라 봐야 한다. 또 개발하고나서도 검증 과정에 시간을 또 쏟아야 하므로

불필요한 프로세스 시간이 더 늘어나게 된다. 린 방법론은 바로 이 부분을 캐치하여 불필요한 작업을 제거하는 것이다.

스타트업에서 린 방법론을 차용한 것을 린스타트업이라고 부른다.(실리콘밸리의 기업가 에릭리스가 개발하였다.)

초기 스타트업에서 폭포수 방법론을 도입하게 되면 프로덕트 도출 기간이 길어지게 되고, 출시 이후에

문제가 발생할 경우 시장 리스크가 너무 커지고 대응 또한 어렵게 된다.

린 스타트업의 기본은 개발 -> 측정 -> 배움 세가지 과정을 거치게 되는데, 실제로 빠르게 프로토타입을 개발하여,

고객과 접촉하여 문제를 발견하면 빠르게 변경하여 적합한 비즈니스를 빨리 찾아내는데 목적이 있다.

여기까지 보면 린과 애자일은 빠른 변화에 대응할 수 있다는 부분에서 공통점을 지닌다.

실제 경험에서 차이점이 있다면 린 모델의 경우 런칭 후 사용자 피드백을 통해 빠른 변화를 도모한다는 것이고,

(프로토타입 개발->런칭->피드백 과정의 반복)

애자일 모델의 경우 사용자에게 런칭하기 이전까지의 개발 사이클을 빠르게 돌리는 것이라고 볼 수 있다.

(프로토타입 개발 과정이 빠르게 반복되고, 살붙이기가 모두 완료되면 런칭 후 피드백)

 


위 세가지 모델에 대해 정리해보았는데 폭포수 모델과 다른 모델과의 차이는 뚜렷한 편이지만,

애자일과 린의 경계는 그리 뚜렷하지 않은 것 같다.

어쨌든 린과 애자일이 변화에 빠르게 대응할 수 있고 리스크를 줄이기 위한 효율적인 모델이라는 것에 대해 동의하며,

앞으로 진행하는 프로젝트에 대해서도 이 두가지 모델을 애용할 것 같다.

반응형

'스타트업' 카테고리의 다른 글

스타트업 팀빌딩할 때 CTO가 꼭 필요한 이유  (0) 2021.12.10
반응형

이번에는 몽고DB에서 데이타를 수정하는 방법을 알아본다.

update 또한 insert와 마찬가지로 함수 형태가 크게 세개로 구성된다.

update 명령은 단일 도큐먼트 혹은 다수의 도큐먼트를 수정할 수 있고 updateOne은 단일 도큐먼트만,

updateMany는 다수의 도큐먼트만 수정 가능하다.

MongoDB 3.2버전 이후부터는 update() 함수 대신 updateOne()과 updateMany() 함수를 사용하기를 권장한다.

 

1. 수정(update)

데이타를 수정할 때 사용하는 명령이며, MSQL의 update와 매칭되는 명령이다.

insert 명령과 마찬가지로 JSON 형태로 데이터를 수정할 수 있다.

 

위와 같은 데이터가 있다고 가정해보자.

name이 '홍길동'인 age의 값 20을 23으로 변경하고자 하면 아래와 같이 명령을 실행할 수 있다.

db.users.update({name: '홍길동'}, {$set:{age: 23}});

 

위와 같이 정상적으로 입력된 것을 확인할 수 있다.

데이터를 조회해보니 age값이 20에서 23으로 변경되었다.

MongoDB에서 update명령을 사용하여 특정 필드의 값을 변경할 때는 $set 연산자를 사용하여야 한다.

만약 사용하지 않는다면 어떻게 될까?

 

$set 연산자를 제거하고 나이를 25살로 변경하여 입력해보았더니 위와 같은 결과가 나왔다.

$set 연산자를 사용하지 않을 경우 입력한 데이터 자체를 통째로 덮어버리게 된다.

즉, 기존에 존재하던 name 필드까지 사라져버리는 것이다.

그렇기에 update 명령 사용시에는 반드시 주의해야 한다. $set 사용하는 것을 실수해서 

다른 필드를 날려버리는 경우가 종종 발생할 수 있다.

 

update 명령은 단일 도큐먼트도 수정 가능하지만 다수의 도큐먼트도 수정 가능하다.

다수의 도큐먼트 수정시에는 multi 옵션을 사용하여 수정할 수 있다.

먼저 테스트를 위해 위와 같이 데이터를 준비하였다.

위 두 데이터 전체의 나이를 25로 변경해보도록 하겠다.

db.users.update({}, {$set: {age: 25}}, {multi: true});

앞의 조건 {}은 전체 필드를 수정하겠다는 의미이다.

조회해보면 다음과 같은 결과가 나온다.

age 필드가 모두 정상적으로 25로 변경되었다.

만약 multi 옵션을 사용하지 않는다면 기본적으로 단일 도큐먼트 수정이 되기 때문에 가장 처음 데이터만 변경이 된다.

 

2. 단일 데이터 수정(updateOne)

update와 사용법은 동일하다. 단지, 단일 도큐먼트만 수정될 뿐이다.

db.users.updateOne({name: '홍길동'}, {$set: {age: 25}});

이와 같이 명령을 실행하면 name 필드가 '홍길동'인 age 값을 25로 변경한다.

완전히 동일하다.

 

3. 다수 데이터 수정(updateMany)

update의 multi 옵션을 자동으로 사용해준 명령이라고 보면 된다.

위의 두개 도큐먼트에 대한 age를 모두 27로 변경해보겠다.

db.users.updateMany({}, {$set: {age: 27}});

multi 옵션 없이 조건에 해당하는 모든 필드가 알아서 수정이 된다.

updateOne과 updateMany은 update 명령에 비해 좀 더 명시적으로 업데이트되었다고 보면 될 것 같다.

 

반응형
반응형

 

몽고DB에서 데이터 삽입하는 방법에 대해 알아보도록 할 것이다.

데이터를 삽입하는 방식에는 크게 세가지가 있다.

insert 명령, insertOne명령, insertMany명령인데, insert의 경우 단일 도큐먼트 혹은 다수 도큐먼트 모두 삽입이

가능하며, insertOne의 경우 단일 도큐먼트만, insertMany는 다수 도큐먼트만 삽입할 수 있다.

 

1. 삽입(insert)

DB에 데이터를 삽입할 때 사용하는 명령어이다. MySQL의 insert와 매칭되는 명령인데,

MySQL의 경우 각 필드에 데이터를 입력시켜주는 반면 몽고DB에서는 데이터를 도큐먼트 단위로 입력시켜주게 되며,

도큐먼트는 JSON 형태의 데이터로 구성된다.

 

users 컬렉션에 아래와 같이 데이터를 입력시켜볼 수 있다.

db.users.insert({

    name: '홍길동',

    age: 20,

});

위와 같이 입력이 완료되었고, find() 명령을 통해 입력된 데이타를 확인할 수 있다.

db.users.find();

위는 users 컬렉션에 있는 모든 도큐먼트를 조회한 결과이다.

insert() 명령으로 넣은 JSON 데이타가 그대로 들어가있다.

그런데 _id라는 필드는 입력하지 않았는데 자동으로 생겨버렸다.

이 필드는 MySQL에서 Primary key와 같은 역할을 하는 필드라고 보면 된다.

중복을 허용하지 않는 고유의 값이며, 기본적으로 인덱스가 걸려있기 때문에 해당 필드로 조회시 검색 성능은 보장된다. 

 

insert를 이용하여 다수의 데이타를 한번 삽입해보도록 하겠다.

다수의 데이타 삽입시에는 배열을 사용한다.

db.users.insert([
{
    name: '최길동',
    age: 21,
},
{
    name: '박길동',
    age: 22,
},
]);

위와 같이 대괄호 []를 통해 다수의 데이터를 삽입할 수 있다.

정상적으로 다수의 데이타가 입력된 것을 확인할 수 있다.

 

2. 단일 데이터 삽입(insertOne)

insertOne은 단일 도큐먼트를 삽입하는 명령이다.

몽고 3.2버전 이후에 추가된 명령이며, insert를 대체하기 위해 만들어졌다고 한다.

insert()명령과 사용법은 동일하며, 배열 형태로 다수의 데이터를 삽입하는 것은 insertMany명령을 이용해야 한다.

db.users.insertOne({
    name: '홍길동',
    age: 20,
});

아래와 같이 조회하면 정상적으로 데이타가 삽입된 것을 확인할 수 있다.

 

3. 다수 데이터 삽입(insertMany)

insertMany은 다수의 도큐먼트를 한번에 삽입하는 명령이다.

insertOne과 같이 몽고 3.2버전 이후에 추가된 명령이다.

다수 데이터 삽입이므로 배열 형태로 삽입하며 아래와 같이 명령을 사용할 수 있다.

db.users.insertMany([
{
    name: '최길동',
    age: 21,
},
{
    name: '박길동',
    age: 22,
}

]);

정상적으로 삽입이 완료되었다.

 

몽고3.2버전 이후에는 insertOne(), insertMany() 명령을 사용을 권장하므로, insert() 명령 사용은 자제하는 것이 좋을 것으로 보인다.

반응형

+ Recent posts