코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 섹션 5~7장

cse 23·2024년 5월 1일
0

스프링 부트3

목록 보기
3/4

섹션 5: 회원 웹 기능 - 홈 화면 추가

1. HomeController 생성

  • 홈 URL 요청 시 뷰 반환
@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. 동작 원리

  1. 실제 MemberService가 아닌 프록시 객체(가짜 스프링 빈)를 생성
  2. 해당 프록시가 메서드를 감싸고 실행 시간 측정 같은 공통 로직 처리
  3. joinPoint.proceed() 호출로 실제 서비스 로직 실행
  4. 종료 후 시간 계산 및 로깅 수행

0개의 댓글