Gitlab CI/CD - Make Stage by Branch Name

이미지
Gitlab을 현재 SOA와 연결해서 사용 중인데 Branch 이름으로 Stage를 분개해야 할 상황이 생겼다 (아래 링크는 Gitlab 과 EAI관련 Posting 임) 링크 :  EAI with Gitlab 이번 포스팅은 Branch 생성 시 Branch Name에 특정 문구가 있을 시 별도 Stage가 생성되는것을 공유 드리고자 한다 Gitlab의 CI/CD를 사용하려면 gitlab-ci.yml 을 이용해야하며, Pipeline에 Stage 별로 Job이 생성 된다 예를 들어보자 1. gitlab-ci.yml 파일 생성 stages:   - deploy   - approve   - deploy_prd deploy_imsi:   stage: deploy   tags:    - Integration   script:    - echo "Deploy"   when : manual deploy_pi_test:   stage: deploy   tags:    - Integration   script:    - echo "Deploy"   when : manual deploy_qas:   stage: deploy   tags:    - Integration   script:    - echo "Deploy"    when : manual     deploy_test:   stage: deploy   tags:    - Integration   script:    - echo "Deploy"   when : manual   approve:   stage: approve   tags:    - Integration   script:    - echo "Approve"   when : manual     deploy_big:   stage: deploy_prd   tags:    - Integration   script:    - echo "Deploy PRD"  

Oracle SOA(EAI) Rest Adapter Access-Control-Allow-Origin

이미지
When you use rest api getting data(JSON) from SOA(EAI) or something on web browser like Chrome, you may get error as following as.. Access to ---- at 'URL----' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource Why..? Security Issue!! .. Thanks Google :P For this error, you should use property as following as.. rest.binding.http.Access-Control-Allow-Origin : * For example on SOA BPEL bellow picture.. It could not be difficult using this on other solution's adapter. Or.. you could set this property in server, if you do not care security.. Thanks~~ :)

Decode Base64 in SOA XSLT Mapping

1. Add  xmlns:dc64="http://www.oracle.com/XSL/Transform/java/oracle.soa.common.util.Base64Decoder in xsl:stylesheet (root). 2. Mapping <tns:Target Field> <xsl:value-of select="dc64:decode(Source Field)"/> </tns:Target Field> Very Easy :)

Oracle SOA(EAI) G1GC

이미지
<Environment> ■ SOA Version : Oracle Cloud SOACS 12.2.1.4 (Market Place) ■ java version 1.8.0_261 ■ Java Memory Garbage Collection Type : G1GC ----------------------------------------------------------------------------------------------------- In this post, I will compare between  Parallel  GC and G1 GC for Oracle SOA(EAI). For this, you need to know something as bellow.. EAI - Enterprise Architecture Integration What is Java Memory Garbage Collection (GC)? - Memory management - Delete unused memory automatically Java Memory Garbage Collection Types - Serial Garbage Collector - Parallel Garbage Collector -> Default GC below 1.9 - CMS Garbage Collector - G1(Garbage First) Garbage Collector -> Default GC above 1.9 GC types - Minor and Major GC During GC - Stop the World : A ll application threads are stopped ----------------------------------------------------------------------------------------------------- Let's start!! Parallel   Garbage Collector Logic Shortly, Memor

Oracle SOA(EAI) HA(High-availability) Configuration

이미지
I will share this posting about Oracle SOA(EAI) HA(High-availability) Configuration. I'm not sure this is perfect for HA, but I hope this will help for you. I configured the HA for SOA in Oracle Cloud. There are two case for the HA. Case 1 . With Web Server Case 1 . Without Web Server Both of them are working well. (It's just of my thought but I tested many of times) Web Servers can redirect interface message to another, if one of managed servers is shut down. However, web servers should be managing point. So... In my point, you can use this URL on load balance.   -> http://IP:Port/soa-infra/services/isSoaServerReady I think it's enough for the HA even though health check interval is 1000 ms. (Min interval is 1000 ms in Oracle Cloud LB ). This posting is the last in this year(2020). Merry Christmas and Happy New Year !!

EAI Interface with Gitlab

이미지
Oracle Cloud SOA(SOACS) 구축 프로젝트를 하며, Gitlab을 이용하였습니다 통칭 Git 이라고 하며, 그 중 Gitlab이란 오픈 소스 소프트웨어를 사용했습니다 (물론, Free Version Gitlab을 사용) EAI만 10년 넘게 경력을 가지고 있는데, Git을 통해 한 건 이번이 처음이였는데, EAI를 사용하는 사람들에게 강력하게 추천 드립니다 !!! 이번 Posting은 EAI Interface with Gitlab 입니다 :) EAI와 Gitlab을 접목 시킨것에 대해 소개하기 전에, 간단하게 Git에 대해 설명 드리자면.. Git이란? 1. 분산형 버전 관리 시스템 (DVCS) 2. Issue Tracker 3. CI/CD (지속적 통합 및 배포) 4. Wiki 5. Label 6. API 제공 7. Milestones 입니다. 자세한 사항은 Googling Go Go Go ! 그럼 EAI와 Gitlab을 어떻게 접목 시켰는지 소개 드립니다 !!! 1. 분산형 버전 관리 시스템 (DVCS) -> Gitlab은 Repository라는 항목이 있습니다     EAI의 개발 소스를 Gitlab의 Repository와 동기화(Clone) 하여 사용 합니다     Repository의 최상위 Branch는 Master이며, 버전 관리를 위해 Master에      소스를 Commit & Push하여 사용 합니다 -> Git Branch (개별 작업)     EAI는 특성상 Interface마다 개발 소스가 다릅니다     그래서, 개인적으로 생각 한 방법이 Interface마다 Master 에서 Branch를 생성해서     사용하는게 좋을 것 같다고 생각합니다 2. Issue Tracker -> Git에는 Issue를 생성하여 Tracker를 할 수 있습니다     Issue 하나가 Interface 하나로 생성하여 사용하는게 좋습니다 -> Interface Issue를 생성하여, Source 와 Targe

Stop Thread on IBM JT400(as400) JDBC Adapter

2019년..이직을 하게 되어 SAP EAI(PO)에서 Oracle EAI(SOA)로 전환 !! 경력에 한줄이 더 생기게 되어 좋은 경험이라 생각하고 있고, 현재 Oracle Cloud 내 SOA를 구축 후 운영하고 있다 통칭 SOACS 라고 한다 :) SOACS 운영 중, IBM JT400(as400) JDBC Driver 사용 시 Weblogic Server 의 Thread가 Pool이 차는 상황이 발생 !! (Link : SOACS Weblogic -> 작성 중) Bug 라기 보다는 결국엔..Connection Configuration 문제.. 간단하게 생각하면, Thread가 Pool이 차는 이유는 Connection 을 JDBC Driver가 반환을 하지 못하여 발생하는 문제가 아닐까 생각했고.. Search on Google !!!! ... lol Google !!!! 아래 설정이 필요하다 1. socket timeout= <num millis> -> You know what this means.. 2. thread used=false -> 위 socket timeout만 설정 시, 예를들어 30000(30 Sec) 이라 설정 하면, 30초마다 새 연결 요청을 만들어 낸다. 그러나 thread used를 false로 설정하게 되면 요청이 발생 되지 않기 때문에 thread를 낭비 하지 않게 된다 3. Properties 부분에 넣거나, URL에 직접 입력 ->  jdbc:as400:// my.400.com;socket timeout = 30000; thread used = false Thanks~~ 이직하고, EAI 구축하느라 바빠서 글이 뜸 했지만..주에 1개씩은 올려봐야지.. :P

우리집 인테리어 공개(광명 이편한세상 25평)

이미지
드디어..길고 길었던 이사(광명 이편한세상 아파트 25평)와 인테리어가 완료 lol 그래서 자랑..소개..하고자 합니다 글을 쓰기전에 앞서.. 사랑하는 이쁜 Wife가 인테리어에 많은 Idea와 신경을 써 주셔서 좋은 결과가 나오지 않았나 생각합니다 말 잘 듣고 살께요.. 사랑하고~고맙습니다~♥ 먼저 인테리어 시작 전에 "인테리어쇼" 라고 요즘 Hot? 한 영상을 보았고.. 이걸 Motive로 여러 인테리어 업체와 상담을 받았습니다     Motive          1. 방을 제외 한 거실 주방 무몰딩 및 페인트(천장 제외)          2. 라인조명          3. 가구의 통일감          4. White Canvas 느낌          5. 주방에 식탁 상담하면서 인테리어 쇼 영상을 보여줬고, 그 중 Start 업체이고 젊으신 사장님과 같이 Win-Win 하자고 하면서 시작하게 되었습니다 (사장님도 처음 해 보시는거라 투자하시며 Skill Up 하는 차원이였고,  우리 집 잘 꾸며주면 홍보하겠다는 전략이였습니다 :P) ■ 거실 ■ 주방 식탁 넣기 전(As-Is) 식탁 넣은 후(To-Be) ■ 옷방 (시스템장) ■ 안방 ■ 콩자갈 (인테리어 사장님께서 추천 해 주셔서 현관/베란다에는 타일 사용하지 않음 -> Good Job) ■ 라인조명 (주방/거실에 다른 조명을 킬 필요가 없을 정도로 밝다) 화장실, 베란다 사진은 추후 Update 예정입니다~ 감사합니다 :)

IBM Watson JSON

이미지
IBM Watson은 JSON으로 사용됩니다 JSON을 잘 이용하면 Watson 사용 시 매우 유용할꺼 같습니다 한가지 예를 말씀드릴께요 (이전에 쓰인 제 글을 먼저 보시면 좋습니다 ->  IBM Watson 사용 후기 ) 위에 보시면 AI가 Menu? 를 물어봅니다 (정확히 말하자면 AI가 어떤 Menu로 하실껀가요? 를 물어봅니다) 이때, 사용자가 Taco, Pasta를 먹고 싶다고 말하면, Context 안에 Taco, Pasta가 저장이 되지만, 실제로 Finish 부분에서 Menu 확인을 위해 사용자가 입력한 Menu를 출력하면 제일 먼저 입력한 Taco만 출력이 됩니다. 그럼, 사용자가 입력한 Menu 전체를 출력하기 위해서는, 배열을 만들어야 하는데요. 이때, Watson에서 제공하는 JSON Editor를 이용할 수 있습니다. "context": {     " menu": "<? @Menu.values ?> "   } 이렇게 정의를 내리면 Menu라고 정의 된 Entities를 배열로 만들어 주는거구요 Finish 부분에서, 몇월 몇일에 어떤메뉴 확인 이란 출력을 위해, "output": {     "text": {       "values": [         "<?$date?>, <?$time?>에 <?$menu.join(', ')?> <?$name?> Confirm"       ],       "selection_policy": "sequential"     }   } 위와같이 join을 이용해 정의하게 되면, 사용자가 입력한 Menu들이 다 출력이 됩니다 lol 감사합니다

IBM Watson 사용 후기

이미지
IBM Watson Chat bot 교육을 갔다왔습니다 요새 AI 인공지능이 대세죠 lol 결론부터 말하자면, '사람 손이 많이간다' 입니다 :P 제가 전문가가 아니라 모르겠지만 개인적인 견해입니다 방법은 간단했습니다 시나리오를 만들고, 그에 맞춰 Dialog를 만들고, Dialog에 들어가는 단어(Entities)와 문장(Intents)을 만들고, 그에 따른 답변(Response)를 만듭니다 아래 예시를 보며 설명드릴께요 시나리오는 Taco, Pasta, Pizza를 판매하는 레스토랑 예약 Chat bot입니다. Dialog는 Welcome->Reservation or Menu->Date?->Time?->Menu?->Finish 입니다 단어(Entities)는 Taco, Pasta, Pizza 문장(Intents)는 예약할수 있나요? or 메뉴가 모가 있어요? 등이 있습니다 1. 처음에 Welcome 한다는 AI가 말해주는 문구와 함께 체팅이 시작됩니다 2. 그러면 사용자는 예약할수 있나요? or 예약하고 싶어요 등을 말하겠죠.    여기서 사전에 등록한 Intents 안에 사용자가 쓴 문구가 있으면,    그것을 AI가 인식하고 다음 단계인 Date? 를 물어봅니다 3. Date, Time은 기본적으로 Watson에서 제공하는 System Entities로 제공됩니다 4. 사용자가 Date와 Time을 말하고, 4. 그리고 마지막 단계인 AI가 Menu? (어떤 메뉴를 하시겠습니까?) 를 물어보고    사용자는 Taco, Pasta, Pizza를 말하는데,    이런 Entities를 AI가 인식하고 Context로 저장하게 됩니다    물론, Entities는 사전에 등록 되어져야 합니다 이렇듯, Watson을 이용해 이런 간단한 체팅을 만들기 위해서는 Dialog, Entities , Intents 를 만들어 줘야 하는거죠 AI가 학습해서 자동적으로