티스토리 뷰
Spring Boot : 자바 기반의 웹 애플리케이션 개발을 위한 프레임워크인 Spring을 간편하게 시작할 수 있는 Spring 프로젝트 템플릿
- 복잡한 XML (확장가능한 마크업 언어 : Extensible Markup Language : 데이터 구조화, 쉽게 데이터 교환할 수 있도록 만든 텍스트 기반 언어 ex) <name>nam</name>) 설정없이 직관적 개발 가능하게 해준다.
- Spring Boot로 Rest API 구현
Rest API : Representational state transfer API(Application Programming Interface)
- REST : 웹에서 데이터 주고받기 위한 표준화된 아키텍처 스타일. 자원 기반으로 해서 웹 서비스간에 데이터 교환하는 방식.
- uri(uniform resource identifier)로 자원을 표현하고, http 메소드로 행동 표현하는, 무상태적, 일관된 웹 API
- REST 원칙 : 1. 클라이언트-서버 구조 2. 무상태성(각 요청 독립적 처리, 서버는 이전 요청 상태 저장 안함) 3. 캐시 가능성(중간 계층에 일정 기간 동안 저장해두고 재사용할 수 있어야) 4. 일관된 인터페이스 5. 계층화 구조(클라이언트는 서버의 구조를 몰라도 된다.)
- REST API : REST 원칙에 따라 설계된 웹 기반 API
- RESTFul API : REST 원칙을 엄격하고 충실히 따른 API
Spring Boot 기본 어노테이션
| @SpringBootApplication | 메인에 해당하는 진입이 여기다. 애플리케이션 시작점. |
| @RestController | REST API 응답을 반환하는 컨트롤러로 선언 |
| @GetMapping | HTTP GET 요청을 처리하는 메소드에 사용(값을 갖고 오는 것, 받을 때 쓰는 것) |
| @PostMapping | HTTP POST 요청 처리 메소드에 사용(값을 주는 것) |
| @RequestMapping | GET/POST 등 HTTP 요청을 클래스/메소드에 매핑 |
| @RequestParam | 쿼리파라미터나 폼데이터 받아올 때 사용 |
| @PathVariable | URL 경로 내 변수를 가져올 때 사용. 인터넷에서 가져온 것을 이 변수에 담을거야. |
| @Autowired | 스프링이 자동으로 빈(Bean, 스프링이 대신 만들어서 관리하는 객체)을 주입해주는 의존성 주입 어노테이션. 보통 생성자 만들어 주입하는데, 그 대신 의존성 주입해주는 노테이션 |
| @Component | 공통 | Spring Bean 등록 기본, 다른 어노테이션의 상위개념 |
| @Service | 비즈니스로직 | 서비스 계층 나타냄 |
| @Repository | 데이터 접근 | DAO(Data Access Object) 역할, db 접근하는 역할 |
| @Entity | 데이터 모델 | JPA(Java Persistence API, 자바에서 객체와 데이터베이스를 매핑하기 위한 표준 API)에서 테이블과 매핑되는 클래스 반드시 @ld필드를 포함해야 |
실습1.
@RestController : 클래스가 REST API 응답 반환하도록 : 웹 요청 받아서 결과를 데이터로 바로 반환하도록 하는 것
@RequestMapping("/web") : /web 요청 오면 hello() 실행하도록 매핑(@GetMapping, @PostMapping 처럼 더 구체적으로도 가능)
@RestController(hello라는 데이터 그대로 화면에 보임) vs @Controller(hello.html 템플릿 파일 찾아 화면 만들어 반환)
@Controller
@Controller //hello.html 파일 찾아서 웹페이지로 보여줌!
public class HomeController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
-> 이거 해보려다가 오류 났다. 원인을 모르겠다... 나중에 추가하기.
@RestController
@RestController // 브라우저에 그대로 "hello" 라는 문자열을 응답
public class HelloController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
}
package kr.ac.ewha.java2.web;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class HelloController {
@RequestMapping("/web")//web이란 요청이 오면(요청이 브라우저에서 온다.)
public String hello() {
return "Hello Spring~!!❤❤❤😍😍";
}
@RequestMapping("/java")//java라는 요청이 오면 이걸 출력한다. 웹에서
public String hi() {
return "Hello Java~!! 안녕안녕❤❤❤😍😍";
}
public static void main(String[] args) {
System.out.println("와! 브라우저에 스트링을 띄운다!");
}
}
Spring Boot 핵심 원리
- DI (의존성 주입, Dependency Injection) (IoC의 구현방식 중 하나)
- @Autowired, 생성자 주입, Setter 주입으로 구현
- 외부에서 생성된 의존 객체를 전달(주입)받는 방식, 의존성 관리를 프레임워크가 대신해준다.
- IoC (제어의 역전, Inversion of Control)
- 객체 생성부터 생명주기 전반 모든 걸 개발자가 아닌, 프레임워크가 대신하는 원리
- 개발자는 필요한 기능만, 나머진 Spring이.
- 자동 구성
- Spring Boot의 가장 강력한 기능, 어플리케이션 설정 자동으로 구성한다.
- @SpringBootApplication 안에 자동구성 활성화하는 게 들어있다.
- 스프링은 프로젝트의 클래스들을 자동으로 훑어서 @Service, @Controller 같은 표시 붙은 애들을 알아서 객체로 만들어서(Spring bean) 관리하며, 기본적으로 하나만 만들고(싱글톤), 필요한 곳에 자동으로 넣어준다.(DI)
실습2 : 인사서비스 : @Autowired, @PostMapping 활용

메인 들어있는 @SpringBootApplication
package kr.ac.ewha.java2;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import kr.ac.ewha.java2.controller.GreetingController;
@SpringBootApplication
public class HelloSpring6Application {
private final GreetingController greetingController;
HelloSpring6Application(GreetingController greetingController){
this.greetingController = greetingController;
}
public static void main(String[] args) {
SpringApplication.run(HelloSpring6Application.class, args);
System.out.println("START!");
}
}
Controller패키지의 GreetingController
package kr.ac.ewha.java2.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import kr.ac.ewha.java2.service.GreetingService;
@RestController
public class GreetingController {
@Autowired
private GreetingService greetingService;
@PostMapping("/hello")
public String sayHello(@RequestParam(name="name") String name) {
System.out.println(name);
return greetingService.getGreeting(name);
}
}
Service 패키지의 GreetingService
package kr.ac.ewha.java2.service;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestParam;
@Service
public class GreetingService {
public String getGreeting(@RequestParam("name") String name) {
return "안녕하세요! "+name+"님! 오늘도 좋은 하루 보내세용~~~♥♥♥";
}
}
static - user.html 파일
<html>
<body>
<meta charset="UTF-8">
<form method="post", action="http://localhost:8080/hello", accept-charset="UTF-8">
<input type = "text" name="name" value="이름을 입력하세요" />
<button type = "submit"> 보내기</button>
</form>
</body>
</html>


흐름
1. 내가 웹 주소창에 입력 : http://localhost:8080/user.html
-> Spring Boot는 /static/user.html 파일을 그대로 브라우저에 보낸다.
2. user.html 안에는 form 태그로 method="post", action="http://localhost:8080/hello", name="name"이 있다.
클라이언트인 브라우저가 서버인 Spring에 요청 보낼 때 요청 방식들이 있는데,
| 요청 방식 | 의미 |
| GET | 서버야, "정보 줘" |
| POST | 서버 너에게 "데이터 보낼게, 네가 저장하고 처리해" |
| PUT | 데이터 삭제 |
| DELETE | 데이터 통째로 업데이트 |
3. 이 중 POST 사용한다.
method="post" 때문에 "서버야, 네가 name 저장해서 처리해." 라고 말한다.
그리고 사용자가 이름 입력하고 보내기 버튼을 누르면 action에 있는 url로 이동한다.
<html>
<body>
<meta charset="UTF-8">
<form method="post", action="http://localhost:8080/hello", accept-charset="UTF-8">
<input type = "text" name="name" value="이름을 입력하세요" />
<button type = "submit"> 보내기</button>
</form>
</body>
</html>
4. 그럼 GreetingController의 sayHello() 실행돼서 RequestParam으로 폼데이터 받아와서 greetingService.getGreeting(name) 함수가 실행된다.
CRUD를 이용해서 이름 입력하면 DB에 기록된 운세가 나오게 만들고 싶은데 시도하다가 포기했다...ㅎㅎㅎ
다음 수업 시간에 좀 더 배우고 해봐야겠다. 그래도 확실히 SpringBoot가 정말 편리하다는 생각을 했다. 의존성 주입도 Bean을 이용하고 annotation을 이용해 쉽게 할 수 있다는 게 신기했다.
아, 그리고 실습 하는 도중에 static폴더에 집어넣는 html 파일의 이름을 index.html로 만들어놓고 웹주소를 http://localhost:8080/user.html을 입력해서 whitelabel 오류 페이지가 계속 떴었다. 지금 생각해보니 바보같지만 흐름을 잘 이해해야한다는 걸 깊이 느꼈다.
'학교 강의 > Java프로그래밍및실습2' 카테고리의 다른 글
| [Spring Boot] 실습 및 내용 정리2 (1) | 2025.11.26 |
|---|---|
| [프로젝트] 마피아 게임 - 직업 배정 문제 해결 과정 (2) | 2025.11.25 |
| [SpringBoot] 실습 정리 (0) | 2025.11.19 |
| [프로젝트] 마피아 게임 만들기 - 자바 GUI, Socket programming 이용 (0) | 2025.11.19 |
| [DB & JDBC] 내용 정리 및 실습 (0) | 2025.11.16 |
