삼성전자 970 EVO 500GB M.2 NVMe MZ-V7E500BW

제품 선택은 순전히 개인의 상황과 취향에 따른 것 입니다.
별도의 지원을 받은 사실이 없습니다.

구매동기

이전에 사용하던 256GB SSD 가 여러가지 프로그램을 일반 HDD에 설치하는 고육지책에도 용량이 부족하게 되었습니다. 더 큰 용량의 제품을 사서 교체를하려고 알아보는데 M.2 NVMe 제품들이 눈에 들어왔습니다. 가격은 약간 비싼데 속도는 더 빠르다고 해서 관심이 갔습니다. 이미 SSD 를 쓰고 있으면 체감은 되지 않는다고 하는데 별도의 케이블이 필요없고 설치가 간편하다고 해서 구매를 결정하게 되었습니다. 메인보드도 이전에 업그레이드 할 때 M.2를 지원하는 것을 구매해서 설치에도 문제가 없었습니다. 다만 부팅 드라이브로 지정이 가능한지, Acronis True Image 로 백업 후 복원해서 사용할 계획인데 문제가 없는지 확인해 보아야 했습니다.

부팅 드라이브로 지정은 문제가 없을 것 같았지만 메인보드 펌웨어를 최신으로 업데이트 했습니다. 그 다음 Acronis True Image 복원 부분을 확인해 보았습니다. SSD 에서 M.2 드라이브로 복원이고 하드웨어는 다른 종류인데 논리적으로 보면 드라이브로 간주되어 문제가 없을 것 같았습니다. 이전 버전에서는 M.2 드라이브를 지원하지 않고 2016 Update 2 (build 6559) 이후 버전부터 가능하다는 정보를 확인했습니다. M.2 드라이브를 지원하는 버전에서 복원용 부팅 USB 를 미리 생성해 두었습니다.

구입

여러 제조사에서 M.2 NVMe 규격의 제품을 생산하고 판매하고 있었습니다. 자주 들어본 브랜드는 가격이 상대적으로 비쌌고 중소형 업체는 저렴한 편 이었습니다. 국내외 사이트에서 가격을 비교해보니 필자의 판단으로 같은 제품인데 차이가 났습니다. 물론 보증조건이 다르기는 하겠지만 고장이 나기전에 교체를 할 것 같다는 생각이 들어서 신경쓰지 않고 같은 기종이면 저렴한 곳에서 구매하려고 했습니다. 브랜드는 삼성전자와 Western Digital(이하 WD)로 압축이 되었습니다. WD Black 시리즈 제품이 비슷한 성능인데 조금 저렴했습니다. WD 제품으로 사려고 해외사이트를 모니터링 하던 중 삼성전자 970 EVO 500GB M.2 NVMe MZ-V7E500BW 제품의 가격이 인하되어 반(?)충동구매를 하게 되었습니다. 국내보다 배송은 오래걸리지만 급하게 교체해야 하는 상황이 아니고 무시할 수 없는 가격차이때문에서 직구를 했습니다. 배송에 대략 13일 정도 소요되었습니다.

설치

받아보니 상자가 생각보다 컸습니다. 이전에 구매했던 SSD 크기 정도 되었던 것 같았습니다.

삼성전자 970 EVO 500GB M.2 NVMe MZ-V7E500BW 상자
삼성전자 970 EVO 500GB M.2 NVMe MZ-V7E500BW 상자

상자를 열어보고 좀 놀랐습니다. 제품소개 사진으로만 보았고 실제로 본적이 없었습니다. 정말 작았습니다. 500GB 용량을 가졌는데도 이렇게 작을 수 있을 정도로 기술이 많이 발전했다는 것을 다시한번 느끼게 되었습니다.

 삼성전자 970 EVO 500GB M.2 NVMe MZ-V7E500BW  실제크기
삼성전자 970 EVO 500GB M.2 NVMe MZ-V7E500BW 실제크기

거의 껌과 같은 크기 였습니다. 슬롯 위치를 확인하고 설치를 시작했습니다. 별도로 나사같은 것은 들어있지 않았습니다. 설치하려고 살펴보니 왼쪽 부분을 고정할 나사가 들어가는 구멍이 매우 작았습니다. PC 케이스의 가장 작은 나사도 들어가지 않았습니다. 아예 규격이 달랐습니다. 부랴부랴 메인보드에 동봉되어 있던 M.2 용 나사와 지지대를 찾아 설치했습니다. 사용편의를 위해 지지대와 나사가 들어있었으면 더 좋았겠다는 생각이 들었습니다. 해외 사이트 다른 M.2 제품의 후기에 나사가 들어있지 않은 것이 가장 큰 불만이라고 쓴 사람의 마음이 이해 되었습니다. 컨트롤러 케이블과 전원케이블이 없으니 설치가 정말 간편했습니다.

복원 및 사용

미리 백업 해 둔 C 드라이브 이미지를 USB 부팅 후 복원했습니다. 복원 후 다시 부팅하니 제대로 되지 않고 다음과 같은 오류 메시지가 출력되었습니다.

복원 후 발생한 오류 메시지(INACCESSIBLE BOOT DEVICE)

부랴부랴 검색해보니 최대 절전모드 때문에 그런 현상이 있다는 것을 알게되었습니다. 다행히 안전모드로 한번 부팅하면 해결되는 현상이었습니다. 안전모드로 부팅 후 다시 부팅하니 그때부터는 문제없이 부팅되었습니다.

읽기/쓰기 벤치마크 자료는 많으니 그것을 참고하시면 됩니다. 필자는 용량이 큰 프로그램들과 게임 위주로 얼마나 체감이 되는지만 비교해 보았습니다.

  1. 부팅속도 자체는 SSD와 큰 차이를 느끼지 못했습니다.
  2. 기존 SSD에 설치되어 있던 프로그램의 수행속도 향상도 느끼지 못했습니다.
  3. 대용량 파일 복사의 경우 속도 향상이 있음을 체감했습니다.
  4. HDD에 설치되어 있던 프로그램을 제거하고 M.2 드라이브에 다시 설치한 후 실행속도의 향상을 체감했습니다.
  5. HDD에 설치되어 있던 게임을 M.2 드라이브로 옮기고 실행해 보니 초기 로딩은 물론 중간중간 로딩이 필요할 때 상당한 속도 향상을 체감했습니다.

가격은 약간 부담이 되었지만 안정된 성능과 속도로 만족을 준 제품이었습니다.

Visual Studio Git Branch 이용

개요

요즘 개발시에는 소스버전 관리는 필수입니다. 여러 버전관리 소프트웨어가 존재하지만 필자는 Git을 주로 사용합니다. 로컬에서 작업 후 저장소에 업데이트 하는 방식으로 사용됩니다. 작은 규모는 무료 호스팅도 이용이 가능합니다.

단순히 소스를 저장하고 변경된 내용을 보기위한 용도로도 이용할 수 있습니다. 프로젝트 성격에 따라 여러가지 방법으로 사용될 수 있습니다. 본인이 속한 회사나 팀의 상황에 맞게 사용하면 됩니다. 이 글에서는 단순히 소스를 백업하는 용도가 아닌 Branch를 이용해서 작업을 분리한 후 병합(merge)하는 과정을 알아보려고 합니다.

독자분들이 Git 자체과 Branch 개념을 알고 있다고 가정하고 진행합니다.

Visual Studio 와 Git 연동

Git 명령어를 입력하면서 사용해도 됩니다. 하지만 도움을 주는 프로그램을 설치하면 훨씬 효율이 좋습니다. 필자는 Git Extensions 와 Easy Git Integration Tools를 설치하고 Visual Studio와 연동했습니다. 검색해 보시면 좋은 글이 많으니 쉽게 연동하실 수 있습니다. 기본적인 연동 작업은 완료 되었다고 가정하겠습니다.

Branch 이용

프로젝트를 진행/관리하다 보면 실제로 작동되고 있는 소스를 유지하면서 작업해야 하는 경우가 많습니다. 작업 후 문제가 없으면 실제 서버에 올려서 반영하게 됩니다. 그런데 작업 중 발견하지 못한 다른 문제가 있어서 업데이트를 해야할 때 난감합니다. 원래소스로 복원한 후 문제가 된 부분을 고쳐야 하는데  수정된 부분이 많으면 까다롭습니다. 작업중인 소스를 백업하고 원래 소스로 복원 후 버그를 고치고 서버에 반영합니다. 그 다음 새롭게 작업된 소스를 다시 작업한 상태로 만들어야 합니다. 이런 과정을 수동으로 하다보면 시간이 많이 소요되고 실수할 확률도 높아지게 됩니다. 이럴 때 Branch 기능을 사용하면 편리하게 작업 할 수 있습니다. 간단한 예를 들어 알아보도록 하겠습니다.

ASP.NET 웹 응용 프로그램 프로젝트를 생성합니다. 다른 프로젝트로 원리는 같으니 원하시는 것으로 생성해도 됩니다.

index.aspx WebForm 을 추가하고 Business 클래스를 추가 합니다.

파일 추가 후 솔루션 탐색기 정보

파일 추가 후 솔루션 탐색기 정보

다음과 같이 샘플 코드를 입력 했습니다.

Business.cs
public class Business
{
public string GetCEOName()
{
var ceoName = "Toughman";
return ceoName;
}
}
index.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
var business = new Business();
var ceoName = business.GetCEOName();

Response.Write("CEO name : " + ceoName);
}

이 상태에서 로컬 저장소를 만들고 작업된 내용을 커밋합니다.

저장소 생성

저장소 생성

최초커밋

최초커밋

Git Extensions 를 클릭하여 확인하면 master 브랜치에 최초커밋이라고 나타납니다. 기준이 되는 줄기라고 생각하면 됩니다. 이 상태가 서버에 반영되어있고 추가 개발이 진행된다고 가정하겠습니다. 작업을 진행할 브랜치를 Commands > Create branch 메뉴를 선택합니다.

메뉴를 선택하면 다음과 같은 대화상자가 나타나는데 적절한 이름을 입력합니다. 필자는 dev로 입력했습니다.

Create branch 대화상자

Create branch 대화상자

브랜치를 생성하면 큰 줄기(master)와 가지(dev)가 내용이 같아 다음처럼 표시 됩니다.

dev 브랜치 생성

dev 브랜치 생성

dev 브랜치로 다음의 메뉴를 선택해서 전환합니다.

dev 브랜치로 전환

dev 브랜치로 전환

개발 진행에 따라 소스가 수정되었다고 가정해 보겠습니다. Business 클래스에 다음의 메소드를 추가합니다.

public string GetCTOName()
{
var ctoName = "CTO Name";
return ctoName;
}

이 상태에서 GetCEOName 메소드의 내용을 수정해서 서버에 반영해야 하는 상황이 되었습니다. 원래 master 브랜치의 Business.cs 파일을 가져와서 작업해야 합니다. 일단 작업 중인 사항을 커밋합니다. 위의 방법대로 다시 master 브랜치로 전환합니다. 그러면 Visual Studio 에서는 파일 변경되었다는 메시지가 나타나면서 다시 읽어들일 것인지 물어봅니다. 다시 읽어들이면 원래의 파일 내용으로 변경됩니다. GetCEOName 메소드의 내용을 수정합니다. 커밋하면 다음과 같은 상태가 됩니다.

master 브랜치 수정 후 상태

master 브랜치 수정 후 상태

상황이 종료되었으니 dev 브랜치로 전환하여 개발을 진행합니다. 개발이 완료되었고 문제가 없다는 것을 확인했으면 master 브랜치에 작업을 반영합니다. 병합(merge)을 다음과 같이 진행하면 됩니다.

master 브랜치로 전환 후 Commands > Merge branches 메뉴를 선택합니다. 병합할 브랜치(dev)를 선택합니다. 왼쪽 이미지 부분에 마우스 커서를 올려보면 fast forward 로 선택했을 때 어떻게 처리되는 지 알 수 있습니다. 이 글에서는 Always create a new merge commit 을 선택해서 병합한 내용이 커밋되도록 했습니다.

master 브랜치에 dev 브랜치 병합

master 브랜치에 dev 브랜치 병합

병합이 완료되면 다음과 같은 트리 모양이 됩니다.

병합 후 트리 모양

병합 후 트리 모양

단순한 예를 들어 설명했지만 소스 코드 수정 작업량의 차이만 있을 뿐 적용하는 방식은 동일합니다. branch 기능을 이용해서 효율적인 작업에 도움이 되었으면 합니다.