[Spring Boot] 스프링 입문

HyeonJeong·2023년 1월 3일
0

spring 공부하자

목록 보기
2/4

Spring에 대해 처음 공부를 시작하는 경우에 스프링에서 동작하는 방식을 이해시키기 위해서 정리해보았습니다!

📌Spring 입문


동작

  1. 해당 controller가 없는 경우에는 resources/static/index.html 화면이 보여짐
  1. mvc에서 model-view-controller 모두가 주어져야 원활하게 동작 ↔ rest 형식
  1. spring에서 요청 처리 방법 3가지
    1. 정적 콘텐츠 반환
    2. MVC 구조로 view 반환
    3. API 이용
  1. @ResponseBody 이용하면, viewResolver 대신 HttpMessageConverter(문자 직접 반환)

회원 관리 예제

  1. 인터페이스를 이용해서 모듈화 표현

    domain(member) → interface(memberRepository : id 저장, 불러오기 등 CRUD 선언)
    repository(interface @Overide 구현) : 동시성 문제로 ConcurrentHashMap, AtomicLong
    testservice(리포지토리 생성 + ~회원가입, 목록 불러오기 등 구현)
    controller(서비스 의존관계 생성 + @getMapping 함수들)

  1. Optional 클래스 : 'T'타입의 객체를 포장 & nullPointer 문제 해결(null 값 예외 처리)

  2. test : repository 객체 생성 + @Test { given : 데이터 생성 - when : 작업 - then : 결과(비교) } + @AfterEach

  3. assertThat(특정 값).isEqualsTo(?); ← ?이 맞는지

  4. ~.ifPresent(m -> { throw new IllegalStateException("이미 존재"); });
    : ~에 값이 존재하면, 이미 존재한다는 오류 문장 출력

  5. service에 repository 객체를 DI(의존성 주입 : 필드/setter/생성자 3가지)를 통해 넣기

    • 기존 new repository → (private final repository 선언 + param인 repository를 넣는 생성자)
    • 추가로 스프링 빈과 의존 관계
      1. @Autowired 생성자로 repository 넣기(생성자 1개는 생략 가능)
      2. 해당 클래스인 service를 스프링 빈으로 등록하기

  6. 스프링 빈 등록 2가지 방법

    1) 컴포넌트 스캔과 자동 의존관계 설정

    • 컴포넌트 스캔 : @Componet 또는 @Controller/Service/Repository(컴포넌트 포함)

    ⇒ 스프링 컨테이너에 스프링 빈을 등록할 때, 기본으로 싱글톤으로 등록(하나 등록 후 공유)

    2) 자바 코드로 직접 스프링 빈 등록

    1. 클래스에 @Configuration
    2. 내부 함수에 @Bean 달기
  7. controller

    • 등록 후 return "redirect:/"; : ‘/’로 이동
    • service 객체의 함수를 통해서 비즈니스 동작을 수행시키고, 반환 값을 model에 담아서 전달

스프링 DB 접근 기술

  1. DB → mysql : https://yiyj1030.tistory.com/463

    • H2 데이터베이스 설치 → application.properties에서 mysql 연결 코드 추가

    • 순수 Jdbc → 위 5번 jdbc에 추가 작성

    • 스프링 통합 테스트

    • 스프링 JdbcTemplate

      • JDBC API에서 본 반복 코드를 대부분 제거, 그러나 SQL은 직접 작성

        → 저장소를 jdbcTemplate 형태로 사용하기 위해 스프링 설정에서 저장소 생성 변경

    • JPA
      - 기존의 반복 코드 + 기본적인 SQL도 JPA가 직접 만듬

    • 스프링 데이터 JPA

      • @Entity 멤버 클래스 & 저장소에서 생성자를 EntityManager 형태로 이용 → 저장소를 jpa 형태로 사용하기 위해 파라미터를 EntityManager으로 스프링 설정 변경

  2. 서비스 계층에 트랜잭션 추가

    • @Transactional
      • 클래스의 메서드를 실행 시, 트랜잭션을 시작
      • 메서드가 정상 종료 시, 트랜잭션을 커밋
  3. AOP - 시간 측정


0개의 댓글