갑자기 속성으로 공부하게 된 백엔드라 기본 개념 익히기 좋았다.
김영한강사님의 스프링 핵심 원리 - 기본편
Spring 프로젝트는 역할에 따라 패키지를 분리하여 관리한다.
| 디렉토리 | 역할 | 예시 |
|---|---|---|
domain | 데이터 정의 | Member, Order, Product |
controller | 요청/응답 처리 | URL 매핑 |
service | 비즈니스 로직 | 회원가입 규칙 |
repository | DB 저장/조회 | 실제 데이터 저장 |
사용자 요청
→ Controller
→ Service
→ Repository
→ DB
HTTP 요청 방식(GET, POST 등)과 URL을 Controller 메서드에 매핑해주는 어노테이션이다.
즉, 어떤 요청이 들어왔을 때 어떤 메서드를 실행할지 지정하는 역할을 한다.
| 어노테이션 | HTTP 메서드 | 의미 |
|---|---|---|
@GetMapping | GET | 데이터 조회 |
@PostMapping | POST | 데이터 생성 |
@PutMapping | PUT | 데이터 수정 |
@DeleteMapping | DELETE | 데이터 삭제 |
@GetMapping서버의 데이터를 조회
데이터 변경 없음
@GetMapping("/members")
public String members() {
return "members";
}
@PostMapping("/members/new")
public String create(MemberForm form) {
return "redirect:/members";
}
@PutMapping("/members/{id}")
public void updateMember(@PathVariable Long id) {
}
@DeleteMapping("/members/{id}")
public void deleteMember(@PathVariable Long id) {
}
HTML 폼 데이터를 Java 객체에 자동으로 연결해주는 기능
<input type="text" name="name">
public class MemberForm {
private String name;
public void setName(String name) {
this.name = name;
}
}
@PostMapping("/members/new")
public String create(MemberForm form) {
form.getName(); // 입력값이 자동으로 들어옴
}
👉 Spring이 name="name"을 보고 setName()을 자동 호출한다.
같은 인터페이스로 여러 구현체를 교체할 수 있는 성질
// 인터페이스
public interface MemberRepository {
Member save(Member member);
}
// 구현체 1: 메모리 저장
public class MemoryMemberRepository implements MemberRepository { }
// 구현체 2: DB 저장
public class JpaMemberRepository implements MemberRepository { }
👉 Service는 인터페이스에만 의존하므로 구현체 교체가 자유롭다.
| 구분 | JDBC | JPA |
|---|---|---|
| SQL | 직접 작성 | 자동 생성 |
| 코드량 | 많음 | 적음 |
| 특징 | 로우 레벨 DB 접근 | 객체 ↔ 테이블 매핑 |
// JDBC
String sql = "INSERT INTO member(name) VALUES(?)";
// JPA
em.persist(member);
애플리케이션을 3가지 역할로 분리하는 설계 패턴
| 구분 | 역할 | 예시 |
|---|---|---|
| Model | 데이터 | Member, MemberForm |
| View | 화면 | HTML |
| Controller | 요청 처리 | MemberController |
공통 관심사를 분리하는 기법
| 구분 | 설명 | 예시 |
|---|---|---|
| 핵심 관심사 | 실제 비즈니스 로직 | 회원가입 |
| 공통 관심사 | 반복되는 로직 | 로깅, 시간 측정 |
👉 AOP를 사용하면 공통 로직을 한 곳에서 관리할 수 있다.
| 어노테이션 | 의미 | 역할 |
|---|---|---|
@Controller | 컨트롤러 등록 | 웹 요청 처리 |
@Service | 서비스 등록 | 비즈니스 로직 |
@Repository | 레포지토리 등록 | DB 접근 |
@Autowired | 자동 주입 | 의존성 주입 |
@Override | 메서드 재정의 | 인터페이스 구현 |
@Bean | 수동 등록 | 직접 객체 등록 |