1. Spring Framework 개요

Framework, Library, API 개념 구분

Framework란?

  • 개발을 위한 뼈대(구조)를 제공하며, 제어 흐름(Control Flow)을 개발자가 아닌 Framework가 관리한다. (IOC 적용)

Library란?

  •  개발자가 필요할 때 직접 호출해서 사용하는 코드 집합이다. 제어권은 개발자에게 있다.

API (Application Programming Interface)란?

  • 서로 다른 프로그램끼리 데이터나 기능을 주고받을 때 사용하는 통신 규약이다.

(주의) : Framework와 Library는 제어권(누가 호출하는가)이 다르다.


Spring MVC와 Spring Boot 비교

Spring MVC

  • 전통적인 Spring 웹 개발 방식
  • DispatcherServlet을 중심으로 Controller-Service-DAO 계층 구성을 한다.
  • 복잡한 XML 설정이 필요하고 외부 Tomcat 서버가 필요하다.

Spring Boot

  • 설정을 간소화하고 내장 Tomcat 서버를 포함한다.
  • 빠른 프로젝트 생성과 실행이 가능하다.
  • 다양한 Starter(초기 설정) 제공.

(주의) : Spring Boot는 설정을 자동화하지만 세밀한 제어가 필요할 경우 추가 설정이 필요하다.


Spring 주요 특징

IOC (Inversion of Control)

  • 객체 생성과 관리 제어권을 Spring Framework가 가진다.
  • 개발자는 필요한 객체를 요청만 하면 된다.
  • Spring 이 만든 객체를 Bean 이라고 부른다

DI (Dependency Injection)

  • Spring이 필요한 객체를 알아서 주입(Injection)해준다.
  • 의존성 관리를 통해 객체 간 결합도를 낮춘다.

POJO (Plain Old Java Object)

  • 특정 프레임워크에 종속되지 않는 순수한 Java 객체를 사용한다.

(주의) : Spring은 POJO 철학을 따르기 때문에 코드의 독립성과 가독성이 높아진다.


2. Spring MVC 기본 구조

Spring Container와 Bean

Spring Container

  • 객체(Bean)를 생성하고 관리하는 공간이다.
  • Core Container가 Bean 관리의 중심이다.

Bean 등록 어노테이션

  • @Component: 요청과 응답 제어 역할 명시 +  Bㄹean 등록
  • @Service: 비즈니스 로직 처리용
  • @Repository: 데이터베이스 접근용
  • @Controller: 웹 요청/응답 처리용

(주의) : 어노테이션을 사용해 등록된 클래스만 Spring Container가 관리한다.

 


Spring MVC 요청 처리 흐름

  1. 클라이언트가 요청을 보낸다.
  2. DispatcherServlet이 요청을 받는다.
  3. HandlerMapping이 요청을 처리할 Controller를 찾는다.
  4. Controller가 요청을 처리하고 결과를 반환한다.
  5. ViewResolver가 View를 결정한다.
  6. View를 통해 최종 화면이 클라이언트에 응답된다.

(주의) : DispatcherServlet은 요청과 응답의 흐름을 모두 제어한다.


3. Spring Boot 개발 환경 구축

STS 설치 및 기본 설정

STS 설치

기본 환경 설정

  • General → Show heap status 체크
  • Workspace → Refresh using native hooks or polling 체크
  • 폰트 설정 변경 (선택사항)

(주의) : 설치 후 lombok 설정까지 완료해야 프로젝트 오류가 없다.


Lombok 설치

설치 방법

  •  해당 sts 폴더에 lombok 파일 설치 또는 복사 (수업시간때 이미 설치한 파일이 있어 우리는 복사했다)
  • shift 누른 상태로 우클릭 -> power shell 창 생성
  • java -jar lo // 입력후 Tab

(주의) : Lombok 미설치 시 @Getter, @Setter 등이 작동하지 않는다.


4. Spring Starter로 프로젝트 생성

Spring Starter 프로젝트 생성
  • New → Spring Starter Project 선택
  • Build Tool: Gradle - Grovy
  • Java Version: 21
  • Package 3단계 설정

(유의) : import 시에도 Gradle project 를 이용하여 가져와야한다. 

(주의) : Group, Artifact, Package 네이밍은 일관성 있게 작성할 것.


Dependency 추가
  • Spring Web
  • Spring Boot DevTools
  • Lombok
  • Spring Configuration Processor
  • Java Mail Sender
  • WebSocket
  • JDBC API
  • MyBatis Framework
  • Oracle Driver
  • Spring Security
  • Thymeleaf -> src/main/resources/templates 폴더 자동 생성

(주의) : 필요한 Dependency를 빼먹으면 기능 구현 시 오류가 발생할 수 있다.


5. Build.gradle과 application.properties 설정

build.gradle 설정

수정시 dependedcies {} 내 구문을 수정할 예정

 

application.properties 설정
# 해당 파일에 설정 작성 시 프로젝트 전반적으로 설정이 적용됨 
spring.application.name=demoProject1

# port번호 80으로 변경 (80dms HTTP의 기본 포트 번호로, 브라우저에서 포트번호 없이 접속)
server.port=80

# spring DevTools (자동 리로드, 서버 재시작) 설정 

# 브라우저 자동 새로고침 기능 
spring.devtools.livereload.enabled=true

# 코드 변경 시 서버 자동 재시작 
spring.devtools.restart.enabled=true

# 타임리프 캐시 비활성화 (HTML 파일 수정 시 바로 변경사항 확인할 수 있도록) 
spring.thymeleaf.cache=false

# 로그 레벨 지정
logging.level.edu.kh.demo=debug

port 번호가 80 번이면 주소창에 localhost만 입력해도 접속 가능 

logging.level 로 설정한 패키지면 주의 **

 

 저장시 UTF-8로 저장 (하니면 주석 한글이 깨진다)

 

(주의) : 데이터베이스 연결 설정은 보안상 다른 파일로 분리하는 것이 좋다.


6. Spring Boot 프로젝트 구조 이해

기본 폴더 구성
 

 

src/main/java Java 소스 코드 

폴더 내에 프로젝트명.Application 파일 자동 생성됨
: main 메서드를 가지고 있으며 프로젝트로 만든 애플리케이션의 실행을 담당하는 클래스

src/main/resources 설정 파일 및 정적 리소스
templates Thymeleaf HTML 파일 저장
static CSS, JS, 이미지 파일 저장
application.properties 프로젝트 전역 설정 파일

 

 

 

(주의) : templates 폴더 HTML은 URL로 직접 접근이 불가하고 Controller를 통해 접근해야 한다.


7. index.html 생성 및 기본 서버 실행

index.html 생성
  • templates 폴더 내 index.html 파일 생성
  • 서버 실행 후 http://localhost로 접속해 기본 화면 확인

(주의) : Spring Boot 기본 설정에서는 /templates/index.html 파일을 자동으로 찾아 보여준다.


8. Thymeleaf 사용법

기본 사용법
 
 
<p th:text="${user.name}">회원 이름</p> <a th:href="@{/login}">로그인</a>
  • ${}: Model 데이터 출력
  • @{}: URL 경로 지정
  • th:if, th:each: 조건문, 반복문 처리

(주의) : 타임리프 템플릿 문법은 표준 HTML5를 그대로 유지하며 동작한다.


9. Static 폴더에서 정적 자원 사용

css, js, images 관리
  • static/css
  • static/js
  • static/images

HTML 파일에서 다음처럼 절대경로를 작성해 호출한다.

 

(주의) : static 폴더 경로는 URL에 직접 /static을 붙이지 않는다.


10. Controller 생성 및 요청 매핑

@Controller와 @RequestMapping
 
@Controller
@RequestMapping("/example")
public class ExampleController {

@GetMapping("/test")
public String testPage() {

return "test";

// templates/test.html 이동

} 
}
 

forward 하려는 html 파일 경로 retun 구문에 작성하는데 

ViewResolver 가 제공하는 타임리프의 접두사, 접미사 제외하고 작성한다 

 

return example 인 경우 classpath:/templates/example.html 으로 이동

접두사 : classpath:/templates/

접미사 : .html


11. HttpServletRequest를 통한 파라미터 수신

HttpServletRequest 사용
 
@PostMapping("/submit") 


public String submit(HttpServletRequest req) { 


String username = req.getParameter("username"); 

return "redirect:/main"; 

	}
  • form 데이터 수신 가능
  • "redirect:"를 사용해 다른 URL로 이동할 수 있다.

 

 

📌 헷갈렸던 부분

@RequestMapping("/param/main") 브라우저가 접속하는 URL (주소창 기준) URL 주소 경로
return "param/param-main" 서버 내부에서 찾을 view 파일명 templates/ 내부 폴더 경로
return "redirect:/param/main" 브라우저에게 다른 URL로 재요청 명령 URL 주소 경로 (브라우저)
  • 브라우저가 요청하는 건 URL 주소다. (/param/main)
  • Controller가 return 하는 건 서버 templates 폴더 안의 HTML 경로다. (param/param-main)
  • redirect는 브라우저에게 새로운 URL로 이동 명령을 내리는 거다.

 

+ Recent posts