🖥️Backend Development/Spring Boot

[TIL-1] 스프링 부트 개발 여정의 첫걸음: 환경 구축부터 HTTP 통신까지

카멜필름 2025. 9. 15. 22:15

오늘은 Spring 입문 과정의 첫날로 앞으로의 스프링 부트 개발을 위한 가장 기초적이고 핵심적인 내용을 학습했다. 단순히 코드를 작성하는 것을 넘어 내가 만든 애플리케이션이 어떤 환경에서 어떤 원리로 동작하는지 이해하는 시간이었다. 개발 환경을 직접 구축하고, 서버와 HTTP의 개념을 확실히 다잡는 것을 목표로 삼았다.

오늘 배운 내용 📚

  1. 개발 환경 설정: Java & IntelliJ, Git 설치
  2. 프로젝트 생성과 Git 연동: Spring Initializr를 이용한 프로젝트 생성 및 버전 관리 시작
  3. Gradle: 빌드 자동화 시스템의 이해
  4. 서버: 클라이언트-서버 모델과 네트워크의 기본 개념
  5. HTTP: 웹 통신의 핵심 규약 파헤치기

1. 개발 환경 설정: 첫 작업 공간 꾸미기 🛠️

모든 개발의 시작은 안정적인 환경을 구축하는 것이다. 스프링 부트 개발을 위해 다음 소프트웨어를 설치했다.

  • Java (JDK): 스프링 부트 애플리케이션을 실행하기 위한 필수 요소
  • IntelliJ: 강력한 기능을 제공하는 통합 개발 환경(IDE)
  • Git: 코드의 변경 이력을 관리하고 협업을 가능하게 하는 버전 관리 시스템
  •  

설치 후에는 터미널에서 git --version 명령어로 설치를 확인하고, git config 명령어를 사용해 내 이름과 이메일을 등록했다. 이 정보는 내가 작성한 코드를 식별하는 중요한 꼬리표가 된다.

git config --global user.name "내 이름"
git config --global user.email "내 이메일"

2. 프로젝트 생성과 Git 연동: 첫 씨앗 심기 🌱

IntelliJ의 Spring Initializr는 스프링 부트 프로젝트의 뼈대를 매우 간편하게 만들어주는 도구다. 다음 설정으로 첫 프로젝트(spring-prepare)를 생성했다.

  • Project: Gradle - Groovy
  • Language: Java
  • Group: com.sparta (보통 회사의 도메인을 역순으로 사용)
  • JDK: 17

프로젝트 생성 시 'Create Git repository' 옵션을 체크하면 자동으로 Git 버전 관리가 시작된다. 만약 이 옵션을 놓쳤더라도 IntelliJ 상단 메뉴의 VCS > Create Git Repository를 통해 언제든지 시작할 수 있다.

이렇게 생성된 프로젝트의 변경 사항은 IntelliJ의 Commit 탭에서 관리할 수 있다. 'Commit'이란 특정 시점의 코드 상태를 사진처럼 찍어 저장하는 행위를 의미하며, "init commit"과 같은 의미 있는 메시지와 함께 기록하는 습관이 중요하다.


3. Gradle: 똑똑한 집사, 빌드 자동화 시스템 🤖

Gradle은 내가 작성한 Java 코드를 실제 실행 가능한 파일(.jar)로 만들어주는 빌드 자동화 시스템이다. 특히 Gradle이 강력한 이유는 의존성 관리 기능 때문이다.

  • build.gradle 파일: 프로젝트의 설정 파일로 여기에 필요한 외부 라이브러리(기능 모음)를 dependencies 블록 안에 선언하면 Gradle이 Maven Repository와 같은 원격 저장소에서 자동으로 다운로드하고 프로젝트에 포함시켜 준다.
  • 장점: 개발자는 필요한 라이브러리를 찾아서 버전 충돌 걱정 없이 선언하기만 하면 된다. 모든 기능을 직접 만들 필요 없이, 검증된 라이브러리를 가져와 빠르고 쉽게 개발에 집중할 수 있다.

4. 서버: 요청과 응답의 세계 🌐

우리가 만드는 웹 애플리케이션은 서버(Server)에서 동작한다. 서버의 개념을 이해하기 위해 네트워크의 기본부터 다시 짚었다.

  • 네트워크: 여러 컴퓨터가 연결되어 정보를 주고받는 기술
  • 클라이언트-서버 모델: 서비스를 요청하는 쪽(클라이언트, 예: 웹 브라우저)과 요청을 받아 서비스를 제공하는 쪽(서버)으로 구성된 모델. 클라이언트가 요청(Request)을 보내면 서버는 그에 맞는 응답(Response)을 돌려준다.

이 통신을 위해선 고유한 주소가 필요한데, 여기서 IP 주소포트(Port) 개념이 등장한다. 강의 자료의 '택배' 비유가 인상 깊었다.

택배 📦 네트워크 💻
주소 (서울시 OOO) IP 주소 (192.168.x.x)
받는 사람 (홍길동) 포트 번호 (8080, 3306 등)

즉, IP 주소는 컴퓨터의 위치를 포트 번호는 그 컴퓨터 안에서 실행 중인 특정 프로그램을 가리킨다.

또한, 웹 서버 WAS(Web Application Server)의 차이도 배웠다.

  • 웹 서버 (예: Apache): HTML, CSS 같은 정적인 콘텐츠를 제공한다.
  • WAS (예: Tomcat): 로그인, 데이터 조회 등 로직 처리가 필요한 동적인 콘텐츠를 제공한다.
  • SpringBoot의 강점: SpringBoot는 Tomcat을 내장하고 있어 별도의 서버 설치나 설정 없이 바로 개발 서버를 실행할 수 있다. 이는 엄청난 편의성을 제공한다.

5. HTTP: 웹 세상을 움직이는 약속 🤝

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버가 웹에서 데이터를 주고받기 위해 사용하는 핵심 통신 규약(Protocol), 즉 '약속'이다. 서로 다른 컴퓨터(브라우저, 서버)가 소통하려면 정해진 규칙이 필요한데, HTTP가 바로 그 역할을 한다.

  • HTTP의 동작:
    1. 브라우저가 서버에 HTTP Request (요청)를 보낸다.
    2. 서버는 요청을 처리한 후, 브라우저에 HTTP Response (응답)를 보낸다.
    3. 브라우저는 응답받은 데이터를 해석해 사용자에게 화면을 보여준다.
  • 개발자 도구(F12): 브라우저의 개발자 도구 내 Network 탭을 통해 이 모든 과정을 직접 눈으로 확인할 수 있다. 새로고침하면 수많은 데이터 목록이 뜨는데, 이것이 현재 페이지를 구성하기 위해 서버와 주고받은 HTTP 통신의 기록이다.
  • HTTP 메시지의 구조:
    • 헤더(Header): 요청/응답의 부가 정보(메타데이터).
      • Request Method: 요청의 종류 ( GET: 데이터 조회, POST: 데이터 제출 등)
      • Status Code: 서버의 응답 상태를 나타내는 세 자리 숫자. ( 200: 성공, 404: 페이지 없음, 500: 서버 오류 등)
      • Content-Type, User-Agent 등 다양한 정보가 포함된다
    • 페이로드(Payload/Body): 실제 전송되는 데이터 (예: 서버가 보내주는 HTML 코드, 클라이언트가 보내는 로그인 정보 등)

오늘의 회고 ✨

첫날이었지만 개발의 A to Z를 훑는 느낌이었다. 코드를 한 줄 치기 전에 그 코드가 어떤 환경에서 어떻게 실행되고, 보이지 않는 곳에서는 어떤 통신이 일어나는지 이해하는 것이 얼마나 중요한지 깨달았다. 특히 IP와 포트의 '택배' 비유, 개발자 도구로 HTTP 통신을 직접 확인한 경험은 추상적인 개념을 구체적으로 이해하는 데 큰 도움이 되었다. 오늘 배운 내용을 바탕으로 다음 주차 학습도 단단하게 이어 나가야겠다.

728x90
LIST