2023.06.15.목.TIL

heeh·2023년 6월 15일

TIL

목록 보기
22/82
post-thumbnail

Spring 입문 강의 듣기

  • 서버 처리 과정 대부분 비슷
    • Controller, Service, Repository = 3 Layer Architecture
  • Client - Controller - Service - Repository - data?
  • Controller를 Service에 나누고 Service를 Repository로 나눔
    • Memo 기능으로 작업 test
      • 데이터베이스 연결, CRUD 작업 코드는 memoRepository(Class)
      • 다른 작업을 변환, 전달, 확인이 이루어지는 memoService(Class)
      • memoService(Class)의 데이터베이스 작업은 memoRepository(Class)를 인스턴스화해서 호출, 필요 데이터 전달
  • why?
    MemoRepository memoRepository = new MemoRepository(jdbcTemplate);
    • 질문
      • Service에서 Repository로 나눌 때 인스턴스화 시키는데 (jdbcTemplate);가 왜 들어가나요? & jdbcTemplate의 개념을 잘 모르겠어요
    • 답변 MemoRepository가 JdbcTemplate을 사용하려면 인스턴스를 생성해야 합니다. 위의 코드에서 new MemoRepository(jdbcTemplate)는 MemoRepository 클래스의 인스턴스를 생성하는 부분입니다. 생성자의 인자로 jdbcTemplate 객체가 전달되는 것을 볼 수 있습니다. 즉, MemoRepository 클래스의 생성자에서는 jdbcTemplate을 인자로 받아서 내부에서 사용하게 됩니다. 이렇게 함으로써 MemoRepository 객체는 jdbcTemplate을 이용하여 데이터베이스와 상호 작용할 수 있게 됩니다. 따라서, 위의 코드는 JdbcTemplate 객체를 생성하여 MemoRepository 클래스의 인스턴스를 생성하는 과정을 나타냅니다.
    • 질문
      • jdbcTemplate이 뭔데?
    • 답변 jdbcTemplate은 Spring 프레임워크에서 제공하는 JDBC (Java Database Connectivity) 기반의 간단한 API입니다. JDBC는 자바 프로그램에서 데이터베이스와 연동하기 위한 표준 인터페이스입니다. JDBC를 사용하면 다양한 데이터베이스 시스템과 연결하여 SQL 쿼리를 실행하고, 결과를 가져오는 등의 데이터베이스 작업을 수행할 수 있습니다. 하지만 JDBC는 상대적으로 번거로운 저수준의 API를 제공하기 때문에, 이를 보다 간단하고 편리하게 사용할 수 있도록 Spring 프레임워크에서는 JdbcTemplate을 제공합니다. JdbcTemplate은 JDBC를 기반으로 구현된 Spring의 데이터베이스 액세스 기술 중 하나로, 데이터베이스와의 상호 작용을 쉽게 구현할 수 있도록 도와줍니다. JdbcTemplate은 다음과 같은 주요 기능을 제공합니다:
      1. 데이터베이스 연결과 관련된 작업을 자동으로 처리합니다.

      2. SQL 쿼리 실행과 결과 처리를 단순화합니다.

      3. PreparedStatement 및 ResultSet을 사용하여 SQL 쿼리를 실행하고, 결과를 객체로 매핑하는 기능을 제공합니다.

      4. 트랜잭션 관리를 자동으로 처리합니다.

        이를 통해 JdbcTemplate을 사용하면 반복적이고 번거로운 JDBC 코드 작성을 줄일 수 있으며, 간결하고 효율적인 데이터베이스 액세스 코드를 작성할 수 있습니다.

    • 이해
      • jdbcTemplate은 JDBC의 간단한 API, 편리한 코드 작성, SQL 사용에 필수
  • 각각의 역할에 수정이 필요하면 해당하는 계층 Class에서 수정하면 됨
    • API를 3계층으로 분류하여 데이터베이스 작업의 코드 변경은 memoRepository에서 수정, Business logic 수정은 memoService, 데이터 전달 방식이 바뀌었으면 memoController의 Path Variable → Request forum(?가 있는 링크 방식)
  • 의존성 주입 DI를 통해서 IoC 제어의 역전을 이루어 냄
    • DI - 디자인 패턴
    • IoC - 설계원칙
  • Spring Framework가 필요한 객체를 생성해주고 관리하는 역할까지 대신 해줌
  • Been - Spring이 관리하고 있는 객체를 뜻함
  • IoC Container는 Spring IoC Container로 Been들을 모아둔 하나의 Container(공간)
  • Been 객체로 등록해 줄 Class에 @Component를 삽입
  • MemoApplication → @SpringBootApplication ctrl+왼클릭 = Annotation 정보 확인
    • @ComponentScan : Component을 찾아주는 Annotation (해당 Package, 하위 Package 까지 찾아줌) → Class 에 있는 Component 찾아서 Been으로 등록해줌
  • Been으로 등록(IoC Container에 저장)될 때는 소문자로 등록됨
    ex) MemoRepository → memoRepository
  • jdbcTemplate은 Been으로 등록 돼있기 때문에 생성자 파라미터 부분에 넣어주고(Spring 넣어줌) IoC Container을 이용하여 받아와서 사용 가능
  • 주입(@Autowired 사용)
    • @Autowired를 사용해서 IoC에 있는 Been 객체를 Spring이 주입
    • 생성자로 주입할 때는 @Autowired 생략 가능(생성자 1개만 있을 때) / 객체의 불변성을 지켜주기 때문에 가장 추천
      • @Autowired를 주입하려고 하는 생성자나 메서드 혹은 필드에 달아줘야 연결(주입)할 수 있지만 Spring 4.3 버전 이상부터 생략 가능 = Lombok과 같음
    • 메서드로 주입할 때는 @Autowired 필수
    • 필드로 주입할 때는 private이어도 Spring은 접근 가능하게 @Autowired을 써줄 수 있음/추천하지 않음, 불안정
    • @RequiredArgsConstructor를 Lombok으로 주입 사용 가능, final을 생성자로 Been으로 등록(생성자 주입 지워주어야 함)
  • ApplicationContext : IoC Container에 직접 접근해서 가져오기
  • JPA : Java, ORM 기술의 대표적인 표준 명세 / ORM 기술 중 표준적인 기술
  • Hibernate : JPA를 구현하는 Framework 중 가장 많이 사용됨, 비공식적인 표준
  • Entity : JPA에서 관리되고 있는 Class(객체)를 의미, 데이터베이스의 table하고 맵핑 되어 JPA에 의해 관리되고 있음

Spring 과제 착수...

다른 분들과 새벽 4시가 넘어서까지... 기본, 기초를 다지고 (알려주시고....) 과제 전반적으로 도움을 받고 같이 공부를 했습니다,,,, 저도 도움이 되고 싶네요... 너무 늦은 시간까지 했지만 너무 재밌고 너무 화이팅하고 너무 좋은 시간이었습니다.....................!!!!!

profile
공부하자개발하자으쌰으쌰

0개의 댓글