상세 컨텐츠

본문 제목

[스프링 1팀] 1장 ~ 4장. 스프링 부트란? + 개발에 앞서 알면 좋은 기초 지식 + 개발환경 구성 + 스프링부트 애플리케이션 개발하기

23-24/Spring 1

by 숨니 2023. 10. 13. 10:00

본문

728x90

 

01. 스프링 부트란?

 

1.1 스프링 프레임 워크

자바에서 가장 많이 사용되는 프레임 워크로, 애플리케이션 개발에 필요한 기반을 제공해서 개발자가 비즈니스 로직 구현에만 집중할 수 있습니다.

 

이러한 스프링은 아래와 같은 특징을 가지고 있습니다. 

<스프링의 특징>

  1. 제어 역전 (IoC)
  2. 의존성 주입
  3. 관점 지향 프로그래밍
  4. 스프링 프레임 워크의 다양한 모듈

 

1.1.1 제어 역전

제어 역전(Inversion of Control)을 적용한 환경에서는 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임합니다. 외부는 스프링 컨테이너 혹은 IoC 컨테이너를 의미하며 제어 역전은 객체 관리를 이러한 컨테이너에 넘겨주는 것을 의미합니다. 이러한 제어 역전을 통해 의존성 주입, 관점 지향 프로그래밍이 가능해집니다. 

 

<일반적인 자바 코드에서 객체 사용 예시>

@RestController
public class NoDIController {

	private MyService service = new MyServiceImpl();
    
	@GetMapping(" /no-di/hello")
	public String getHello() {
		return service.getHello();
	}
}

일반적인 자바 코드에서는 위처럼 사용하려는 객체를 선언하여 객체의 의존성을 생성한 후 객체에서 제공하는 기능을 사용하고 있습니다. 하지만 스프링에서는 제어 역전을 통해 이 객체 관리를 컨테이너에 위임할 수 있습니다.

 

1.1.2 의존성 주입(DI)

의존성 주입(Dependency Injection)은 제어 역전 방법 중 하나로 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입 받아  사용하는 방식을 의미 합니다. 

 

클래스 간 의존 관계?
클래스 A에서 다른 클래스B를 사용한다고 하면 A는 B에 의존한다고 합니다.
즉 한 클래스에서 다른 클래스 객체를 생성, 메서드 호출, 파라미터로 전달 받을 때 의존성이 발생합니다.
클래스 B에 변화가 발생하면 그 영향이 A로도 미치기 때문에 이러한 의존성을 극복하고자 의존성 주입을 사용하게 됩니다.

 

<의존성 주입 방법>

  1. 생성자를 통한 의존성 주입
  2. 필드 객체 선언을 통한 의존성 주입
  3. setter 메서드를 통한 의존성 주입

1. 생성자를 통한 의존성 주입

@RestController
public class DIController {

	MyService myService;
    
	@Autowired
	public DIController(MyService myService) {
		this.myService = myService;
	}

	@GetMapping("/di/hello")
	public String getHello() {
		return myService.getHello();
	}
}

2. 필드 객체 선언을 통한 의존성 주입

@RestController
public class FieldInjectionController {

	@Autowired
	private MyService myService;
}

3. Setter 메서드를 통한 의존성 주입

@RestController
public class SetterInjectionController {

	MyService myService;
    
	@Autowired
	public class setMyService(MyService myService) {
		this.myService = myService;
	}
}

스프링에서는 @Autowired라는 어노테이션을 사용하여 의존성을 주입 합니다.

스프링 공식 문서에서 권장하는 방식은 생성자를 통해 의존성을 주입하는 방식입니다. 생성자를 통해 의존성을 주입하면 레퍼런스 객체 없이는 객체를 초기화할 수 없기 때문입니다.

 

1.1.3 관점 지향 프로그래밍(AOP)

관점 지향 프로그래밍(Aspect-Oriented Programming)은 관점을 기준으로 묶어서 개발하는 방식입니다.

여기서 관점은 '핵심 기능'과 '부가 기능'으로 구분해서 각각을 하나의 관점으로 보는 것을 의미합니다.

  • 핵심 기능: 비즈니스 로직을 구현하는 과정에서 비즈니스 로직이 처리하는 목적 기능
  • 부가 기능: 핵심 기능 사이 추가 되는 기능 ex) 로깅 처리, 트랜잭션 처리
Ex) 클라이언트로부터 상품 등록을 요청 받아 상품을 데이터 베이스에 저장하고, 조회하는 비즈니스 로직 구현
핵심 기능:(1) 상품 정보 데이터 베이스에 저장 (2) 저장된 상품 정보 데이터 조회
부가 기능: 로깅 처리 및 트랜잭션 처리

AOP관점에서는
(1) 상품 정보 데이터 베이스에 저장 (2) 저장된 상품 정보 데이터 열람 두 가지에 공통으로 들어가는 부가 기능을 핵심 기능과 무관하게 수행할 수 있어 두 가지의 핵심 기능에서 공통으로 반복 되는 부가 기능을 하나의 공통 로직으로 처리하도록 모듈화해 삽입 할 수 있습니다.

<AOP를 구현하는 방법>

  1. 컴파일 과정에서 삽입
  2. 바이트코드를 메모리에 로드하는 과정에서 삽입
  3. 프락시 패턴을 이용

스프링에서는 프락시 패턴을 이용해 AOP기능을 제공하고 있습니다.

AOP를 통해 스프링은 모듈화 하여 재사용한 구성을 만들고 모듈화된 객체를 편하게 적용할 수 있도록 하여 개발자가 비즈니스 로직 개발에 집중할 수 있도록 해줍니다.

 

1.1.4스프링 프레임 워크의 다양한 모듈

 스프링은 기능별로 구분된 약 20개의 모듈로 구성되어 있습니다. 스프링은 경량 컨테이너 설계로, 이 모든 모듈을 사용할 필요 없이 애플리케이션 개발에 필요한 모듈만 선택하여 사용하면 됩니다.

 

 

1.2 스프링 프레임워크 VS 스프링 부트

스프링 프레임 워크는 사용하려면 설정이 매우 복잡해지는데, 이를 해결하기 위해 스프링 부트가 등장했습니다.

스프링 부트를 통해서는 별도의 복잡한 설정 없이도 개발이 가능해집니다. 스프링 프레임 워크와 스프링 부트를 비교하여 특징을 살펴보겠습니다.

 

1.2.1 의존성 관리

스프링 부트에서는 spring-boot-start의 의존성 제공을 통해 라이브러리 호환문제를 해결하고 사용할 수 있습니다.

 

<자주 사용되는 spring-boot-starter 라이브러리>

  • spring-boot-starter-web: 스피링 MVC를 사용하는 RESTful을 만들기 위한 의존성. 내장 톰캣이 있어 jar 형식으로 실행 가능.
  • spring-boot-starter-test: 테스트용 라이브러리 포함.
  • spring-boot-starter-jdbc: HikariCP 커넥션 풀을 활용해 JDBC 기능 제공
  • spring-boot-starter-security: 스프링 시큐리티 기능 제공
  • spring-boot-starter-data-jpa: 하이버네이트를 활용한 JPA기능 제공
  • spring-boot-starter-cache: 스프링 프레임워크의 캐시 기능 제공

 

1.2.2 자동 설정

스프링 부트는 스프링 프레임워크 기능을 사용하기 위한 자동 설정을 지원합니다. 자동 설정을 통해 추가된 라이브러리를 실행하는데 필요한 환경설정을 알아서 찾아줍니다.

@SpringBootApplication이라는 어노테이션은 여러 어노테이션을 합쳐놓은 인터페이스로, 스프링 부트 애플리케이션이 실행되면 @ComponentScan 어노테이션이 @Component 어노테이션이 있는 클래스를 발견해 bean에 등록합니다. 이후 @EnableAutoConfiguration 어노테이션을 통해 다양한 자동 설정이 적용됩니다.

 

1.2.3 내장 WAS

스프링 부트의 각 웹 애플리케이션에는 Web Application Server가 존재합니다. spring-boot-starter-web의 경우 톰캣을 내장하고 있습니다.

 

1.2.4 모니터링

스프링 부트에는 주요 요소들을 모니터링 하기 위한 스프링 부트 액츄에이터라는 자체 모니터링 도구가 있습니다. 이를 통해 모니터링이 가능합니다.

 

 

02. 개발에 앞서 알면 좋은 기초 지식

 

2.1 서버 간 통신

마이크로서비스 아키텍쳐를 통해 하나의 애플리케이션에 여러 기능을 넣어 개발하지 않고 기능별로 규모를 나누어 개발을 진행합니다. 다만 마이크로서비스 아키텍쳐를 사용하여 서비스를 구성하면 각 서비스가 구분되어 있어 서비스 간의 통신이 필요합니다. 예를 들어 메일 서비스를 이용하고 싶은 사용자는 로그인 서비스를 거쳐야 하는데, 이때 서로 통신하는 것을 서버 간 통신이라고 합니다.

서버 간 통신은 다른 서버에 통신을 요청하는 것으로 한쪽은 서버 다른 한쪽은 클라이언트가 됩니다. 가장 많이 사용되는 방식은 HTTP/HTTPS 입니다.

2.2 스프링 부트의 동작 방식

스프링 부트에서 spring-boot-starter-web 모듈을 사용하면 톰캣을 사용하는 스프링 MVC 구조를 기반으로 동작합니다.

 

2.2.1 서블릿

서블릿은 클라이언트 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술입니다.

서블릿은 서블릿 컨테이너에서 관리하며, 서블릿 인스턴스를 생성하고 관리하는 역할을 합니다. 톰캣은 이런 서블릿 컨테이너와 WAS역할을 하는 대표적인 컨테이너입니다.

서블릿 컨테이너의 특징
1. 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리
2. 서블릿 객체는 싱글톤 패턴으로 관리
3. 멀티 스레딩을 지원

 스프링에서는 DIspatcherServlet이 서블릿 역할을 수행합니다.

 

<DIspatcherServlet의 동작>

  1. 요청(HttpsServletRequest)가 들어오면 DIspatcherServlet은 핸들러 매핑을 통해 URI에 매핑된 핸들러를 탐색합니다. (핸들러 = Controller)
  2. 핸들러 어댑터로 컨트롤러를 호출합니다.
  3. 핸들러 어댑터에 컨트롤러의 응답이 돌아오면 ModelAndView 응답을 가공해 반환합니다.
  4. 뷰 형식으로 리턴하는 컨트롤러를 사용할 때는 뷰 리졸버를 통해 뷰를 받아 리턴합니다.
핸들러 매핑

핸들러 매핑은 요정 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스 입니다.

아래는 대표적인 구현체 클래스입니다.

  • BeanNameUrlHandlerMapping
  • ControllerClassNameMapping
  • SimpleUrlHandlerMapping
  • DefaultAnnotationHandlerMapping
뷰 리졸버: 뷰의 렌더링 역할을 담당하는 뷰 객체를 반환합니다.
뷰가 없는 REST 형식의 @ResposeBody를 사용한다면 뷰 리졸버를 사용하지 않고 MessageConverter를 거쳐 JSON 형식으로 반환합니다.

 

2.3 레이어드 아키텍처

레이어드 아키텍처는 애플리케이션의 컴포넌트를 유사 관심사를 기준으로 레이어를 묶어서 수평적으로 구성한 구조를 뜻합니다. 일반적으로 레이어드 아키텍처는 3~4계층 구성을 의미합니다.

 

프레젠테이션 계층
  • 애플리케이션의 최상단 계층, 클라이언트 요청을 해석하고 응답합니다.
  • UI나 API 제공합니다.
  • 프레젠테이션 계층은 별도의 비즈니스 로직을 포함하고 있지 않으므로 비즈니스 계층으로 요청을 위임하고 받은 결과를 응답하는 역할만 수행합니다.
비즈니스 계층
  • 애플리케이션이 제공하는 기능을 정의, 세부 작업을 수행하는 도메인 객체를 통해 업무를 위임하는 역할을 수행합니다.
  • Domain-Driven Design 기반의 아키텍처에서는 비즈니스 로직에 도메인이 포함되기도 하고, 별도로 도메인 계층을 두기도 합니다.
데이터 접근 계층
  • 데이터베이스에 접근하는 일련의 작업을 수행합니다.

위의 그림은 레이어드 아키텍처를 스프링에 적용한 모습입니다. View와 Controller는 프레젠테이션 계층이고 Model은 비즈니스와 데이터 접근 계층의 영역으로 구분할 수 있습니다. 비즈니스 계층에는 서비스를 두어 엔티티와 같은 도메인 객체의 비즈니스 로직을 조합하도록 하고 데이터 계층에는 DAO를 배치해 도메인을 관리합니다.

 

스프링에서의 레이어드 아키텍처는 다음과 같습니다.

프레젠테이션 계층
  • UI 계층이라고도 합니다.
  • 클라이언트와의 접점입니다.
  • 클라이언트로부터 데이터와 함께 요청을 받고 처리를 응답으로 전달하는 역할입니다.
비즈니스 계층
  • 서비스 계층이라고도 합니다.
  • 핵심 비즈니스 로직을 구현합니다.
  • 트랜잭션 처리나 유효성 검사등의 작업을 수행합니다.
데이터 접근 계층
  • 영속 계층이라고도 합니다.
  • 데이터베이스에 접근해야 하는 작업을 수행합니다.
  • spring Data JPA에서는 DAO 역할을 리포지토리가 수행합니다.

2.4 디자인 패턴

디자인 패턴은 소프트웨어 설계할때 자주 발생하는 문제점들을 해결하기 위해 고안된 해결책입니다.

 

2.4.1 디자인 패턴의 종류

GoF 디자인 패턴은 디자인 패턴을 구체화해서 정리한 대표적인 분류 방식입니다. GoF 디자인 패턴은 생성 패턴, 구조 패턴, 행위 패턴 3가지로 구분됩니다.

 

2.4.2 생성 패턴

객체 생성에 사용되는 패턴으로 객체를 수정해도 호출부가 영향 받지 않게 됩니다.

  • 추상 팩토리: 구체적인 클래스를 지정하지 않고 상황에 맞는 객체를 생성하기 위한 인터페이스를 제공합니다.
  • 빌더: 객체의 생성과 표현을 분리해 객체를 생성합니다.
  • 팩토리 메서드: 객체 생성을 서브 클래스로 분리 및 위임합니다.
  • 프로토타입: 원본 객체를 복사해 객체를 생성하는 패턴입니다.
  • 싱글톤: 한 클래스마다 인스턴스를 하나만 생성해서 인스턴스가 하나임을 보장하고 어느곳에서도 접근할 수 있게 제공하는 패턴입니다.

2.4.3 구조 패턴

객체를 조합해서 더 큰 구조를 만드는 패턴입니다.

  • 어댑터: 클래스의 인터페이스를 의도하는 인터페이스로 변환합니다.
  • 브리지: 추상화와 구현을 분리해서 독립적으로 변형합니다.
  • 컴포지트: 여러 객체로 구성된 복합 객체와 단일 객체를 클라이언트에서 구별없이 다룹니다.
  • 데코레이터: 객체의 결합을 통해 기능을 동적으로 유연하게 확장합니다.
  • 퍼사드: 서브시스템 인터페이스 집합들에 하나의 공통 인터페이스를 제공합니다.
  • 플라이웨이트: 특정 클래스의 인스턴스 한개를 가지고 여러 개의 가상 인스턴스 제공합니다.
  • 프락시: 특정 객체를 참고하지 않고 해당 객체를 대행하는 객체를 통해 접근합니다.

2.4.4 행위 패턴

객체 간 알고리즘이나 책임 분배에 관한 패턴으로 객체 하나로는 수행할 수 없는 작업을 여러 객체를 이용해 작업을 분배합니다. 

  • 책임 연쇄: 요청 처리 객체를 집합으로 만들어 결합을 느슨하게 하는 패턴입니다.
  • 커맨드: 실행될 기능을 캡슐화해서 주어진 여러 기능을 실행하도록 클래스를 설계합니다.
  • 인터프리터: 주어진 언어의 문법을 위한 표현 수단을 정의하고 해당 언어로 구성된 문장을 해석합니다.
  • 이터레이터: 내부 구조를 노출하지 않으면서 해당 객체의 집합 원소에 순차적으로 접근하는 방법 제공합니다.
  • 미디에이터: 한 집합에 속한 객체들의 상호 작용을 캡슐화하는 객체를 정의합니다.
  • 메멘토: 객체의 상태 정보를 저장하고 필요에 따라 상태를 복원합니다.
  • 옵저버: 객체의 상태 변화를 관찰, 객체가 옵저버에게 메서드 등을 통해 상태가 변할 때마다 통지합니다.
  • 스테이트: 상태에 따라 객체가 다르게 행동합니다.
  • 스트래티지: 행동을 클래스로 캡슐화해서 동적으로 행동을 바꿉니다.
  • 템플릿 메서드: 일정 작업을 처리하는 부분을 서브클래스로 캡슐화해서 전체 구조는 바꾸지 않으면서 특정 단계만 변경해서 수행합니다.
  • 비지터: 실제 로직을 가지고 있는 객체가 로직을 적용할 객체를 방문하여 실행하는 패턴입니다.

2.5 REST API

2.5.1 REST란?

REST(Representational State Transfer)은 월드 와이드 웹(WWW)와 같은 분산 하이퍼미디어 시스템 아키텍처의 한 형식 입니다. 주고 받는 자원에 이름을 규정하고 URI에 명시해 HTTP 메서드(GET, POST, PUT, DELETE)를 통해 자원의 상태를 주소 받는 것을 의미합니다.

 

2.5.2 REST API란?

API(Application Programming Interface)를 통해 서버 또는 프로그램 사이를 연결할 수 있습니다. REST API는 REST 아키텍처를 따르는 시스템,애플리케이션 인터페이스라고 볼 수 있습니다.

 

2.5.3 REST의 특징

  1. 유니폼 인터페이스: 일관된 인터페이스를 뜻하며, 어떤 언어를 사용하든지 관계 없이 호환해서 사용할 수 있습니다.
  2. 무상태성: 서버에 상태정보를 따로 보관하거나 관리하지 않습니다. 여러 요청이 와도 개별적으로 처리합니다. 서버가 불필요한 정보를 관리하지 않아 비즈니스 로직의 자유도가 높고 설계가 단순합니다.
  3. 캐시 가능성: REST는 HTTP 표준을 사용하기에 HTTP  캐싱기능을 적용할 수 있습니다.
  4. 레이어 시스템: REST 서버는 네트워크 상 여러 개층으로 구성될 수 있습니다.
  5. 클라이언트-서버 아키텍처: REST 서버는 API를 제공하고 클라이언트는 사용자 정보를 관리하는 구조로 분리해 설계합니다. 

2.5.4 REST URI 설계 규칙

URL 규칙

  • URI의 마지막에는 '/'를 포함하지 않습니다.
  • 언더바(_)를 사용하지 않고 대신 하이픈(-)을 사용합니다.
  • URL에는 동사가 아닌 명사를 포함합니다.
  • URI는 소문자로 작성해야 합니다.
  • 파일의 확장자는 URI에 포함하지 않습니다.

03. 개발환경 구성

설치가 필요한 것은 다음과 같습니다. 자세한 설치 방법은 생략하도록 하겠습니다.

  • JDK 설치 (1.8버전 이상)
  • 인텔리제이 설치
  • DB 설치

04. 스프링 부트 애플리케이션 개발하기

4.1 프로젝트 생성

4.1.1인텔리 제이 IDEA에서 프로젝트 생성하기

인텔리제이 IDEA 얼티밋 버전은 바로 프로젝트를 생성할 수 있습니다.

New Project - Spring Initializr을 선택하여 프로젝트를 생성할 수 있습니다. 

(프로젝트 생성 과정은 생략하도록 하겠습니다.)

 

4.1.2 스프링 공식 사이트에서 프로젝트 생성하기

인텔리제이 IDEA가 커뮤니티 버전이라면 공식 사이트에서 프로젝트를 생성하면 됩니다. 

 

https://start.spring.io/

위의 링크를 통해 공식 사이트에 접속해서 프로젝트를 설정하고 생성해서 내려받을 수 있습니다.

사이트에 접속하면 다음과 같은 창이 나타나고 다음과 같이 설정을 진행합니다.

  • project: Maven
  • Language: Java
  • springBoot: 2.7.16
  • Project Metadata
    • Group: com.spring.boot
    • Atifact: hello
    • Name: hello
    • Description:  (자유롭게 작성)
    • Package Name: (자동 완성)
    • Packaging: jar
    • Java: 11

그리고 이어서 Dependencies를 추가해 줍니다.

  • Lombok
  • Spring Confuguration Processor
  • Spring Web

이후 Generate 버튼을 눌러 프로젝트를 다운 받고 압축을 해제하고 프로젝트를 인텔리제이에서 열면 됩니다.

 

4.2 pom.xml (Project Object Model) 살펴보기

pom.xml은 메이븐 기능을 사용하기 위해 작성하는 파일로 프로젝트, 의존성 라이브러리, 빌드 등의 프로젝트를 관리하는데 필요한 내용이 들어가 있습니다.

 

4.2.1 빌드 관리 도구

빌드 관리 도구는 JVM이나 WAS가 프로젝트를 인식하고 실행할 수 있도록 소스코드와 프로젝트에 사용된 .xml .jar .properties를 빌드하는 도구 입니다.

 

4.2.2 메이븐

아파치 메이븐은 자바 기반의 프로젝트를 빌드하고 관리하는데 사용하는 도구입니다. 메이븐은  pom.xml 파일에 필요한 라이브러리를 추가하면 해당 라이브러리에 필요한 라이브러리까지 한꺼번에 내려받아 관리합니다.

메이븐의 대표 기능
  • 프로젝트 관리: 프로젝트 버정과 아치 팩트를 관리
  • 빌드 및 패키징: 의존성을 관리하고 설정된 패키지 형식으로 빌드 수행
  • 테스트: 빌드를 수행하기 전에 단위테스트를 통해 작성된 애플리케이션 동작 여부 확인
  • 배포: 빌드가 완료된 패키지를 원격 저장소에 배포
메이븐의 생명 주기

매이븐의 기능은 생명주기 순서에 따라 관리되고 동작됩니다.

생명 주기는 크게 기본 생명주기와 클린 생명주기 사이트 생명 주기 3가지로 구분 되며 단계가 존재하고, 특정 단계를 수행하기 위해서는 이전 단계를 끝내야 합니다. 각 단계는 메이븐에서 제공하는 플러그인이 설정된 목표를 수행하는 방식으로 동작합니다. 생명 주기 단계는 순차적으로 진행 됩니다.

 

  1. 클린 생명 주기
    • clean: 이전 빌드가 생성한 모든 파일 제거합니다.
  2. 기본 생명 주기
    • validate: 프로젝트 빌드하는데 필요한 모든 정보 사용가능한지 검토합니다.
    • compile: 프로젝트 소스코드 컴파일 합니다.
    • test: 단위 테스트 프레임워크 사용해 테스트 실행합니다.
    • package: 컴파일한 코드로 JAR 형식의 패키징 수행합니다.
    • verity: 패키지가 유효하며 일정 기준 충족하는지 확인합니다.
    • install: 프로젝트 사용하는데 필요한 패키지 로컬 저장소에 설치합니다.
    • deploy: 프로젝트를 통합 또는 릴리스 환경에서 다른 곳에 공유하기 위해 원격 저장소에 패키지 복사합니다.
  3. 사이트 생명주기
    • site: 메이븐의 설정 파일 정보를 기반으로 프로젝트의 문서 사이트를 생성합니다.
    • site-deploy: 생성된 사이트 문서를 웹서버에 배포합니다.

▶메이븐에 대한 더 자세한 내용은 공식 사이트 참고 가능합니다.

https://maven.apache.org/

 

Maven – Welcome to Apache Maven

Welcome to Apache Maven Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and documentation from a central piece of information. If you

maven.apache.org

 

4.3 Helo World 출력하기

4.3.1 컨트롤러 작성하기

com.springboot.hello에 Controller 패키지를 생성하고 그 안에 HelloController 클래스를 생성합니다.

컨트롤러에 포함된 로직에는 사용자나 클라이언트가 입력한 값에 대한 응답을 수행합니다. 대부분의 모든 요청은 컨트롤러를 통해 진행됩니다.

 

아래와 같이 HelloController를 작성해줍니다. 

package com.springboot.hello.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {
    
    @RequestMapping("/hello")
    public String hello() {
        return "Hello World";
    }
}

 

4.3.2 애플리케이션 실행

HelloApplication을 Run 버튼을 통해 실행하면 아래와 같이 실행 로그가 출력됩니다.

포트 8080을 통해 웹 서버가 열립니다.

 

4.3.3 웹 브라우저를 통항 동작 테스트

스프링 부트가 설정한 URL 주소로 이동하면 실행 결과를 확인할 수 있습니다. http://localhost:8080/hello 에 접속하면 hello world의 실행 결과를 확인할 수 있습니다.

 

4.3.4 Talend API Tester를 통한 동작 테스트

크롬의 확장 프로그램인 Talend API Tester를 사용하면 상세한 응답을 확인할 수 있습니다.

https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm?utm_source=ext_sidebar&hl=ko

 

Talend API Tester - Free Edition

Visually interact with REST, SOAP and HTTP APIs.

chrome.google.com

위의 확장 프로그램을 크롬에 추가해줍니다.

Talend API Tester는 HTTP 통신을 테스트하는 프로그램으로 다양한 HTTP 메서드를 설정하고 쿼리와 파라미터를 담아 요청을 보낼 수 있습니다.

Talend API Tester를 실행하면 다음과 같이 나타나며 HTTP 요청을 보내려는 경로와 메서드를 설정하고  send를 눌러서 response를 확인할 수 있습니다. 

다음과 같이 경로와 요청을 보내면 response에 결과를 확인 할 수 있습니다.

 

Editor: 니나노

728x90

관련글 더보기