From 2340a8797674d57df7846e6c0aec63d580c6afcf Mon Sep 17 00:00:00 2001 From: taiho0303 Date: Wed, 9 Sep 2026 16:45:18 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20spring=20tutorial=20=EC=99=84?= =?UTF-8?q?=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 3 + .gitignore | 44 ++++ HELP.md | 22 ++ build.gradle | 35 +++ gradle/wrapper/gradle-wrapper.properties | 9 + gradlew | 248 ++++++++++++++++++ gradlew.bat | 82 ++++++ settings.gradle | 1 + .../com/ceos24/springboot/Application.java | 34 +++ .../ceos24/springboot/HelloController.java | 13 + src/main/java/com/ceos24/springboot/Test.java | 14 + .../com/ceos24/springboot/TestController.java | 21 ++ .../com/ceos24/springboot/TestRepository.java | 5 + .../com/ceos24/springboot/TestService.java | 20 ++ src/main/resources/application.yaml | 18 ++ .../ceos24/springboot/ApplicationTests.java | 13 + .../springboot/HelloControllerTest.java | 30 +++ 17 files changed, 612 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 HELP.md create mode 100644 build.gradle create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/java/com/ceos24/springboot/Application.java create mode 100644 src/main/java/com/ceos24/springboot/HelloController.java create mode 100644 src/main/java/com/ceos24/springboot/Test.java create mode 100644 src/main/java/com/ceos24/springboot/TestController.java create mode 100644 src/main/java/com/ceos24/springboot/TestRepository.java create mode 100644 src/main/java/com/ceos24/springboot/TestService.java create mode 100644 src/main/resources/application.yaml create mode 100644 src/test/java/com/ceos24/springboot/ApplicationTests.java create mode 100644 src/test/java/com/ceos24/springboot/HelloControllerTest.java diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8af972c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf +*.jar binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..90b2ea1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,44 @@ +*# +*.iml +*.ipr +*.iws +*.jar +*.sw? +*~ +.#* +.*.md.html +.DS_Store +.attach_pid* +.classpath +.factorypath +.gradle +.metadata +.project +.recommenders +.settings +.springBeans +.vscode +/code +MANIFEST.MF +_site/ +activemq-data +bin +build +!/**/src/**/bin +!/**/src/**/build +build.log +dependency-reduced-pom.xml +dump.rdb +interpolated*.xml +lib/ +manifest.yml +out +overridedb.* +target +.flattened-pom.xml +secrets.yml +.gradletasknamecache +.sts4-cache + +.idea +.env \ No newline at end of file diff --git a/HELP.md b/HELP.md new file mode 100644 index 0000000..4b7889c --- /dev/null +++ b/HELP.md @@ -0,0 +1,22 @@ +# Getting Started + +### Reference Documentation +For further reference, please consider the following sections: + +* [Official Gradle documentation](https://docs.gradle.org) +* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/4.1.1/gradle-plugin) +* [Create an OCI image](https://docs.spring.io/spring-boot/4.1.1/gradle-plugin/packaging-oci-image.html) +* [Spring Web](https://docs.spring.io/spring-boot/4.1.1/reference/web/servlet.html) + +### Guides +The following guides illustrate how to use some features concretely: + +* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) +* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) +* [Building REST services with Spring](https://spring.io/guides/tutorials/rest/) + +### Additional Links +These additional references should also help you: + +* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) + diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..6fafffe --- /dev/null +++ b/build.gradle @@ -0,0 +1,35 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '4.1.1' + id 'io.spring.dependency-management' version '1.1.7' +} + +group = 'com.ceos24' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-webmvc' + testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + runtimeOnly 'com.mysql:mysql-connector-j' + + testImplementation('org.springframework.boot:spring-boot-starter-test') +} + +tasks.named('test') { + useJUnitPlatform() +} diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..ad7845b --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,9 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-9.7.1-bin.zip +networkTimeout=10000 +retries=0 +retryBackOffMs=500 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..249efbb --- /dev/null +++ b/gradlew @@ -0,0 +1,248 @@ +#!/bin/sh + +# +# Copyright © 2015 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# gradlew start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh gradlew +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..a51ec4f --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,82 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem gradlew startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +"%COMSPEC%" /c exit 1 + +:execute +@rem Setup the command line + + + +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel + +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..19b5204 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'spring-boot' diff --git a/src/main/java/com/ceos24/springboot/Application.java b/src/main/java/com/ceos24/springboot/Application.java new file mode 100644 index 0000000..2f37791 --- /dev/null +++ b/src/main/java/com/ceos24/springboot/Application.java @@ -0,0 +1,34 @@ +package com.ceos24.springboot; + +import org.springframework.boot.CommandLineRunner; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; + +import java.util.Arrays; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + + @Bean + public CommandLineRunner commandLineRunner(ApplicationContext ctx) { + return args -> { + + System.out.println("Let's inspect the beans provided by Spring Boot:"); + + // Spring Boot 에서 제공되는 Bean 확인 + String[] beanNames = ctx.getBeanDefinitionNames(); + Arrays.sort(beanNames); + for (String beanName : beanNames) { + System.out.println(beanName); + } + + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/ceos24/springboot/HelloController.java b/src/main/java/com/ceos24/springboot/HelloController.java new file mode 100644 index 0000000..5e1d028 --- /dev/null +++ b/src/main/java/com/ceos24/springboot/HelloController.java @@ -0,0 +1,13 @@ +package com.ceos24.springboot; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class HelloController { + + @GetMapping("/") + public String hello() { + return "Hello, Spring Boot!"; + } +} \ No newline at end of file diff --git a/src/main/java/com/ceos24/springboot/Test.java b/src/main/java/com/ceos24/springboot/Test.java new file mode 100644 index 0000000..154ba20 --- /dev/null +++ b/src/main/java/com/ceos24/springboot/Test.java @@ -0,0 +1,14 @@ +package com.ceos24.springboot; + +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import lombok.Data; + +@Data +@Entity +public class Test { + + @Id + private Long id; + private String name; +} \ No newline at end of file diff --git a/src/main/java/com/ceos24/springboot/TestController.java b/src/main/java/com/ceos24/springboot/TestController.java new file mode 100644 index 0000000..992c457 --- /dev/null +++ b/src/main/java/com/ceos24/springboot/TestController.java @@ -0,0 +1,21 @@ +package com.ceos24.springboot; + +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +@RequestMapping(value = "/tests") +public class TestController { + + private final TestService testService; + + @GetMapping + public List findAllTests() { + return testService.findAllTests(); + } +} \ No newline at end of file diff --git a/src/main/java/com/ceos24/springboot/TestRepository.java b/src/main/java/com/ceos24/springboot/TestRepository.java new file mode 100644 index 0000000..8e867eb --- /dev/null +++ b/src/main/java/com/ceos24/springboot/TestRepository.java @@ -0,0 +1,5 @@ +package com.ceos24.springboot; + +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TestRepository extends JpaRepository {} \ No newline at end of file diff --git a/src/main/java/com/ceos24/springboot/TestService.java b/src/main/java/com/ceos24/springboot/TestService.java new file mode 100644 index 0000000..c641c3f --- /dev/null +++ b/src/main/java/com/ceos24/springboot/TestService.java @@ -0,0 +1,20 @@ +package com.ceos24.springboot; + +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +@Service +@RequiredArgsConstructor +public class TestService { + + private final TestRepository testRepository; + + /* Read All*/ + @Transactional(readOnly = true) + public List findAllTests() { + return testRepository.findAll(); + } +} \ No newline at end of file diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml new file mode 100644 index 0000000..fbd24fa --- /dev/null +++ b/src/main/resources/application.yaml @@ -0,0 +1,18 @@ +spring: + datasource: + url: jdbc:mysql://localhost:3306/${database}?allowPublicKeyRetrieval=true&useSSL=false&characterEncoding=UTF-8 + username: root + password: ${password} + driver-class-name: com.mysql.cj.jdbc.Driver + + jpa: + hibernate: + ddl-auto: create + show-sql: true + properties: + hibernate: + format_sql: true + +logging: + level: + org.hibernate.SQL: debug \ No newline at end of file diff --git a/src/test/java/com/ceos24/springboot/ApplicationTests.java b/src/test/java/com/ceos24/springboot/ApplicationTests.java new file mode 100644 index 0000000..8285b1a --- /dev/null +++ b/src/test/java/com/ceos24/springboot/ApplicationTests.java @@ -0,0 +1,13 @@ +package com.ceos24.springboot; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class ApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/src/test/java/com/ceos24/springboot/HelloControllerTest.java b/src/test/java/com/ceos24/springboot/HelloControllerTest.java new file mode 100644 index 0000000..ad66f2c --- /dev/null +++ b/src/test/java/com/ceos24/springboot/HelloControllerTest.java @@ -0,0 +1,30 @@ +package com.ceos24.springboot; + +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.webmvc.test.autoconfigure.AutoConfigureMockMvc; +import org.springframework.test.web.servlet.MockMvc; + +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; +import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; + +@SpringBootTest +@AutoConfigureMockMvc +public class HelloControllerTest { + + @Autowired + private MockMvc mvc; + + @DisplayName("HellowController의 hello() 메서드 테스트") + @Test + public void getHello() throws Exception{ + mvc.perform(get("/")) + .andExpect(status().isOk()) + .andExpect(result -> { + String response = result.getResponse().getContentAsString(); + assert response.equals("Hello, Spring Boot!"); + }); + } +} \ No newline at end of file From 7521c7aaae8c47181d9092b5311a585f46eeac21 Mon Sep 17 00:00:00 2001 From: taiho0303 Date: Wed, 9 Sep 2026 16:45:39 +0900 Subject: [PATCH 2/3] =?UTF-8?q?chore:=20README=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=9E=91=EC=84=B1=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1239 ++++++++++++++++++++++++++++++++++++++++++++++++++- image 1.png | Bin 0 -> 80278 bytes image.png | Bin 0 -> 77570 bytes 3 files changed, 1237 insertions(+), 2 deletions(-) create mode 100644 image 1.png create mode 100644 image.png diff --git a/README.md b/README.md index 4162bb5..7566e8d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,1237 @@ -# spring-tutorial-24th -CEOS 백엔드 24기 스프링 튜토리얼 +# 1주차 미션 + +# spring이 지원하는 기술들 + +### AOP(Aspect-Oriented Programming) + +> 여러 클래스에 반복해서 들어가는 공통 로직을 핵심 비즈니스 로직과 분리해서 한곳에서 처리하는 방식 +> + +다음과 같은 기능들이 AOP의 대상이 될 수 있다 + +- 로깅 +- 트랜잭션 +- 실행 시간 측정 +- 권한 검사 +- 예외 처리 + +#### 핵심 개념 + +- **Aspect**: 공통 기능을 모아놓은 것 +- **Target**: AOP가 적용되는 실제 객체 +- **Join Point**: AOP가 적용될 수 있는 지점 +- **Pointcut**: 실제로 AOP를 적용할 대상을 선택하는 조건 +- **Advice**: 실제로 실행되는 공통 로직 + +#### Spring AOP 동작 원리 + +Spring AOP는 주로 **Proxy 방식**으로 동작한다. + +``` +Controller + ↓ +Service Proxy + ↓ +공통 로직 실행 + ↓ +실제 Service + ↓ +공통 로직 후처리 +``` + +예를 들어 `@Transactional`이 붙은 메서드는 Proxy가 먼저 트랜잭션을 시작하고, 실제 메서드를 실행한 뒤 성공하면 Commit, 예외가 발생하면 Rollback한다. + +``` +@Transactional + ↓ +Proxy + ↓ +트랜잭션 시작 + ↓ +실제 메서드 실행 + ↓ +Commit / Rollback +``` + +## 의존관계 주입(DI) + +의존관계 주입은 크게 4가지 방법이 있다 + +1. 생성자 주입 +2. setter 주입 +3. 필드 주입 +4. 일반 메서드 주입 + +### 생성자 주입 + +- 생상자 호출시점에 1번만 호출되는 것이 보장 + +```java +@Component +public class OrderServiceImpl implements OrderService { + private final MemberRepository memberRepository; + private final DiscountPolicy discountPolicy; + @Autowired + public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { + this.memberRepository = memberRepository; + this.discountPolicy = discountPolicy; + } +} +``` + +## 싱글톤 컨테이너 + +웹 애플리케이션은 보통 여러 요청이 동시에 들어온다. + +요청이 올 때마다 객체(Bean)을 생성한다면 메모리가 낭비된다. + +이를 싱글톤 패턴으로 설계하여 해결할 수 있다. + +### 싱글톤 패턴 + +- 클래스의 인스턴스가 1개만 생성되는 것을 보장하는 디자인 패턴 + +싱글톤 만들기 + +- static 변수로 선언 +- private 생성자로 다른 객체 생성을 막음 + +→ 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회 → 항상 같은 인스턴스 반환 + +싱글톤 패턴의 문제점 + +- 구현 코드의 복잡성 +- 의존관계상 클라이언트가 구체 클래스에 의존 → DIP 위반, OCP 위반 +- 내부 속성 변경 및 초기화 하기 어려움 + +→ 유연성이 떨어짐 + +## 싱글톤 컨테이너 + +스프링 컨테이너는 싱글톤 패턴의 문제점을 해결하면서 객체 인스턴스(Bean)를 싱글톤으로 관리한다. + +- 요청이 올 때마다 객체를 생성하는 것이 아닌, 이미 만들어진 객체를 공유해서 효율적으로 재사용한다 + +### 싱글톤 방식의 주의점 + +여러 클라이언트가 하나의 같은 객체를 공유하기 때문에 무상태로 설계해야 한다. + +- 특정 클라이언트에 의존적인 필드가 있으면 안됨 → private final +- 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안됨 +- 필드 대신 자바에서 공유되지 않는 지역변수, 파라미터 등을 사용해야 함 + - 멤버변수로 만들어 저장(변경) 하는 것이 아닌 멤버함수의 리턴 값 등으로 만들어 지역변수로 처리한다. + + ```java + public class StatefulService { + + private int price; //상태를 유지하는 필드 + + public void order(String name, int price) { + System.out.println("name = " + name + " price = " + price); + this.price = price; + } + + public int getPrice() { + return price; + } + } + ``` + + 필드 price를 계속 변경되도록 설계하는 것이 아닌 return 값으로 price를 내보내서 지역변수로 처리해야 함 + + 예: + + ```java + public int order(String name, int price){ + sout(...); + return price; // 지역변수로 처리 + } + ``` + + +# Spring Bean과 Bean의 라이프사이클, Bean Scope + +### Spring Bean이란 무엇인가 + +→ Spring IoC 컨테이너가 생성하고 관리하는 객체 + +### Spring Bean으로 등록하는 방법 + +- `@Componant` 애노테이션 붙이기 (`@Service`, `@Repository`, `@Controller`) +- `@Bean` 애노테이션 사용 + +### 어노테이션이란? + +어노테이션은 코드에 부가 정보를 붙이는 문법이다. + +어노테이션 자체는 보통 직접 기능을 수행하는게 아니라, 컴파일러나 JVM, Spring 같은 프레임워크가 그 어노테이션을 읽고 특정 동작을 하도록 만드는 메타데이터 이다. + +예: + +```java +@Service +public class UserService{ +} +``` + +여기서 `@Service` 가 `UserService` 객체를 직접 생성하는 것이 아니다. +Spring이 실행될 때 `@Service` 가 붙은 클래스를 찾아서 +`@Service` 발견 → Spring이 클래스 인식 → 객체 생성 → Spring Bean으로 등록 한다. + +### Java에서 어노테이션 생성 방법 & 실행 과정 + +```java +public @interface MyAnnotation { + + String value(); // 값을 가지는 어노테이션 +} +``` + +`@interface` 라는 문법으로 정의 + +사용할 때는 + +```java +@MyAnnotation("hello") +public class Test { +} +``` + +실행과정: + +```java +@MyAnnotation("hello") +public class Test { +} +``` + +- 컴파일 과정에서 Test.class 파일에 +{클래스에 MyAnnotation이 붙어 있음. value= “hello”} +와 같은 메타데이터 정보가 저장된다. +- 실행 중 Reflection을 이용해서 이 정보를 읽을 수 있다. + + ```java + MyAnnotation annotation = + Test.class.getAnnotation(MyAnnotation.class); + + System.out.println(annotation.value()); + ``` + + +### 어노테이션을 통한 Bean 등록 시 일어나는 일련의 과정 + +Componenet Scan 방식: + +``` +애플리케이션 시작 -> @ComponentScan 수행 -> 클래스 탐색 +-> @Component 계열 어노테이션 확인 -> BeanDefinition 생성 +-> BeanDefinition을 BeanFactory에 등록 -> Bean 객체 생성 +-> 의존성 주입 -> 초기화 과정 -> 싱글톤 Bean 저장 +``` + +1. 애플리케이션 시작 + + ```java + @SpringBootApplication + public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + } + ``` + + 여기서 `@SpringBootApplication` 은 안에 `@ComponentScan` 가 동작하여 Application 클래스가 있는 패키지의 하위 패키지를 탐색한다. + +2. Component Scan이 클래스를 탐색 + + `@Component` 계열 (`@Service`, `@Repository`, `@Controller` ,`@RestController` ) 어노테이션이 붙은 클래스를 Spring Bean 후보로 조사한다 + +3. BeanDefinition 생성 (⚠️ 바로 Bean을 생성하지 않음) + + Bean을 나중에 어떻게 만들어야 하는지에 대한 정보가 적혀있는 BeanDefinition을 생성 + +4. BeanDefinition을 BeanDefinitionRegistry에 등록 + + 만든 BeanDefinition을 스프링 컨테이너가 관리할 수 있도록 등록 + + 개념적으로 BeanDefinitionRegistry 안에 + {"userController" → UserController BeanDefinition + "userService" → UserService BeanDefinition + "userRepository" → UserRepository BeanDefinition} + 처럼 저장됨 + +5. 실제 Bean을 생성 +6. 생성자를 분석하고 의존성을 찾는다 + + ```java + @Service + public class UserService { + + private final UserRepository userRepository; + + public UserService(UserRepository userRepository) { + this.userRepository = userRepository; + } + } + ``` + + Spring이 UserService를 만들려고 할 때 생성자에 UserRepository가 필요한 경우 먼저 컨테이너에서 UserRepository 타입의 Bean을 찾는다. + +7. 필요한 의존 Bean을 찾거나 먼저 생성 + + UserRepository가 BeanDefinition으로 등록되어 있다면 Spring이 UserRepository Bean을 생성한다 + + → DI 과정 + +8. 생성자 주입을 거쳐 Bean 객체 생성 + +@Bean 직접 등록 방식: + +```java +@Configuration +public class AppConfig { + + @Bean + public UserService userService() { + return new UserService(); + } +} +``` + +``` +@Configuration 발견-> @Bean 메서드 탐색 -> BeanDefinition 생성 +-> BeanDefinition 등록 -> @Bean 메서드 호출 +-> 반환된 객체를 Bean으로 등록 +``` + +두 방식의 차이: + +``` +@Component -> 클래스 자체를 발견 -> Spring이 객체 생성 + +@Bean -> 메서들르 발견 -> 메서드 반환값을 Bean으로 등록 +``` + + + +### 빈 생명주기 + +스프링 빈의 이벤트 라이프 사이클: + +``` +스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 +-> 소멸전 콜백 -> 스프링 종료 +``` + +✏️ 생성자 DI 경우에는 스프링 빈 생성과 의존관계 주입이 같이 일어난다. + +- 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 기능과 스프링 컨테이너가 종료되기 직전에 소멸 시점을 알려주는 기능을 제공한다. + +> **초기화 작업이란** +외부 커넥션 연결 등의 무거운 작업 +→ 객체 생성 시에 무거운 초기화 작업을 함께 하는 것 보다 객체의 생성과 초기화를 분리하는 것이 유지보수 관점에서 좋다. +> + +### 스프링이 제공하는 빈 생명주기 콜백 + +#### 1. 빈 등록 초기화, 소멸 메서드 지정 + +설정정보에 초기화, 소멸 메서드를 지정한다 + +```java +@Bean(initMethod = "init", destroyMethod = "close") +public NetworkClient networkClient(){ + ... +} +``` + +```java +public class NetworkClient { + + private String url; + + public NetworkClient(String url) { + this.url = url; + } + + public void setUrl(String url) { + this.url = url; + } + + // 초기화 메서드 + public void init() { + System.out.println("init"); + connect(); + } + + // 소멸 메서드 + public void close() { + System.out.println("close"); + disConnect(); + } +} +``` + +- 생성자에 connect() 메서드를 두지 않고 초기화 메서드에 두면서 객체 생성과 초기화를 분리했다. + +소멸 메서드 추론 + +- destroyMethod는 기본값이 close, shutdown 이라는 이름으로 등록되어 있다. +- 따라서 직접 스프링 빈으로 등록하면 소멸 메서드는 직접 적어주지 않아도 close, shutdown 메서드를 호출한다. + +#### 2. 어노테이션 @PostConstruct, @PreDestroy 사용 + +초기화 메서드에는 `@PostConstruct` 를, 소멸 메서드에는 `@PreDestroy` 를 사용 + +```java +public class NetworkClient { + + private String url; + + public NetworkClient(String url) { + this.url = url; + } + + public void setUrl(String url) { + this.url = url; + } + + // 초기화 메서드 + @PostConstruct + public void init() { + System.out.println("init"); + connect(); + } + + // 소멸 메서드 + @PreDestroy + public void close() { + System.out.println("close"); + disConnect(); + } +} +``` + +### Bean Scope + +Spring Bean이 얼마나 오래 살아 있고, 몇 개의 객체로 관리되는지를 정하는 범위 + +대표적인 scope: + +1. singleton +2. prototype +3. request +4. session +5. application + +#### 1. singleton + +- 가장 많이 쓰는 기본 scope +- 아무 설정 하지 않으면 singleton +- Spring 컨테이너가 Bean 객체를 하나만 생성하고 계속 재사용 + +#### 2. prototype + +- Bean을 요청할 때마다 새로운 객체를 생성 + +```java +@Component +@Scope("prototype") +public class MyBean { +} +``` + +- Bean은 Spring이 **생성하고 초기화하는 것까지만 관리하고**, 이후 생명주기 종료까지 완전히 관리하지 않는다. + +#### 3. request + +- HTTP 요청 하나당 Bean 객체 하나가 만들어진다. + +```java +@Component +@Scope("request") +public class RequestBean { +} +``` + +```java +사용자 요청 A: +GET /users -> RequestBean A 생성 -> 요청 끝 -> Bean 소멸 + +사용자 요청 B: +GET /users -> RequestBean B 생성 +``` + +- 서로 다른 HTTP 요청에서는 서로 다른 Bean 객체를 사용 + +#### 4. session + +- HTTP Session 하나당 Bean 객체 하나를 생성 + +```java +@Component +@SessionScope +public class LoginSession { +} +``` + +#### 5. application + +- 웹 애플리케이션의 `ServletContext` 단위로 생성 + +```java +@Component +@ApplicationScope +public class ApplicationBean { +} +``` + +# Spring MVC 분석 + +### Servlet이 무엇이며 웹 요청을 어떻게 처리되는가 + +#### Servlet 이란? + +Java 기반 웹 애플리케이션에서 HTTP 요청을 받아 처리하고 HTTP 응답을 만들어주는 서버 측 컴포넌트이다. + +```java +public interface Servlet { + + void init(); + + void service(ServletRequest request, ServletResponse response); + + void destroy(); +} +``` + +Servlet은 Java에서 정의된 하나의 인터페이스이다. + +보통 사용하는 Servlet 구현체는 HTTP에 특화된 HttpServlet + +```java +@WebServlet("/hello") +public class HelloServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + + response.getWriter().write("Hello!"); + } +} +``` + +#### 서블릿 컨테이너 + +Servlet을 실행하고 관리하고 요청을 전달해주는 프로그램 + +Tomcat ← 대표적인 서블릿 컨테이너이다 + +서블릿 컨테이너의 역할 + +- Servlet 생성 및 관리 +- HTTP 요청 수신 +- HTTP Request/Response 객체 생성 +- 요청 URL에 맞는 Servlet 찾기 +- Servlet 실행 +- Servlet 생명주기 관리 +- Session 관리 + +#### 전체 웹 요청 처리 흐름 + +``` +사용자 Browser + │ + │ HTTP 요청 + ▼ + Tomcat + │ + │ 요청 분석 + ▼ +HttpServletRequest 생성 +HttpServletResponse 생성 + │ + ▼ +URL에 맞는 Servlet 검색 + │ + ▼ +Servlet.service() + │ + ▼ +doGet() / doPost() + │ + ▼ +응답 작성 + │ + ▼ +Tomcat + │ + │ HTTP Response + ▼ +Browser +``` + +### 템플릿 엔진의 등장 배경 + +Servlet 덕분에 동적으로 원하는 HTML을 만들 수 있었다. 예를 들어 화면이 계속 달라지는 회원 목록과 같은 동적 HTML을 쉽게 처리 할 수 있게 되었다. + +```java +@WebServlet(name = "memberListServlet",urlPatterns = "/servlet/members") +public class MemberListServlet extends HttpServlet { + + private final MemberRepository memberRepository = MemberRepository.getInstance(); + + @Override + protected void service( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + + response.setContentType("text/html"); + response.setCharacterEncoding("utf-8"); + + List members = memberRepository.findAll(); + + PrintWriter w = response.getWriter(); + + w.write(""); + w.write(""); + w.write(" "); + w.write(" 회원 목록"); + w.write(""); + + w.write(""); + + w.write("메인"); + + w.write(""); + w.write(" "); + w.write(" "); + w.write(" "); + w.write(" "); + w.write(" "); + w.write(" "); + w.write(" "); + + w.write(" "); + + for (Member member : members) { + w.write(" "); + w.write(" "); + w.write(" "); + w.write(" "); + w.write(" "); + } + + w.write(" "); + w.write("
idusernameage
" + member.getId() + "" + member.getUsername() + "" + member.getAge() + "
"); + + w.write(""); + w.write(""); + } +} +``` + +하지만 코드에서 보듯이 매우 복잡하고 비효율적이다. (동적인 코드를 위해 모든 HTML 코드는 w.write() 메서드를 이용하여 한줄 씩 넣는 것은 매우 비효율적) + +이처럼 자바 코드로 HTML을 만들어 내는 것 보다 차라리 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드를 넣도록 하는 아이디어에서 템플릿 엔진이 등장하였다. + +템플릿 엔진을 사용하면 HTML 문서에서 필요한 곳만 코드를 적용해서 동적으로 변경할 수 있다. + +대표적인 템플릿 엔진: + +- JSP, Thymeleaf, Freemarker + +jsp를 이용한 html 코드: + +```java +<% + MemberRepository memberRepository = MemberRepository.getInstance(); + List members = memberRepository.findAll(); +%> + + + + + 회원 목록 + + + + +메인 + + + + + + + + + + + + <% + for (Member member : members) { + %> + + + + + + <% + } + %> + +
idusernameage
<%= member.getId() %><%= member.getUsername() %><%= member.getAge() %>
+ + + +``` + +### MVC 패턴 + +서블릿과 템플릿 엔진을 이용하여 View를 생성하는 html 작업을 깔끔하게 가져가고 중간중간 동적으로 변경이 필요한 부분에만 자바 코드를 적용했다. + +하지만 JSP만 적용했을 때에 비즈니스 로직이 View 영역에 너무 많이 차지한다. (jsp가 너무 많은 역할을 담당) + +#### MVC 패턴의 등장 + +→ 비즈니스 로직과 View를 분리 + +문제점: + +- 비즈니스 로직과 View 사이의 라이프 사이클의 차이 + - UI 변경과 비즈니스 로직의 변경 주기는 다른 경우가 많음 + - 둘을 같은 코드로 관리하면 유지보수가 힘듦 + + → 이를 해결하기 위해 둘을 분리 + + +Model View Controller + +- 컨트롤러 : + - HTTP 요청을 받아 파라미터를 검증하고 비즈니스 로직을 실행 + - 뷰에 전달할 결과 데이터를 조회해서 모델에 담는다. +- 모델 : + - 뷰에 출력할 데이터를 담아둔다. +- 뷰 : + - 모델에 담겨있는 데이터를 사용해서 화면을 그리는 일에 집중한다. + +> Controller에서는 view에 필요한 데이터, 비즈니스 로직에 집중하여 model에게 그 데이터를 넘겨주고, view는 그 데이터를 바탕으로 화면 그리는 일에 집중한다. +> + +#### MVC 패턴 적용 + +Model은 HttpServletRequest 객체를 사용 + +request.setAttribute(), request.getAttribute() 를 이용하여 데이터를 보관, 조회 + +```java +@WebServlet( + name = "mvcMemberSaveServlet", + urlPatterns = "/servlet-mvc/members/save" +) +public class MvcMemberSaveServlet extends HttpServlet { + + private final MemberRepository memberRepository = + MemberRepository.getInstance(); + + @Override + protected void service( + HttpServletRequest request, + HttpServletResponse response + ) throws ServletException, IOException { + + String username = request.getParameter("username"); + int age = Integer.parseInt(request.getParameter("age")); + + Member member = new Member(username, age); + + System.out.println("member = " + member); + + memberRepository.save(member); + + // Model에 데이터를 보관한다. + request.setAttribute("member", member); + + String viewPath = "/WEB-INF/views/save-result.jsp"; + + RequestDispatcher dispatcher = + request.getRequestDispatcher(viewPath); + + dispatcher.forward(request, response); + } +} +``` + +1. /servlet-mvc/members/save URL로 요청메세지가 들어오면 서블릿이 실행됨 +2. `RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath);` +dispatcher를 viewPath URL로 만듦 +3. `dispatcher.forward(request, response);` +요청메세지 그대로 viewPath URL로 서버내에서 새로운 요청이 발생하여 넘김 → .jsp 파일로 요청메세지가 넘어간다. + + + +#### MVC 패턴의 한계 + +1. 포워드 중복 + + ```java + RequestDispatcher dispatcher = request.getRequestDispatcher(viewPath); + dispatcher.forward(request, response); + ``` + +2. ViewPath에 중복 +3. 공통처리의 어려움 + +→ 프론트 컨트롤러 패턴을 도입하여 공통처리 문제 해결 가능 + +### Spring MVC + +#### 프론트 컨트롤러 패턴 + +이점: + +- 서블릿에 대한 의존성 제거 + - 모든 클래스가 HttpServlet을 상속 받아야 하고, 사용하지 않더라도 request, response 객체를 가지고 다녔어야 함 + - 하위 컨트롤러는 서블릿에 의존 x → 프론트 컨트롤러가 넘겨주는 데이터로만 처리 +- 일관된 뷰 처리 + +![image.png](image.png) + +흐름: + +1. FrontController: + - 컨트롤러 조회 + - URL을 바탕으로 컨트롤러 조회 + HTTP 요청 메세지의 파라미터 정보를 Map으로 만듦 +2. FrontController: + - 컨트롤러 호출 + - ParamMap을 Controller로 넘김 +3. Controller: + - Map 정보를 바탕으로 로직 수행 + - 데이터 저장이 필요하면 ModelView 생성 후 저장하여 반환 +4. FronContoller: + - veiwResolver 호출 +5. viewResolver + - 논리 이름만 반환된 것을 물리 이름으로 반환 + - ex: /new-form ⇒ /WEB-INF/views/new-form.jsp +6. FrontController: + - view 호출 +7. View: + - render 호출 + - model에 담겨있는 데이터들을 request.setAttribute() 후 forward + +#### Spring MVC 구조 + +![image.png](image%201.png) + +#### Spring MVC 와 MVC 패턴의 차이 + +- MVC = 아이디어/설계 패턴 +- Spring MVC = 그 패턴을 실제 Spring 웹 개발에 적용한 구현체 + +위에서 살펴본 것처럼 servlet + JSP로 (Spring 없이) MVC를 만들 수 있다. + +servlet 기반 MVC에서는 요청만다 SERVLET을 만들어야 할 수 있고, +URL 매핑, 파라미터 변환, View 이동, 예외 처리 등을 직접 구현해야 한다. + +> 이런 공통 작업들을 Spring이 대신 처리해주는 게 **Spring MVC이다** +> + +스프링 MVC의 핵심 특징은 Front Controller 패턴을 함께 사용한 DispatcherServlet을 사용한다는 점이다. + +### 톰켓과 WAS란 + +- WAS(Web Application Server) + - 웹 애플리케이션을 실행하고 동적인 요청을 처리하는 서버 +- Tomcat + - Java servlet 기반 웹 애플리케이션을 실행해주는 대표적인 Servlet 컨테이너 + +#### Web Server + +클라이언트의 HTTP 요청을 받고 응답을 보내는 서버 + +정적 파일을 제공하는데 강점 + +정적 처리는 별도의 java 비즈니스 로직을 필요로 하지 않는다 + +#### WAS란 + +웹 요청을 받아 애플리케이션 코드를 실행하고 동적인 응답을 만들어주는 서버 + +``` +HTTP Request -> WAS -> Controller -> Service ... +``` + +| Web Server | WAS | +| --- | --- | +| HTTP 요청 처리 | HTTP 요청 처리 | +| 정적 콘텐츠 제공에 강함 | 동적 콘텐츠 처리 | +| HTML/CSS/JS/Image | Java 애플리케이션 실행 | +| Nginx, Apache | Tomcat, WildFly 등 | + +실제로 web server와 WAS의 경계가 완전히 나뉘지 않는다. + +Tomcat도 정적 파일을 제공할 수 있고, Nginx도 여러 동적 처리를 보조 할 수 있다. + +#### Tomcat + +Java 기반 웹 애플리케이션을 실행하기 위한 서버 소프트웨어 + +가장 중요한 역할은 Servlet Container이다 + +Servlet Container는 servlet을 생성, 초기화, HTTP 요청 연결, service() 호출, 종료까지의 과정을 관리해주는 환경이다. + +Tomcat은 대표적인 Servlet Container 이다 + +Tomcat이 하는일: + +- HTTP 요청 수신 +- servlet 검색 +- servlet 객체 생성 +- servlet 생명주기 관리 +- HttpServletRequest 생성 +- HttpServletResponse 생성 +- Thread 관리 +- Session 관리 +- Servlet 실행 +- HTTP Response 생성 + +#### Tomcat에서 HTTP 요청이 처리되는 과정 + +```java +@WebServlet( + name = "mvcMemberSaveServlet", + urlPatterns = "/servlet-mvc/members/save" +) +public class MvcMemberSaveServlet extends HttpServlet { + + @Override + protected void service( + HttpServletRequest request, + HttpServletResponse response + ) { + ... + } +} +``` + +이 servlet에서 클라이언트가 POST /servlet-mvc/members/save 로 요청을 보내면 + +``` +Browser + ↓ +HTTP Request + ↓ +Tomcat + ↓ +URL 분석 + +/servlet-mvc/members/save + ↓ +해당 Servlet 검색 + ↓ +MvcMemberSaveServlet + ↓ +service(request, response) +``` + +흐름으로 처리된다. + +#### Tomcat 응답 처리 + +```java +response.setContentType("text/html"); +PrintWriter writer = response.getWriter(); + +writer.write("

Hello

"); +``` + +직접 프로토콜을 다 만들 필요 없이 Tomcat이 servlet이 작성한 내용을 토대로 HTTP 응답을 만들어서 클라이언트에게 보내준다. + +#### Spring Boot 내장 Tomcat + +Spring Boot는 기본적으로 내장 Tomcat을 사용한다. + +애플리케이션을 실행했을 때의 흐름: + +```java +Spring Boot 실행 -> ApplicationContext 생성 -> Embedded Tomcat 생성 +-> Tomcat 실행 -> 8080포트 Listen -> DispatcherServlet 등록 +-> Http 요청 처리 가능 +``` + +### Dispatcher Servlet 흐름을 분석 + +#### DispatcherServlet도 Servlet이다 + +dispatcherServlet도 실제 Servlet 계층을 상속한다. + +Tomcat은 다른 Servlet과 마찬가지로 이 요청은 DispatcherServlet이 처리해야 한다 라고 인식하고 요청을 DispatcherServlet에게 넘긴다. + +#### 요청이 처음 들어오는 지점 + +사용자가 GET /members/1 과 같은 HTTP 요청을 보내면 + +Tomcat은 이 요청을 받아서 + +```java +HttpServletRequest +HttpServletResponse +``` + +두 객체를 만든다. + +그 후 DispatcherServlet 쪽으로 요청을 넘긴다. + +#### HttpServlet의 service() 호출 + +Http Servlet의 기본 흐름: + +``` +service() + ↓ +GET이면 doGet() +POST면 doPost() +... +``` + +그러나 Spring의 DispatcherServlet은 FrameworkServlet을 통해 이 흐름을 Spring 방식으로 바꿔서 처리 + +``` +HttpServlet.service() + ↓ +FrameworkServlet.service() + ↓ +processRequest() + ↓ +DispatcherServlet.doService() + ↓ +DispatcherServlet.doDispatch() +``` + +#### doService()의 역할 + +`DispatcherServlet.doService()` 는 요청을 Spring MVC 처리에 필요한 상태로 준비하는 역할 + +핵심 작업을 `doDispatch(request, response);` 에게 넘긴다. + +``` +doService() + ↓ +요청 준비 + ↓ +doDispatch() +``` + +#### doDispatch()의 요청 처리 + +- 먼저 GET /members/1 를 누가 처리할지 찾아야 한다. + - DispatcherServlet이 직접 Controller 목록을 뒤지지 않고 대신 HandlerMapping에게 물어본다. +- HandlerMapping이 Controller를 찾는다 + + ```java + @GetMapping("/members/{id}") + public MemberResponse getMember(@PathVariable Long id) { + } + ``` + + - spring 애플리케이션이 시작될 때 이 정보를 분석해서 매핑 정보를 만들어둔다. + + ```java + @RequestMapping + @GetMapping + @PostMapping + @PutMapping + @DeleteMapping + ``` + + - HandlerMapping은 이 정보를 분석한다 +- HandlerAdapter를 찾는다 + - DispatcherServlet이 Controller 메서드를 찾고 이 Handler를 실행할 수 있는 Adapter가 누구인지 찾는다. + + ▶️ 일반적인 @Controller, @RestController에서는 대표적으로 RequestMappingHandlerAdapter 가 사용된다. + +- HandlerAdpater가 Controller 메서드 실행 준비를 한다 + + ```java + @GetMapping("/members/{id}") + public MemberResponse getMember( + @PathVariable Long id + ) { + } + ``` + + - 이 코드를 실행할 때 HTTP 요청의 /members/1을 Long id로 변환하는 작업을 처리한다. + + ``` + /members/1 + ↓ + @PathVariable + ↓ + "1" + ↓ + Long 변환 + ↓ + 1L + ``` + +- ArgumentResolver가 파라미터를 만들어 처리한다. + + ```java + public void test( + @PathVariable Long id, + @RequestParam String name, + @RequestHeader String token, + @RequestBody MemberRequest request + ) + ``` + + - 이런 코드가 있다면 각각 적절한 ArgumentResolver가 처리한다. + + ``` + @PathVariable + → URL Path에서 값 추출 + + @RequestParam + → Query Parameter 추출 + + @RequestHeader + → HTTP Header 추출 + + @RequestBody + → HTTP Body 읽기 + ``` + +- Controller 메서드가 실제 실행되고 값을 반환한다. + - DispatcherServlet 계층은 반환값을 어떻게 처리할지 결정해야 한다 + - @RestController 의 경우 + + ``` + MemberResponse + ↓ + HttpMessageConverter + ↓ + Jackson + ↓ + JSON + ``` + + 으로 변환된 후 json이 HttpServletResponse에 기록된다. + + - 일반 @Controller 의 경우 + + ``` + Controller + ↓ + ModelAndView + ↓ + ViewResolver + ↓ + 실제 View 찾기 + ↓ + Thymeleaf/JSP 렌더링 + ↓ + HTML + ``` + + +⭐ModelAndView 란 + +Model + View를 가지고 있음 + +```java +model.addAttribute("member", member); + +return "member-detail"; +``` + +Controller가 다음과 같다고 하면 + +이러한 정보가 만들어진다 + +``` +Model: +member → Member 객체 + +View: +"member-detail" +``` + +- ViewResolver가 View를 찾는다 + +#### 실제 SPRING 내부 흐름 + +``` +Tomcat + ↓ +service() + ↓ +FrameworkServlet.processRequest() + ↓ +DispatcherServlet.doService() + ↓ +DispatcherServlet.doDispatch() +``` + +#### doDispatch() 내부 흐름 + +``` +getHandler() + ↓ +HandlerMapping 검색 + +getHandlerAdapter() + ↓ +HandlerAdapter 검색 + +interceptor.preHandle() + ↓ + +handlerAdapter.handle() + ↓ +Controller 실행 + +interceptor.postHandle() + ↓ + +processDispatchResult() + ↓ + +View Rendering +또는 +Response Body 처리 + + ↓ + +interceptor.afterCompletion() +``` + +#### 왜 DispatcherServlet이 Controller를 직접 찾고 실행하지 않는가? + +만약 DispatcherServlet이 모든 걸 직접 했다면 + +DispatcherServlet +├ URL 매핑 +├ Controller 검색 +├ 파라미터 변환 +├ Controller 실행 +├ View 찾기 +├ 예외 처리 +└ 응답 변환 + +처럼 너무 많은 책임을 갖게 된다. + +그래서 Spring은 확장 가능하게 책임을 분리하여 설계하였다. \ No newline at end of file diff --git a/image 1.png b/image 1.png new file mode 100644 index 0000000000000000000000000000000000000000..ee1aad872ea9542b9a3c0209f66cc6db8648da57 GIT binary patch literal 80278 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

^EV0Gf}?ETUEzn3*? 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 C>~n?y literal 0 HcmV?d00001 diff --git a/image.png b/image.png new file mode 100644 index 0000000000000000000000000000000000000000..26e936af1f3e9350a5677b78ce7d6ba792add56b GIT binary patch literal 77570 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 X-Ijg6lJ``>KNcg$k2q`Yvf+OLX`HJq literal 0 HcmV?d00001 From 54cadba57565baec7f179430e4d24d6cce9ef0ff Mon Sep 17 00:00:00 2001 From: taiho0303 Date: Wed, 9 Sep 2026 16:56:30 +0900 Subject: [PATCH 3/3] =?UTF-8?q?chore:=20HELP.md=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- HELP.md | 22 ---------------------- 1 file changed, 22 deletions(-) delete mode 100644 HELP.md diff --git a/HELP.md b/HELP.md deleted file mode 100644 index 4b7889c..0000000 --- a/HELP.md +++ /dev/null @@ -1,22 +0,0 @@ -# Getting Started - -### Reference Documentation -For further reference, please consider the following sections: - -* [Official Gradle documentation](https://docs.gradle.org) -* [Spring Boot Gradle Plugin Reference Guide](https://docs.spring.io/spring-boot/4.1.1/gradle-plugin) -* [Create an OCI image](https://docs.spring.io/spring-boot/4.1.1/gradle-plugin/packaging-oci-image.html) -* [Spring Web](https://docs.spring.io/spring-boot/4.1.1/reference/web/servlet.html) - -### Guides -The following guides illustrate how to use some features concretely: - -* [Building a RESTful Web Service](https://spring.io/guides/gs/rest-service/) -* [Serving Web Content with Spring MVC](https://spring.io/guides/gs/serving-web-content/) -* [Building REST services with Spring](https://spring.io/guides/tutorials/rest/) - -### Additional Links -These additional references should also help you: - -* [Gradle Build Scans – insights for your project's build](https://scans.gradle.com#gradle) -