| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 데이터엔지니어
- 기초
- 정보처리기사
- 자연어처리
- TTS
- LangGraph
- 트랜스포머
- ASR
- Python
- 캐글
- RNN
- 소프트웨어 개발
- 생성형 인공지능
- CLIP
- 에이전트
- dementional reduction
- 알고리즘
- python 기초
- 데이터 시각화
- 힙정렬
- RDBMS
- 머신러닝
- UMAP
- SQL
- CNN
- python기초
- Transformer
- 딥러닝
- 객체지향
- 랭그래프
- Today
- Total
수달이네 기술 블로그
0. SpringBoot 본문
스프링(Spring)
- 설정이 복잡함(xml, 환경설정 파일, 서버 배포 등)
- 스프링부트에서는 설정의 복잡함을 최소화 시키고 자동설정(Auto Configuration)과내장서버(Embedded Server)로 단순화 시킴
스프링부트(Spring Boot)
- 비즈니스 로직에 집중할 수 있다는 장점을 가지고 있다
- 스프링 프레임워크를 더 쉽게 사용하도록 만들어진 도구
주요 특징
- 내장 서버 지원 : tomcat, jetty, undertow 가 내장되어있어 war 배포없이 main()메소드로 실행가능
- 자동 설정(Auto Configuration) : spring-boot-starter 종속성만 추가하면 DB, 웹, 보안 등 자동으로 기본설정
- 스타터(Starter) 의존성 : 필요한 기능별로 미리 조합된 의존성 묶음 제공
- 간단한 설정 파일 : 복잡한 xml 대신 application.yml 또는 application.properties로 설정
- 운영 편의 기능(Actuator) : 어플리케이션의 상태 모니터링 가능(운영환경 모니터링/로그 수집에 강점)
구조
src/ └ main/ └ java/com/example/app └ ProjectApplication.java #메인 실행 클래스(@SpringBootApplication) └ controller/ #웹 요청 처리 └ service/ #비즈니스 로직 └ repository/ #db연동(Mybatis / JPA) └ domain/ #엔티티, DTO └ resources/ └ application.properties #설정파일(application.yml) └ static/ #정적리소스(css, js) └ templates/ #Thymeleaf HTML 뷰
개발도구
- 이클립스 STS와 인텔리제이
이클립스 STS(Spring Tools Suites) 인텔리제이 IDEA
| 이클립스 STS(Spring Tools Suites) | 인텔리제이 IDEA | |
| 라이선스/가격 | 무료(Open Source 기반) | Coummunity무료(기본 java만) Ultimate(유료) |
| Spring 통합 | 스프링 관련 마법 부트 대시보드 라이브템플릿 제공 |
spring인식, 자동 구성 빈 탐색 네비게이션 등 우수 |
| 성능/인덱싱 | 대형프로젝트에서 무거움 | 인덱싱, 코드분석이 빠르고 똑똑함 |
| 디버깅/리펙토링 | 기본 | 리펙토링/코드 인스펙션이 풍부함 |
관련 용어
디버깅 : 프로그래밍 과정 중 발생하는 오류나 비정상적으로 버그를 찾고 수정하는 것 중단점(BreakPoint) : 라인클릭 Step 흐름 : Step Over(현재 라인 실행), Step Into(메소드 내부로), Step Out(호출자 복귀), Resume(다음 중단점까지) HotSwap : 디버그 중 코드 바뀐 바이트코드 교체
리팩토링(Refactoring) : 코드의 동작은 그대로 유지하면서 내부 구조를 더 깔끔하고 이해하기 쉽게 다듬는 과정 바뀌는 부분 : 코드의 구조, 이름, 중복, 위치 등 정리 바뀌지지 않는 부분 : 프로그램의 기능/동작 결과는 그대로 유지함
빌드도구(Build Tool) : 소스코드에서 실행가능한 프로그램(앱, jar, war 등)을 자동으로 만들어주는 도구 개발자가 일일이 javac로 컴파일, 라이브러리 다운로드, jar 패키징을 하지 않아도 빌드도구가 알아서 처리해준다
대표적인 빌드 도구
Maven
- xml 기반(pom.xml)
- 전통적으로 가장 많이 사용됨
- 구조와 규칙이 표준화되어있어 예측 가능
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependecy>
Gradle
- DSL(Groovy/Kotlin) 스크립트 기반(build.gradle)
- 캐시, 병렬 빌드하므로 속도 빠름
- 복잡한 프로젝트에서 유연성이 강점
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
}
이클립스 STS 설치, 프로젝트 실행
JDK 17버전 이상 설치 확인: cmd > javac --version
1. STS다운로드
공식 사이트: https://spring.io/tools

아래 이클립스 버전 설치
2. 압축풀기

압축을 푼 해당 파일에서

해당 파일이 스프링 실행 파일이다.
해당 파일을 실행
3. create new spring starter project로 스프링 파일 생성

이후 스프링 부트 버전을 설정(너무 높으면 불안정)

웹 개발을 할것이므로 spring web선택후 실행
4. 위같이 스프링부트 어노테이션이 붙은 위 파일들이 생성된것을 확인 가능하다.

5. 파일탭의 Properties설정에서 위 설정들을 체크하고 apply한다.

6. windows탭의 installed jres를 검색한 후 자신이 사용할 jdk파일을 선택해준다.

아래 warning이 떴으면 우클릭 > quickfix를 누르면 알아서 수정된다.
Dependency
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
dependencies블록: 스프링 부트 프로젝트에 필요한 라이브러리(의존성)을 선언하는 부분
- gradle이 이 블록 안에 있는 선은을 보고 필요한 JAR파일들을 자동으로 다운로드 하여 프로젝트에 포함시킨다.
implementation: 어플리케이션 실행 시 필요한 라이브러리
- spring-boot-starter-web:웹 어플리케이션을 만들 때 필수 패키지들을 포함한 starter 패키지
- spring MVC, 내장 톰캣 서버, JSON 처리 jackson, 기타 Spring Web 기본 설정들
testImplementation: 테스트 코드에서 필요할 때만 적용되는 라이브러리
- spring-boot-starter-test: 스프링부트에서 테스트를 쉽게 하기 위한 패키지
- JUnit 5(테스트 프레임워크), Mockito(Mock테스트 라이브러리), AssertJ, Hamcrest(테스트용 assertion), Spring Test(스프링 컨텍스트 기반 테스트 지원
testRuntimeOnly: 테스트 실행 단계에서만 로딩되는 라이브러리
- junit-platform-launcher: JUnit 테스트를 실제로 실행하기 위한 런처
- 테스트코드는 JUnit 5를 사용해 작성되는데 실제 실행할 때 JUnit을 구동하는 역할을 하는 라이브러리
DevelopmentOnly
CompilerOnly
AnnotationProcessor등이 있다.
Controller
package com.example.first;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller()
public class HelloController {
@GetMapping("/hello")
@ResponseBody
public String Hello() {
return "Hello";
}
}
@Controller : HelloController 해당 파일이 컨트롤러의 기능을 수행하는 것을 알려준다.
@GetMapping(”/hello”): 클라이언트의 요청으로 hello메소드가 실행됨을 알려준다.
- HTTP GET요청을 특정 메소드와 연결하기 위한 어노테이션
- /hello같은 URL을 이 메서도와 매핑시키는 역할
- 브라우저에서 http://localhost:8080/hello로 접속하게 되면 스프링이 hello()메소드를 찾아서 실행한다.
@ResponseBody: hello메소드의 출력값 그대로 리턴할 것임을 알려준다.(return값을 그대로 뷰 응답으로 사용)
- 원래는 없으면 해당 뷰(jsp, Thymeleaf템플릿)를 찾는다.
- 있기 때문에 해당 리턴값을 HTTP 응답 바디(Body)에 보내라고 스프링에게 알려주는것.
위 코드 흐름
- 클라이언트가 /hello로 GET요청
- 스프링이 hello()메서드를 실행
- “Hello World” 리턴
- 스프링이 이 문자열을 HTTP응답 바디에 담아 전송
- 브라우저 화면에 그냥 Hello World글자만 보이게 됨
상세 흐름
- 사용자가 브라우저에서 http://localhost:8888/hello 입력
- 스프링부트 내장 톰캣이 요청을 받고 DispatcherServlet에게 전달
- DispatcherServlet이 URL /hello, HTTP메소드 GET을 보고
- HelloController의 hello()메소드(@GetMapping(”/hello”)로 연결
- hello()메소드 실행 → “Hello World”리턴
- @ReponseBody 때문에 이 문자열이 그대로 HTTP 응답 바디로 전송
- 브라우저 화면에 Hello World 출력
실무에선
@controller와 @ResponseBody를 따로 썼지만, 실무에선 @RestController를 사용한다.
실행

application properties에서
spring.application.name=first
server.port = 9090
서버 포트를 만들어 저장해줌

파일 우클릭 → Run As→Spring Boot App실행
. ____ _ __ _ _
/\\\\ / ___'_ __ _ _(_)_ __ __ _ \\ \\ \\ \\
( ( )\\___ | '_ | '_| | '_ \\/ _` | \\ \\ \\ \\
\\\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\\__, | / / / /
=========|_|==============|___/=/_/_/_/
[32m :: Spring Boot :: [39m [2m (v3.4.12)[0;39m
[2m2025-12-04T21:45:12.546+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mcom.example.first.FirstApplication [0;39m [2m:[0;39m Starting FirstApplication using Java 21.0.9 with PID 2208 (C:\\0.MyLab\\SpringBoot\\workspace\\first\\bin\\main started by suche in C:\\0.MyLab\\SpringBoot\\workspace\\first)
[2m2025-12-04T21:45:12.547+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mcom.example.first.FirstApplication [0;39m [2m:[0;39m No active profile set, falling back to 1 default profile: "default"
[2m2025-12-04T21:45:12.980+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat initialized with port 9090 (http)
[2m2025-12-04T21:45:12.989+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mo.apache.catalina.core.StandardService [0;39m [2m:[0;39m Starting service [Tomcat]
[2m2025-12-04T21:45:12.989+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mo.apache.catalina.core.StandardEngine [0;39m [2m:[0;39m Starting Servlet engine: [Apache Tomcat/10.1.49]
[2m2025-12-04T21:45:13.018+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mo.a.c.c.C.[Tomcat].[localhost].[/] [0;39m [2m:[0;39m Initializing Spring embedded WebApplicationContext
[2m2025-12-04T21:45:13.018+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mw.s.c.ServletWebServerApplicationContext[0;39m [2m:[0;39m Root WebApplicationContext: initialization completed in 449 ms
[2m2025-12-04T21:45:13.220+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port 9090 (http) with context path '/'
[2m2025-12-04T21:45:13.224+09:00[0;39m [32m INFO[0;39m [35m2208[0;39m [2m--- [first] [ main] [0;39m[36mcom.example.first.FirstApplication [0;39m [2m:[0;39m Started FirstApplication in 0.917 seconds (process running for 1.323)
위와 같은 반응이 나오면 됨(started라고 로그가 나와야함)
이후 내가 만든 로컬호스트 주소
위에서 만든 것은 http://localhost:9090/hello로 설정한다.

- 그러나 지금은 파일을 변경하더라도 서버 브라우저 환경에서 반영되지 않는다. → devtools설치해야함.
다시 해보려고 해도 이미 시작되어있기 때문에 안됨.

- 여기서 (Re)start를 눌러주면 됨.
- 중지는 Stop!
'웹 > Spring' 카테고리의 다른 글
| 3. MVC패턴을 이용한 로그인 회원가입 구 (1) | 2025.12.12 |
|---|---|
| 2. Spring으로 MVC패턴 구축하기1 (0) | 2025.12.09 |
| 1. SpringBoot 기초 (0) | 2025.12.08 |