1. Git 이란 ?

 

- 처음 간단하게 알고 있던 Git은 나의 소스 코드를 저장해놓는 저장소 정도 였다.

- 뭐 저 용도로만 사용할 수도 있긴 하겠지만 Git에 대해 제대로 알아보자.

 

- 사실, Git 이란 Version Control System의 한 종류 이다 (VCS)

 

- 버전 관리 시스템이라고 하는데, 버전을 관리한다는 것은 말그대로

- 프로젝트 소스의 초창기 버전, 수정 버전(V2), 재수정 버전(V2), 최종 버전(FINAL)

- 이런식으로 여러파일들을 하나의 버전으로 묶어 관리하는 것.

 

 

1 - 1 그래서 Version Control System(버전 관리 시스템) 이 무엇이냐?

- 위의 예시처럼 파일을 관리하는 것( 관리가 어려움, 명칭에 따른 혼동 등... 여러가지 문제점 내포 )을

   전문적으로 관리하는 시스템이 버전 관리 시스템 이다.

 

    -(1) 클라이언트-서버 모델

         - 중앙서버가 존재, 자신의 파트만 가져와서 작업후 다시 중앙서버로 통합.

 

    -(2) 분산 모델

         - 중앙서버가 존재, 그러나 여러 클라이언트들은 각자의 로컬 저장소에 중앙서버의 전체 사본을 가지고 작업 후

           통합하는 것

         - Git이 이에 해당 한다.

 

 

 

 

2. Git의 사용

 

- 사실 혼자 작업한다면 사본을 만들어 놓고 개인이 관리 하면서 작업을 수행한다면 굳이 필요가 없을 수도 있다.

   (수정이나 작업을 하는 사람이 본인 뿐이므로 시간적인 충돌등이 발생할 일도 없다.)

 

- 그러나 만약 다수의 클라이언트들이 작업을 수행하고 그것을 원본에 업데이트를 해야 하는데

   동시에 수정과 다운로드 작업이 일어나거나 한다면 문제가 생긴다.

   (예를 들면 내가 수정을 업로드 하는 동시에 다른 클라이언트가 작업을 위해 그 페이지를 건드린다면

    나의 수정사항이 제대로 반영되지 않을 수 있는 등의 문제가 발생 할 수 있다.)

 

- 이러한 문제점을 방지해주는 것이 버전관리 시스템이다(git,....)

 

- 그리고 깃은 모든 변동사항의 스냅샷을 저장하므로 코드의 손실이 일어나지 않고 문제시

   그 이전의 시점으로 되돌릴 수도 있다.(병렬 개발이 가능해 진다.)

 

- 그러므로 다수와 함께하는 프로젝트를 진행할 때 Git은 거의 필수적이다.

 

- 물론 개인프로젝트의 경우도 git으로 버전관리를 진행하면서 수행하면하면 체계적인 개발이 가능하다.

  (프로그램 을 배포하고나 패치를 배포하는 것도 간단해진다.)

 

 

 

 

 

3. Git의 웹 기반 솔루션 

 

- Git의 원격 저장소를 편하고 효율적으로 관리할 수 있게 하는 것이 웹기반 Git 솔루션을 사용하는 것.

 

- 요즘은 원격 저장소를 관리하는 기능 뿐 아니라 프로젝트에 도움이 되는 다양한 기능을 제공 하고 있다.

 

- Git Hub, Git Lab 등 이 있는데 깃허브는 오픈소스 프로젝트를 할 때 주로 많이 사용하고,

   깃 랩은 기업체등에서 폐쇄성을 필요로 할 때 인트라넷에서 많이 사용한다.

 

 

 

 

4. Git 사용을 위한 주요용어 정리

 

- 저장소(Repository)

   : 소스코드가 저장되어 있는 물리적인 공간

     깃 에서는 위에서 말씀드렸다 싶이 로컬저장소와 원격저장소 두개로 나누어져 있습니다.

     그러므로 작업을 시작하기 전에 원격저장소에서 로컬저장소로 소스코드를 복사해오고

     그 로컬저장소에서 소스를 가지고와서 소스수정이나 작업이 이루어 집니다.

     수정 후 커밋(commit)을 하면 로컬저장소에 저장(수정) 되며, 푸시(push)를 해야 비로소

     원격저장소에 반영이 되는 것입니다.

     저장소는 브랜치(branch),태그, 커밋에 따라서 버전을 저장한다.

 

 

 

- 스테이지(stage)

     작업한 내용을 올리는 임시 저장영역

      커밋 시에 로컬저장소에 반영이 된다.

 

 

- 커밋(commit)

     스테이지의 내용을 로컬저장소로 저장하는 작업

     커밋 한번,한번이 의미있는 히스토리(history) 이며, 커밋 로그로 설명을 남긴다.

     커밋의 단위는 팀에서 정하며, 대부분 포멧도 정한다.

 

 

- 체크아웃(checkout)

     커밋 단위로 남긴 히스토리 단위의 소스코드 버전으로 이동하거나, 브랜치의

     소스코드로 이동하는 것.

 

 

- 태그(tag)

     커밋의 위치를 알아보기쉽게 태그를 달아 놓는다.

     태그를 달아놓은 커밋은 태그명으로 쉽게 체크아웃이 가능해진다.

 

 

- 푸시(push)

     로컬 저장소에서의 변동(수정) 소스코드를 원격저장소에 반영시키는 것.

 

 

- 풀(pull)

     푸시와 반대되는 작업으로서 원격저장소의 내용을 로컬저장소에 반영시키는 것

 

 

** Pdo사용을 위해선 php 버전이 5.1.0 이상 이어야 합니다**

 

1.PDO(PHP Data Object) 란?

- PHP에서 여러종류의 데이터 베이스에 접근할 수 있게 해주는 PHP 확장 모듈이다.(클래스)

- (MySQL, MS SQL, Oracle......)

-반면, mysql 함수나 mysqli 클래스는 MySQL 서버만을 대상

- 즉, 여러종류의 데이터베이스를 같은 방식으로 사용할 수 있게 해준다.

- Pdo는 Prepared Statement를 제공하여 SQL을 미리 데이터베이스에서 컴파일 해두고

  parameter만 값만 바꿔 처리 함으로써 성능의 향상을 위해 된다. 그리고 SQL injection 방어용

  으로도 사용될 수 있는데, Pdo 역시 Prepared Statement를 제공하므로 SQL injection 방어에 사용될

  수 있습니다. <밑에 예시 코드에서 확인하시면 됩니다.>

 

 

2. 데이터베이스에 연결

- 데이터베이스에 접속하기 위해서 Pdo를 이용해보자.

- 먼저 pdo를 생성하여야 한다.

 

3.쿼리준비

- 데이터베이스와 연결후 

- prepare() 메소드를 사용.

 

4.데이터를 바인딩, 실행

- execute() 메소드의 인수로 쿼리 파라미터에 사용할 값을 넘겨준다.

 

5. 결과값 가져오기

-이는 다른 예시인데 위의 예시는 그냥 insert를 하는 기능을 수행하는 함수 였기 때문이다.

-(1) fetch()

    : 메소드를 한번 실행하면 쿼리결과에서 한행을 가지고 온다

      반복문을 통해 처리하는 경우가 많다.

-(2) fetchAll()

    : 한번에 모든 행을 가지고 올 떄 사용한다.

**fetch의 모드 구성

      -1 FETCH_BOTH

          - 가져오기 모드를 지정해주지 않으면 이 모드가 지정되는데,

             결과 값을 가지고 올떄 칼럼이름을 키로 사용하는 배열과 칼럼의 순서를 키로 사용하는

             배열 두가지 배열을 만들기 때문에 성능이 좋지않다.

      -2 FETCH_ASSOC

          - 칼럼명을 키로 사용하는 연관배열을 반환한다.

          - $row['COLUMN_NAME']와 같은 방식으로 사용한다.

      -3 FETCH_NUM

          - 컬럼의 순서를 키로 사용하는 연관배열을 반환한다.

          - 가져온 데이터는 $row[NUM]과 같은 식으로 사용한다.

       - 이 3가지 외에도 OBJ(객체) 등이 있다....

로그인을 구현하기 위한 방법 중 

 

 

session기반(서버)의 인증 방식

-> 클라이언트와 서버 간의 상태를 유지하기 위해 사용하는 방식

-> 단점으로 유저의 수가 늘어난다면 무리가 갈 수 있고, 데이터베이스의 성능에 저하를 줄 수 있다.

-> 확장성에 있어서 문제가 생길 수 있다. (비용이 많이 듬 , 쉽지 않음)

-> 확장을 위해 분산된 시스템을 설계할 경우 과정이 매우 복잡해 질 수 있다.

 

 

 

토큰(token) 기반 시스템의 방식

-> 오늘 주요하게 살펴볼 토큰 기반 방식 입낟.

-> stateless 

     - 토큰 방식에서는 유저의 인증 정보를 서버(세션) 에 담아놓지 않는다.

     - 이를 통해 서버를 이용할 때의 문제점을 많은 부분 해소가 가능하다.

 -> 1. 사용자가 id와 pw 로 로그인을 한다.

 -> 2. 서버는 이 정보를 검증한다.

 -> 3. 가지고 있는 계정정보와 입력된 정보가 정확하다면 유저에게 signed된 토큰을 발급해준다.(정상발급)

 -> 4. 유저측은 전달받은 토큰을 저장해두고, 로그인된 상태에서 접근가능 한 정보에대해 서버에 요청을 할 떄

        해당 토큰을 함께 서버에 전달을 한다. (헤더)

 -> 5. 서버는 토큰의 검증 과정을 포함하여, 주어진 요청을 처리하여 준다.

-> 로그인 정보가 여러 곳에서 사용가능 하다 . 발급 받은 토큰을 가지고 다른 시스템에 접근이 가능하도록

    설계할 수 있으며, 토큰에 선택적인 권한을 주어 발급을 할 수도 있다.

-> JWT의 경우 웹 표준 RFC 7519에 등록되어 있으므로 여러 환경에서 지원이 되며, 다방면으로 사용되고 있다.

-> 권한유효성을 검사 할 때 데이터베이스에 접근하지 않아도 된다는 장점이 있다.

    로그인한 사용자인지 확인을 할 때, 토큰의 유효 여부만 확인을 하면 된다. (데이터베이스 접근을 줄임)

-> 보안의 문제는 IP주소에대한 추가 검증등 을 통해 보완할 수는 있으나 여전히 보안 문제는 JWT를 사용시 일어날 수      있는 문제이다.

 

간단하게

 

장점 

-> 데이터베이스 접근을 최소화 할 수 있다.

-> 간편하다.

 

단점

-> 다른 글에서도 언급했듯 보안문제는 보완, 해결해 나가야할 과제이다.

-> 프론트엔드 측에서 토큰을 관리 해야 한다는 것

ec2 인스턴스에서 임대한 서버에 apm이나 nginx mysql php 등등 을 구축해서

 

사용을 하려다 보면 예상치 못한 오류들을 만나는데요 

 

권한과 관련된 문제들도 많이 만나고, ec2의 경우 유저명과 관련된 오류도 만나고...(ubuntu, ec2-user...)

 

..... 방화벽과 관련된 문제들도 만나는데요

 

저는 데이터그립과 ec2 서버에 설치된 mysql 데이터 베이스를 연동해서 사용하려 하는데 test connection에서

 

오류가 나타나서 확인해보니

 

ec2에 설치된 mysql 이 외부에서 접속이 가능하도록 해주어야 연결이 되더군요  !

 

아래와 같이 입력 하셔서 외부접속을 허용해주시면 됩니다. !

 

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root의 패스워드';

'Web & App > Mysql' 카테고리의 다른 글

Query문의 실행 순서  (2) 2020.10.27
Pagenation(페이징) [Offset-based, Cursor-based)  (0) 2020.10.17

저 같은 경우

 

php 스톰을 통해서 작업을 진행하고 있는데 mysql 데이터 베이스와 연동 후

 

테이블에 데이터를 넣고 쿼리문을 날려 확인을 해보려 했을 때 한글로 들어간 데이터 들은

 

???로 표시가 뜨더군요....

 

데이터베이스 는 utf8로 설정을 하는 과정을 했었기 때문에 php 의 문제라 생각 하여 찾아보니..

 

생각보다 오래된 게시글이 많더군요 그래서

 

setting 에 들어가서 파일 인코딩 형식 변경도 하고 해보았지만 잘 해결되지 않아 결국 이렇게 해결하였습니다.

 

데이터 베이스와 php 를 연동시키는 부분에서 

 

$pdo = new PDO("mysql:host=$DB_HOST;dbname=$DB_NAME", $DB_USER, $DB_PW);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec("set names utf8");

return $pdo;

 

빨간색 줄을 한칸 추가 해주시면 됩니다... ! 

 

전 이렇게 해결 되었습니다 

 

도움되는 부분이 있었으면 좋겠습니다 ~!

'Web & App > Php' 카테고리의 다른 글

PHPMailer를 이용하여 서버에서 메일 보내기  (0) 2020.10.20
PDO (PHP Data Object) 란?  (0) 2020.10.13

윈도우 환경인 제 로컬 컴퓨터에서 aws ec2 서버로 파일을 보내야 해서 한번 보내 봅시다.

 

특정 툴 들을 사용해서 보내는 방법도 있지만..

 

뭐 자주,, 이러한 작업을 수행하는 것은 아니므로 간단하게 보낼 수 도 있습니다.

 

먼저 cmd 창을 열고 

 

간단합니다..

 

scp -i [키페어의 위치와 키페어] -r [보내는 파일] [우분투서버에서 저장할 위치]

 

이렇게만 입력해 주시면 됩니다.

 

예시 : scp -i Desktop/ppp/ ~~~~~.pem -r Desktop/mmmmm.zip ubuntu@~~~~~compute.amazonaws.com:home/ubuntu

 

이와 같이 해주시면 간단하게 옮길 수 있습니다

 

간단하죠?

APM(아파치 + PHP + MYSQL)을 설치하기도 했었는데

 

이번엔 AWS EC2 서버에 NGINX-PHP-MYSQL을 설치하고 연동시켜봅시다.

 

최근에는 패키지 설치를 통해서 매우 간단하게 설치 할 수 있습니다.

 

예전에 APM을 패키지 말고 수동 소스설치로 한번 설치 한다고 헀다가 정말

 

정신적인 고통을 많이 느꼈던 적이.... 하지만 패키지 설치는 매우 간단하여 쉽게 할 수 있습니다.

 

서버에 접속 하여 root 사용자로 접근후 apt-get update를 해줍니다. (필요없는 분도 있겠죠? 뭐 그냥 치시면 됩니다.)

그 후 apt-get install nginx 를 통해서 nginx를 패키지 설치를 해줍니다.

 

servcie nginx restart

service nginx status 

명령어를 통해서 현재 nginx 설치 상태를 확인 할 수 있습니다.

 

본인의 aws 서버의 ip주소를 입력하면 아래와 같이 nginx가 설치 되었음을 확인할 수 있습니다.

 

이제 mysql 을 설치 해봅시다.

 

똑같이 명령어 창에

 

#apt-get install mysql-server mysql-client

 

를 입력하여 줍니다. 

 

그 후 #mysql - u root -p 를 통하여 mysql 서비스 콘솔에 액세스 할 수 있다.

 

처음에는 아무 패스워드를 치거나 그냥 엔터만 쳐도 접근 할 수 있습니다.

 

mysql 비밀번호 를 설정 하는 것은 다음에 한번 다루도록 하겠습니다. 

 

구글링 하시면 어렵지 않게 하실 수 있긴 합니다.

 

그렇다면 이제 php7.2를 설치하여 봅시다.

 

#apt-get install php7.2-fpm

 

을 입력해 줍니다.

 

그 후 자신이 필요한 사항에 따라 php 모듈을 설치하시면 됩니다.

 

저 같은 경우,

 

# apt-get install php7.2-mysql php7.2-mbstring php7.2-xml php7.2-gd php7.2-curl php7.2-bz2 php7.2-zip 

php7.2-json php7.2-readline

 

을 설치해 주었습니다.

 

이 작업이 끝났다면 이제 Nginx 기본 웹사이트 구성 파일을 설정 하여 주어야합니다.

 

/etc/nginx/sites-available 로 들어가

 

vi default 

 

하시면 아래와 같은 소스가 나옵니다.

 

기존의 원본 파일을 아래와 같이 수정하여 주시면 됩니다. (주석해제 및 수정)

 

저는 나중에 쿼리스트리 사용을 위하여 $uri/ /index.php?$query_string 도 추가하여 주었습니다.

(try_files에)

 

server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.php index.html index.htm;
server_name _;
location / {
try_files $uri $uri/ =404;
}
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
}
}

 

이후 #nginx -t 를 입력하여 구성파일에 문제가 없는지를 확인하여 줍니다

 

입력시 

 

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

 

이 나온다면 오류가 없는 것입니다.

 

이제 제대로 설정이 되었는지 확인을 위해

/var/www/html에 들어가서 

test.php를 만들어 줍시다.

 

vi test.php 를 하여 <?php phpinfo(); ?>를 입력한 후 저장하여 줍니다.

 

확인을 위하여 ip주소/test.php를 주소창에 입력하여 봅시다.

 

위와 같이 php 정보 페이지가 나와야지 정상적으로 설정 된 것입니다..~!

ec2 인스턴스 서버를 생성하였으면 

 

접속하여 설치도 하고 ~ 원하는 작업도 하여야 겠죠??

 

옛날에는 putty를 이용하여 접근을 해야 하지만 요즘은 윈도우에서 제공 을 많이 해주므로

 

다양한 방법을 이용하여 접근 가능 합니다.

 

저 같은 경우에는 cmd 를 통하여 접근 하여 보겠습니다.

 

체크된 부분을 선택하여 연결 버튼을 누르면 위와 같은 창이 나옵니다.

 

일단 위의 빨간색 부분을 복사 합니다.

 

그 후 cmd 창을 열고 (관리자권한 실행) 자신이 저장해놓은 키페어가 있는 폴더로 이동하여 줍니다.

 

그 후 복사한 부분을 붙여넣기 해줍니다.

 

첫 진입일 시 위와같은 화면이 나옵니다 yes를 입력하여 줍니다..

 

aws 우분투 서버에 접속 하였습니다.

 

여기서 부터 서버에서 원하는 작업을 수행하면 됩니다.

+ Recent posts