자바 웹 서비스 튜토리얼

Java 웹 서비스 튜토리얼에 오신 것을 환영합니다. 여기에서는 웹 서비스에 대해 배우고, 웹 서비스에서 유용한 개념 및 자바에서 웹 서비스를 생성하는 다양한 API에 대해 알아보겠습니다.

웹 서비스란

간단히 말하면, 네트워크를 통해 액세스할 수 있는 서비스를 웹 서비스라고 합니다. 그렇다면 웹 애플리케이션과 어떻게 다른 것일까요? 웹 애플리케이션도 네트워크를 통해 액세스되는 서비스입니다. 이 차이를 명확히하는 몇 가지 특징이 있습니다.

  • 웹 애플리케이션은 사용자를 위해 설계되었으며, 사람이 읽을 수 있는 형식으로 브라우저에서 액세스됩니다. 반면, 웹 서비스는 XML, JSON 등의 형식으로 데이터에 액세스하기 위해 응용 프로그램에서 사용됩니다.
  • 웹 애플리케이션은 항상 HTTP/HTTPS 프로토콜을 사용하고, 전통적인 웹 서비스는 SOAP 프로토콜을 사용합니다. 최근에는 거의 항상 HTTP/HTTPS 프로토콜에서 실행되는 아키텍처 스타일인 REST가 인기를 얻고 있습니다.
  • 웹 애플리케이션은 재사용을 목적으로하지 않지만, 웹 서비스는 이러한 장점 중 하나입니다. 하나의 웹 서비스는 다양한 종류의 응용 프로그램에서 사용할 수 있습니다.
  • 웹 애플리케이션은 웹 서비스에 액세스하여 일부 데이터에 액세스하거나 일부 작업을 수행할 수 있지만, 웹 서비스는 웹 애플리케이션에서 데이터를 가져올 수 없습니다.
  • 웹 애플리케이션은 사용자 세션을 유지할 수 있지만, 웹 서비스는 상태를 유지하지 않습니다.

I hope above differences are good enough to clear any confusion with web applications and web services. Both are different concepts and meant for different purpose.

웹 서비스의 종류

웹 서비스에는 두 가지 유형이 있습니다.

  1. SOAP: SOAP는 Simple Object Access Protocol의 약자입니다. SOAP는 XML 기반의 산업 표준 프로토콜로 웹 서비스의 디자인과 개발에 사용됩니다. XML 기반이므로 플랫폼과 언어에 독립적입니다. 따라서 서버는 JAVA 기반일 수 있고 클라이언트는 .NET, PHP 등이 될 수 있으며 그 반대의 경우도 가능합니다.
  2. REST: REST는 웹 서비스 개발을 위한 아키텍처 스타일입니다. SOAP에 비해 학습 곡선이 낮아서 최근에 인기를 얻고 있습니다. 자원은 Restful 웹 서비스의 핵심 개념이며 고유한 URI로 식별됩니다.

Java 웹 서비스

Java는 SOAP 및 REST 웹 서비스를 생성하기 위한 자체 API를 제공합니다.

  1. JAX-WS: JAX-WS는 Java API for XML Web Services의 약자입니다. JAX-WS는 웹 서비스 서버 및 클라이언트 애플리케이션을 구축하기 위한 XML 기반의 Java API입니다.
  2. JAX-RS: Java API for RESTful Web Services (JAX-RS)는 REST 웹 서비스를 생성하기 위한 Java API입니다. JAX-RS는 주석을 사용하여 웹 서비스의 개발과 배포를 간소화합니다.

이 두 개의 API는 표준 JDK 설치의 일부이므로 작업에 어떤 jar도 추가할 필요가 없습니다. 이 두 개의 API는 어노테이션을 매우 많이 사용합니다.

Hello World JAX-WS Application

아주 간단한 Hello World JAX-WS 애플리케이션을 만들어 보겠습니다. TestService.java

package com.journaldev.jaxws.service;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.xml.ws.Endpoint;

@WebService
@SOAPBinding(style = SOAPBinding.Style.DOCUMENT)
public class TestService {

	@WebMethod
	public String sayHello(String msg){
		return "Hello "+msg;
	}
	
	public static void main(String[] args){
		Endpoint.publish("https://localhost:8888/testWS", new TestService());
	}
}

이것으로 끝입니다. 이 애플리케이션을 실행하면 Hello World JAX-WS SOAP 웹 서비스가 게시됩니다. 아래 이미지는 SOAP UI를 통해 이 JAX-WS 웹 서비스를 호출하는 것을 보여줍니다. 이것이 JAX-WS 웹 서비스의 매우 기본적인 튜토리얼입니다. 아래는 SOAP 웹 서비스와 JAX-WS에 대한 더 나은 이해를 위해 읽어야 할 몇 가지 문서입니다.

  1. JAX-WS 튜토리얼
  2. Tomcat에 JAX-WS 웹 서비스 배포
  3. Eclipse와 Apache Axis를 사용한 SOAP 웹 서비스 예제
  4. Apache Axis 2 웹 서비스 튜토리얼

안녕하세요 월드 JAX-RS 애플리케이션

Jersey는 JAX-RS API의 참조 구현입니다. 이것은 표준 JDK의 일부가 아니며 필요한 모든 JAR 파일을 포함해야 합니다. 최선의 방법은 Maven 빌드를 사용하는 것이므로 간단한 동적 웹 프로젝트를 생성한 다음 Eclipse에서 Maven으로 변환합니다. 다음은 필요한 종속성이 포함된 최종 pom.xml 파일입니다.

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>JAX-RS-HelloWorld</groupId>
	<artifactId>JAX-RS-HelloWorld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	
	<dependencies>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-server</artifactId>
			<version>1.19</version>
		</dependency>
		<dependency>
			<groupId>com.sun.jersey</groupId>
			<artifactId>jersey-servlet</artifactId>
			<version>1.19</version>
		</dependency>
	</dependencies>
	
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.6</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.3</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>

이제 Jersey 서블릿을 배포 기술자 web.xml에 프론트 컨트롤러로 추가합니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>JAX-RS-HelloWorld</display-name>

	<servlet>
		<servlet-name>Jersey REST Service</servlet-name>
		<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
		<init-param>
			<param-name>com.sun.jersey.config.property.packages</param-name>
			<param-value>com.journaldev.jaxrs.service</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>Jersey REST Service</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>
</web-app>

위의 두 단계는 초기 설정에 필요합니다. 아래는 Hello World JAX-RS 서비스 클래스입니다.

package com.journaldev.jaxrs.service;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;

@Path("/test")
public class TestService {

	@GET
	@Path("/hello/{msg}")
	public String sayHello(@PathParam(value="msg") String msg){
		return "Hello "+msg;
	}
}

WAR 파일로 내보내고 브라우저에서 아래 이미지와 같이 액세스할 수 있습니다. URL의 마지막 부분을 변경하면 반환된 메시지가 변경됩니다. JAX-RS API를 사용하여 RESTful 웹 서비스를 생성하는 것이 얼마나 쉬웠는지 알 수 있습니다. 그러나 이에 대한 더 많은 내용이 있으므로 아래 문서를 참고하여 더 자세히 알아보세요.

  1. Restful 웹 서비스
  2. RESTEasy 튜토리얼
  3. Jersey 튜토리얼

이것이 자바 웹 서비스에 대한 간단한 소개입니다. 마지막으로, 인터뷰를 준비하고 있다면 웹 서비스 면접 질문을 참고하세요. 참고 자료: JAX-WS 오라클 페이지, JAX-RS 오라클 페이지

Source:
https://www.digitalocean.com/community/tutorials/java-web-services-tutorial