728x90

A: 원본서버     B: 테스트서버

환경 : Windows 2003 R2 

오라클 : 10.2.0.1 ==> 패치셋 적용후 10.2.0.5.....

캐릭터셋 : AMERICAN_AMERICA.US7ASCII

 

DB이전 작업 순서... 아래...

*** 오라클 10g 새로 설치하고 데이터 덤프하기 ***


1. D:\DR_PLUS\Oradata\10201_database_win32\database\autorun 실행...

   서버이름을 TEST.. 암호도 TEST
   설치경로는 C드라이브로 변경

 

2. D:\DR_PLUS\Oradata\p8202632_10205_WINNT\Disk1\setup.exe 실행...

   경로를 위 버젼에서 설치한 경로로 변경해준다.. db_2를 db_1으로 ...

 

2-1. 패치 후 DB가 제대로 올라오지 않는다... 아래 명령문을 실행해 준다.
  
   * /as sysdba 접속
   * startup upgrade;
   * @c:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\catupgrd.sql
       -- 컴 성능에 따라 30분에서 1시간 남짓 걸린다.
   * shutdown immediate;
   * startup;
   * select status from v$instance;

 

3. 캐릭터셋 바꾸기 ( AMERICAN_AMERICA.US7ASCII )
   -- 레지스트리에서 바꿨더라도 db에서는 안바뀌어 있다.
   --  KO16MSWIN949 요걸로 되어있다.
   -- 'NLS_CHARACTERSET' = US7ASCII 로 변경한다.  

   -- 조회하기
      SELECT NAME,VALUE$ FROM SYS.PROPS$
      WHERE NAME='NLS_LANGUAGE'
      OR NAME='NLS_TERRITORY'
      OR NAME='NLS_CHARACTERSET';
  
   SQL> /AS SYSDBA
   SQL> SHUTDOWN IMMEDIATE;
   SQL> STARTUP MOUNT;
   SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
   SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
   SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
   SQL> ALTER DATABASE OPEN;
   SQL> alter database character set internal_use US7ASCII;
   SQL> SHUTDOWN IMMEDIATE; -- or NORMAL
   SQL> STARTUP;

 

 -- ( 캐릭터셋 바꾸고 나면 SQLPLUS와 오라클 에러메세지에서 한글이 깨진다 )
      해결방법은... IMPDP로 테이블 스페이스 다 올려놓고...
      나중에 다시 KO16MSWIN949 로 캐릭터셋 바꿔야 함.


4. 테이블 스페이스 생성...(MTS_EDI, MTS_PMPA, MTS_OCS, MTS_EDI_IDX, MTS_PMPA_IDX, MTS_OCS_IDX)

 

   CREATE TABLESPACE MTS_EDI
   DATAFILE 'D:\DR_PLUS\ORADATA\MTS_EDI.DBF' SIZE 2000M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;

 

   CREATE TABLESPACE MTS_EDI_IDX
   DATAFILE 'D:\DR_PLUS\ORADATA\MTS_EDI_IDX.DBF' SIZE 500M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;


   CREATE TABLESPACE MTS_PMPA
   DATAFILE 'D:\DR_PLUS\ORADATA\MTS_PMPA.DBF' SIZE 2000M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;

 

   ALTER TABLESPACE MTS_PMPA ADD DATAFILE 'D:\DR_PLUS\ORADATA\MTS_PMPA1.DBF' SIZE 2000M

 

   CREATE TABLESPACE MTS_PMPA_IDX
   DATAFILE 'D:\DR_PLUS\ORADATA\MTS_PMPA_IDX.DBF' SIZE 2000M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;

 

   CREATE TABLESPACE MTS_OCS
   DATAFILE 'D:\DR_PLUS\ORADATA\MTS_OCS.DBF' SIZE 2000M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;

 

   ALTER TABLESPACE MTS_OCS ADD DATAFILE 'D:\DR_PLUS\ORADATA\MTS_OCS1.DBF' SIZE 2000M

   ALTER TABLESPACE MTS_OCS ADD DATAFILE 'D:\DR_PLUS\ORADATA\MTS_OCS2.DBF' SIZE 2000M

 

   CREATE TABLESPACE MTS_OCS_IDX
   DATAFILE 'D:\DR_PLUS\ORADATA\MTS_OCS_IDX.DBF' SIZE 2000M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 2M;

 

   ALTER TABLESPACE MTS_OCS ADD DATAFILE 'D:\DR_PLUS\ORADATA\MTS_OCS_IDX1.DBF' SIZE 2000M

 

5.  계정 생성 및 권한주기..
  CREATE USER mts_edi
  IDENTIFIED BY penta
  DEFAULT TABLESPACE MTS_EDI
 
  GRANT connect, resource, dba to mts_edi;

 

  CREATE USER mts_pmpa
  IDENTIFIED BY penta
  DEFAULT TABLESPACE MTS_PMPA
 
  GRANT connect, resource, dba to mts_pmpa;

 

  CREATE USER mts_ocs
  IDENTIFIED BY penta
  DEFAULT TABLESPACE MTS_OCS
 
  GRANT connect, resource, dba to mts_ocs;


6. impdp expdp 폴더 할당하기( A, B 서버 모두 설정 )

  --원본 서버에 접속하여 아래 명령어 실행.( /as sysdba )
  create directory expdp_dir as 'c:\backup';  
  grant read,write on directory expdp_dir to mts_edi;
  grant read,write on directory expdp_dir to mts_pmpa;
  grant read,write on directory expdp_dir to mts_ocs;

 

  -- TEST서버에서 작업.
  create directory expdp_dir as 'd:\dr_plus';
  grant read,write on directory expdp_dir to mts_edi;
  grant read,write on directory expdp_dir to mts_pmpa;
  grant read,write on directory expdp_dir to mts_ocs;

 

  create directory impdp_dir as 'd:\dr_plus';
  grant read,write on directory impdp_dir to mts_edi;
  grant read,write on directory impdp_dir to mts_pmpa;
  grant read,write on directory impdp_dir to mts_ocs;

 

7. 데이터를 가져올 서버에서 EXPORT 받기 ( expdp )

 

  expdp 사용자/암호@SID  directory=디렉토리명 dumpfile=파일명  EXCLUDE=TABLE:\"IN \(\'테이블명1\', \'테이블명2\'\)\"


  expdp mts_edi/penta directory=expdp_dir dumpfile=fulledi.dmp
  expdp mts_pmpa/penta directory=expdp_dir dumpfile=fullpmpa.dmp
  expdp mts_ocs/penta directory=expdp_dir dumpfile=fullocs.dmp EXCLUDE=TABLE:\"IN \(\'opd_order_backup\', \'ipd_order_update_backup\'\)\"

 

8. IMPDP

IMPDP MTS_EDI/PENTA DIRECTORY=impdp_dir dumpfile = fulledi.dmp Logfile = edilog.log remap_schema=mts_edi:mts_edi remap tablespace=mts_edi:mts_edi exists_table_action=replace

 

IMPDP mts_pmpa/PENTA DIRECTORY=impdp_dir dumpfile = fullpmpa.dmp Logfile = edilog.log remap_schema=mts_edi:mts_edi remap tablespace=mts_edi:mts_edi exists_table_action=replace

 

IMPDP mts_pmpa/penta DIRECTORY=impdp_dir dumpfile = fullocs.dmp Logfile = edilog.log remap_schema=mts_edi:mts_edi remap tablespace=mts_edi:mts_edi exists_table_action=replace

 

** 만일 expdp 나 impdp 실행시 ORA-39213:metadata processing is not available 오류 발생시
   sqlplus /as sysdba 접속하여 아래 쿼리문 실행.
   sql> execute dbms_metadata_util.load_stylesheets


* 캐릭터셋을 다시 바꿔줘야 한글이 제대로 보여진다.(이것때문에 이틀간 씨름했음.ㅠㅠ.)
   SQL> /AS SYSDBA
   SQL> SHUTDOWN IMMEDIATE;
   SQL> STARTUP MOUNT;
   SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;
   SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
   SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
   SQL> ALTER DATABASE OPEN;
   SQL> alter database character set internal_use KO16MSWIN949;
   SQL> SHUTDOWN IMMEDIATE;
   SQL> STARTUP;

반응형
728x90

 

 

 

 

 댓글 쓰기  

  •  
반응형
728x90

회사에서 사용중인 PL/SQL Developer
토드나 오렌지를 쓰다가 강제로 사용하게 되서 첨에는 불편했으나.. 금방 익숙해진다.

첨에 버벅 댈때 설정을 알려준 내용을
보내준 그대로 긁어 놓음..ㅋㅋㅋ
---------------------------------------------
-PL/SQL Developer

- Window Types

- SQL Window
- AutoSelect Statement : 이게 설정되어 있으면 여러 sql을 써놨을때 자동으로 선택되어 하나만 실행되.

쿼리가 많아지면...좀 멍청해 지기도 해...^^;;;

- Null value color : sql 결과창에 null value color 세팅...좀 눈에 띄는걸루 해 놓는게 보기편할꺼고...

- Record per page : sql 실행했을때 default로 뿌려지는 갯수인데

기본적으로 Automatically determined 인데...난 불편해서

All records 로 해놓고써.. sql 실행결과가 많을때 중간에 끊고싶으면 F7를 누르면 되거든..^^


 User Interface

- Options

- Autosave Desktop 활성화

: 이게 활성화되어있으면 plsql 을 다시 실행했을때, 직전 종료했던

sql file들이 자동으로 다 열려( 단, 그 파일들이 저장된 경우에만..)

- Editor

- Syntax Highlighting

- Keyword case : Uppercase - keyword면 자동으로 대문자화( default값인가? 모르겠다..)

- Other

- Highlight edit line : 말그대로...

 

반응형
728x90

■ 포인터 스터디 [1]■
    

■ 1. 포인터란…■
    
    ◐ 변수와 주소

      우리가 흔히 사용하는 변수. 변수를 이름 그대로 해석해 보면 「변할 수 있는 값」이라고 하네요.

      그렇지만 값이라고 하기에는 조금 무리가 있다. 하나의 값이 다른 값으로 그냥 바뀔 수 는 없으니.

     변수라는 것을  좀 더 구체적으로 말하자면 『값을 저장할 수 있는 메모리』라고 할 수 있다.

     이미 아실테지만, 변수는  메모리의 일부입니다.

     물론 모든 메모리가 변수가 되는건 아니지만  그 가능성은 가지고 있다.

    우리가 변수를 선언할 때 컴파일러는 자기가 알아서 비어있는 메모리를 찾아 그 메모리를 변수로 사용하게 되는 거다.
     그렇다면 컴파일러는 어떻게 각 메모리를 구분하면 우리가 집이나 사람을 구분할 때 바로 주소나 주민등록번호 같은 번호를 사용하
    지요. (주소는 일부만 번호이긴 하지만… 더 쉽게 아파트의 호수를 생각하면 된다.) 컴퓨터도 마찬가지 이다.

    각각의 메모리에 주소를  붙여 구별을 하는 것이다.

    그리고 컴퓨터의 메모리는 한줄로 이어져 있기 때문에(이를 「선형 메모리」라 한다) 연속된 값으로 주소값이 표시 한다.

    즉 컴퓨터의 메모리 크기가 100이라고 하면 0부터 시작해서 99까지의 주소가 존재하는  것이다.

   그런데 컴퓨터는 일반적으로 수백만 이상의 크기를 가지므로 그만큼 주소값의 범위도 커지게 된다.

    그래서 흔히  주소값은  4바이트의 long형으로  나타내는 것이다.

    ◐ 포인터 상수와 변수

      포인터 상수는 별게 아니다. (물론 포인터 변수도 별게 아니지만…) 포인터 상수는 바로 위에서 말씀드린 주소를 말하는 겁니다.

     당연히 크기도 4바이 트이다  컴퓨터의 가장 첫번째 메모리의  포인터는 0x00000000이 된다
      그 다음은 0x00000001…(앞에 0x를 붙인건 16진수라는거) 그렇다면 포인터 변수는  바로 「포인터 상수를  저장할 수

     있는 변수」이다.. 포인터 변수의 크기도 포인터 상수처럼 4바이트 이다.

      char *p; // 포인터 변수를 선언할 때 「*」를 붙이고

      이 p라는 포인터 변수는 포인터를 저장할 수 있다. char의  포인터형이 긴 하지만 포인터는 포인터 입니다.

     앞에 정해진 자료형이 무엇이든 상관없이  크기는 4바이트인 거다.

    

      char ch = 'A';  // 'A'의 코드 값은 65 이다
      char *pc = &ch; // 변수의 주소값을 알아낼 때는 「&」를 사용한다.
                      // ch의 주소값이 0x0000001A라고 가정한다.
    ┏━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃        ┃       ┏━━━━━━━━━━━━━━━━┓                                              ┃
    ┣━━┫       ▼                                                                ┃
    ┃주소   ┃   10  1A  1B  1C  1D  1E                21  22  23  24  25   ┃
    ┃        ┃ ┳━┳━┳━┳━┳━┳━┳━━━━━━┳━  ━━━━━━ ┳ ━┳┃
    ┃ 값    ┃ ┃    ┃65┃    ┃    ┃    ┃    ┃    …                ┃1A┃00┃00┃00┃    ┃┃
    ┃        ┃ ┻━┻━┻━┻━┻━┻━┻━━━━━━┻━━━━━━━┻━┻   ┃
    ┃이름  ┃       ch                                pc                                                                            ┃
    ┗━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

      컴퓨터가 수를 저장하는 방법은 좀 특이 하다.  바이트 별로 거꾸로 저장 하는 것.

     즉, 0x12345678을 첫번째 바이트에 78,  두번째 바이트에 56,세번째 바이트에 34,

    네번째 바이트에 12를 저장하는 것  이유는  난중에 한번더...

      한가지 더. 이 글에 사용되는 모든 주소값은 임의로 붙인 것이다. 컴파일 러가 마음대로 빈 공간을 찾아

    사용하기 때문에 특별히 정해진 값이 있을수가 없기 때문이다

      int ih = 0x13;
      int *pi = &ih;
    ┏━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃주소   ┃   41  42  43  44  45  46                5A  5B  5C  5D  5E                                       ┃
    ┃        ┃ ┳━┳━━━┳━┳━┳━┳━━━━━━┳━━━━━━━┳━┳   ┃
    ┃ 값    ┃ ┃    ┃13┃00┃   ┃    ┃   ┃    …                 ┃42┃00┃00┃00┃ ┃  ┃
    ┃        ┃ ┻━┻━━━┻━┻━┻━┻━━━━━━┻━━━━━━━┻━┻   ┃
    ┃이름  ┃       ih                                pi                                                                              ┃
    ┗━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

      long lh = 0x00781253;
      long *pl = &lh;
    ┏━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃주소   ┃   65  66  67  68  69  70                7A  7B  7C  7D  7E                                     ┃
    ┃        ┃ ┳━┳━━━━━━━┳━┳━━━━━━┳━━━━━━━┳━┳   ┃
    ┃ 값    ┃ ┃    ┃53┃12┃78┃00┃  ┃    …                ┃66┃00┃00┃00┃ ┃  ┃
    ┃        ┃ ┻━┻━━━━━━━┻━┻━━━━━━┻━━━━━━━┻━┻  ┃
    ┃이름  ┃       lh                                pl                                                                               ┃
    ┗━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

    ◐ *연산자의 쓰임새

      모든 연산자가 그렇듯이 *와 &도 여러가지 쓰임새를 가지고 있다. 우선 *는 곱을 구하기도 하고 위에서

     사용된 것 처럼 자료형에 붙어 포인터 변수임  을 나타내기도 한다.

      (이 경우는 연산자라고 보기는 좀 어렵지요)  그리고 또 한가지. 「주어진 주소의 값을 읽어내는」 일도 한다.

   
    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃  #include <stdio.h>                                                ┃
    ┃                                                                    ┃
    ┃  void main(void) {                                                 ┃
    ┃      int i;                                                        ┃
    ┃      for (i = 0; i < 100; i++)                                     ┃
    ┃          printf("%c", *(char *)i);                                 ┃
    ┃  }                                                                 ┃
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

      실행해 보면 화면이 이상한 문자들만 나온다.  이 문자들이  뜻하는게 무엇이나면  i 값이 0부터 99까지 증가할
       테고 printf 문에서 무언가를 출력하라 한다.. 그 부분만 뜯어보면,

      *(char *)i

      i가 0인 경우 위의 코드는 다음과 같게된다.

      *(char *)0

      우선 0이라는 수(상수)를 char *형으로 캐 스팅 했다. 이제 0은 그냥 수가 아닌 char 크기(1 바이트)의 메모리를 나타
     낼 수 있는 포인터 상수가 된다. 그리고 거기에 *연산자를 붙여 값을 읽어내고 있다. 이 소스 코드는  0번 메모리의 값을 읽어서 출력
     하는 것. 이렇게 99번째 메모리까지  모두 100개의 메모리의 내용을 보여주는 코드인 것. 물론 우리가 알아볼 수는 없는 글자들만 

     잔뜩   있지 만.

     만약에 (char *)로 캐스팅을 안하고 *0이라고만 쓰면  에러가 난다

    *연산자는  그 다음에 오는 내용을  포인터라고 가정을 하기는 하는데, 거기서 얼마만한 크기의 메모리를 읽어와야  하는지를 모르는
    일이다.. 즉 *앞의 자료형은 「그 포인터의 값을 *를 사용해서 읽어올 때 얼마만한 크기를 읽어와야 하는지를 정해주는 것」

     이라 할 수 있다.  
    ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃  #include <stdio.h>                                                ┃
    ┃                                                                    ┃
    ┃  void main() {                                                     ┃
    ┃      int ih = 0x0506;                                              ┃
    ┃      char *pp = (char *)&ih;                                       ┃
    ┃                                                                    ┃
    ┃      long lh = 0x01020304;                                         ┃
    ┃      char *pc = (char *)&lh;                                       ┃
    ┃      int *pi = (int *)&lh;                                         ┃
    ┃                                                                    ┃
    ┃      printf("- integer -\n");                                      ┃
    ┃      printf("ih=%X\n", ih);                                        ┃
    ┃      printf("(char)ih=%X, *(char *)=%X\n", (char)ih, *pp);  …①   ┃
    ┃                                                                    ┃
    ┃      printf("\n- long integer -\n");                               ┃
    ┃      printf("lh=%lX\n", lh);                                       ┃
    ┃      printf("(char)lh=%X, *(char *)=%X\n", (char)lh, *pc);  …②   ┃
    ┃      printf("(int)lh=%X, *(int *)=%X\n", (int)lh, *pi);     …③   ┃
    ┃  }                                                                 ┃
    ┃                                                                    ┃
    ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
    ┃  <결과>                                                            ┃
    ┃  - integer -                                                       ┃
    ┃  ih=506                                                            ┃
    ┃  (char)ih=6, *(char *)=6                                           ┃
    ┃                                                                    ┃
    ┃  - long integer -                                                  ┃
    ┃  lh=1020304                                                        ┃
    ┃  (char)lh=4, *(char *)=4                                           ┃
    ┃  (int)lh=304, *(int *)=304                                         ┃
    ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

      ①의 첫번째 값은 int형 0x0506을 char형으로 캐스팅한 값이다. 당연하게 도 int는 2바이트,

      char형은 1바이트이므로 char형을 벗어나는 부분이 잘려나간 6이 결과가 된다.
      포인터를 사용한 연산도 마찬가지다. pp는  1바이트 크기의 변수를 포인트하는 포인터 변수이다.

     이 pp 변수를 사용해 그 메모리를  읽어오게 되 면 그 첫번째 바이트 한 바이트만을 읽어오게 되는 것이다.

    ┏━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
    ┃주소┃   41  42  43  44  45  46                5A  5B  5C  5D  5E   ┃
    ┃    ┃ ┳━┳━━━┳━┳━┳━┳━━━━━━┳━━━━━━━┳━┳ ┃
    ┃ 값 ┃ ┃  ┃06┃05┃  ┃  ┃  ┃    …      ┃42┃00┃00┃00┃  ┃ ┃
    ┃    ┃ ┻━┻━━━┻━┻━┻━┻━━━━━━┻━━━━━━━┻━┻ ┃
    ┃이름┃       ih                                pp                   ┃
    ┗━━┻━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛

      pp는 char *형 변수이므로 *pp는 char 만큼(1바이트)만을  읽어오게 된다는것이다.

     ih를 char형으로 캐스팅한 결과와 같게 된다. 당연히  같아야 하는 거이다.

      만약 수를 거꾸로 저장하지 않고 순서대로 저장을 한다면 두 결과가 틀리게 나올 것이다

    . 포인터를 사용해 어떤 변수의 일정 크기만큼만을 읽어오려고 할 때 문제가 생기므로. 굉장히 복잡한 과정이 요구된다.

      이 때문에 컴퓨터는 수를 거꾸로 저장하는 것이다


    ◐ &연산자의 쓰임새

      연산자 &는 비트 연산자로써 AND 연산을 행하는 연산자이다. 그런데 여기서 address-of 연산자의 기능도 행하고 있습니다.

     이름 그대로 「어떤 변수 의 주소를 알아내는」 역할을 하는 연산자 이다.

     상수는 메모리에 위치하지 않으므로 주소가 있을 수 없고 당연히 &연산자도 사용하지 못하게 된다.

    ◐ *연산자와 &연산자의 관계

      *연산자는 어떤 주소의 값을 읽어오는 연산자라고 했고 &연산자는  어떤 변 수의 주소를 알아내는 연산자라고 했다.

      이 두 연산의  기능은 완전히 반 대라고 할 수 있다. 물론 변수에 대해 사용할 때 이다.  (상수에서는 *는 가능하지만 &는 아예 사용을

      하지 못한다

    ◐ 포인터 변수를 사용해 간접적으로 변수의 값 참조하기

      int ih = 0x1234;
      int *pi = &ih;
      *pi = 0x5678;

      pi는 ih의 주소를 가지고 있고 그  주소의 메모리를 *연산자를 통해 참조하고 있습니다. 그 메모리에 0x5678이라
    는 값을 넣고 있다. 한 문장으로 설명한다면 「pi의 값을 주소로 하는  2바이트 크기의 메모리에 0x5678를 대입하는」 것이다.


      int ih = 0x1234;
      char *pc = &ih;
      *pc = 0x56;

    ih 값중의 char형으로 참조 가능한 부분인 첫번째 바이트  만이 바뀌게 된다.

   결과적으로 ih는 0x1256이 되는 것이다.

    ◐ void형 포인터

      포인터 변수를 선언할 때 * 앞에는 자료형을 정해준다고 했다. 

      int ih = 0x1234;
      void *vc = (void *)&ih;

      물론 아무런 에러도 나지 않다. vc도 포인터 변수이므로 당연하게도 ih변수의 포인터를 저장할 수가 있는 것이다.

      *vc = 0x5678;

      이 코드도 에러가 나지 않을까요? 조금만 생각해 보면 알 수 있다.  당연 히 에러가 발생 한다.

      void형은 크기를 갖지 않기 때문에 얼마만한 크기 만큼의 메모리에 값을 넣어야 할지를 모르는 거이다.

      
      *(int *)vc = 0x5678;

      이렇듯 void형 포인터는 어떤 포인터 값도 가질 수 있지만,  직접적으로 참조를 할 수는 없고 반드시 캐스팅을

      해 주야 하는 포인터 이다.  별로 사용될 곳이 없어 보이기도 하지만 나중에 프로그래밍을 하다보면  의외로 쓰이
    는 곳이 많기도 하다.

    ◐ 참조에 의한 호출 (참조 호출, Call by reference)

        int i = 3;

      printf("%d", 3); //…①
      printf("%d", i); //…②

     컴파일러가 컴파일을 마친 이후에는 완전히 동일한 코드가 됩니다. 다시 말해서  ②번
    의 경우 i 대신에 i가 가진 값인 3을 대치시켜서 넘겨준다는 것이다.  바로 이것이 Call by value 이다.

    변수가 넘어가는 것이  아닌 변수가 가지고 있 는 「값」이 넘어가기 때문이다

      void swapA(int a1, int a2) {
          int ta;
          ta = a1;
          a1 = a2;
          a2 = ta;
      }

      void swapB(int *b1, int *b2) {
          int tb;
          tb = *b1;
          *b1 = *b2;
          *b2 = tb;
      }


      int i = 3, j = 4;
      swapA(i, j);   //…③
      swapB(&i, &j); //…④

      이후의 결과는 아시다시피 i와 j값이 바뀌어 있다.  그럼 내부적으로 어떤 과정을 통하길래 이런 것이 가능할까

반응형

'[개발] DataBase Tool SAP' 카테고리의 다른 글

윈도우11 날짜 간 표시 해결 방법  (0) 2024.09.24
C에서 중요한 포인트?파해치자.  (0) 2021.10.18
서버_정기점검_리스트 방법  (0) 2020.06.04
테이블 설계 양식  (0) 2020.06.02
전산용어 정리  (0) 2020.05.29
728x90

포인터

 

들어가기 전에... C언어를 배울때 포인터만 알아도 70%는 성공한거다 라는 말이 있었다

그 만큼 포인터의 기능이 막강하다고한다. 우리는 그동안 골치 아프게 속 썩였던 포인터란 늠을 한번 파해쳐보자..

알고보면 쉬운 포인터, 그런데 그 개념을 알기까지는 그리 쉽지는 않은데요 

 

포인터?

 

변수는  값(value)을 저장하는 녀석이죠~

이 변수란 녀석은 선언된 형(type)에 따라서 값(value)을 저장하는 녀석이다~

이 말입니다. 너무 어렵게 설명했죠? 쉽게 말해서 i라는 변수가 있는데 이게 int형(type)로 선언되면

int가 표현할 수 있는 값(value), 즉 정수 값(value)만을 저장하는 녀석이다~

이 말입니다. (물론 형변환 어쩌구 저쩌구 해서 다른 값을 집어넣을 수도 있지만 저는 그렇게 복잡하게 생각하지 않습니다.!)

 

int i;

i = int형이 표현할 수 있는 값(value)을 집어넣습니다. 만약 int i; 라는 코드를 입력했다면 이건 무슨 뜻일까요

위에서 말했듯이 int형의 값을 저장하는 i라는 변수가 됩니다.

그렇다면!! 아래 코드는 어떤 내용일까요?

 

int i, j;

i = j;

 

뭐 이것도 간단하네요

int형의 값을 저장하는 i와 j라고 하는 변수를 선언하고i라는 변수에 j를 대입시킨다.

 

근데.. 이것 뿐입니까? 더 다른건 없나요?

없긴 왜 없습니까! i에 j를 대입한다고 하잖아요!

이때 컴파일러에서는 어떠한 작업을 수행하느냐~ 이 말입니다!

 

'뭐 당연히 j의 값을 i에 대입하겠지~'

라고 생각하신다면 아주아주 큰~~~~ 오산 입니다!

 

이렇게 생각하고 계신분들 지금부터 그 내용 머리속에서 싹 지워버리세요.

이제부터 개념적으로 설명 드리겠습니다.

 

 

메모리라고 아시나요?

모든 전역변수나 지역변수 정적변수 동적변수들은

죄다 이 메모리에 영역을 할당 받은 다음에 주소라는 것을 받게 됩니다.

그래서 다음에 이 변수를 참조(읽고 쓰는)할 일이 생기면

이 메모리의 이 주소로 찾아가서 값을 참조하는 것이죠

 

이 말은 다들 프로그래밍을 하면서 한번 쯤 들어 보셨을거라고 생각해요.

이게 아주 중요한 개념 입니다.

 

우리는 어떻게 메모리상에 저장된 변수를 참조(읽고 쓰는)를 할 수 있을까요?

위에서 잠깐 언급 했지만 그건 바로 주소(Address) 라는 개념때문에 가능합니다.

이게 포인터의 핵심입니다! 주소를 이해하지 못한채로 포인터를 때려잡는다는건

계란에 바위치기인 격이죠.

그럼 이제 주소란 녀석을 알아봐야 겠네요

 

우리가 어떠한 변수를 선언하던 모든 변수는

메모리상에서 주소를 할당받아서 존재할 수 있는 겁니다.

그 변수를 참조(읽고 쓰는)할땐 할당받은 그 메모리 주소로 찾아가서

값을 읽고 쓰는 것이죠.

너무 어렵죠? 압니다 그래서 좀 더 쉽게 표현해보도록 하죠

 

우리가 int i 라고 선언을 하면 이 i변수는

메모리한테 이렇게 말합니다

 

 

"변수 : 이~메모리. 나 추운데 입고 자고 먹을 집 하나 마련해 주시지?"

"메모리 : 그래? 그럼 마땅한 집이.. 어! 여깄다. 마침 [100]이라는 집이 비었는데

             거기서 한번 먹고 자고 해볼래?"

"변수 : 그러지 뭐~ 그럼 앞으로 내가 필요할땐 [100]이라는 곳으로 찾아와"

"메모리 : 알았어"

 

 

어때요? 개념이 잡히나요?

저 내용중에서 집을 주소라고 생각해 보세요. 개념이 잡히죠?

우리가 변수를 선언해서 그 변수가 [100]이라는 주소를 가졌다면

i = 10; 이 문장은 메모리상의 [100]이라는 주소로 찾아가 그 값에 10을 대입한다.

라는 뜻이 되는 겁니다 i는 실상 [100]이라는 주소를 편리하게 관리하도록

임시적으로 만든 변수일 뿐이죠.

아..참고로 여기선 [100]이라는 주소를 할당 받았는데 어떤 주소를 받게 될지는

아무도 모릅니다~ 며느리도 모르지요 ㅡ.ㅡ;

 

여기서 중요한 점이 있는데 주소(Address)와 값(Value)는 전혀 다른 것입니다.

우리가 변수를 선언하면 메모리상에서 "주소"와 "값"이 함께 할당되는 것입니다

이 "값"을 참조하기 위해선 "주소"를 이용해야 하는 거구요.

쉽게 말해서 i = 20 이란 문장은

i라는 변수의 메모리 "주소"에 20이라는 "값"을 대입한다.

라고 해석할 수 있는 겁니다. 이해 가시죠?

 

 

그렇다면 처음으로 돌아가서

i = j;

이 문장은 어떻게 해석을 해야 할까요?

i에 j의 값을 대입한다라고 말한건 아주 큰 오산이라고 했습니다.

아직 잘 모르시겠다구요?

모든 변수는 "주소"와 "값"이 함께 메모리에 할당된다고 했죠?

"값"을 참조하기 위해선 그 변수의 "주소"로 찾아가서 참조할 수 있다고 했구요

 

그럼 위는 이렇게 해석이 가능 하겠군요.

i라는 "주소"로 찾아가 그 주소의 "값"에

j라는 "주소"로 찾아가 그 주소의 "값"을 대입 시킨다.

 

다시 말하면 i라는 주소의 값에 j의 주소의 값을 대입 시킨다.

이렇게 해석하는 겁니다!

 

너무 길게 설명했네요 너무너무 간단한걸..

내용을 요약해서 가장 중요한걸 찝으라면 이겁니다

모든 변수는 메모리에 "주소"로 할당되고

이 변수를 참조할때에는 그 "메모리주소"를 찾아가 참조한다

 

 

다음 시간에는 본격적으로 포인터에 대해 알아볼겁니다

포인터는 변수가 메모리에 할당되는것과는 좀 달라요

근본적으론 같지만.. 왜 다른지 다음 시간에 알아보도록 하고 우선은 여기까지

저의 하드용량과 성능이 뻗기 시작하였네요..^^*

반응형

'[개발] DataBase Tool SAP' 카테고리의 다른 글

윈도우11 날짜 간 표시 해결 방법  (0) 2024.09.24
포인트 그 두번쨰.  (0) 2021.10.18
서버_정기점검_리스트 방법  (0) 2020.06.04
테이블 설계 양식  (0) 2020.06.02
전산용어 정리  (0) 2020.05.29
728x90

Python언어 과제물 A

 

 과제물 작성시 주의 사항

l  과제물 제출 시 완성된 소스파일을 반드시 이름.ZIP’ 형식으로 압축하여 첨부합니다.

l  답안은 반드시 문제에서 지시 또는 요구한 조건에 맞추어 작성합니다. 결과가 올바르더라도 과정이 옳지 않으면 부분적으로 감점이 있을 수 있습니다.

l  제출한 파일이 실행되지 않을 경우, 제출한 과제물은 0점 처리 됩니다.

 

 


 

[문제 1] 클래스를 만들어 실행 했을 경우 출력 결과와 같이 수행하도록 다음과 같은 조건을 만족하는 프로그램을 작성합니다.

1.  구현 클래스 다이아 그램

myObj class[클래스 이름]

set_value(self,item)

get_value()

M_calc(self)

 

2.  구현 클래스

파일명

클래스

method

설명

A_Exam01.py

myobj

set_value(self,item)

메소드의 item 매개인자로 숫자를 받아 멤버 변수에게 대입한다

get_value(self)

멤버변수인 item 가진 값을 리턴 한다.

M_calc(self)

멤버변수가 가진 값에 10 더한다.

* 클래스 명과 method 명은 변경하지 않는다.

 * 위에 선언한 클래스 변수와 클래스 함수만을 이용한다.

 

3.   myObj 클래스 구조를 보고 _______ 채워 코드를 완성하시오

# -*- coding:utf-8 -*-

class myObj ( object ) :

   

    def set_value ( self , item ) :

        self . item = item

   

    (1)_________________________

   

    def M_calc ( self ) :

        (2)________________

 

 

if __name__ == '__main__':       

    result =  []

    obj =(3) __________

    obj . (4)___________

    result . append ( obj )

       

    (5)________________

    obj01 .(6)____________

    result . append ( obj01 )

       

    list(map ( lambda item : item.M_calc(),result ))

    for m_obj in result :

print ( m_obj . get_value ())

[실행결과]

110

210

 

(1)     클래스의 멤버변수 item 리턴 하는 get_value() 작성한다

(2)     클래스의 멤버변수 item 가진 값에 10 더하는 코드를 작성한다.

(3)     myObj 객체를 생성한다 

(4)     set_value() 통해 100 전달한다.

(5)     myObj 객체를 생성해서 obj01 대입한다.

(6)     set_value() 통해 200 전달한다.

 

 

 [문제 2]. Tkinter 이용하여 다음과 같이 연동할 있도록 프로그램을 작성합니다.

실행 결과 1 :  다음과 같이 레이아웃을 설계 된다.

 

 

실행 결과  2 :  버튼을 클릭하게 되면 숫자 입력상자가 출력 된다.

 

 

실행 결과 3: 숫자를 입력하고 ok 버튼을 클릭하면  Fibonacci 계산 결과가  먼저 만들어 놓은 부모창으로 리턴 된다.

 

 

# -*- coding:utf-8 -*-

import tkinter as tk

import tkinter.simpledialog as sd

import math

 

class main_window(tk.Frame):

    def __init__(self, parent):

        super(main_window, self).__init__(parent)

        parent.title("Fibonacci")

        parent.minsize(200,100)

(1)_____________________________________________

               self.label.pack()

 

         self.buttons = tk.Button(parent, text="Integer Input", fg="red",command=self.M_askint)

        self.buttons.pack()

 

    def M_fibonacci(self, n):

        if n==0:

            return 0

        if n==1:

            return 1

        return (self.M_fibonacci(n-2)+self.M_fibonacci(n-1))

 

    def set(self, st):

        self.label.config(text=st)

 

    def M_askint(self):

        (2)____________________________

        fn = (3)_________________________

        self.set(fn)

 

 

if __name__  == '__main__':

    root = tk.Tk()

    mw = main_window(root)

    (4)_______________________________________

 

(1)  부모 창에 “Fibonacci” 출력되는 Label 생성한다

(2)  차일드 창에 정수를 입력 받는 코드를 작성한다

(3)  Fibonacci 연산한 결과를 가진 함수를 호출한다.

(4)  툴킷을 실행 하는 코드를 작성 한다

 

 

[문제 3]파이썬에 내장된 sqlite3 이용하여 테이블을 생성하여 자료를 입력하고 실행결과와 같이 출력되도록 조건 1 ~ 조건 3까지 파이 구문으로 작성합니다.

 

조건 1. fruit.db 만들어 fruit테이블을 다음과 같이 생성합니다.

Id (serial)

Name(text)

Price( text)

 

 

조건 2. 데이터를 입력합니다.

Id (serial)

Name(text)

Price( text)

1

사과

2000

2

1000

3

바나나

4000

 

조건 3. 실행결과와 같이 코드를 작성합니다.

 

사과 2000 입니다.

1000 입니다.

바나나 4000 입니다.

 

 

정답이 궁금하시면 댓글 달아주세요

반응형

'KOREA' 카테고리의 다른 글

[용어정리] IT용어정리  (0) 2022.03.24
전산용어 모음집  (0) 2020.10.02
728x90

오늘은 직장인이 꼭 알아야 할 용어 중 제안서와 관련된 RFP, RFI, RFQ에 대한 의미와 작성법을 알려드리도록 하겠습니다.

RFP의 의미

Request For Proposal이라 의미로, 흔히 제안 요청서라고 불립니다.

프로젝트 담당할 최종 업체를 선정하기 전, 1차로 선별된 업체들에게 보내는 문서인데요.

원하는 요구 사항을 체계적으로 정리한 문서라고 볼 수 있습니다.

제안 요청서에는 프로젝트의 주제, 목적, 목표, 내용, 기대성과 등 진행할 업무 내용에 대한 자세한 사항이 들어가는데요.

요청한 프로젝트의 과정과 결과를 확인할 때, 기입된 내용을 토대로 측정해볼 수 있기 때문입니다.

또한, 추후에 발생할 수 있는 업체 간 의견 충돌을 최소화해주는 역할까지 담당하고 있습니다.

작성법

제안 요청서의 핵심은 상대방이 RFP만 보고 업무에 대한 성격과 목적을 명확하게 이해할 수 있도록 하는 것입니다.

따라서, 일목요연하게 작성해야 하는데요.

진행할 업무 전체의 대략적인 내용, 입찰 규정, 낙찰자 선정 기준 그리고 목표, 목적, 기간, 기대성과 등이 모두 포함되어야 합니다.

RFI의 의미

Request For Information의 약자입니다.

흔히, 사전 정보 요청이라고 일컫는데요.

RFP를 작성하기 전 동향이나 정보를 취합하기 위한 자료로 쓰입니다.

RFI에서는 프로젝트를 추진할 때 필요한 기술이나 흐름 등을 기재하여, 공급업체에 게에 진행 또는 제공 가능 여부를 사전에 확인할 수 있습니다.

또한, 이를 통해 1차 공급업체를 가려낼 수 있는 역할을 하기도 합니다.

작성법

기존에는 RFI를 생략하는 기업들도 많았지만,

최근에는 빠른 트렌드 변화와 이를 반영하려는 목적으로 RFI를 요구하는 기업들이 늘어나고 있습니다.

특히, 트렌드에 민감한 시장이라면 RFI는 필수인데요.

주로, 회사의 현황(해당 업무를 담당 인원, 회사 연혁, 매출액 등 회사에 대한 신뢰도를 높일 수 있는 정보)와

현재 회사가 보유하고 있는 기능, 성능, 향후 기술적 추이, 고객사 현황, 기존 작업 내역 및 예시 등이 포함됩니다.

또한, 시장, 트렌드 분석 및 이를 반영할 수 있는 지표도 함께 필요합니다.

RFQ의 의미

Request For Quotation이라는 의미로 제안 견적 요청서를 뜻합니다.

어떻게 보면 가장 중요한 것이 예산이나 견적인데요.

아무리 좋은 내용이어도 터무니없는 금액을 요구한다면 프로젝트 진행이 어렵기 때문입니다.

그래서, 보통 RFP를 요청할 때 RFQ를 같이 요구하는 경우가 많은데요.

RFQ는 RFP와 함께 검토하여, 최종 공급 업체를 선택하는 중요한 역할을 합니다.

작성법

RFQ 역시 입찰 참여 조건을 갖춘 업체만 작성할 수 있는데요.

견적이 나와있는 문서인 만큼 제공할 기술이나 제품에 대한 상세한 정보와 스펙을 기재해야 합니다.

특히, 진행할 업무에 사용할 기술과 제품이 다양하며, 여러 부서와 협력해야 하는 사항이라면

누락된 사항이나 조정이 필요한 부분은 없는지 더욱 꼼꼼하게 작성해야 하는데요.

RFP에 기재한 기한, 담당 인력 그리고 RFQ에 기재한 기술과 제품으로 해당 프로젝트를 수행하고,

목표를 달성할 수 있는지 중점적으로 보기 때문에 이를 사전에 확실하게 점검해보는 것이 좋습니다.

지금까지 직장인이 알면 유용한 제안서 관련 용어들을 알아보았는데요.

실제 서식이나 예시는 프로젝트 성격, 업체 성격, 시장 성격에 따라 많이 상이하기 때문에 특정한 양식을 올려드릴 수는 없었습니다.

하지만, 용어 대한 기본적인 이해와 진행할 프로젝트에 대한 준비가 되어있다면 더 쉬워지겠죠?

그럼, 메대리는 앞으로 더 유용한 꿀 팀으로 다시 찾아오겠습니다. 감사합니다.

[출처] 제안서 용어, RFP/RFI/RFQ의 의미와 작성법|작성자 메일플러그

반응형
728x90

1. 아젠다 (Agenda)

완수해야하는 업무 내용을 사전에 정리해 둔 항목들을 의미합니다. 보통 회의 전에 준비하여 이 아젠다에 따라 논의를 결정지어 나갑니다.

2. 애자일 (Agile)

기민하면서도 민첩하다는 의미를 지니고 있습니다. 특히 IT업계에서는 경영환경에 따른 변화에 빠르게 대응할 수 있는 유연한 시스템 개발방법 등을 의미하는 용어로 자주 사용됩니다.

3. 이슈 (Issue)

비즈니스 상의 과제, 문제점, 논점, 중요 포인트 등을 의미합니다. 매일 사용하는 용어입니다.

4. 컨센서스 (Consensus)

여러 명의 동료들과의 합의, 동의를 구한 일을 의미합니다. 이 동의를 구할 때 보통 '컨센서스를 구하다'로 말하곤 합니다.

5. 스테이크홀더 (Stakeholder)

주주, 거래처, 고객은 물론 동료까지 기업환경을 둘러싼 이해관계자를 영어로 자주 표현합니다.

6. 태스크 (Task)

주어진 임무를 의미합니다. 영어로 자주 말합니다.

7. 픽스하다. (Fix)

업무를 최종 의사결정 지을 때 '픽스하다'라고 표현합니다.

8. 베스트 프랙티스 (Best Practice)

과거 사례 중 가장 효과적이었던 방안을 의미합니다. 이 베스트 프랙티스에 따라 업무를 진행해 나가는 일이 많습니다. 

9. 퍼소나 / 페르소나 (Persona)

심리, 마케팅 쪽에서는 페르소나로 부르고 UX업계에선 퍼소나로 많이 부릅니다. 정확히 말하면 두가지 의미가 조금은 다릅니다. 하지만 보통 회사에서는 상품이나 서비스를 제공할 때 가장의 인물을 세우는데 이 인물상을 의미합니다.

10. 팬딩된다. (Pending)

보류된다는 의미를 영어로 많이 사용합니다. 

11. 마일스톤 (Milestone)

중요한 업무 진척도를 관리하기 위한 일종의 업무 진척표입니다. 일정, 태스크 등에 따라 마일스톤이 달라집니다.

12. 공수 (영문은 아니지만 많이 사용)

인적, 물적 자원을 의미합니다. '공수가 많이 들어요'라는 의미는 시간이 촉박하고 업무에 관련된 사람이 많이 필요하다고 해석하면 좋습니다.

13. 런칭 (Launching)

서비스가 시장에 발매될 때 런칭된다고 말합니다. IT 업계에서는 서비스가 정식 공개되는 걸 의미합니다. 정식 공개가 아닌 사전 공개는 '베타', '베타 오픈' 등으로 부릅니다.

14. ROI (Return On Investment)

투자수익률이라고 해석하면 됩니다. ROI=이익÷비용X100으로 계산할 수 있으며 이 수치가 클수록 이율이 좋게 나와 효과 높은 투자라고 볼 수 있습니다. 

15. KPI (Key Performance Indicator)

목표달성 프로세스 진척 상황을 수치로 측정하여 나타내는 것입니다. '중요업무평가지표'라고 해석됩니다. 부서의 KPI, 개인별, 서비스별 KPI가 모두 다르며 IT 서비스에서 중요한 KPI로는 회원가입자수 등을 예로 들 수 있습니다. 

16. ROAS (Return On Advertising Spend)

광고비 1원당 매출액을 ROAS(광고비용대비효과)라고 부릅니다. 이 수치가 높을 수록 광고 효과가 높습니다. 

ROAS는 ROAS=매출액÷100으로 계산할 수 있습니다.

17. 포지셔닝 (Positioning)

자사제품을 경쟁사와 비교해 분석하는 것을 포지셔닝분석이라 말합니다. 자세제품이 현재 경쟁사대비 어디에 위치해있는가를 가리킵니다.

18. 스킴 (Scheme)

업무상의 계획을 의미합니다.

19. 컨버전 (Conversion)

기업의 목표(이커머스 사이트를 예시로 든다면 제품구매) 행위를 고객이 달성함을 의미합니다. 성과로도 해석되며 전환율이 높을 수록 매출이 높아집니다.

20. 어사인 (Assign)

하나의 업무를 나누어 각자 실무자에게 맞게 나누는 일을 의미합니다. 마찬가지로 영어로 꽤 많이 사용합니다.

 

 

반응형
728x90

e-HR은 기업 HR의 관리적 특징이 달라짐에 따라 함께 변화하는 성향을 가집니다.

물론, 시대의 흐름을 바꿀만한 IT 기술의 발달이 e-HR의 변화에 대한 동인이 되기도 합니다. 이를테면,  ‘웹의 폭발적 보급’, ‘스마트 폰의 등장’, ‘소셜 네트웍 서비스(SNS) 활성화’, ‘빅 데이터 활용에 대한 기대감 상승’과 같은 것들이죠.

e-HR을 변화시키는 가장 큰 동인은 기술보다 HR 자체의 변화입니다

하지만 무엇보다 기업이 성장하며 겪는 HR 자체의 변화가 e-HR을 변화시키는 가장 큰 이유입니다.

모든 기업은 인적자원 선발부터 배치, 관리, 육성을 거쳐 퇴직에 이르는 HR 수명주기에 대해 각자 나름의 규칙과 프로세스를 가집니다. 크든 작든, 기업이 개방적 문화를 가졌든 권위적 문화를 가졌든 모두 자신의 역사와 함께 체계를 갖춘 HR 체계가 있죠. 벤처에서 대기업까지 치열한 경쟁에서 살아남은 기업이라면, 창업 이래로 전해진 독특한 기업 문화와 경영 철학이 있습니다.

모든 기업은 HR 수명 주기를 관리하는 나름의 독특한 체계가 있습니다

 

과거에 비해 요즘의 e-HR에 요구하는 것이 조금 달라진 부분이 있다면, 그 이유는 예전에 비해 지금의 기업들이 좀 더 민첩하게, 보다 다양한 방법으로 시장에서의 우위를 점하기 위해 노력하기 때문에, 조직의 성장에 따른 HR의 변화가 좀 더 입체적이 되었기 때문일 겁니다.

최근 e-HR의 변화를 이끄는 몇 가지 HR 이슈로는 다음과 같은 것을 꼽을 수 있겠습니다.

 

  • 조직의 성장 방향이 좀 더 수평적이고 기능적으로 되는 사례가 늘고 있다.
  • 통합 / 분화되는 조직의 크기가 다양하다, 아울러 조직간 HR 체계의 성숙 레벨이 서로 다르다.
  • 통합 / 분화되는 조직의 국적도 다양하다.
  • 거의 모두 이미 전산화 된 e-HR 시스템을 가지고 있다.

 

이 밖에도 여러 이슈들이 있겠지만, 서로 다른 제도와 문화, 경영철학을 가졌던 조직들이 기업의 성장에 따라 융합되며 같은 체계 안에서 함께 움직일 수 있도록 하는 것이 HR에서 특히 쉽지 않은 도전이 됩니다. 그러므로, HR과 발 맞추어야 하는 e-HR 도 이런 복잡한 상황에 대응할 수 있는 능력을 필요로 하게 됩니다.

기업 HR은 그 발달 과정이 서로 다른 만큼,
HR이라는 큰 틀 안에서는 유사하지만 서로 다른 체계를 가집니다

 

이런 상황에서 주로 요구되는 e-HR의 대응 능력은 아래와 같은 것들입니다.

 

  • 데이터 통합성 지원
  • 프로세스 통합성 지원
  • 커뮤니케이션 지원

 

첫 번째의 ‘데이터 통합성 지원’은 이런 상황에서 e-HR이 갖추어야 할, 어찌 보면 가장 기본적인 능력입니다.

기업 내에서 기존에 수기로 관리하던 데이터를 전산화 해야 하는 것은 물론이고, MS엑셀로부터, 자체 개발된 e-HR 시스템까지 HR 정보를 관리했던 다양한 IT 체계를 가지고 있기 때문에, HR 데이터를 하나의 맥락에서 관리 될 수 있도록 하는 것이 하나의 정보체계를 구축하기 위한 필요 조건이 되기 때문입니다. 조직 속성, 인사 관리 항목, 역량, 직무, 급여 항목 등 전산화된 HR을 지원하기 위해 필요했던 정형화된 거의 모든 데이터 요소들이 통합성 지원이 필요한 대상이 됩니다. 데이터 통합의 관점에서 e-HR 시스템은 ‘통합관리체계 제공’ 과 ‘일관된 해석장치’ 에 대한 능력을 요구 받습니다.

기존의 데이터는 존재 방식과 관리 방식이 다를 수 있기 때문에, 하나의 체계 안에서 회사별로 구분할 수 있는 관리체계를 갖도록 하는 것은 많은 노력이 드는 일입니다. 보통 여러 체계를 통합할 때 가능한 한 많은 경우의 수를 대응하려다 보니 막상 만들어지는 결과물은 관리가 힘들 정도로 필요 이상의 복잡한 체계를 가지게 되는 경우가 있습니다. 이 경우, e-HR은 가능한 한 명료하면서도 다양한 상황에 유연하게 대처할 수 있는 적절한 관리 도구를 통해 이를 지원해야 합니다.

같은 의미의 데이터라도 관리되는 형식과 체계에는 차이가 있을 수 있습니다
기존 데이터는 일반 텍스트, 마스터형 코드, 이력 방식의 코드 등 여러 형태로 존재합니다.

 

회사별로 구분된 데이터관리 체계를 갖는 것과 더불어, 데이터들은 경영정보 시스템(EIS) 이나 타 시스템과의 연계를 위한 하나의 방식으로 해석되어야 할 필요가 있습니다. e-HR은 하나의 메타 정보를 기반으로 해서 데이터를 일관된 방법으로 해석 할 수 있는 변환도구나 매핑 도구를 통해 이를 지원해야 합니다.

최근의 구축사례에서 이수 OPTI-HR은 자동화된 시스템간 코드 변환 체계를 지원하는 패키지를 납품했습니다.
( HR 시스템 직무와 – 채용 시스템 모집 코드간 동기화 사례 )

 

두 번째, ‘프로세스 통합성 지원’ 측면에서 e-HR은 기업 내 IT 시스템 통합의 주체적 역할을 할 확률이 적기 때문에 주체적으로 해결할 수 있는 ‘이종 HR 프로세스간의 통합’과 더불어, ‘수기 프로세스의 전산화’, ‘기간 시스템과의 연계’에 대한 요구를 받습니다.

HR 프로세스 통합은 데이터 통합의 경우와 마찬가지로 하나의 체계 안에서 회사별로 독자적인 프로세스를 운영할 수 있도록 해야 합니다. 그렇기 때문에 이 관점에서의 e-HR 역시 통합 프로세스를 설계하고, 분화되어 개별화된 여러 프로세스의 흐름을 수용할 수 있는 도구적 지원능력을 갖춰야 합니다.  

e-HR은 결국 IT 관점에서 프로세스 통합을 지원하게 되기 때문에, 바탕이 되는 데이터 통합이 먼저 요구되는 경우가 많습니다.

이 경우, 통합 프로세스를 만드는 과정에서 기존에 수기로 처리되던 부분이 전산화 되기도 하는데, 인사 담당 부서가 아닌 일반 임직원이 해 오던 기존 작업방식이 바뀌게 되는 만큼, e-HR은 직관적이고 사용성 높은 사용자 인터페이스를 가진 도구를 통해 이를 지원해 주어야 합니다.

 

최근의 구축 사례에서 이수 OPTI-HR은 기존에 수작업으로 진행되던 면접 평가를
직관적 인터페이스를 갖춘 온라인 면접 평가 방식으로 전환했습니다.

 

또한, 하나의 큰 IT 체계 속에서 e-HR은 기업 내 기간 시스템과 함께 쓰일 수 있어야 합니다. 그룹웨어부터 시작해서 ERP, 출입 관리 시스템까지 기업 내의 다양한 시스템이 각자의 방식으로 기업의 복잡한 프로세스를 지원하며, e-HR의 필요와 상관 없이 변경되거나 교체될 수 있습니다. 프로세스 통합 관점에서 e-HR은 기업 내 다양한 시스템 환경 변화에 일관되며 유연한 방식으로 대응할 수 있어야 합니다. 그렇기 위해서는 일반적이고 표준화된 시스템 인터페이스 체계와 손쉬운 유지보수 체계가 필요합니다.

마지막으로 ‘커뮤니케이션 지원’ 측면에서 e-HR은 다양한 방법으로 HR 주체들을 연결해 주어야 합니다.

변화하는 제도나 HR 부서의 의도가 조직에 쉽게 전파될 수 있어야 하고, 성과관리를 위한 팀 간의 소통이 원활이 지원되어야 합니다. 또한 경영자는 HR관점에서 놓치지 말아야 할 중요한 지표들에 대한 피드백을 받을 수 있어야 합니다. e-HR은 이를 위해서 HR시스템의 이벤트를 수집하여 정보화 하고, 다양한 채널을 통해 이를 전파할 수 있는 쉽고 직관적인 수단을 제공해야 합니다.

지금까지 성장하는 기업에서 HR 의 변화가 이끄는 e-HR의 변화에 대한 몇 가지 특징적 요소를 살펴봤습니다. 다음 글에서는 위에서 나열한 e-HR의 각 대응 능력에 대해 구체적으로 사례를 통해 살펴보도록 하겠습니다.

반응형
728x90

SELECT object_name(parent_id) [target], name
FROM sys.triggers
ORDER BY object_name(parent_id)

반응형

+ Recent posts