2023.06.22.목.TIL

heeh·2023년 6월 22일

TIL

목록 보기
27/82
post-thumbnail

Spring 입문 & 숙련

  • @MappedSuperclass
    • JPA Entity Class들이 해당 출생 클래스를 상속할 경우 createdAt, modifiedAt 처럼 추상클래스에 선언한 멤버 변수를 Column으로 인식해줌
    • = Timestamp를 상속하는 Entity Class는 createdAt, modifiedAt를 가지게 됨
    • 자바 객체지향에서의 상속과 똑같은 개념을 @ 으로 준 것
  • updatable = false : 최초 입력된 것만 저장되고 이후 업데이트를 막음
  • 데이터베이스에 DATE, TIME, TIMESTAMP 3가지 타입 존재 → TemporalType
    • DATE : 2023-01-01
    • TIME : 20:21:14
    • TIMESTAMP :2023-01-01 20:21:14.9993939
  • @EnableJpaAuditing
    • JpaAuditing 기능을 사용하겠다라고 정보를 전달
  • findAllByOrderByModifiedAtDesc();
    • findAll : find는 select, All이기 때문에 전체 select
    • By : 어떻게 가지고 올 것인지
    • OrderBy : 순서 정렬
    • ModifiedAt : ModifiedAt의 필드로 순서 정렬
    • Desc : 어떻게? Desc(내림차순)으로!
    • = ModifiedAt 필드 데이터를 기준으로 정렬해서 전체 데이터를 내림차순으로 내보냄
    • SQL 직접 작성하지 않아도 정해져 있는 규칙에 맞게 메서드를 만들면 사용할 수 있음
      • 메서드 이름을 분석한 뒤 SimpleJpaRepository에서 구현이 됨
  • List findAllByUsername(String username);
    • Query Methods 사용, SQL을 동적으로 사용 가능
    • username에 작성자를 넣고 그 작성자가 쓴 게시글을 모두 찾을 수 있음
  • 3주차!
  • 3 Layer Annotation을 사용해서 Been으로 Been을 자동 등록
  • Been 수동 등록은? 기술적 문제나 공통적인 관심사를 처리할 때 사용, 기술지원
    → 수동 등록한 Been의 위치 찾기 쉬움
    - 메서드명을 @Been으로 등록
    - @Been 코드 위의 코드에 @Configuration
  • BCrypt : 비밀번호를 암호화 해주는 Hash 함수
  • matches 메소드가 inputPassword, encodePassword 평문 비밀번호와 암호화된 비밀번호를 자동으로 비교 분석해줌
  • 같은 타입의 Been이 2개라면?
    • 등록 자체에는 문제가 없다
    • @Autowired으로 주입을 할 때 같은 타입의 Been이 2개, 선택 오류가 뜸
    • 선택하는 법
      1. 등록된 Been의 이름을 명시
        ex) @Autowired
        인터페이스명 클래스명;

        @Autowired
            Food pizza;
        
            @Autowired
            Food chicken;
        
            @Test
            @DisplayName("테스트")
            void test1() {
                pizza.eat();
                chicken.eat();
            }
      2. @Primary가 추가되면 같은 타입의 Been이 여러 개 있더라도 @Primary가 적용된 Been 객체를 우선적으로 주입

        @Component
        @Primary
        public class Chicken implements Food {
            @Override
            public void eat() {
                System.out.println("치킨을 먹습니다.");
            }
        }
        @Autowired
            Food food;
        
            @Test
            @DisplayName("테스트")
            void test1() {
                food.eat();
            }
      3. @Qualifier
        (”별칭”)이 연결됨

        @Component
        @Qualifier("pizza")
        public class Pizza implements Food {
            @Override
            public void eat() {
                System.out.println("피자를 먹습니다.");
            }
        }
        
        
        
        @SpringBootTest
        public class BeenTest {
        
            @Autowired
            @Qualifier("pizza")
            Food food;
        
            @Test
            @DisplayName("테스트")
            void test1() {
                food.eat();
            }
        }
  • Primary와 Qualifier의 우선순위 확인
    • Qualifier의 우선순이가 높음
  • 같은 타입 Been이 여러 개 있을 때
    • 범용적(많이)으로 사용되는 Been 객체 → Primary
    • 지역적(조금)으로 사용되는 Been 객체 → Qualifier
  • 큰 범위 설정이 우선순위가 낮고 좁은 범위의 설정이 우선순위 높음
  • 인증 : 비밀번호 입력하고 제출
  • 인가 : 회원이나 비회원 여부에 따라서 권한을 받고 주는 것
  • 쿠키세션 : 생성한 세션을 저장해야 함
  • JWT : 따로 JWT 토큰 저장할 필요 없음, 토큰을 브라우저에 주고 다시 받아 오면 검증
  • JWT가 쿠키세션보다 서버에 부담이 덜하고 더 효율적
profile
공부하자개발하자으쌰으쌰

0개의 댓글