[TIL] _ 260208_ 스프링 입문

호두·2026년 2월 9일

✔️ Java / Spring

목록 보기
12/25

✔️ 스프링 이란?


java 언어를 기반으로 한 백엔드 프레임 워크

자주 사용하는 기능을 아주 정교한 코드 뭉치(라이브러리)로 만들어서 보관하고 있다. 그냥 라이브러리들을 쌓아둔 창고가 아니라, 수많은 라이브러리가 서로 충돌하지 않고 잘 돌아가도록 조율해주는 '지능형 관리 시스템'

자바 엔터프라이즈 웹 애플리케이션 개발과 관련된 대부분의 생태계를 제공함. 기능은 많지만, 처음부터 하나하나 설정을 다 해줘야 해서 다루기가 까다롭다.

👉 특징

1) 반복 업무 자동화
: 매번 코드를 짜는게 아니라 스프링이 이미 만들어 둔 로그인, 데이터 베이스 관련 복잡한 코드들을 가져와서 사용

2) 부품 교체 쉬움
: 스프링은 쉽게 부품을 교체할 수 있도록 설계되어 유지보수에 좋음

3) 대규모 서비스에 최적화
: 수만명이 접속해도 서버가 터지지 않게 관리해주는 기능들이 강력하다. 우리나라 대부분의 대기업들은 거의 스프링을 사용함.


👉 사용이유

1) 신뢰성
: 여러 전문 개발자들이 이미 검증을 마친 코드를 사용할 수 있음

2) 속도
: 만들어진 걸 가져와서 사용만 하면 됨

3) 협업
: 공용으로 사용하는 코드를 써서 다른 사람이 짠 코드를 이해하기 쉬워짐.



✅ 환경설정


✔️ 스프링 부트란?

방대한 스프링 생태계를 좀 더 쉽고 편리하게 사용할 수 있도록 돕는 프레임워크.

✔️ 프레임 워크
: 프로그램이 돌아가는 전체적인 구조와 흐름이 이미 결정되어 있는 틀

👩‍💻 사용 방식

  1. 개발자의 선언 (Starter)
    프로젝트를 처음 만들 때 Spring Web이라는 항목을 체크
    "나 웹사이트 만들 거야!"라고 알려주는 신호.

  2. 스프링 부트의 응답 (Auto-configuration)
    웹에 필요한 스프링 라이브러리들과 8080 포트 열어줄 내장 서버(Tomcat)도 같이 전달

  3. 간단한 설정 (Annotation)
    코드 위에 @Controller 같은 애노테이션 하나만 적으면 스프링 부트가 "아, 이 코드를 웹 요청 처리용으로 쓰겠다는 거구나?" 하고 자동으로 연결해줌.


Spring Boot starter

https://start.spring.io/ 사이트에서 프로젝트 생성

Gradle 설정

스프링 부트가 build.gradle 파일에서 자동으로 라이브러리를 설치, 빌드, 실행 을 관리한다. 나중에 데이터베이스를 연결하고 싶을 때, 테스트 도구를 추가하고 싶을 때, DevTools(자동 리로딩) 같은 편의 기능을 넣고 싶을 때 사용하면 된다.

dependencies (사용하는 라이브러리들)

동작 확인 ☑️

메인 메서드 실행: HelloSpringApplication 같은 이름의 파일을 찾아서 Run

로그 확인: 하단 콘솔창에 글자가 쫙 올라가다가 마지막에 Started ... in ... seconds라는 문구가 뜨는지 확인

브라우저 접속: 크롬 주소창에 localhost:8080을 입력하고 사이트 확인



✅ 라이브러리들

스프링 부트의 starter 의존성

관련 라이브러리를 자동으로 포함해주고 간소화 해준다.

스프링 부트 라이브러리

  • spring-boot-starter
  • spring-boot-starter-thymeleaf
  • spring-boot-starter-tomcat

테스트 라이브러리

내가 짠 코드가 제대로 작동하는지 검사해주는 자동 검사기
게시판 기능을 만들 때마다 매번 브라우저 켜고, 글 쓰고, 저장됐나 확인하지 않고도 자동으로 검사한다. 복붙이 아니라 '질문'을 던지는 코드를 짜서 실행시키면 검사해준다.



✅ View 환경설정


welcome page 만들기

package hello.hello_spring;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HelloSpringApplication {

	public static void main(String[] args) {
		SpringApplication.run(HelloSpringApplication.class, args);
	}

}

➡️ 스프링 부트는 제일 먼저 src 에 관련된 controller 가 있는지 체크한다.

📌 정적 페이지

<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
Hello
<a href="/hello">hello</a>
</body>
</html>

controller 가 없다고 판단되면 static 패키지의 html을 그대로 브라우저에 던져준다.

index.html 파일을 resources/static 패키지에 생성하고 서버 실행시키면 http://localhost:8080 웹페이지에 Hello hello 라고 뜨는 걸 확인할 수 있다.

📌 thymeleaf 템플릿 엔진 (동적 템플릿)

package hello.hello_spring.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HelloController {

    @GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "제에발요");
        return "hello";
    }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Hello</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<p th:text="'안녕하세요. ' +${data}"  >안녕하세요. 손님</p>
</body>
</html>

@GetMapping 이 있으면 컨트롤러가 안의 Model을 가지고 뷰 리졸버(viewResolver) 에게 return "hello" 라는 주소도 같이 넘겨준다. 뷰 리졸버는 리턴 값으로 파일 주소를 mapping 하고 템플릿 엔진(thymeleaf) 에게 이 파일 주소와 model을 넘기면서 랜더링을 명령한다.


💡 GetPost 메서드

  • Get : "가져오기(조회)" 를 할 때 사용. 데이터를 URL 뒤에 붙여서 보냄. URL창에 다 보이기 때문에 보안이 중요한 데이터에는 사용하지 않음. 캐싱이 가능해 한번 간 길을 브라우저가 기억해 다음에 더 빨리 가져옴. 게시를 조회, 마이페이지 보기 등에 쓰임.
    @GerMapping 사용

  • Post : "등록하기"로 데이터를 줄테니까 서버에 저장하라는 명령을 할 때 사용. 데이터를 URL에 노출하지 않고 HTTP Body 라는 봉투에 숨겨 보냄. 용량 제한 거의 없고, Get 보다 보안상 안전함 (암호화는 별도!) 게시글 쓰기, 회원가입, 로그인처럼 서비의 상태를 바꿀 때 사용
    @PostMapping 사용함

랜더링 (Rendering) 이란?
➡️ 템플릿 코드를 실행해서 최종 HTML을 완성하는 과정 뜻은 '~한 상태가 되게 만들다. 라는 뜻이다.

  • 코드가 돌아가는 것 = 실행
  • 이 실행의 목적이 화면이나 결과물을 그려서 보여주는 것'= 렌더링

💡 구별방법: 무언가를 만들어냈을 때가 랜더링


✅ 빌드하고 실행


콘솔에 ./gradlew build -> cd build/libs -> java -jar hello-spring-0.0.1-SNAPSHOT.jar 차례로 입력 후 서버를 끄고 실행해보기

템플릿 엔진 사용 전


템플릿 엔진 사용 후

0개의 댓글