섹션 5: 회원 웹 기능 - 홈 화면 추가
1. HomeController 생성
@Controller
public class HomeController {
@GetMapping("/")
public String home() {
return "home";
}
}
2. 홈 화면 HTML 작성 (templates/home.html)
- "Hello Spring"
- 회원 기능: 회원 가입, 회원 목록 링크 포함
3. 회원 등록
@PostMapping
: 사용자가 폼(form)에 데이터를 입력해서 전송할 때 사용
/members/new
경로 매핑하여 회원 가입 폼 보여주기
4. 회원 목록 조회
@GetMapping("/members")
메서드 작성
- members/memberList.html 파일에 회원 목록을 테이블 형식으로 출력
현재는 메모리 저장소이므로 서버를 재시작하면 데이터가 사라짐 → 영속 저장소(DB)로 전환 필요
섹션 6: H2 데이터베이스 연동
1. H2 설치 및 실행
윈도우 기준 실행
h2.bat
실행
- 최초 접속:
jdbc:h2:~/test
- 이후 접속:
jdbc:h2:tcp://localhost/~/test
~/test.mv.db
파일이 생성되면 DB 파일이 유지됨
2. DB를 사용하는 이유
- 데이터를 껐다 켜도 유지하기 위해
- 서비스의 영속성과 확장성 확보
3. 스프링이 편리한 이유
- 인터페이스 기반의 다형성 설계 가능
- 구현체를 쉽게 갈아끼울 수 있음 (IoC 컨테이너)
- 의존성 주입(DI)으로 유연한 구조 유지
JPA (Java Persistence API)
1. JPA 도입 효과
- 반복적인 SQL/코드 제거
- 객체 중심의 설계 가능 (데이터 중심 → 객체 중심 전환)
- 생산성 향상
2. 스프링 데이터 JPA 주요 기능
- 기본 CRUD 메서드 제공
- 메서드 이름 기반 쿼리 자동 생성 (
findByName
, findByEmail
)
- 페이징 처리 자동 지원
섹션 7: AOP (Aspect-Oriented Programming)
1. AOP가 필요한 상황
- 모든 메소드의 공통 동작 처리 (예: 실행 시간 측정, 로그 기록)
- 핵심 기능(비즈니스 로직)과 공통 관심 사항(시간 측정 등)을 분리
2. AOP 적용 예시
3. 동작 원리
- 실제
MemberService
가 아닌 프록시 객체(가짜 스프링 빈)를 생성
- 해당 프록시가 메서드를 감싸고 실행 시간 측정 같은 공통 로직 처리
joinPoint.proceed()
호출로 실제 서비스 로직 실행
- 종료 후 시간 계산 및 로깅 수행