각종 어노테이션

young·2023년 7월 21일
0

지식

목록 보기
2/4

책 📚
이동욱 - 스프링 부트와 AWS로 혼자 구현하는 웹 서비스

lombok

  • 롬복은 코드를 단순화시켜줄 뿐, 필수 어노테이션은 아니다.
  • @Entity가 주요 어노테이션임
    -> 해당 어노테이션이 선언된 클래스에는 Setter 메소드를 만들지 않는다.
    ex) @Getter , @NoArgsConstructor

@Entity

  • 테이블과 링크될 클래스임을 나타냄

@Id

  • 해당 테이블의 PK(PrimaryKey)필드 나타냄

@GeneratedValue

  • PK의 생성 규칙을 나타냄
  • GenerationType.IDENTITY 옵션 추가 시, auto_increment됨

@Column

  • 테이블의 칼럼을 나타내며, 굳이 선언하지 않아도 해당 클래스의 필드는 모두 칼럼
  • 기본값 이외에 추가로 변경이 필요한 옵션이 있으면 사용함

@NoArgsConstructor

  • 기본 생성자 자동 추가

@Getter

  • 클래스 내 모든 필드의 Getter 메소드 자동 생성

@Builder

  • 해당 클래스의 빌더 패턴 클래스 생성
  • 생성자 상단에 선언 시 생성자에 포함된 필드만 빌더에 포함

Setter가 없는 상황에서 DB에 삽입해야 할 때

  • @Builder어노테이션을 통해 제공되는 빌더 클래스를 사용한다.

JpaRepository<Entity 클래스, PK타입> 상속 시 기본적인 CRDU 메소드 자동으로 생성됨
@Repository를 추가할 필요도 없음
-> 주의 Entity클래스와 기본 Entity Repository는 함께 위치해야 함
Entity클래스는 기본 Repository없이 제대로 역할 할 수 없음

@After

  • Junit에서 단위테스트가 끝날 때마다 수행되는 메소드 지정
  • 배포 전 전체 테스트를 수행할 때 테스트간 데이터 침범을 막기 위해 사용

@postsRepository.save

  • 테이블 posts에 insert/update 쿼리를 실행
  • id 값이 있다면, update가 실행되고 / 없다면 insert 쿼리가 실행됨

@postsRepository.findAll

  • 테이블 posts에 있는 모든 데이터를 조회해오는 메소드

=====================

@Autowired vs setter vs 생성자

생성자로 Bean 주입받는 것을 가장 권장! => @RequiredArgsConstructor
@RequiredArgsConstructor

  • final이 선언된 모든 필드를 인자값으로 하는 생성자를 대신 생성해주는 어노테이션

@MappedSuperclass

  • JPA Entity 클래스들이 BaseTimeEntity을 상속할 경우 필드들도 칼럼으로 인식하도록 함

@EntityListeners(AuditingEntityListener.class)

  • BaseTimeEntity 클래스에 Auditing 기능을 포함시킴

@CreatedDate

  • Entity가 생성되어 저장될 때 시간이 자동 저장됨

@LastModifiedDate

  • 조회한 Entity의 값을 변경할 때 시간이 자동 저장됨

@Transactional

readOnly = true

: 트랜잭션 범위는 유지하되, 조회 기능만 남겨두어 조회 속도가 개선됨
-> 등록,수정,삭제 기능이 전혀 없는 서비스 메소드에서 사용하는 것 추천

구글 로그인 연동 관련 annotation

@Enumerate(EnumType.STRING)

  • JPA로 데이터베이스로 저장할 때 Enum 값을 어떤 형태로 저장할 지 결정
  • 기본적으로 int로 된 숫자가 저장됨
  • 숫자로 저장 시, DB로 확인할 때 그 값이 무슨 코드를 의미하는 지 알 수 없음
    = 문자열(EnumTtpe.STRING)로 저장될 수 있도록 선언

@EnabledWebSecurity

  • SpringSecurity 설정들을 활성화시켜줌

@csrf().disble().headers().frameOptions().disable()

  • h2-console 화면을 사용하기 위해 해당 옵션들을 disable 한다.

authorizeRequests

  • URL별 권한 관리를 설정하기 위한 옵션의 시작점
  • authorizeRequests가 선언되어야만 antMatchers 옵션 사용 가능

antMatchers

  • 권한 관리 대상을 지정하는 옵션
  • URL,HTTP 메소드 별로 관리 가능
  • "/" 등 지정된 URL들을 permitAll()옵션 통해 전체 열람 권한 부여
  • "/api/v1/**"주소 가진 API는 USER권한 가진 사람만 가능하도록

anyRequest

  • 설정된 값들을 이외 나머지 URL들 나타냄
  • authenticated()를 추가하여 나머지 URL들은 모두 인증된 사용자드에게만 허용하게 함
  • 인증된 사용자 = 로그인한 사용자

logout().logoutSuccessUrl("/")

  • 로그아웃 기능에 대한 여러 설정의 진입점
  • 로그아웃 성공 시 / 주소로 이동

oauth2Login

  • OAuth2로그인 기능에 대한 여러 설정의 진입점

userInfoEndpoint

  • OAuth2로그인 성공 이후 사용자 정보 가져올 때 설정 담당

userService

  • 소셜 로그인 성공 시 후속 조치를 진행할 UserService 인터페이스의 구현체 등록
  • 리로스 서버(소셜서비스들)에서 사용자 정보를 가져온 상태에서 추가로 진행하고자 하는 기능 명시 가능

registrationId

  • 현재 로그인 진행 중인 서비스를 구분하는 코드
  • 하나의 소셜 로그인인 경우 불필요하지만, 구글/네이버 연동 시 구분하기 위해 사용

userNameAttributeName

  • OAuth2 로그인 진행 시 키가 되는 필드 값 야기( PK 같은 의미)
  • 구글 "sub"로 기본 키 지원(네이버/카카오 X)
  • 네이버-구글 로그인 동시 지원 시 사용

OAuthAttributes

  • OAuth2UserService를 통해 가져온 OAuth2User의 attribute를 담을 클래스
  • 다른 소셜 로그인도 해당 클래스 사용

SessionUser

  • 세션에 사용자 정보를 저장하기 위한 Dto 클래스

of()

  • OAuth2User에서 반환하는 사용자 정보는 Map이기 떄문에 값 하나하나를 변환해야만 함

toEntity()

  • User 엔티티 생성
  • OAuthAttributes에서 엔티티 생성하는 시점은 처음 가입할 때
  • 가입할 때의 기본 권한을 GUEST로 주기 위해서 role 빌더 값에는 Role.GUEST를 사용함
  • OAuthAttributes 클래스 생성 끝나면, 같은 패키지에 SessionUser 클래스 생성

@Target(ElementType.PARAMETER)

  • 어노테이션이 생성될 수 있는 위치 지정함
  • PARAMETER로 지정했으니 메소드의 파라미터로 선언된 객체에서만 사용할 수 있음
  • 클래스 선언문에 쓸 수 있는 TYPE 등이 있음

@interface

  • 해당 파일을 어노테이션 클래스 지정
  • LoginUser라는 이름을 가진 어노테이션이 생성됨

supportsParameter()

  • 컨트롤러 메서드의 특정 파라미터를 지원하는 지 판단
  • [In code]파라미터에 @LoginUser 어노테이션이 붙어 있고, 파라미터 클래스 타입이 SessionUser.class인 경우 true 반환

resolveArgument()

  • 파라미터에 전달할 객체를 생성
  • [In code] 세션에서 객체를 가져온다.
profile
ฅʕ•̫͡•ʔฅ

0개의 댓글