728x90

oracledb 라이브러리

: python으로 Oracle DB에 연결해서 DB작업을 할 수 있도록 도와주는 라이브러리
!pip install oracledb   # oracledb 라이브러리 설치하기
import oracledb         # oracledb 라이브러리 임포트(불러오기)

1. 업무 DB에 연결

con = oracledb.connect(user="사용자이름", password="비밀번호", dsn="호스트이름:port/SID")   # DB에 연결 (호스트이름 대신 IP주소 가능)
cursor = con.cursor()   # 연결된 DB 지시자(커서) 생성
  • dsn(데이터베이스 소스 이름)
    • 호스트 이름 또는 IP 주소 부분이 localhost 일 경우: 자체 시스템, 즉 현재 시스템에 있는 작업 DB를 가리킴
    • 포트번호 : DB 서버의 기본 포트번호는 1521입니다.

2. DB작업

cursor.execute("SQL문장")       # DB 명령 실행 (cursor가 임시 보관)
out_data = cursor.fetchall()   # cursor가 임시 보관한 내용을 out_data에 저장 (결과는 리스트)
# out_data 내용 출력해보기
for record in ou_data :
	print(record)
  • 여러 개의 함수를 실행하고 후, fetchall()로 한 번에 생성 가능
    • fetchone: 하나님께
    • fetchall: 여러 개가 왔어요 (결과는리스트!)
  • 커서 내용을 저장하여 출력하고 select문처럼 데이터가 조회되는 경우에만(sql 실행 시 반환되는 결과만 있을 경우에만) 내용이 저장됨
  • 주의할 점 : DML 작업을 실행했을 경우, commit을 실행하여 DB에 적용하게 되었습니다!

3. DB 연결 휴가

con.close()   # DB 연결 해제

사용예시

con = oracledb.connect(user="system", password="oracle", dsn="localhost:1521/XEPDB1") # 데이터베이스에 연결
cursor = con.cursor() # 연결된 데이터베이스 지시자 생성

print('데이터베이스 연결 성공~!!!')

# 1. emp테이블의 내용 확인
cursor.execute("select * from emp") # 데이터베이스 명령 실행( cursor가 임시로 보관)
out_data = cursor.fetchall() # 커서의 내용을 out_data에 저장 
for record in out_data: # out_data의 내용을 출력
    print(record)
print('-'*50)

# 2. dept테이블에 2개의 레코드를 삽입 후 승인
cursor.execute("insert into dept values(50, 'DEVELOPER','LA')")
cursor.execute("insert into dept values(60, 'DEVELOPER','ATL')")
cursor.execute('commit') # sqldeveloper에 커밋
cursor.execute("select * from dept")
out_data2 = cursor.fetchall()
for record in out_data2:
    print(record)
print('-'*50)
    
# 3. dept 테이블에서 dname이 "DEVELOPER"인 레코드 삭제 후 승인
cursor.execute("delete from dept where dname = 'DEVELOPER'")
cursor.execute("commit")
cursor.execute("select * from dept")
out_data2 = cursor.fetchall()
for record in out_data2:
    print(record)
print('-'*50)

# 4. emp 테이블과 dept 테이블을 inner join 수행
cursor.execute("select e.empno, e.ename, e.mgr, d.deptno, d.dname from emp e, dept d where e.deptno = d.deptno")
out_data = cursor.fetchall()
for record in out_data:
    print(record)
print('-'*50)

# 5. dept테이블의 구조와 내용을 이용하여 dept_ddl 테이블을 생성하시오. (단, create와 select를 활용하시오.)
cursor.execute("create table dept_ddl as select * from dept")
cursor.execute("select * from dept_ddl")
out_data = cursor.fetchall()
for record in out_data:
    print(record)
print('-'*50)

con.close() # 데이터베이스 연결 해제
  • 결과 :
반응형
728x90

내부 회계 감사를 위한 ITGC 범위 지정 문서의 표준 템플릿

리소스에는 체크리스트, 업계 관행, 샘플 감사 보고서, 특히 SOX 규정 준수와 관련된 ITGC 범위 정의에 대한 지침이 포함됩니다.

내부 회계 감사의 경우 ITGC(정보 기술 일반 통제) 범위 및 문서 내용에는 일반적으로 다음 영역이 포함됩니다.

1. 액세스 제어: 시스템 및 데이터에 대한 액세스를 승인된 개인으로 제한합니다.

- 사용자 접속 검토

- 비밀번호 정책

- 직원 입사, 이동, 퇴사를 위한 접근권한

2. 변경 관리: IT 시스템 변경 프로세스를 제어합니다.

- 변경 승인

- 변경 사항 테스트 및 승인

- 변경 사항의 문서화 및 추적

3. 운영 제어: IT 시스템의 일상적인 운영과 관련된 절차입니다.

- 백업 및 복구 절차

- 작업 스케줄링 및 모니터링

- 사고관리

4. 네트워크 보안 제어: 전송 중인 데이터의 무결성과 보안을 보호합니다.

- 방화벽 구성

- 침입탐지 시스템

- 네트워크 접근 제어

5. SDLC(시스템 개발 수명 주기) 제어: IT 시스템의 획득, 개발 및 유지 관리를 제어합니다.

- 프로젝트 관리 실무

- 애플리케이션 설계 및 개발 표준

- 구현 후 검토

6. 물리적 및 환경적 통제: 물리적 IT 인프라를 보호합니다.

- 데이터센터 보안 대책

- 환경 제어(예: 화재 진압, HVAC)

7. 정보 보안: 데이터 및 정보 보안에 대한 전반적인 관리입니다.

- 데이터 분류 및 처리

- 암호화 정책

- 보안 인식 교육

문서에서는 재무 시스템, 데이터베이스,

기타 중요한 IT 인프라 구성 요소 등 어떤 시스템과 환경이 적용되는지 식별하여 범위를 정의해야 합니다.

ITGC의 목표, 범위 내 영역과 관련된 위험, 이러한 위험을 완화하기 위해 마련된 통제 수단에 대한 개요가 나와 있어야 합니다.

ITGC 범위 지정 문서는 감사자가 IT 제어 환경을 이해하고 이에 따라 감사 절차를 계획하는 데 기초가 됩니다. IT 환경 및 제어의 현재 상태를 반영하려면 포괄적이고 명확하며 최신이어야 합니다.

다음은 ITGC 범위 지정 문서를 데 도움이 될 수 있는 몇 가지 리소스입니다.

1. [IT 일반 제어 체크리스트 - 방법론]

https://methodology.eca.europa.eu/aware/Documents/IT-general-controls-checklist.docx

이 문서는 시작 시 유용 할 수 있는 체크리스트를 제공합니다.

2. [SOX 404 감사를 위한 ITGC 범위 지정

- ERA]

https://era.library.ualberta.ca/items/08426624-804c-4409-97fb-7c6316c27984/view/f01615cd-b178-4848-bbdf-f79c2109fd0a/Perhar_2008_MISSM.pdf

: 이 문서에서는 ITGC 범위 지정에 대한 현재 업계 관행을 검토

3. [내부 감사 - 오렌지 카운티 감사관-통제관]

https://ocauditor.gov/wp-content/uploads/2017/08/2624-First-Follow-Up-Audit-of-Integrated-Internal-Control-Review-of-the-Auditor-Controller-Accounts-Receivable.pdf

범위 지정 요소를 포함할 수 있는 ITGC 감사 보고서.

4. [IT 일반 제어 - ACCA 글로벌]

https://www.accaglobal.com/content/dam/members-beta/docs/sectors-industries-roles/ia/IT%20General%20Controls.pdf

이 문서 범위 내 시스템을 식별하고 문서를 검토하는 프로세스

5. [SOX를 위한 ITGC 작업 범위 및 정도를 정의하는 방법 | 거버넌스, 위험 관리 및 감사에 대한 Norman Marks]

https://normanmarks.wordpress.com/2010/10/18/how-to-define-the-scope-and-extent-of-work-on-itgc- for-sox/

SOX 규정 준수 범위를 논의하는 블로그

 

2624-First-Follow-Up-Audit-of-Integrated-Internal-Control-Review-of-the-Auditor-Controller-Accounts-Receivable (1).pdf
0.44MB
IT General Controls (1).pdf
0.28MB
IT-general-controls-checklist (2).docx
0.06MB
Perhar_2008_MISSM (1).pdf
0.19MB

반응형

'KOREA > 0. 기획' 카테고리의 다른 글

S/T , C/T, T/T 리드타임, 정미시간, 부하시간 용어  (0) 2022.10.27
[프로젝트 도입] 절차서  (0) 2022.05.26
ERP 구축  (0) 2022.04.25
성공적인 Project를 위한 Method  (0) 2022.04.18
[Check List] 시스템 구축 단계  (0) 2022.01.26
728x90

AI 분야는 자격증이 거의 없습니다!! 

회사에서 교육을 보내고 자격증을 획득하라는 지시사항에 ㅋㅋ... AICE라는 자격증을 알게 되었어요^^*

저는 2023년 10월 7일 날짜로 제 4회 정기 시험을 보았습니다~!!

 

AICE 란?

AICE 자격증은 KT와 한국 경제 신문에서 공동으로 주관하는 민간 자격증으로, 인공지능 능력시험입니다.

아래와 같이 5가지 종류로 나뉘어져 있습니다. (왼쪽부터 어려운 순서대로)

저는 이 그림과 같이 Basic단계를 시험보았습니다!! 사실 ASSOCIATE 을 보고 싶었는데, 이번 정기 시험에서는 

맛보기로 Basic을 쳐봤습니다 합격하면 그다음 단계로 갈 예정이예요~~~~

 

 

가격이 많이 사악하지만 회사에서 지원을 해주는거니...ㅋㅋ 그런데 라이센스를 따야겠죠??

Basic의 내용은  위 사진과 같습니다. 실무에서 가장많이 쓰이는 데이터에 대해서 코딩없이 데이터 분석 및 모델링을 돌리는 것을

출제범위도 확실하게 잘보이네요

 

시험 후기

 인공지능을 공부해오고 있어서 특별히 어려운 부분은 없었던 것 같습니다. 

특히 해당 시험은 빅데이터 분석기사 실기 시험과 굉장히 유사하게 출제됩니다!! 덕분에 쉽게 합격할 수 있지 않았나 생각합니다ㅎㅎ

다만, 시험 시작과 동시에 감독 프로그램 서버가 터져서 동작되지 않아서 굉장히 불안했고... 시험 끝나기 몇 분 전에 갑자기 시험 화면이 먹통이 되면서 보이지 않더니 시간이 다 되니까 자동 종료 되더라구요ㅎㅎ... KT측에 문의해봐도 시험에 문제 없다는 말만 되풀이 하시고, 잘 제출되었다고만 하셔서 대처가 많이 부족하지 않았나 하는 생각이 듭니다ㅜㅠㅠ

 

시험 Tip

정기 시험 이전에 무료로 특강을 해줄 때가 있습니다! 거기서 제공되는 샘플예제만  따라하시고 응용할 수 있으면 충분히 

Basic자격증은 딸 수 있을거에요

반응형

'[스킬] 자격증' 카테고리의 다른 글

IT 취득해야할 자격증  (2) 2024.09.10
728x90

/*--------------------------------------------------------------------- 
   Json Rest API
 ---------------------------------------------------------------------*/
OleObject lole_SrvHTTP
String ls_status, ls_response, ls_arg, ls_url
ls_arg = '{ "USER_NM": "xxxxxxx@xxxx.co.kr"}}'
ls_url = 'https://nexthr-apix.singlex.com/nexthr/hr-xmti/dev/xmti/v1/gw/org/LG01'
lole_SrvHTTP = CREATE  OleObject
lole_SrvHTTP.connectToNewObject("MSXML2.ServerXMLHTTP.6.0")
lole_SrvHTTP.Open('POST', ls_url, FALSE)
lole_SrvHTTP.SetRequestHeader( "Content-Type", "application/json")
lole_SrvHTTP.SetRequestHeader( "x-apikey", "xxxxxxxxxxxx")
lole_SrvHTTP.setOption(2,'13056') 
lole_SrvHTTP.send(ls_arg)
ls_status   = string(lole_SrvHTTP.Status)
ls_response = string(lole_SrvHTTP.ResponseText)
/*------------------------------------------------------------------------------------
  Datawindow로 자료 생성 
--------------------------------------------------------------------------------------*/
Reset()
long    p1, p2, row
string  ls_json, ls_Row[], ls_Cdata, item 
string  ls_Cols[]={"RSLTDT","HR_ORG_CD","PARENT_HR_ORG_CD","ORG_NM","ENG_ORG_NM","ORG_SORT","LCTN_CD","MGR_EMP_NO","DEPT_USEYN","LEVEL","PATH_HR_ORG_CD","PATH_ORG_NM","PATH_ENG_ORG_NM","PARENT_ORG_NM","PARENT_ENG_ORG_NM","MGR_EMP_NM"}
integer i, i_max, j, j_max
ls_json = of_replace(ls_response,'[','')
ls_json = Trim( of_replace(ls_json,']','') )
messagebox("확인",ls_json)
/*------------------------------------------------------------------------------------
  구분자로 되어 있는 String -> String Array
i_max = StringToArray( ls_json, '},', ls_Row[])
--------------------------------------------------------------------------------------*/
DO WHILE ls_json <> '' 
   item = Trim ( f_getfirstitem( ls_json, '},' )  )
   IF item = '' THEN 
   ELSE 
      i_max ++ 
      ls_Row[i_max] = item 
   END IF 
LOOP 
/*------------------------------------------------------------------------------------
  Datawindow 에 자료 추가 
--------------------------------------------------------------------------------------*/
j_max = UpperBound(ls_Cols[])
FOR i = 1 TO i_max
   ls_Row[i] = of_replace(ls_Row[i],'{'   ,'')
   ls_Row[i] = of_replace(ls_Row[i],'}'   ,'')
   ls_Row[i] = of_replace(ls_Row[i],'~r~n','')
   ls_Row[i] = of_replace(ls_Row[i],',"'  ,'^')
   ls_Row[i] = of_replace(ls_Row[i],'"'   ,'') + '^'
   
   row = Insertrow( 0 )
   FOR j = 1 TO j_max 
      // Column data  
      p1    = Pos( ls_Row[i], ls_Cols[j] )
      p2    = Pos( ls_Row[i], '^', p1 )
      ls_Cdata = Mid( ls_Row[i], p1, p2 - p1 )
      f_getfirstitem( ls_Cdata, ':' )  // ls_Cdata = Trim( f_nth(ls_Cdata,':',2) )
      ls_Cdata = Trim( of_replace(ls_Cdata,',','') )
      CHOOSE CASE j
         CASE 1
            CHOOSE CASE ls_Cdata
               case '1' ; Setitem(row, j, '성공')
               case '2' ; Setitem(row, j, 'Data코드오류')
               case '3' ; Setitem(row, j, '인증코드오류')
               case '4' ; Setitem(row, j, '일일제한횟수마감')
            end choose
         CASE 7, 11 //number
            Setitem(row, j, integer(ls_Cdata))
         CASE 2, 3     //char
            Setitem(row, j, ls_Cdata)
         CASE ELSE     //decimal
            Setitem(row, j, Dec(ls_Cdata))
      END CHOOSE
   NEXT 
NEXT 
Sort()
DESTROY lole_SrvHTTP


lole_SrvHTTP.setOption(2,'13056') //  https 연동시 ssl 인증서가 정상 설치 되지 않은 경우 인증서 무시 옵션

lole_SrvHTTP.send(ls_arg)
ls_status   = string(lole_SrvHTTP.Status)
ls_response = string(lole_SrvHTTP.ResponseText)
DESTROY lole_SrvHTTP


이거 없으면 연동 안됨.



반응형
728x90

반응형
728x90

 

 

 

반응형
728x90

 

 

반응형
728x90

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형
728x90

 

 

반응형
728x90

 

 

 

 

 

 

반응형

+ Recent posts