The Pursuit of Happyness

반응형

예전에 MySQL 5.6 설치 포스팅을 올렸었는데, 5.7에서 상당한 변화가 있어서 다시 포스팅을 합니다.


기본적인 설치 방법이나 명령어는 비슷하지만 기본 패스워드를 확인하는 방법이 필요해서 정리해 봅니다.


1. mysql-community repo 설치


CentOS 7.x 버전에서는 MySQL 대신 Maria DB가 기본으로 들어가 있어서 MySQL 설치를 위해서는 repo 를 추가해 주어야 합니다.


rpm -Uvh https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm 


2. MySQL 서버를 설치합니다.


yum install mysql-community-server


3. MySQL 서버를 구동합니다.


systemctl start mysqld


4. 서버 재시작 후에도 MySQL 서버가 동작하도록 세팅합니다.


systemctl enable mysqld


5. MySQL 5.6 버전까지는 설치 후에 기본 root 계정 패스워드가 없었는데, 5.7 부터는 보안이 강화되어 임시 패스워드가 생겼습니다. log 파일에서 패스워드를 확인합니다.


grep 'temporary password' /var/log/mysqld.log


6. 위에서 확인한 임시 패스워드를 이용해서 MySQL 서버를 설정합니다.


mysql_secure_installation





 



반응형

반응형

드디어 macOS Sierra 가 출시되었습니다.


무료로 배포되기 때문에, App Store 에서 다운로드 받아서 설치해서 사용하면 됩니다.

El Capitan 보다 파일 사이즈가 작은편이라서 부담이 덜하긴 해도 4기가가 넘어가기 때문에, 여러 대의 맥을 가지고 있거나 USB 클린 설치를 하고자 하는 분들에게는 USB 설치 디스크를 만들어 두면 편리하게 사용할 수 있습니다.

만드는 방법은 이전에 포스팅했던 El Capitan 부팅 USB 만드는 것과 거의 비슷합니다. El Capitan 부팅 USB 만들기 포스트 바로가기


1. App Store 에서 macOS Sierra 를 다운로드 한다. (설치는 하지 마시고 다운로드만 합니다. 설치를 하고 나면 다운로드 했던 파일이 삭제됩니다.)

2. 8GB 이상의 USB 메모리를 준비한다.

3. USB 메모리에 있던 기존 데이터는 백업을 하고, 디스크 유틸리티를 이용해서 OS X Extended (Journaled) 방식으로 USB 메모리를 포맷(삭제)합니다. 기존에 이미 OS X Extended (Journaled) 방식으로 포맷이 되어 있었다면 다시 포맷할 필요가 없습니다.

4. 터미널을 열어서 df 명령어로 USB 디스크가 마운트된 볼륨 이름을 확인합니다.


  $ df


보통 Mounted on 항목에 /Volumes 로 시작되는 이름으로 되어 있습니다. 여러개의 USB 메모리나 하드 디스크를 연결한 경우 각별히 주의해서 설치될 USB 메모리의 정확한 볼륨 이름을 사용해야 합니다. (5번 과정에서 설치할 디스크는 삭제됩니다!)

5. Apple 에서 제공하는 createinstallmedia 프로그램을 이용해서 USB 메모리에 macOS Sierra 부팅 디스크를 만듭니다.


  $ sudo /Applications/Install\ macOS\ Sierra.app/Contents/Resources/createinstallmedia --volume [USB 메모리 볼륨명] --applicationpath /Applications/Install\ macOS\ Sierra.app --nointeraction


6. admin 비밀번호를 입력하고 나면, 진행상황이 표시되고, 얼마 후에 Sierra 로 부팅이 가능한 USB 메모리가 만들어 집니다.







반응형

반응형

MongoDB는 고성능, 고가용성 그리고 오토스케일링을 지원하는 오픈소스 Document DB 입니다.


MongoDB에서의 Document는 Object 형식의 데이터를 이야기하며 입출력은 json 포맷입니다.


실제 데이터는 BSON 형태로 저장되며, 각 Document Object 는 유니크한 ID를 가지게 됩니다.



--------



Mac에서의 설치는 homebrew를 이용해서 할 수 있습니다. homebrew 설치는 http://brew.sh/ 사이트를 참고하세요.


MongoDB 설치를 위해 터미널을 열고 다음과 같이 입력합니다.


$ brew install mongodb



/usr/local/Cellar/mongodb/[version] 에 설치가 됩니다.


설치된 버전 확인은 다음 명령어를 이용하면 됩니다.



$ mongo --version 



MongoDB 서버 실행은 다음의 명령어로 합니다. (MongoDB 서버가 실행이 되면 종료되기 전까지는 Mac을 재부팅해도 계속 돌아갑니다.)


 $ brew services start mongodb



데이터는 설정을 변경하지 않았다면 /usr/local/var/mongodb 에 저장됩니다.


종료는 다음과 같이 합니다.



$ brew services stop mongodb 



데이터 저장 위치를 변경하고자 하면 아래 파일에서 dbPath를 수정하면 됩니다.


/usr/local/etc/mongod.conf


반응형

반응형

최근에 구글 Chrome 브라우저 업데이트가 있었습니다.


저는 자동 업데이트를 막아두었는데, 그랬더니 화면 오른쪽 상단에 나오는 ... 아이콘이 빨간색 햄버거 아이콘으로 바뀌어 있더군요..


업데이트 화면으로 가서 업데이트를 시도하였으나 Update failed (error 11) 이라는 오류를 보여주고 업데이트는 계속 실패했습니다..


지난번에도 비슷한 에러가 나서 수동으로 업데이트를 했었는데, 어떻게 했었는지 기억이 나지 않아 이번에도 구글링을 했습니다...


비슷한 오류를 경험하시는 분들을 위해서.. & 미래의 저를 위해서 포스팅 남깁니다.


--


1. 이 포스트의 내용을 어디에 적어 두세요.


2. 크롬창을 모두 닫고 프로그램도 종료 합니다. (Command + Q)


3. 그리고 파인더를 열고 Command + Shift + G 를 누르고 나오는 팝업창에 아래의 주소를 입력합니다.


/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources 


4. 해당 폴더에 "CheckForUpdatesNow.command" 라는 파일이 있는데요, 이것을 더블 클릭해서 실행합니다.


5. 잠시 터미널 창이 나왔다가 업데이트가 종료되면 사라집니다.


6. 크롬을 다시 실행하면 새 버전으로 업데이트가 되어 있습니다.


--


참고로 저는 크롬 브라우저의 자동 업데이트 설정을 꺼 놓았습니다.


예전에는 크롬 속성에서 변경이 가능했었는데, 어느 순간 부터 수동으로 설정을 해줘야 했습니다.


자동업데이트를 막는 설정은 업데이트 주기를 0으로 설정하는 방식으로 처리합니다.


이를 위해서는 터미널에서 간단한 명령어를 입력해 주어야 합니다.


먼저 현재 설정값을 읽기 위해서 다음 명령어를 입력합니다. 



 $ defaults read com.google.keystone.Agent checkInterval 



그리고는 checkInterval 을 0으로 변경합니다.



 $ defaults write com.google.keystone.Agent checkInterval 0



확인은 read, 변경은 write 명령어를 이용하면 되고, 원래대로 되돌리려면 처음에 읽었던 값을 기록해 두었다가 write로 다시 세팅하면 됩니다.



 $ defaults write com.google.keystone.Agent checkInterval 18000



조금 더 긴 주기마다 체크를 원하시면 마지막에 더 큰 숫자를 적어주시면 됩니다.



--


위의 방법으로 해결이 안되면 아래 링크를 참조하실순 있는데 큰 도움은 안되더군요..


https://support.google.com/chrome/answer/111996?hl=en&rd=1



아래 링크는 다른 해결책인데요, 현재 구글앱의 설정을 날려서 해결하는 방법이라서 최후의 수단 정도로 생각하시면 될 것 같습니다.


https://medium.com/@iRazaSyed/how-to-fix-google-chrome-update-failed-error-11-issue-cb1c2d0eebfe#.ppf5teoz6











반응형

반응형

오늘 소개할 제품은 개인 NAS의 명가 Synology 사의 Diskstation DS-216J 입니다.


NAS는 Network Attached Storage 의 약자로 네트워크에 붙어 있는 저장소 입니다.


쉽게 말해서 파일 서버 같은 건데, 파일 서버 기능 이외에도 포토 앨범이나 오디오 스테이션, DLNA 기능 뿐만 아니라 웹 서버나 VPN 서버 등으로도 사용이 가능합니다. 또한 Torrent 다운로드 기능도 지원해 주므로 필요한 자료 다운시에도 편리하게 사용할 수 있습니다.


Synology 외에도 QNAP 이나 IPTime 에서 나온 제품들도 상당히 좋아 보이는데요, 회사나 제품에 따라서 기능이 많이 다르기 때문에 구매전에 자신에게 맞는 제품이 어떤 건지 꼼꼼히 체크해 보시는 것이 좋을 듯 합니다.


저는 DS212J 를 이미 사용중인데, 자료가 많아지기도 했고, 사진등의 자료를 안전하게 보관하고 싶어서 새로 추가로 구매하게 되었습니다. 여기서 안전하다는 의미는 미러링 기능을 통해 동일한 데이터를 하드 디스크 두개에 동시에 저장해서 하나의 하드 디스크에 문제가 생겨도 다른 디스크에 데이터를 이용할 수 있게 세팅을 했다는 뜻 입니다. 물론 두개의 하드 디스크가 동시에  문제가 생긴다면 데이터 복구가 힘들겠지만 데이터를 잃을 확률을 많이 낮춰줍니다.


최근에는 Synology 이외에도 QNAP 이나 IP Time의 NAS도 좋은 반응들을 얻고 있는데요, 스펙상으로는 IP Time 제품이 가성비도 훌륭하고 디자인도 좋아서 구입하고 싶었으나 미국에서는 구하기 힘든 관계로 패스했습니다.


Synology 제품은 모델명을 보면 어떤 제품인지 쉽게 알 수 있는데요, DS는 디스크 스테이션의 약자고, 216J 에서 앞의 2는 NAS에 들어가는 디스크의 개수를 의미합니다. 즉 하드 디스크 2개까지 사용이 가능합니다. 그리고 뒤의 16은 출시년도를 나타냅니다. 즉 2016년도에 출시한 모델이라는 것이죠. 마지막에 J는 저가형 제품에 붙는 기호고요, 고가형 제품에는 Plus 가 붙으며, 멀티미디어 기능을 강화한 제품에는 Play 가 붙습니다. 고가형 제품과 저가형 제품은 NAS 의 CPU나 메모리 사이즈 및 다른 하드웨어 구성에서 차이가 있습니다. (USB 포트의 지원 속도나 개수 등)


Synology DS216J 에 대응하는 QNAP 제품은 TS-231 정도로 보이는데요, 유저들의 평을 보면 하드웨어는 QNAP이 우수하지만 소프트웨어의 경우 Synology이 월등히 우수하다라는 이야기가 많습니다. 예전 같으면 소프트웨어 보다는 하드웨어가 중요하다는 생각으로 QNAP 제품을 구매했을 법도 했지만, 예전에 샀던 DS212J 제품에 만족해서 Synology 제품을 한번 더 구매하기로 결정했습니다.



이제 부터 진짜 사용기 입니다.

먼저 제품 박스를 보면, 예전 (DS212J) 에 비해서 많이 슬림해 졌습니다. 예전 사진이 있으면 좋겠지만.. 나중에 찾으면 업데이트 하겠습니다.. 예전 포장은 큐브 모양으로 되어 있어서 부피가 크기도 했지만 보관이 애매했는데,  DS216J 포장은 뭔가 컴팩트한 느낌이 드네요. 아마존 자체 판매 제품의 포장 같은 느낌이 듭니다.




NAS 구성품은 NAS 본체, 어댑터 + 전원 케이블, 랜선 및 조립용 나사 + 여분 나사 입니다. 사진을 찍었어야 하는데, 광속 설치를 하다보니 사진이 없네요.. 조립하면서 DS212J 와 달라진 부분이 눈에 들어 왔는데요, 하드디스크를 조립하는 부분에 생긴 고무 패킹이었습니다. 자료를 찾아보니 DS215J 에도 적용이 되어 있었는데, 금속끼리 맞닿는 것을 막아주기도 하고, 약간의 진동 흡수 역할도 해줄것 같아서 좋아보였습니다. 작은 변화지만 뭔가 많이 좋아졌다는 느낌을 주는 부분이었습니다.




조립부분도 좀 달라졌는데, 이전과 비교 사진이 없어서 이야기 하기 애매하네요.. 




그리고 무엇보다 좋아진 것은 전원 스위치 입니다. 대부분의 경우 켜 놓고 쓰면 누를 일이 별로 없긴 하지만, 이전 제품에서는, 제품의 위치를 옮겨 볼까 하고 잠시 만지작 거리면 너무 쉽게 눌러져서 전원이 들어와서 다시 접속해서 종료 시켰어야 했는데, 새 제품에서는 전원 스위치의 위치와 모양이 약간 달라져서 실수로 전원을 누르는 일을 줄여 주게 해 주었습니다.




DS212J 도 좋은 제품이었고, 아직까지 소프트웨어 업데이트를 지원해 주고 있는 제품인데, 4년만에 하드웨어 적으로도 많이 좋아졌고, 보이지 않는 부분에서도 상당한 개선이 이루어진거 같아서 상당히 좋았습니다. 


후면의 USB 포트가 모두 3.0을 지원하고 있어서 USB 하드를 연결해서 자료를 복사하는 속도도 월등히 빨라졌습니다. DS212J의 경우 USB3.0을 지원하지 않아서 대략 20MB/s  의 전송률을 보여줬는데, DS216J의 경우 대략 40~50MB/s의 전송률을 보여줬습니다.


저가형 모델이지만 제가 쓸 만큼의 충분한 기능을 제공하고 있는 것 같아서 잘 써볼까 합니다. 


제품에 대해서 궁금한 부분 있으시면 덧글 남겨주세요~





반응형

반응형

Linux 콘솔에서는 기본적으로 하나의 foreground job 을 수행할 수 있는데, 여러 개의 작업을 동시에 실행할 때에는 screen 명령을 이용해서 가상의 콘솔을 이용할 수 있다.


1. 기본 사용법


> screen 



2. 스크린 추가하기


^A^C



3. 스크린 닫기


exit : 현재 스크린 닫기

^D : 현재 스크린 닫기

^A\ : 전체 스크린 종료 및 screen 명령 종료



4. 스크린 전환하기


^A^P : 이전 번호의 스크린으로

^A^N : 다음 번호의 스크린으로

^A0, ^A1, ... ^A9 : 해당 번호의 스크린으로 이동

^A' : 이동할 스크린 번호 입력해서 이동

^A^A : 바로 전에 사용한 스크린으로 이동



5. 현재 스크린 확인


^AN : 현재 스크린 번호 확인

^A^W : 전체 스크린 리스트 확인





반응형

반응형

Linux에서는 여러 개의 프로그램을 동시에 실행시킬 수가 있는데, 


하나의 콘솔창에서는 보통 하나의 Job만 foreground에서 실행이 가능하고, 나머지 Job은 Background에서 실행이 된다.


이 포스트에서는 Foreground / Background Job을 관리하는 방법에 대해서 알아본다.


1. Job


현재 콘솔에서 실행되고 있는 Job들의 리스트를 확인하는 명령어


> jobs 



2. 백그라운드에서 프로그램을 실행하는 방법 


명령 끝에 '&' 를 붙여준다. 실행 하게 되면 job id와 프로세스 id 를 보여준다. (아래 예제에서는 job id = 1, process id = 910)


> sleep 1000 &

[1]+ 910



3. 현재 실행중인 명령을 잠시 중단하는 방법


명령어 실행 후 ^Z  (ctrl + z) 를 입력한다.


> sleep 1000 &

^Z
[1]+ Stopped          sleep 1000


Stopped 라고 나오지만 실제로는 종료되지 않은 상태로 남아 있다. (jobs 명령어로 확인이 가능)



4. 잠시 중단한 명령을 백그라운드로 보내는 방법


bg %[id]


> bg %1

[1]+ sleep 1000 &



5. 백그라운드에서 실행중인 job을 foreground로 바꾸는 방법


fg %[id]


> fg %1

sleep 1000



6. 실행 중인 명령을 중단하는 방법


명령어 실행 후 ^C (ctrl + c) 를 입력한다.



참고로 백그라운드에서 작업 중인 명령을 종료하기 위해서는 해당 job을 foreground로 넘긴 후 ^C 를 입력하면 된다.


혹은 kill 명령어를 이용해서 해당 process 를 종료 하면 된다. (process id 는 ps 명령어로 검색한다.)


> kill 910







반응형

반응형

html2canvas 를 이용하면 현재 화면에 보여지는 html 페이지를 canvas 혹은 이미지로 만들수 있는데,

Open UI5 등의 bootstrap 을 이용하면 렌더링 영역이 화면에 보여지는 윈도우 영역으로 한정되기 때문에 현재 브라우져 창의 사이즈를 넘어가는 영역은 제대로 렌더링이 되지 않는 이슈가 있습니다.


위의 이슈를 해결하기 위해서 화면사이즈보다 작은 영역을 캡쳐해서 합치는 방법을 이용한 코드 예제 입니다.


https://github.com/shineum/div2img


사용법은 아래와 같이 캡쳐할 영역의 innerHTML, 캡쳐할 영역 크기, 콜백을 지정하면 됩니다.


div2img(document.bodyfunction(pImgData) {


       var tNewDiv = document.createElement('div'); 


       document.body.appendChild(tNewDiv);

       tNewDiv.innerHTML = "<img src='" + pImgData + "'>";

}, 12002400, 0, 0);


반응형

Apache Maven

카테고리 없음2016. 3. 18. 22:00
반응형

Maven 이란?

표준화된 프로젝트 관리를 위한 오픈소스 프레임워크. 프로젝트를 생성해서 빌드하고, 테스트, 리포트, 패키징 및 배포를 해주는 툴로 생각하면 된다. 또한 Maven repository 등을 이용해서 Java 프로젝트에서 필요로 하는 의존성 라이브러리도 관리해 준다.


Maven 을 이용하는 경우 다음과 같은 장점이 있다.

- 프로젝트의 디렉터리 구조를 표준화하여 개발자들이 다른 사람이 만든 프로젝트의 소스코드나 리소스 위치를 쉽게 파악할 수 있다.

- 대부분의 자바 프로젝트에서 참조해서 사용하는 오픈소스 의존성 라이브러리들을 일일이 찾아서 추가할 필요 없이 쉽게 관리할 수 있다.

배포시에 불필요한 테스트코드를 포함시키지 않으면서, 테스트 코드를 쉽게 작성하고 결과 확인이 가능하다.


간단한 Maven 사용법

* 원래 Maven 파일을 설치하고, 환경변수를 등록한 후에 콘솔 명령어를 이용해서 사용할 수 있으나, 이 포스팅에서는 eclipse 플러그인을 이용해서 사용하는 방법만을 기술하겠습니다. 


0. 사용 환경 

- JDK 1.8

- eclipse Mars (eclipse Mars 에는 기본적으로 Maven 플러그인이 설치되어 있음.)


1. eclipse 에서 File > New > Project > Maven > Maven Project 를 선택해서 새로 프로젝트를 생성한다.

Group Id 에는 기본 패키지 이름을, Artifact Id 에는 프로젝트 이름을 적어 주면 된다.


2. 일반적으로 src/main/java 에 프로젝트에 필요한 코드를 작성하게 되고, src/test/java 에 테스트에 필요한 코드를 작성하게 된다. 기본으로 App.java 코드와 AppTest.java 테스트 코드가 생성된다.


3. Maven은 pom.xml 파일로 프로젝트를 관리를 하게 되는데, 의존성 라이브러리를 추가하기 위해서는 pom.xml 파일의 dependencies 항목을 직접 편집해도 되고, eclipse Package Explorer 상에서 해당 프로젝트를 오른쪽 클릭. Maven > Add dependency 를 선택해서 나오는 팝업창에 필요 정보들을 입력하면 된다.

예를 들어, Guava 라이브러리를 추가하고 싶다면, http://mvnrepository.com/ 사이트에서 guava를 검색해서 라이브러리를 찾을 수 있다.

검색결과는 http://mvnrepository.com/artifact/com.google.guava/guava/19.0 이며,

pom.xml 에 붙여 넣을 수 있는 코드가 제공된다.



pom.xml 에 dependencies 항목에 직접 붙여 넣어도 되고, Add dependency 팝업에 필요한 정보 (groupId, artifactId, version) 를 아래와 같이 입력해도 된다.



Package Explorer 상에서 해당 프로젝트 이름을 오른쪽 클릭. Maven > Update project 를 실행하면 Maven Dependencies 에 필요한 라이브러리가 추가된다.



Maven 이 관리하는 의존성 라이브러리는 Maven의 로컬 저장소에 다운로드 되어 관리가 되며, 같은 라이브러리의 경우 다른 프로젝트에서 사용될 경우 다시 다운로드 하지 않고 기존에 받아 놓은 파일을 사용하게 된다.


4. Maven 을 이용해서 배포용 빌드를 생성하는 방법은 다음과 같다.

Package Explorer 상에서 해당 프로젝트 이름을 오른쪽 클릭. Run As > Maven build 를 실행한다.

처음 실행시 Configuration 설정 화면이 나오는데, Goals에 package 라고 적어준다.

실행을 하면 Compile > Test > Build phase 가 순서대로 진행이 되고, 문제가 없다면 target 폴더에 jar 파일이 생성된다.


5. 배포용 빌드를 생성할 때, 실행이 가능한 jar 형태로 패키지를 만들 수 있다.

eclipse Package Explorer 상에서 해당 프로젝트를 오른쪽 클릭. Maven > Add Plugin 을 이용해서 플러그인을 추가하면 되는데,

configuration 설정이 필요하니 pom.xml을 직접 편집해서 작성한다.

여기서 build > plugins > plug > configuration > archive > manifest > mainClass 를 자신의 프로젝트의 main 클래스로 지정한다.







반응형

반응형

테스팅


http://www.hanbit.co.kr/book/look.html?isbn=978-89-6848-225-0



- 테스트를 하는 이유

애플리케이션이 우리의 기대에 따라 지속적으로 작동하도록 보장하기 위해서!


- 테스트 시점

-- 개발 전

개발 전에 테스팅 도구를 설치하고 구성해야 한다.

-- 개발 도중

각 부분을 만들 때마다 테스트를 작성하고 실행한다. 새로운 클래스를 추가하면 그 즉시 테스트를 만들어 실행한다.

-- 개발 후

애플리케이션 출시 후 버그를 발견하면 버그 픽스를 만들어야 하며, 올바른 동작을 보장하기 위해 새로운 테스트도 함께 작성한다.

코드 수정시 그에 따른 영향을 받는 테스트 역시 수정해야 한다.


- 테스트 대상

애플리케이션을 구성하는 가장 작은 조각들 - 유닛 테스트 (미시적 관점)

전체 애플리케이션 - 기능 테스트 (거시적 관점)


- 테스트 방법

-- 단위 테스트

큰 애플리케이션에 포함된 클래스, 메써드, 함수를 고립시킨 상태로 검증하는 테스트 방식


-- 테스트 주도 개발 (TDD)

테스트 작성이 애플리케이션 코드 작성보다 선행

의도적인 실패를 통해 애플리케이션의 행동 방식을 묘사하고, 애플리케이션의 기능이 갖춰지고 나서야 성공적으로 수행된다.

목표 지향적이며 무엇을 만들어야 할지, 결과물은 어떻게 작동해야 할지를 사전에 인지할 수 있게 도와준다.


-- 행위 주도 개발 (BDD)

애플리케이션이 행동하는 방식을 이야기처럼 묘사하는 개발 방법론.

--- 스펙 BDD

인간 친화적인 언어로 애플리케이션 구현을 묘사하는 단위 테스트 유형

--- 스토리 BDD

하위 수준 구현 보다는 상위 수준 행동에 관심이 있다.


ex) PDF 보고서를 작성하고 이메일로 발송하는 애플리케이션 제작

---- 스펙 BDD : PDF 생성 클래스 메서드가 매개변수를 입력받아 올바르게 PDF 파일을 생성하는 지 검증

---- 스토리 BDD : 프로젝트 관리자 관점에서 PDF가 생성되어지는지와 email이 보내지는 지 같은 포괄적인 애플리케이션 동작을 검증

=> 둘 간의 차이는 테스트 영역이라고 생각하면 됨


- PHP 유닛

PHP 유닛 테스트 => 테스트 케이스 => 테스트 스위트

테스트 러너를 통해 테스트 스위트를 실행한다.

테스트 케이스는 PHPUnit_Framework_TestCase 클래스를 확장한 단일 PHP 클래스

컴포저를 이용하여 설치할 수 있다.


> composer require --dev phpunit/phpunit 




반응형