1. Spring Boot 프로젝트 : 언제, 왜 쓰나?
1) Spring
- 자바 기반의 웹 애플리케이션 개발을 위한 오픈소스 프레임워크. but 설정 복잡 -> 초보자에게 진입장벽 높음.
2) Spring Boot
- 복잡한 XML 설정 없이 어노테이션 기반으로 빠르고 직관적인 개발이 가능한 Spring Framework 기반 Sping 프로젝트 템플릿.
- Rest API를 구현할 예정
3) Rest API (REpresentational State Transfer API)
- REST :: 웹에서 데이터를 주고받기 위한 표준화된 아키텍쳐 스타일(HTTP 프로토콜 기반)로, Resource 기반으로 웹 서비스 간에 데이터를 교환함
- REST API :: REST 원칙에 따라 설계된 웹 기반의 API
- RESTFul API :: REST 원칙을 엄격하고 충실히 따른 API
2. Spring Boot 프로젝트의 구조

- 이클립스에서 Spring (web) 선택해서 생성하면 (파일을 좀 추가하긴 했지만) 옆처럼 뜸.
- src/main/java :: 실제 자바 소스 코드가 위치하는 곳
- 패키지(예: kr.ac.ewha.java2)와 Application 클래스가 있음. (examples.com으로 그대로 써도 되지만 실습을 위해서..)
- templates :: Thymeleaf 같은 템플릿 엔진 파일 저장
- src/main/resources :: 자바 코드를 제외한 리소스 파일들이 위치
- static :: HTML, CSS, JS, 이미지 등 정적 리소스 파일 저장
- application.properties :: 프로젝트의 환경 설정 파일 (포트 번호, DB 설정 등)
3. Spring Boot 프로젝트에서의 실행 흐름 & 웹개발 흐름
1) Spring Boot 기본 어노테이션
| 핵심 어노테이션 | 용도 |
| @SpringBootApplication | 어플리케이션 시작점. 여러 어노테이션을 조합한 대표 어노테이션 |
| @RestController | JSON 등 REST API 응답을 반환하는 컨트롤러로 선언 (@Controller와 @ResponseBody가 합쳐진 형태) |
| @GetMapping | HTTP GET 요청을 처리하는 메서드에 사용 |
| @PostMapping | HTTP POST 요청을 처리하는 메서드에 사용 |
| @RequestMapping | GET/POST 등 다양한 HTTP 요청을 클래스/메서드에 매핑 |
| @PathVariable | URL 경로 내 변수를 가져올 때 사용 |
| @RequestParam | 쿼리파라미터나 폼데이터를 받아올 때 사용 |
| @AutoWired | 스프링이 자동으로 빈(Bean)을 주입해주는 DI 어노테이션 |
| 핵심 어노테이션 | 계층 | 용도 |
| @Component | 공통 | Spring Bean등록 기본, 다른 어노테이션의 상위개념 |
| @Service | 비즈니스로직 | 서비스 계층을 나타나는 Component |
| @Repository | 데이터접근 | DAO역할 |
| @Entity | 데이터모델 | JPA에서 테이블과 매핑되는 클래스 반드시 @Id필드를 포함해야 함 |
2) REST API 컨트롤러
| 핵심 어노테이션 (with 실습 예시) | 용도 |
| @SpringBootApplication | 메인 클래스에 붙음 이거 실행해야 프로그램이 실행됨!! (위에서 봤듯 진입점이니까..) |
| @RestController | 클래스가 REST API 응답을 반환하도록 지정 |
| @RequestMapping("/web") | /web요청이 왔을 때 hello()를 실행하도록 매핑 URL 경로와 메서드를 매핑 GET,POST, PUT, DELETE 등 HTTP 메소드 지정가능 (@GetMapping, @PostMapping 등 더 구체적인 어노테이션 사용 가능) |
| @PathVariable("name") | @PathVariable("name")은 url 경로에 들어온 {name}값과 매칭됨 |
3) Spring Boot의 핵심 원리
- 1. DI (의존성 주입, Dependency Injection)
- 외부(프레임워크)에서 의존 객체를 전달(주입)받는 방식으로 의존성 관리를 프레임워크가 대신함.
- @Autowired, 생성자 주입, Setter주입으로 구현
- 2. IoC (제어의 역전 , Inversion of Control)
- 객체의 생성 ~ 생명주기 관리까지 모든 것을 프레임워크가 대신함.
- 필요한 기능만 개발자가 정의, 나머지는 Spring이 함. (즉 DI는 IoC의 구현방식 중 하나)
- 3. 자동구성 (Auto Configuration)
- 어플리케이션 설정을 자동으로 구성하는 기능! (매우 강력한 기능들 중 하나!)
- @SpringBootApplication 안에 자동구성을 활성화하는 @EnableAutoConfiguration이 들어있음
- 클래스 경로와 Bean 설정, 속성들을 기반으로 적절한 설정을 자동으로 적용
- Spring Bean : Spring 컨테이너가 관리하는 객체
- (기본적으로 싱글톤임. @Component, @Service, @Repository , @Controller 등으로 등록)
4) Sping MVC
- 웹 어플리케이션의 기본 구조를 제공해 웹페이지와 API 개발에 사용함
- 핵심 컴포넌트는 DispatcherServlet

4. Lab#1, Lab#2 복기 및 소감
1) Lab#1: Spring Boot 프로젝트 생성 및 front page 만들기
- 실행: SpringApplication.run() -> 로컬호스트 서버 실행 -> 콘솔에 로그가 잘 찍힘!



2) Lab#2: 웹 어플리케이션 (Input을 받기)
- 컨트롤러 생성: HelloController 클래스를 만들고 @RestController를 적용함. 브라우저에서 /web 요청 시 문자열을 반환하도록 구현.


3) 소감
- 조금이라도 오타 나면 이상해져서 실행이 안 되는 오류가 발생... 어노테이션과 html 문법에 익숙해지는 게 난관 같음! 여러 어노테이션이 있는데 각각의 기능과 역할을 직접 실습하면서 확인해보니 유익했음. 현재 진행하고 있는 팀프로젝트.. 아직은 spring으로 노선을 틀기 힘들지만 나중에 spring 공부 겸 (마피아 프로젝트가 객체 지향 프로그래밍 하면서 배웠던 개념들이랑 패턴들 SOLID 원칙을 복기하는데는 정말 효과적이라고 느끼고 있음... 현업 개발자분들은 이 과정을 매일 거치시겠지??) 시도해봐도 재밌을 것 같음! java로 웹페이지를 만든다는 게 정말정말 신기했고 흥미로웠던 것 같음... 자바스크립트와는 또 다른 느낌이라서 흥미로웠음!
'Develop > Java' 카테고리의 다른 글
| [프로젝트] 마피아 게임 프로젝트 후기 (0) | 2025.12.03 |
|---|---|
| [11주차] SpringBoot - 2 (Spring Data JPA로 CRUD 구현) (0) | 2025.11.30 |
| [9주차] DB & JDBC (0) | 2025.11.16 |
| [8주차] GUI + Event + Thread를 이용한 망나니 잡기 (0) | 2025.11.02 |
| [7주차-2] 디자인패턴 추가조사 - 데코레이터 패턴 (0) | 2025.10.18 |