Post

파이프라인에 대한 이해 및 Public패키지

처음 Webmethods를 사용하시면 헷갈리실 수 있는 부분이 있으실 것 같아서 pipeline 에 대하여 알아보면서 webmethods에서 기본적으로 제공하는 public 패키지를 사용하여 여러가지 서비스를 개발 해보도록 하겠습니다.

Public Package


퍼블릭 패키지는 웹메소드에서 기본적으로 제공되는 많은 서비스들이 포함되어 있는 패키지입니다. 웹메소드 개발시 필요한것들이 어느정도 다 들어 있다고 생각해주시면 되고 여기에 필요한 것이 없더라도 자바서비스 같은 것들을 이용하여 직접 만들어서 사용 하실 수 있습니다. 이전에 사용해봤던 debugLog 또한 이 패키지 안에 들어있으니 한번 확인 해 보겠습니다.

Untitled

패키지 네비게이터에서 아래로 내리다면 WmPublic이란 패키지가 보이실 것입니다.

1
2
3
4
5
6
7
8
WmPublic
 |
	--pub
		|
		 --flow
				|
				 -- ...
				 -- debugLog

보시다시피 WmPublic 패키지 하위에는 많은 Service들이 존재 하는데 이 서비스들은 독립적으로 사용 할 수도 있고 다른서비스에 이 서비스를 포함하여 개발 할 수도 있습니다. 이 WmPublic 패키지를 좀 더 잘 이해하실 수 있도록 몇개의 서비스를 사용하여 웹메소드 개발의 흐름을 이해해보고 파이프라인에 대하여 조금 더 이해 해보겠습니다.

addInts 사용


독립적으로 사용해보기

먼저 addInts 서비스를 독립적으로 사용 해보기에 앞서 addInts 서비스에 대해 간략히 설명드리겠습니다.

addInts 함수는 아래 예시와 같이 num1num2라는 Input 2개를 받아서 num1num2를 더하여 나온 결과를 value라는 Output으로 뱉어내는 서비스 입니다.

Untitled

addInts 서비스의 위치는 public 패키지의 수학과 관련된 서비스가 있는 math 디렉토리 하위에 위치해 있습니다.

1
2
3
4
5
6
7
8
WmPublic
 |
	--pub
		|
		 --math
				|
				 -- ...
				 -- addInts

Untitled

다음은 addInts를 독립적으로 한번 실행 해보겠습니다. addInts에 마우스 오른쪽 버튼을 클릭 한 뒤 Run As → Run Service를 클릭 해줍니다 이 때 주의하실 점은 Run in Browser가 아닌 Run Service를 클릭 해 주셔야 합니다.

Untitled

Untitled

위와 같은 화면이 나오면 addInts의 Input값을 입력 해 주면 됩니다 저는 5와 9를 입력하고 OK를 눌러보겠습니다.

Untitled

위와 같이 Result에 결과값이 나오는것을 확인 할 수 있습니다. 그런데 여기서 이상한점은 제가 처음 설명드렸던 것 처럼 addInts의 Output은 value에 담겨서 뱉는다고 설명드렸는데 결과값에는 Input값인 5와 9가 같이 보이고 있습니다.

예를들면 아래와 같은 “test”라는 자바코드를 개발하여 해당 함수를 실행시켰다고 생각해보세요

1
2
3
4
5
6
7
8
9
10
11
public class Main {
    public static void main(String[] args) {
       System.out.println(addInts("5", "9")); //14
    }
}

public String addInts(String num1, String num2) {
	  String value = null;
		//내부로직...
		return value;
}
1
2
3
4
5
6
7
#컴파일
javac test.java 

#실행
java test 5 9
14

위와 같은 결과를 얻을 수 있습니다 여기서 생각해보면 우리가 어떠한 함수를 실행시켰을 때는 일반적으로 해당 함수의 return 값 output만을 얻을 수 있습니다 반환값이 아닌 5와 9는 얻을수 없는것이 일반적입니다 그런데 저희가 Webmethods에서 실행한 Results 결과는 Input값과 Output값 모두 확인해 볼 수 있었습니다.

네 맞습니다 Results의 실행 결과에서는 해당 서비스를 실행하면서 Pipeline에 담긴 값들이 모두 출력만 됐을 뿐이고 실제 서비스의 output값이 아닙니다 이것을 절대 헷갈리시면 안됩니다.

다음 예제들에서 이 부분을 조금더 자세히 이해 해 보겠습니다.

다른 서비스에서 addInts를 포함하여 사용해보기

이번에는 이전 시간에 저희가 debugLog를 사용했던 것처럼 addInts를 포함한 flow service를 만들어보고 사용 해보겠습니다.

input 2개를 받아서 각각의 input을 더한 값에 10을 더해서 출력하는 서비스를 만들 것 입니다.

먼저 flow service를 하나 만들어 줍니다. 만들고자 하는 폴더 하위에 우클릭을 하고 이름은 아무거나 지정해서 만드시면 됩니다. 저는 exampleService라는 이름으로 만들겠습니다.

Untitled

다음은 만들어두신 flow service에 input과 output을 설정 하겠습니다. Input/Output을 클릭해주시면 됩니다.

Untitled

Untitled

Input쪽 하얀 배경에 마우스 오른쪽버튼을 누르고 input1,2,3,4 를 삽입하고 마찬가지로 Output도 삽입 해줍니다

Untitled

Untitled

다 만드셨으면 Tree를 눌러서 다시 editor화면으로 돌아옵니다. 다음은 앞서 설명드렸듯이 input 2개를 먼저 더할 수 있도록 addInts를 서비스에 추가하고 매핑 하겠습니다. math 아래에 addInts를 드래그하여 editor 창으로 올려놓으시면 됩니다.

Untitled

Untitled

여기까지 하셨으면 입력값의 input1과 input2 값이 더해져 value라는 파이프에 담기게 됩니다. 이후 저희가 해줘야 될 부분은 value에 있는 값에 10을 더해서 이 서비스의 출력값인 output1에 담아줘야 합니다.

작업을 위해서 addInts를 한번 더 추가 하겠습니다.

Untitled

위에서 보시면 Pipeline In에 num1 num2이 있고 Service In에도 num1과 num2가 연결되어 있습니다 이때 Pipeline In의 num1, num2는 맨 처음 addInts의 num1과 num2에 저희가 input1 input2를 담아주었던 파이프가 보이는것입니다.

Service In의 num1과 num2는 두번째 addInts의 입력값이 보이는것입니다. 그런데 파이프 이름이 같으니 자동으로 흐르게끔 연결이 되어있는것입니다. 하지만 저희가 해줘야 할 부분은 첫번째 addInts가 더해서 뱉어준 value의 값에 10을 더해서 output1에 담아줘야 하니 설정을 해보겠습니다.

Untitled

위 이미지 처럼 value를 num1에 매핑해주시고 num2를 선택한 뒤 오른쪽 상단에 제가 빨간색으로 표시해둔 버튼을 클릭하시면 아래 이미지와 같은 화면이 나오면 10을 설정해주시고 ok를 눌러주시면 됩니다.

value를 매핑 해주시면 자동으로 num1과 num1이 연결된 링크가 풀릴 것입니다

Untitled

입력 매핑이 완료 되셨으면 아래 이미지처럼 두번째 addInts의 출력인 value를 이 서비스의 출력값인 output1에 매핑해주겠습니다.

Untitled

다 완료 되셨으면 해당 서비스를 실행 해보겠습니다. 저는 입력값으로 5와 5를 넣어서 20이 나오기를 기대 해보겠습니다.

value → value 가 자동 매핑 된 것은 신경쓰시지 않으셔도 됩니다. 실행하기전 ctrl + s 를 눌러서 저장해주세요

Untitled

Untitled

Untitled

기대했던 output1에 20이 잘 출력 됐습니다 여기서 생각해 볼 점은 exampleService에 반환값 즉 output은 output1 이라고 저희가 설정했습니다 그러나 output1 말고도 출력된 저 값들은 대체 무엇인지 예제를 한가지만 더 해보시면 오늘 제가 설명드리려는 내용을 완벽히 이해하실 수 있을 것 입니다.

Concat 사용


다음으로는 저희가 만든 flow service를 포함하여 또 새로운 flow service 를 만들어 개발하고 실행 해보겠습니다.

개발하고 싶은것은 input1, input2, input3 을 받아서 input1 + input2 + 10 을 한 값이 X라고 했을 때 X + “hello” 를 하여서 출력하고 싶은것입니다.

예를들면 입력값에 5 5 hello 를 넣으면 20hello 라는 값이 나오도록 해보겠습니다

먼저 flow service를 한개 더 만들어 주세요 저는 exampleService2라는 이름으로 만들었습니다.

Untitled

다음으로는 input에 inpu1, input2, input3 을 만들고 output에는 out을 만들어주겠습니다.

Untitled

다시 Tree 버튼을 눌러 Editor 창으로 돌아오셔서 이전에 만들었던 서비스를 추가하겠습니다 저는 이전에 exampleService라는 이름으로 만들었으니 해당서비스를 드래그하여 추가 해주도록 하겠습니다

Untitled

다음은 매핑을 해주도록 하겠습니다 아래 이미지를 보시면 input1, input2가 자동으로 매핑되어 있습니다. 그 이유는 exampleService2의 input1, input2와 exampleService1의 input1, input2 입력 변수 이름 즉 파이프 이름이 같기 때문에 자동으로 해당 파이프로 흐르게끔 매핑 된 것입니다.

Untitled

여기서 저희가 주목할 점은 exampleService의 Service out을 살펴보시면 이전에 exampleService를 실행했을 때 결과값으로 보이던 여러가지 출력값은 보이지 않고 딱 저희가 처음 설정해줬던 output1만 보이는것을 확인하실 수 있습니다.

네 맞습니다. 앞서 설명드렸던 것처럼 서비스를 실행했을 때 Results 콘솔값에 출력됐던 파이프들은 서비스를 실행하며 각 파이프에 담겼던 값을 출력만 해준것이지 실제 output값은 아니었던 것입니다. 실제로 output으로 지정한 output1의 값을 제외한 나머지 파이프들은 반환값으로 얻을 수 없는 것 입니다 이 부분을 꼭 기억 해 주셨으면 좋겠습니다.

아직 개발하려고 했던 서비스 개발은 완료되지 않았으니 마저 개발 해보도록 하겠습니다 다음은 public 패키지의 concat 이라는 서비스를 추가해보겠습니다.

concat은 예상하셨다시피 문자열 입력값 2개를 받아서 합쳐주는 서비스입니다.

Untitled

추가가 완료되었다면 나머지 매핑 작업을 해주도록 하겠습니다. 아래 이미지를 보시면 위에서 실행되는 exampleService의 output은 output1입니다. 입력 + 입력 + 10 을 해준 값이죠 그래서 output1 을 concat의 입력값으로 넣어주고 input3을 concat의 다른 입력값으로 넣어 준 뒤 concat 출력의 value를 exampleService2의 저희가 설정했던 out이라는 output에 매핑한 것입니다.

Untitled

이렇게 되면 제가 기대하는것은 입력으로 5, 5, hello 를 넣었을 때 5+5+10 = 20이 되고, 20 + “hello”를 한 값인 20hello가 나와야 됩니다 결과값이 기대한대로 잘 나오는지 한번 실행 해보겠습니다.

exampleService2를 실행시켜야 합니다!!

Untitled

Untitled

Untitled

기대한대로 결과가 잘 나오는것을 확인 할 수 있습니다.

마치며


긴글 끝까지 따라와 주시느라 고생하셨습니다. 다음 포스팅에서는 도큐먼트에 대해서 알아보실 수 있도록 간단한 예재들을 준비해서 포스팅 해보도록 하겠습니다. 수고하셨습니다.

hits image
This post is licensed under CC BY 4.0 by the author.