오늘은 튜터님의 말씀을 듣고, 실전 위주 중요 포인트를 공부했다.
To Do List · 2026.04.08
- 01 Spring Boot 개념
- 02 IoC / DI
- 03 Controller → Service → Repository 흐름
- 04 MVC 패턴
- 05 주요 어노테이션
- 06 Lombok
- 07 Thymeleaf
- 08 URL 매핑 어노테이션
- 09 application.properties
- 10 프로젝트 폴더 구조
1. Spring Boot란?
Java로 웹 개발을 쉽게 할 수 있게 만든 프레임워크.
기존 Spring은 설정이 너무 복잡했는데, Spring Boot는 그 복잡한 설정을 자동으로 해준다

요즘 Java 백엔드 개발은 거의 다 Spring Boot로 한다.
2. IoC와 DI (Spring의 핵심 원리)
IoC (제어의 역전)
Java에서는 내가 직접 객체를 만들었지만, Spring에서는 Spring이 대신 만들고 관리해준다.
// 🤔 순수 Java 방식 - 내가 직접 객체 생성
UserService userService = new UserService();
userService.doSomething();
// ☺️ Spring 방식 - Spring이 알아서 만들어서 넣어줌
@Autowired
UserService userService; // 선언만 하면 끝!
🕶️ Spring이 관리하는 객체를 'Spring Bean'이라고 한다.
@Component , @Controller , @Service , @Repository 가 붙으면 자동으로 Bean이 된다.
DI (의존성 주입)
Spring이 필요한 객체를 자동으로 넣어주는 것. @Autowired를 쓰면 된다.
@Service
public class MemoService {
@Autowired
MemoRepository memoRepository; // Spring이 자동으로 넣어줌
public List<Memo> getMemos() {
return memoRepository.findAll();
}
}
3. 전체 흐름 (요청이 들어올 때)
사용자가 URL을 요청하면 이 순서로 처리된다.

🕶️ DispatcherServlet은 Spring이 알아서 관리해줌. 개발자는 Controller / Service / Repository만 만들면 된다
4. MVC 패턴
애플리케이션을 세 가지 역할로 나눠서 개발하는 방식

5. @Controller — URL 요청 처리
사용자의 HTTP 요청을 받아서 처리하는 클래스
@Controller
public class MemoController {
@Autowired
MemoService memoService;
// GET /memos → 메모 목록 조회
@GetMapping("/memos")
public String getMemos(Model model) {
List<Memo> memos = memoService.getMemos();
model.addAttribute("memos", memos); // View로 데이터 전달
return "memo-list"; // memo-list.html 렌더링
}
// POST /memos → 메모 저장
@PostMapping("/memos")
public String createMemo(@RequestParam String contents) {
memoService.createMemo(contents);
return "redirect:/memos"; // 저장 후 목록으로 이동
}
// GET /memos/1 → 특정 메모 조회
@GetMapping("/memos/{id}")
public String getMemo(@PathVariable Long id, Model model) {
Memo memo = memoService.getMemo(id);
model.addAttribute("memo", memo);
return "memo-detail";
}
}
🕶️ @PathVariable은 URL의 {id} 부분을 받고, @RequestParam은 폼에서 입력한 값을 받는다.
6. @Service — 비즈니스 로직
실제 기능(비즈니스 로직)을 담당하는 클래스. Controller와 Repository 사이에 위치한다.
@Service
public class MemoService {
@Autowired
MemoRepository memoRepository;
// 전체 메모 조회
public List<Memo> getMemos() {
return memoRepository.findAll();
}
// 특정 메모 조회
public Memo getMemo(Long id) {
return memoRepository.findById(id)
.orElseThrow(() -> new RuntimeException("메모 없음"));
}
// 메모 저장
public void createMemo(String contents) {
Memo memo = new Memo(contents);
memoRepository.save(memo);
}
// 메모 삭제
public void deleteMemo(Long id) {
memoRepository.deleteById(id);
}
}
7. @Repository — DB 접근
DB에서 데이터를 조회하고 저장하는 역할. JpaRepository를 상속받으면 기본 CRUD가 자동으로 생긴다!
@Repository
public interface MemoRepository extends JpaRepository<Memo, Long> {
// ✅ 자동 제공되는 메서드:
// findAll() → 전체 조회
// findById(id) → id로 조회
// save(memo) → 저장/수정
// deleteById(id) → 삭제
// count() → 개수 세기
// existsById(id) → 존재 여부 확인
// 필요하면 직접 추가도 가능:
List<Memo> findByContentsContaining(String keyword);
}
🕶️ 인터페이스만 만들면 Spring이 구현체를 자동으로 만들어줌. 직접 SQL 안 써도 된다!
8. @Entity — DB 테이블 매핑
이 클래스가 DB 테이블과 1:1로 연결된다는 표시. JPA가 자동으로 테이블을 만들어준다.
@Getter // getter 자동 생성 (Lombok)
@Entity // DB 테이블과 연결
@Table(name = "memos") // 테이블 이름 지정
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class Memo {
@Id // Primary Key
@GeneratedValue(strategy = GenerationType.IDENTITY) // AUTO_INCREMENT
private Long id;
@Column(nullable = false, length = 100)
private String contents;
public Memo(String contents) {
this.contents = contents;
}
}
🕶️ @NoArgsConstructor(access = AccessLevel.PROTECTED)
JPA는 빈 생성자가 필요하지만 public으로 열면 불완전한 객체가 만들어질 수 있어서 protected로 막는다.
9. Lombok — 반복 코드 자동 생성
매번 getter/setter/생성자를 직접 쓰는 게 귀찮으니까 어노테이션 하나로 자동 생성해주는 도구

@Builder 예시
@Builder
@Getter
public class Memo {
private Long id;
private String contents;
}
// 사용할 때 - 필요한 것만 골라서 설정 가능
Memo memo = Memo.builder()
.id(1L)
.contents("오늘 할 일")
.build();
10. Thymeleaf — View 화면 만들기
서버에서 HTML을 동적으로 만들어주는 템플릿 엔진. Controller에서 보낸 데이터를 HTML에 채워준다.
Controller에서 데이터 보내기
@GetMapping("/memos")
public String getMemos(Model model) {
List<Memo> memos = memoService.getMemos();
model.addAttribute("memos", memos); // "memos" 이름으로 데이터 전달
model.addAttribute("title", "메모 목록");
return "memo-list"; // templates/memo-list.html 렌더링
}
memo-list.html에서 데이터 받기
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<!-- ${변수명}으로 데이터 꺼내기 -->
<h1 th:text="${title}">기본 제목</h1>
<!-- th:each로 리스트 반복 -->
<ul>
<li th:each="memo : ${memos}">
<span th:text="${memo.id}">id</span>.
<span th:text="${memo.contents}">내용</span>
</li>
</ul>
<!-- th:if로 조건문 -->
<p th:if="${memos.isEmpty()}">메모가 없어요!</p>
<!-- 폼에서 데이터 전송 -->
<form th:action="@{/memos}" method="post">
<input type="text" name="contents" placeholder="메모 입력">
<button type="submit">저장</button>
</form>
</body>
</html>
11. URL 매핑 어노테이션

@Controller
public class MemoController {
@GetMapping("/memos") // GET /memos → 목록 조회
@PostMapping("/memos") // POST /memos → 저장
@GetMapping("/memos/{id}") // GET /memos/1 → 단건 조회
@DeleteMapping("/memos/{id}") // DELETE /memos/1 → 삭제
}
12. application.properties — 설정 파일
DB 연결, JPA 설정 등 앱 전반적인 설정을 하는 파일. 위치: src/main/resources/application.properties
# ===== MySQL 연결 설정 =====
spring.datasource.url=jdbc:mysql://localhost:3306/데이터베이스명?useSSL=false
spring.datasource.username=root
spring.datasource.password=비밀번호
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
# ===== JPA 설정 =====
spring.jpa.hibernate.ddl-auto=update # 테이블 자동 생성/수정
spring.jpa.show-sql=true # 실행 SQL 콘솔에 출력
spring.jpa.properties.hibernate.format_sql=true # SQL 예쁘게 출력
# ===== Thymeleaf 설정 =====
spring.thymeleaf.cache=false # 개발 중에는 false (수정 즉시 반영)
🕶️ ddl-auto=update → 코드 변경 시 테이블 자동으로 업데이트. 개발할 때 편리하다!
13. 어노테이션 총정리

14. 초보자를 위한 Spring Boot 개발 순서
과제나 실습을 할 때 어떻게 시작해야 할지 막막해서 쉽게 접근할 수 있는 방법을 찾아봤다.
1단계 Entity 만들기 (데이터 구조 설계)
- DB 테이블과 연결될 자바 객체를 가장 먼저 만든다.
- "내가 어떤 데이터를 다룰 것인가" 정해져야 그 다음 단계가 진행 (메모 제목, 내용, 작성자 등)
2단계 Repository 만들기 (DB 통로 확보)
- Entity를 DB에 저장하고 불러올 인터페이스를 만든다.
- JPA를 상속받기만 하면 save(), findAll() 같은 강력한 기능을 바로 쓸 수 있는 '도구'가 생기는 단계이다.
3단계 Service 만들기 (비즈니스 로직 구현)
- 핵심 기능을 코딩한다.
- Repository라는 도구를 활용해 실제로 "메모를 수정한다", "리스트를 역순으로 보여준다" 같은 알맹이 기능을 만드는 과정
4단계 Controller 만들기 (사용자 연결)
- 브라우저 요청(URL)을 받아 서비스와 연결해 준다.
- 앞서 만든 기능들을 사용자가 실제로 클릭하거나 접속해서 사용할 수 있게 문을 열어주는 최종 단계이다.
TODAY POINT
🍬 Spring은 어노테이션만 잘 붙이면 나머지는 알아서 해준다.
🍬 Controller → Service → Repository 이 흐름만 머릿속에 넣으면 과제 시작 가능.
🍬 어려운 게 당연하다.
🐹 오늘 학습을 마치며 🐼
스프링은 처음 접하다 보니 @ 어노테이션 들도 낯설고 종류도 많아서 막막하게 느껴졌다.
하지만 튜터님께서 “원래 배울 것이 많고 시간이 오래 걸리는 분야지만, 지금은 실습과 실무에 필요한 부분 위주로 학습하면 된다”고
말씀해 주셔서 방향을 잡을 수 있었다. 정말 다행이다 ꒰⍢꒱ ༘*
모든 내용을 이해하려 하다가, 꼭 필요한 핵심에 집중하자고 생각하니 학습 범위가 정리되는 느낌이었다.
Spring의 핵심은 'Controller → Service → Repository' 이 세 가지인 것 같다. 확실히 학습하고 넘어갈 것이다⎝⍥⎠
내일은 이 흐름 속에서 각 계층이 어떤 역할을 하고, 어떤 요소들로 구성되는지 더 구체적으로 학습해볼 예정이다.
스프링을 접한 지 이제 이틀째인 만큼 조급해하지 않고 차근차근 익혀나가면서,
내일부터는 본격적으로 과제에도 도전해볼 생각이다. 화이팅! 😎🔥