What we have to do is to be forever curiously
testing new opinions and courting new impressions

우리가 해야 할 일은 끊임없이 호기심을 갖고
새로운 생각을 시험해보고 새로운 인상을 받는 것

📌 용어 한눈에

  • 클라이언트: 서비스를 요청하는 쪽, 사용자나 사용자 프로그램
  • 서버: 요청을 받아 응답을 제공하는 쪽, 시스템이나 프로그램
  • 요청: 클라이언트가 서버에 보내는 데이터나 작업 지시
  • 응답: 서버가 클라이언트에 돌려주는 결과
  • 프로세스: 실행 중인 프로그램 단위, 한 기기에서 클라이언트와 서버 역할 동시 가능

📌 클라이언트와 서버의 차이점

클라이언트와 서버는 기기가 아니라 역할로 구분

  • 클라이언트: 요청을 보내는 쪽
  • 서버: 요청을 처리하고 응답하는 쪽

노트북, 스마트폰, PC 같은 기기는
상황에 따라 클라이언트도 될 수 있고 서버도 될 수 있음
중요한 건 어떤 프로세스가 어떤 역할을 하느냐


📌 예시로 풀어보기

🖥️ 브라우저로 웹사이트 접속
  • Chrome에서 https://example.com 입력
  • 브라우저(클라이언트)가 서버에 HTTP 요청 보냄
  • 서버가 HTML, CSS, JS로 응답
  • 이 경우 노트북은 클라이언트 역할
🖥️ IntelliJ로 스프링부트 서버 띄우기
  • IntelliJ에서 @SpringBootApplication 실행
  • localhost:8080 같은 포트로 서버 프로세스 구동
  • 노트북이 서버 역할
🖥️ 같은 노트북에서 localhost:8080 접속
  • 브라우저가 localhost:8080으로 요청 → 클라이언트 역할
  • 로컬 스프링부트 서버가 응답 → 서버 역할
  • 한 노트북에서 클라이언트와 서버 프로세스 동시 실행

📌 코드로 살펴보기

✅ 서버 (Spring Boot)
@RestController
@RequestMapping("/api")
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello from Server!";
    }
}

@RestController로 요청 처리
application.yml에서 포트 설정 가능 (예: server.port=8080)
노트북이 서버 역할로 동작

✅ 클라이언트 (Java HTTP 클라이언트)
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.net.URI;

public class ClientExample {
    public static void main(String[] args) throws Exception {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("http://localhost:8080/api/hello"))
                .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }
}

이 코드는 요청을 보내는 클라이언트 역할
IntelliJ에서 실행하면 디버깅도 편리


📌 노트북은 클라이언트일까 서버일까

“노트북이 클라이언트인가 서버인가”는 잘못된 질문
기기가 아니라 프로세스의 역할로 판단

  • 브라우저로 URL 접속 → 클라이언트
  • 스프링부트 서버 실행 → 서버
  • 둘 다 동시에 가능

스프링부트 개발자라면 IntelliJ로 서버 띄우고
브라우저나 Postman으로 테스트하며 역할 구분 익히는 게 추천


📌 혼동되는 이유

기기 중심으로 생각하려는 습관 때문
“URL 치면 클라이언트”, “서버 코드 돌리면 서버” 같은 맥락을 헷갈림
요청과 응답의 흐름으로 역할 구분하면 명확해짐


✍ 결론

클라이언트와 서버는 역할의 문제
노트북 하나로도 두 역할을 다 경험 가능
핵심은 역할의 구분흐름의 이해

스프링부트로 API 만들 때
@RestController로 서버 역할 구현하고
Postman이나 HTTP 클라이언트로 요청 날려보면서 이해

댓글남기기