요즘 다시 팀원들과의 프로젝트를 위해 서버를 구축하여 사용하고 있습니다.

 

AWS EC2 프리티어를 이용하여 서버를 구축해서 사용하고 있는데,

 

프리티어 이고 아이디가 아직 1년도 지나지 않았는데, 0.27 달러 정도 아주 조금씩이라도 과금이 쌓이고 있더라고요.....!

 

그래서 Billing을 들어가서 상세 내역을 보았는데, 일단 대부분이 Elastic IP (탄력적 IP허용) 에 과금이 조금씩 되고 있더라구요...!

 

탄력적 IP기능이란, AWS EC2의 경우 IP를 동적할당 함으로써 인스턴스를 중지 하고 다시 실행할 경우

 

IP주소가 바뀌게 되는데, 이럴때 인스턴스를 껐다 켜도 IP주소를 고정으로 사용하고 싶을 때 사용하는 기능입니다.

 

프리티어는 한달에 750시간까지 무료인 것으로 알고 있고, 인스턴스 하나만 돌릴경우 한달 내내 켜놓아도 과금이 되지 않는 시간입니다.

 

인스턴스를 여러 개 사용하거나 한다면, 과금을 조금 하거나, 인스턴스 사용량을 조절을 해주어야 겠지요....?

 

사용량을 조절하는 과정에서 탄력적IP는 꽤나 편리할 것으로 보이지만, 저는 일단 그쪽에서 과금이 조금 되길래

 

인스턴스가 아직 한개이고, 중지 시킬일도 별로 없어서 일단 탄력적 IP를 릴리스 했습니다.

 

RDS 쪽에서도 아주 조금 과금이 되던데 백업스토리지 쪽에서 빠져나가고 있네요..!

 

사실 지금까지 합쳐도 300원 수준이라... 하지만 찝찝하고 약간은 불안한 마음...ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

 

 

** 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를 사용시 일어날 수      있는 문제이다.

 

간단하게

 

장점 

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

-> 간편하다.

 

단점

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

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

+ Recent posts