반응형

Spring Boot에서 클라이언트로부터 데이터 전달받는 방법

Spring Boot에서 클라이언트가 서버로 데이터를 전달하는 방법은 여러 가지가 있습니다. 이번 글에서는 HTTP 메서드(GET, POST)와 함께 서버가 데이터를 받는 방법을 정리하고, 예제 코드와 함께 설명하겠습니다.


1. GET 요청에서 데이터 전달 방법

GET 요청에서는 데이터를 URL을 통해 전달합니다. 주로 두 가지 방식이 사용됩니다.

1.1 쿼리 파라미터 (? 사용)

쿼리 파라미터를 사용하면 URL의 ?key=value 형태로 데이터를 전달할 수 있습니다.

예제 코드

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class QueryParamController {

    @GetMapping("/search")
    public String search(@RequestParam String keyword) {
	    return "Searching for: " + keyword;
    }
}

 

클라이언트 요청 예시:

 
GET /search?keyword=spring

응답:

 
Searching for: spring

1.2 경로 변수 (@PathVariable 사용)

경로 변수를 사용하면 URL 경로의 일부를 변수로 활용할 수 있습니다.

예제 코드

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PathVariableController {

    @GetMapping("/users/{id}")
    public String getUser(@PathVariable int id) {
	    return "User ID: " + id;
    }
}

클라이언트 요청 예시:

 
GET /users/123

응답:

 
User ID: 123

2. POST 요청에서 데이터 전달 방법

POST 요청에서는 데이터를 HTTP 요청의 본문(body)에 JSON 형식으로 전달할 수 있습니다.

2.1 @RequestBody를 사용하여 JSON 데이터 받기

POST 요청에서 데이터를 전달할 때는 @RequestBody를 사용하여 DTO(Data Transfer Object) 형태로 매핑할 수 있습니다.

예제 코드

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class UserController {

    @PostMapping("/users")
    public String createUser(@RequestBody UserDTO userDTO) {
	    return "User created: " + userDTO.getName() + ", Age: " + userDTO.getAge();
    }
}

class UserDTO {
    private String name;
    private int age;

    // Getters and Setters
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}

클라이언트 요청 예시:

 
POST /users
Content-Type: application/json
 
{
"name": "John",
"age": 30
}

응답:

 
User created: John, Age: 30

3. 요약

HTTP 메서드 클라이언트 데이터 전달 방식 서버 처리 방식
GET ?key=value 사용 @RequestParam
GET URL 경로 (/값) 사용 @PathVariable
POST JSON Body @RequestBody (DTO)

4. 결론

Spring Boot에서 클라이언트가 서버로 데이터를 전달하는 방법에는 여러 가지가 있습니다. 상황에 맞게 @RequestParam, @PathVariable, @RequestBody를 적절히 활용하면 효율적인 API를 설계할 수 있습니다.

 

반응형
반응형

자바로 HTTP 요청 처리하기: GET, POST, HEADER 예제

HTTP 통신은 현대 애플리케이션에서 서버와 클라이언트 간 데이터 교환의 핵심입니다. 자바에서는 표준 라이브러리와 외부 라이브러리를 활용하여 HTTP 요청을 쉽게 처리할 수 있습니다. 이번 글에서는 HTTP GET, POST, HEADER를 사용하는 방법과 예제를 소개합니다.


HTTP 요청의 주요 메서드

  1. GET: 서버에서 데이터를 가져오는 데 사용.
  2. POST: 서버에 데이터를 전송하는 데 사용.
  3. HEADER: 요청 헤더를 통해 부가 정보를 서버에 전달.

1. GET 요청

HttpClient를 이용한 GET 요청:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpGetExample {
    public static void main(String[] args) {
        try {
            String url = "https://jsonplaceholder.typicode.com/posts/1";

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest httpRequest = HttpRequest.newBuilder()
                                        .uri(URI.create(url))
                                        .GET()
                                        .build();

            HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());

            System.out.println("Response Code: " + httpResponse.statusCode());
            System.out.println("Response Body: " + httpResponse.body());
        } catch (Exception e) {
	        e.printStackTrace();
        }
    }
}

출력 결과: JSON 데이터를 포함한 서버 응답.


2. POST 요청

HttpClient를 이용한 POST 요청:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpPostExample {
    public static void main(String[] args) {
        try {
            String url = "https://jsonplaceholder.typicode.com/posts";
            String body = "{"title": "foo", "body": "bar", "userId": 1}";

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest httpRequest = HttpRequest.newBuilder()
                                        .uri(URI.create(url))
                                        .header("Content-Type", "application/json")
                                        .POST(HttpRequest.BodyPublishers.ofString(body))
                                        .build();

            HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());

            System.out.println("Response Code: " + httpResponse.statusCode());
            System.out.println("Response Body: " + httpResponse.body());
        } catch (Exception e) {
	        e.printStackTrace();
        }
    }
}

출력 결과: 서버에 전송된 데이터와 응답 메시지.


3. HEADER 추가하기

HttpClient를 이용하여 헤더 추가:

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class HttpHeaderExample {
    public static void main(String[] args) {
        try {
            String url = "https://jsonplaceholder.typicode.com/posts/1";

            HttpClient client = HttpClient.newHttpClient();
            HttpRequest httpRequest = HttpRequest.newBuilder()
                                        .uri(URI.create(url))
                                        .header("Authorization", "Bearer token123")
                                        .GET()
                                        .build();

            HttpResponse<String> httpResponse = client.send(httpRequest, HttpResponse.BodyHandlers.ofString());

            System.out.println("Response Code: " + httpResponse.statusCode());
            System.out.println("Response Body: " + httpResponse.body());
        } catch (Exception e) {
	        e.printStackTrace();
        }
    }
}

출력 결과: 헤더를 포함한 요청에 대한 서버 응답.


결론

자바에서는 기본 API인 HttpClient를 활용하여 간단하고 직관적으로 HTTP 요청을 처리할 수 있습니다. GET, POST, HEADER를 적절히 활용하여 애플리케이션의 요구 사항을 충족해 보세요!

 

반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] Servlet Filter  (0) 2025.01.16
[Java] JSON  (0) 2025.01.16
[Java] SQL Injection  (1) 2025.01.10
[Java] 서블릿(Servlet)  (0) 2025.01.08
[Java] 계층형 아키텍처 패턴 (Layered Architecture Pattern)  (0) 2025.01.07
반응형

서블릿(Servlet)

**서블릿(Servlet)**은 자바 기반 웹 애플리케이션에서 클라이언트의 요청을 처리하고 동적 콘텐츠를 생성하는 서버 측 컴포넌트입니다. HTTP 프로토콜을 기반으로 하며, Java Servlet API를 통해 동작합니다. 주로 HTML, JSON, XML 등의 응답을 생성하여 클라이언트에 반환합니다.

이 글에서는 서블릿의 개념과 함께 클라이언트에서 데이터를 보내고 받는 방법, 그리고 서블릿에서 JSP를 통해 데이터를 반환하는 방법을 예제와 함께 설명합니다.


서블릿의 주요 기능

  1. 클라이언트 요청 처리:
    • GET, POST, PUT 등의 HTTP 요청을 처리합니다.
  2. 데이터 처리 및 로직 수행:
    • 서버에서 필요한 비즈니스 로직을 수행하고 데이터베이스와 상호작용합니다.
  3. 응답 생성:
    • 클라이언트가 이해할 수 있는 형식(HTML, JSON 등)으로 데이터를 반환합니다.

클라이언트에서 서블릿에 데이터 보내는 방법

클라이언트는 GET 또는 POST 요청을 통해 데이터를 서블릿에 보낼 수 있습니다.

1. GET 요청을 통한 데이터 전송

GET 요청은 URL에 데이터를 쿼리 문자열(Query String)로 포함하여 전송합니다.

- URL뒤에 ?와 &이용하여 데이터를 포함

 

클라이언트 요청 예시:

<a href="http://localhost:8080/MyServlet?name=John&age=30">Send Data</a>

서블릿에서 GET 요청 처리:

request.getParameter()이용하여 클라이언트가 보낸 데이터를 받습니다.

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
	    // 데이터 수신
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        // 응답 작성
        response.setContentType("text/html");
        response.getWriter().println("<h1>Name: " + name + ", Age: " + age + "</h1>");
    }
}

2. POST 요청을 통한 데이터 전송

POST 요청은 데이터를 요청 본문(Body)에 포함하여 전송합니다.

- form 태그 이용하여 action에 URL, method에 POST 입력

- input 태그 이용하여 입력 받은 데이터를 요청 본문(Body)에 포함 

 

클라이언트 요청 예시:

<form action="http://localhost:8080/MyServlet" method="POST">
    <input type="text" name="name" placeholder="Enter your name">
    <input type="number" name="age" placeholder="Enter your age">
    <button type="submit">Submit</button>
</form>

서블릿에서 POST 요청 처리:

request.getParameter()이용하여 클라이언트가 보낸 데이터를 받습니다.

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;

public class MyServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        // 데이터 수신
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        // 응답 작성
        response.setContentType("text/html");
        response.getWriter().println("<h1>Name: " + name + ", Age: " + age + "</h1>");
    }
}

서블릿에서 클라이언트에 데이터 보내는 방법 (JSP 사용)

서블릿은 JSP와 연동하여 동적 웹 페이지를 생성할 수 있습니다.

- request.setAttribute("dataName", Data)를 이용하여 JSP에 데이터 전송

 

1. 서블릿에서 JSP로 데이터 전달:

import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 데이터 설정
        request.setAttribute("message", "Hello from Servlet!");

        // JSP로 포워딩
        RequestDispatcher dispatcher = request.getRequestDispatcher("/display.jsp");
        dispatcher.forward(request, response);
    }
}

2. JSP에서 데이터 출력:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>Servlet to JSP</title>
</head>
<body>
<h1>Message from Servlet: ${message}</h1>
<h1>Message from Servlet: <%= message></h1>
</body>
</html>

 


서블릿과 JSP의 활용 예시

  1. 로그인 시스템:
    • 클라이언트가 로그인 폼에서 입력한 데이터를 서블릿으로 보내 검증 후 JSP로 결과를 반환.
  2. 데이터 조회 및 출력:
    • 데이터베이스에서 조회한 결과를 서블릿에서 처리하고 JSP에서 테이블 형식으로 출력.
  3. RESTful API와 연동:
    • 클라이언트에서 서블릿으로 JSON 데이터를 보내고 처리한 결과를 JSP 또는 JSON 형식으로 응답.

마치며

서블릿은 자바 기반 웹 애플리케이션에서 중요한 역할을 합니다. GET과 POST 요청을 통해 클라이언트와 데이터를 주고받고, JSP를 활용해 동적 콘텐츠를 생성하는 방법을 이해하면 더욱 효율적인 웹 개발이 가능합니다. 이를 실습하며 능력을 키워보세요!

 

반응형

'개발 부트캠프 > 백엔드' 카테고리의 다른 글

[Java] HTTP 요청 처리하기  (0) 2025.01.16
[Java] SQL Injection  (1) 2025.01.10
[Java] 계층형 아키텍처 패턴 (Layered Architecture Pattern)  (0) 2025.01.07
[Java] MVC 패턴  (1) 2025.01.07
[Java] SOLID 원칙  (0) 2025.01.07
반응형

HTTP통신이란?

  • 컴퓨터끼리 네트워크 통신을 할 때 여러가지 방식으로 가능하며 이런 방식들을 묶어서 통신 프로토콜이라고 함
    • 웹 서버와 통신을 할 때 사용하는 HTTP 프로토콜, 메일을 주고 받을 때 사용하는 SMTP 프로토콜, 파일을 전송할 때 사용하는 FTP 프로토콜 등
  • HTTP 통신: HTTP 프로토콜을 활용한 통신
    • HTTP 프로토콜 - 브라우저가 웹 서버와 통신을 하기 위해 생긴 프로토콜
      • 대부분의 네트워크 통신에서 사용되는 대중적인 프토로콜
      • 개발한 웹, 서버는 전부 HTTP 프로토콜로 통신하게 됨
    • HTTP 통신은 기본적으로 요청(request)과 응답(response)으로 나눠서 이해할 수 있음
    • 요청과 응답 모두 공통적으로 아래와 같은 구조를 가짐

  • 요청 라인 -  URL, Method 같은 핵심 요청 정보가 들어가며 요청과 응답에 따라 구성 요소가 다름
  • Header - HTTP 관련 여러 설정 값이 들어감
  • Body - 통신에 필요한 데이터가 들어감(옵션)

 

HTTP 요청

  • HTTP 통신으로 서버에게 정보를 요청하기 위해선 몇가지 규칙을 지켜야 함
  1. 어떤 서버에게 요청할 것인지 URL이 있어야 함 (요청 라인)
  2. 어떤 방식으로 통신을 할 것인지 Method가 있어야 함 (요청 라인)

 

HTTP Method

  • 클라이언트가 서버에게 HTTP 요청을 할 때 URL 주소와 함께 HTTP Method를 정해야 함
    • HTTP Method에 따라 서버에서는 어떤 요청인지를 파악할 수 있음
    • 대표적으로 사용되는 GET, POST 외에도 PUT, DELETE 등 많은 Method가 있음
    • 서버의 세계에서는 같은 URL 주소로 서버에게 요청하더라도 method가 다르면 아예 다른 요청으로 간주

GET

  • 일반적으로 정보를 받아올 때 사용하는 Method
    •  HTTP 요청을 할 때 method를 설정하지 않으면 기본 메소드로 GET이 들어감
    • 일반적으로 웹 서버에서 웹을 다운받을 때 GET을 사용
  • 사용 예시
    • 웹 서버에서 웹을 다운받을 때
    • 내 상품 정보들을 받아올 때

POST

  • 새로운 자원을 생성할 때 POST를 많이 사용
  • 사용 예시
    • 로그인을 할 때 아이디, 패스워드를 담아야 함
    • 아티클을 만들 때 입력한 아티클 정보를 담아야 함

 

HTTP 요청에 정보 담기

  • 클라이언트가 HTTP 요청을 할 때 정보를 담아야 하는 경우가 많음
    • 회원가입을 할 때 회원 정보를 서버에게 보내줘야 함
    • 상품을 만들 때 상품 정보를 서버에게 보내줘야 함
    • 로그인을 할 때 아이디 패스워드를 담아야 함
  •  이때 Request method에 따라 정보를 담는 방식이 다름

GET

  • GET 방식은 서버에 데이터를 전송받아야 할 때 url 맨 뒤에 query를 붙임
    • query는 key=value 형태로 구성
    • POST도 마찬가지로 URL 뒤에 query를 붙일 수 있음

POST

  • POST 메소드의 경우 HTTP의 Body 부분에 데이터를 담을 수 있음
    • Body는 HTTP 통신에 구조적으로 데이터를 담아서 전송할 수 있게 도와줌
    • 대표적으로 로그인, 상품 업로드, 결제하기 등 우리의 정보를 담아서 보내야하는 경우 많이 사용됨
    • GET은 Body에 데이터를 담을 수 없음

 

HTTP 응답

  • 서버에서는 HTTP 요청을 받으면 열심히 일을 해서 응답을 해주며 이때 HTTP 응답의 규칙은 다음과 같음
  1. 응답이 어떤 상태인지를 나타내는 Status Code가 있어야 함 (요청 라인)
  2. 요청 결과를 Body에 담아야 함

  • 이때 Status Code는 200~ 500번까지 있으며 서버의 응답에 대한 상태를 표현

 

Status Code

  • 요청 코드는 크게 나눠보면 아래와 같음
    • 200번대는 정상적으로 응답을 했을 때
    • 400번대는 클라이언트가 요청을 잘못했을 때
    • 500번대는 서버에서 에러가 발생했을 때

  • 대표적인 응답 코드
    • 200: 정상적으로 응답이 됨
    • 404: 해당 URL 요청을 처리할 수 없음
    • 500: 서버에서 알 수 없는 에러가 발생

 

Reference

https://www.inflearn.com/course/it-%EA%B0%9C%EB%B0%9C%EC%A7%80%EC%8B%9D#

 

IT 회사에서 비개발자가 살아남기 위한 모든 개발 지식 A to Z - 인프런 | 강의

본 강의는 멤버십 구독 개념으로 한 번 구매하면 계속 추가되는 수업도 수강할 수 있습니다😃, [사진] 이 강의는!  단순히 개발 용어만을 알려주지 않습니다.IT 회사에서 개발자들이 실제로 하

www.inflearn.com

https://www.grabbing.me/IT-A-to-Z-By-1e1fbc981b7c4c03ac44943085ac8304

 

[IT 개발자와 일할 때 필요한 모든 개발지식] A to Z 자료 모음집 By 그랩

장담하건대 이 내용들만 알고 계시면 IT 개발의 전체적인 흐름은 전부 파악한다고 보셔도 무방합니다.

www.grabbing.me

 

반응형

'비개발자의 개발 지식 스터디 > 개발 배경지식' 카테고리의 다른 글

URL  (0) 2023.07.25
API  (0) 2023.07.12
라이브러리 & 프레임워크  (0) 2023.07.12
네트워크  (0) 2023.07.12
Git & Github  (0) 2023.07.12

+ Recent posts