728x90
300x250

[PHP] OTP와 로그 시스템 (OTP and Log System)

 

root at 127.0.0.1

 

이번에 소개할 것은 OTP와 IP로그 시스템에 관해서 심도적으로 소개하려고 한다.

사용자 인터페이스 관점에서의 OTP는 크게 하드웨어와 소프트웨어로 분류할 수 있다고 가설을 두고 설계하였다.

보안 이슈에서 OTP 시스템이 도입된 지 불과 몇 년 되지 않았다고 본다.

IP 로그와 OTP 시스템의 차이점을 소개하겠다.

 

 


1. OTP란?

 

One time Password라는 용어로 일회성 비밀번호를 생성하는 시스템이라고 부른다.

예를 들면, 사용자가 보유하고 있는 비밀번호 체계로 인증체계를 구현할 때 사용되어진다.

 


2. 사용자 인터페이스 설계하기(Designing the User Interface)

 

사용자 관점에서 "OTP" 인터페이스를 고안하였다.

크게 어렵지 않은 인터페이스 화면으로 디자인 할 수 있다.

 

 

그림 2-1. 소프트웨어 - OTP Generator(OTP 생성기) - 도도(Dodo)

그림 2-1은 소프트웨어 형태의 OTP 생성기이다.

 

 

그림 2-2. 하드웨어 OTP Generator(Hardware OTP Generator) - 도도(Dodo)

 

그림 2-2는 하드웨어 형태의 OTP 생성기이다.

 


3. 웹 페이지에서의 OTP 생성하기(Creating an OTP on a Web Page)

 

아래의 그림은 웹 페이지에서 OTP를 생성하는 것이다.

 

그림 3-1. OTP 생성 구현의 예 - 도도(Dodo)

 

OTP 생성에 관한 소스코드이다. 크게 어렵지 않은 구조로 작성할 수 있다.

 

<?php
/*
 *  Created Date : 2018-08-29
 *  Filename: index.php
 *  Author: Dodo
 */
?>

<?php

function generate(){
    return time() * mt_rand(1, 5);   
}

?>
<!DOCTYPE html>
<html lang="ko">
<head>
    <meta name="viewport" content="width=320; user-scalable=no" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8">
 <title>OTP 발생기(OTP Generator)</title>
 <link rel="stylesheet" type="text/css" href="./css/mystyle.css">
</head>
<body>

<!-- OTP Generator Model -->
<table style="width: 100%;">
 <tr>
  <td style="background-color: #FA5882; height:40px">
   <span style="font-size:20px; color:#FFF; font-weight:bold;">
    OTP Generator(OTP 생성기)
   </span>
  </td>
 </tr>
 <tr>
  <td>
   <input type="text" class="otp" name="otp" value="<?php echo generate(); ?>" style="width:100%;height:30px;">
  </td>
 </tr>
 <tr>
  <td>
   <input type="submit" class="generate" value="생성하기" onclick="window.location.reload();">
  </td>
 </tr>
</table>

</body>
</html>

 

 

 

영상 1. OTP 생성기 / 시연 - 도도(Dodo)

 


4. 웹 페이지에서 로그

 

웹 페이지에서 사용자 로그를 생성하는 것에 대해서 소개한다.

 

CREATE TABLE IF NOT EXISTS `log` (
      `id` int(11) NOT NULL auto_increment,
      `createDate` datetime NOT NULL,
      `subject` text NOT NULL,
      `ip` text NOT NULL,
      PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

 

데이터베이스의 테이블 설계는 다음과 같이 간단한 구조로 설계할 수 있다.

 

 

위의 코드를 실행하면 아래처럼 반응하는 것을 볼 수 있다.

 

 

그림 4-1. 웹 페이지에서의 로그 - 도도(Dodo)

 

 

영상 2. 로그 생성 반응 시연 - 도도(Dodo)

 


5. 아파치 웹 서버

 

아파치 웹 서버는 아파치 파운데이션(Apache Foundation)에서 만든 프로젝트이다.

http://www.apache.org

 

 

그림 5-1. 아파치 소프트웨어 재단(Apache Software Foundation) - 도도(Dodo)

 

                   표 1. 영어, 한글로 읽어보기

 

번호

영어 단어

한글 읽기(Hangul)

1

Open

개방, 열다

오픈

2

Software

소프트웨어

소프트웨어

3

Soft

부드러운

소프트

4

Innovation

혁신

이노베이션

5

Community

커뮤니티(공동체)

커뮤니티

6

Consider

고려하다,
중히 여기다

컨시더

 

 

그림 5-2. 아파치 프로젝트 소개 - 도도(Dodo)

 

                                                                         표 2. 영어, 한글로 읽어보기

 

번호

영어 단어 또는 문장

한글 읽기

1

What is the Apache HTTP Server Project?

아파치 HTTP 서버 프로젝트는 무엇입니까? 

 왓 이스 더 아파치 에이치티티피

서버 프로젝트?

2

The Apache HTTP Server Project is a collaborative software development

Apache HTTP Server 프로젝트는
공동 소프트웨어 개발입니다.

디 아파치 에이치티티피 서버 프로젝트 이스 어 콜라브레이티브 소프트웨어 디벨러프멘트.

3

Collaborative

공동

콜라보레이티브

4

effort

노력

에포트

5

Mailing Lists

메일링 리스트

메일링 리스트

6

Trunk (dev)

 트렁크 (개발)

뜻(의역): 저장 보관소

트렁크 (디브)

 

 


6. 맺음글(Conclusion)

 

OTP 시스템과 로그 시스템에 대해서 살펴보았다.

 


7. 참고자료(Reference)

 

1. OTP, Last Modified , Accessed by 2018-08-29, https://ko.wikipedia.org/wiki/일회용 비밀번호

2. PHP: mysql_query, Last Modified, Accessed by 2018-08-29, http://php.net/manual/en/function.mysql-query.php

3. PHP: mysql_set_charset - Manual, Last Modified, Accessed by 2018-08-29, http://php.net/manual/en/function.mysql-set-charset.php

4. Welcome to The Apache Software Foundation!, Last Modified, Accessed by 2018-08-29, https://www.apache.org/

5. About the Apache HTTP Server Project - The Apache HTTP Server Project, Last Modified, Accessed by 2018-08-29, http://httpd.apache.org/ABOUT_APACHE.html

 

Editor: 도도는 도도의 초록누리의 에디터이다. 샵인클루드 족이다.

반응형
728x90
300x250
[Mechanics] 역학을 공부하면서

 

역학이라는 게 정말 중요하다고 주장한다.

기계 가공을 하는데 있어서도 재료를 결정할 수가 있다.

 

재료역학에서 가장 중요한 식은 응력에 관한 식이다.

 


1. 재료역학에서 중요한 식

 

 

 

 수직응력(Normal Stress)

전단응력(Shearing Stress)

 

 

수직응력과 전단응력에 관한 식이다. 식으로는 큰 차이를 느끼진 못 한다.

그래서 몇 가지 간단한 시뮬레이션을 주제를 잡고 진행하게 되었다.

 

다음은 안전계수(factor of safety ; S)에 관한 식이다.

 

 

 

 안전계수(factor of safety ; S)

 

안전계수를 정하는 것은 정말 중요한 일이다.

말 그대로 재료를 사용하는데 있어서 파괴 등이 일어나지 않고, 적정한 범위를 유지하려면 중요한 식이다.

 

아래의 코드는 하드코딩(Hard-Coding)으로 작성한 자바 프로그램 코드이다.

 

 

 /*
 * Created: 2018-05-29
 * Subject: Calculate.java
 * Author: Dodo
 */

 public class Calculate {
 
      private final double PI = 3.14159265359;
 
      public Calculate() {
 
      }
 
      public double generalArea(double dimension) {
             return ( PI / 4 ) * (dimension * dimension);
      }
 
      public Stress getStress(Stress value) {
   
             double weight = value.getWeight();
             double area = value.getArea();
             double stress = weight / area;
  
             value.setStress(stress);
             return value;
     }

     public double getSafety(Stress allow, Stress yield) {
  
             double safety = allow.getStress() / yield.getStress();
             return safety;
     }

}

 Calculate.java

 

 

 /*
  * Created: 2018-05-29
  * Subject: Stress.java
  * Author: Dodo
*/

public class Stress {
 
       private double stress;
       private double weight;
       private double area;

   

       public Stress() {
            this.stress = 0;
            this.weight = 0;
            this.area = 0;
       }
 
       public Stress(double stress, double weight, double area) {
            this.stress = stress;
            this.weight = weight;
            this.area = area;
       }

 

       public double getStress() {
            return stress;
       }
 
       public void setStress(double stress) {
            this.stress = stress;
       }
 
       public double getWeight() {
            return weight;
       }
 
       public void setWeight(double weight) {
            this.weight = weight;
       }
 
       public double getArea() {
            return area;
       }
 
       public void setArea(double area) {
            this.area = area;
       }
  
 } 

 Stress.java

 

 /*
 * Created: 2018-05-29
 * Subject: Program.java
 * Author: Dodo
*/

 

 import java.io.File;
 import java.io.FileWriter;

 public class Program {
 
       private static final int MAX = 10000;
 
       public static void main(String[] args) {
              experiment();
       }
 
       public static void experiment() {
   
              String txt = "테스트입니다!!" ;
              String fileName = "test11.txt" ;      
       
              int retval1 = -1;
              int retval2 = -1;

 

              try{
                   // 파일 객체 생성
                   File file = new File(fileName) ;

                   // true 지정시 파일의 기존 내용에 이어서 작성
                   FileWriter fw = new FileWriter(file, true) ;

                   // 계산
                   Calculate calculate = new Calculate();

                   int count = 1;
      
                   double weight = 10;
                   double area = 0;  
                   double dimension = 0;
       
                   double resultStress = 0;
                   double targetMin = 8.1;
                   double targetMax = 9.4;

           

                   String strTxt ;
      
                   strTxt = "count,weight,dimension,area,stress,result";
                   // 파일안에 문자열 쓰기

                   fw.write(strTxt);
                   fw.write("\r\n");
                   fw.flush();
      
                   for ( int i = 0; i < MAX; i++ ) {
       
                      weight = i;
       
                      for ( int j = 0; j < MAX; j++ ) {
        
                           dimension = j;
                           area = calculate.generalArea(dimension);
        
                           resultStress = weight / area;
         
                           strTxt = count + "," + weight + "," + dimension + "," + area + "," + resultStress + " ,실험";
                
                           retval1 = Double.compare (resultStress, targetMin);
                           retval2 = Double.compare(resultStress, targetMax);
        
                           if ( retval1 > 0 && retval2 < 0 ) {
                                  strTxt = count + "," + weight + "," + dimension + "," + area + "," + resultStress + " ,참";
                           } // end of if
        
                           // 파일안에 문자열 쓰기
                          fw.write(strTxt);
                          fw.write("\r\n");
                          fw.flush();
        
                          count++;
         
                   } // end of for
      
               } // end of for

               // 객체 닫기
               fw.close();

        }catch(Exception e){
               e.printStackTrace();
        } // try~catch
       
    }
 
}

 Program.java

 

내가 찾고자 하는 것은 다른 것이 아니었다.

 

double weight = 10;
double area = 0;  

double dimension = 0;
       
double resultStress = 0;
double targetMin = 8.1; // (MPa)
double targetMax = 9.4; // (MPa)

 

주어진 응력(Sigma_{Min})은 8.1MPa, 응력(Sigma_{Max})은 9.4MPa이다.

이 범위에 부합하는 임의의 W, A, D을 결정할 수 있는 수치의 값이 어떠한지를 나는 찾고 싶었다.

 

 

 

이러한 주제이다.

사람이 풀라고 하면 못 푸는 문제이다.

 


맺음) 역학은 물체에 힘이 작용할 때 현상을 공부하는 것이다.

 

이러한 기본적인 식 이외에도 무수히 식이 많다.

다 외우는 건 한계가 있으며, 역학을 재미있게 공부하는 것은 현상을 이해하는 것이 중요하다고 본다.

반응형

+ Recent posts