2023.07.04.화.TIL

heeh·2023년 7월 4일

TIL

목록 보기
35/82
post-thumbnail

Spring 숙련

팀프로젝트

  • UserDetailsImpl : 권한 설정 할 수 있음
  • Spring Security를 이용하여 API 별 권한 제어 방법
    • 제어하고 싶은 Controller에 가서 @Secured 사용
  • @Secured 활성화 방법
    • @EnbleGlobalMethodSecurity(securedEnavled = true)
  • .accessDeniedPage()
    • Denied 당했을 때 어떤 페이지로 보낼지 여기에 설정 할 수 있음
  • 프로그래밍의 중요한 부분!
    • Java는 null 값에 대한 접근에 대해 NullPiunterException 오류가 발생하기 때문에 예방을 위해 Validarion 검증 과정이 필요
    • null 확인 뿐만 아니라 문자의 길이 측정과 같은 다른 검증 과정도 쉽게 처리 할 수 있도록 Bean Validation 기능을 제공
  • build.gradle : validation
    implementation 'org.springframework.boot:spring-boot-starter-validation’
  • @Valid
    • RequestDto에 Bean Validation을 걸었다고 해서 바로 적용되는 것이 아니며 Controller에 적용 시켜 줘야 함
      public ProductRequestDto testValid(@RequestBody @Valid ProductRequestDto requestDto)
    • @Valid가 달려 있는 해당 객체 Bean Validation이 즉, 데이터 검증이 일어나기 위해서는 꼭 붙어야 함!
    • @RequestBody : Body에 JSON 형식으로 받아옴
  • PostMan의 Cookies 버튼으로 창 열기 → 입력창에 localhost 입력 → Value 부분에 크롬 개발자 모드, Value 코드 넣어주기 → 앞 부분에 크롬 개발자 모드, Name 넣어주기 → 저장 → PostMan에서 요청을 보낼 때 우리가 저장한 Cookie도 함께 요청 됨
  • Validation 예외 처리
    • Validation에서 예외가 발생하면 BindingResult 객체에 오류에 대한 정보가 담겨서 들어옴
    • 파라미터로 받고 해당 오류가 어떻게 발생하고 있는지 체크를 해서 로그를 찍어줌
  • .exchange() ;
    • ()안에 첫 번째 requestEntity 타입의 필드를 줄 수 있음
    • ()안에 두 번째는 받아올 데이터
    • String 받아와서 fromJSONtoltems을 사용해서 넘어온 String 타입의 JSON 형태, 다중 JSON 형태를 처리
  • 한 명의 고객이 여러번 주문 가능한 상황을 Java Collection을 사용해서 표현할 수 있음
  • 1:1 단방향 관계
    • 고객 Entity 필드 없음 조회가 안됨
  • 양방향 관계
    • 서로의 Entity를 가지고 있음
  • 외래키의 주인 = 연관관계의 주인
  • 왜래키의 주인만이 외래키를 컨트롤 할 수 있다
  • mappesBy : 외래키의 주인을 설정할 때 쓰는 옵션
    • 설정하지 않으면 외래키의 주인이 누구인지 모름
    • 옵션은 외래키 주인 즉 상대 Entity의 필드명
      → @JoinColumn으로 외래키를 가지는 필드의 명
  • 외래키의 주인 쪽에 주인 쪽이 가지고 있는 상대 Entity 필드 set 하면서 넣어주기
  • 고객 Entity에는 Food의 Entity 필드가 없다
  • 1 대 N 단방향 관계는 update가 추가적으로 발생 된다 라는 문제 한계점 발생
  • @ManyToOne은 mappedBy 속성 자체를 제공하지 않음
  • 1 대 N 양방향 관계를 JPA 자체가 지원하지 않음
    • 연결이 아닌 각각 참조는 가능(추천하지 않는 표현)
      • 외래키의 주인인 음식 Entity에서도 User를 참조
      • Use에서도 @JoinColumn 사용해서 참조
      • @JoinColumn : 외래 키(Foreign Key)를 매핑할 때 사용
    • 외래키의 주인이 아닌 쪽에서 insert or update 즉, 컨트롤 하면 안됨
    • 규칙을 지키기 위해 insertable, updatable을 false로 옵션 추가
  • 깃 공부

팀프로젝트

  • 메인페이지 (index.html) 이 실행되면서 로그인 버튼 클릭시 로그인 화면(login.html)으로 이동. 로그인 성공시 메인페이지에 유저네임 값이 세팅된다.

1차 목표

  • 글 상세 페이지에 댓글 추가 및 삭제 기능 구현.
  • Comment(entity)-> view에서 받아온값을 기반으로 ->CommentRequestDto -> CommentResponseDto-> CommentController -> CommentService -> CommentRepositroy-> view에 적용 의 순서를 기반으로 개발 진행해야합니다.
  • 로그인 되어있을 때만 댓글을 달 수 있도록 만들어야하고 작성한 댓글에는 로그인 되어있는 회원 정보를 가져와서 데이터베이스에 담아주어야하며 post 테이블과 외래키로서 연결되어야 합니다 (1:n 관계 이해가 필요)
  • 로그인 한 사람만 댓글을 어떻게 달 수 있을까?
    • SecurityConfig에서 로그인 포스팅 및 댓글 제한 두기
    • Controller에서 if문으로 로그인 제한 두기
    • SecurityConfig에서 열어두고 Controller에서 제한 두기
      • 프론트와 같이 하면 어려움이 있다
profile
공부하자개발하자으쌰으쌰

0개의 댓글