본문 바로가기

내일배움캠프 4기 스프링/내배캠 TIL📘

02. 15 TIL

728x90

1. 최종 프로젝트

댓글 컨트롤러 테스트 코드 작성 실습 : RestDocs 적용하지 않은 버젼, RestDocs는 나중으로..

컨트롤러 테스트 코드에서 시큐리티 필터 체인을 통과한 사용자를 설정하기위해 필요한 코드

-> with(csrf())

package com.example.townmarket.common.domain.comment.controller;

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.csrf;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import com.example.townmarket.annotation.WithCustomMockUser;
import com.example.townmarket.common.domain.comment.dto.CommentRequestDto;
import com.example.townmarket.common.domain.comment.service.CommentService;
import com.example.townmarket.common.util.SetHttpHeaders;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.data.jpa.mapping.JpaMetamodelMappingContext;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;


@ExtendWith({SpringExtension.class})
@WebMvcTest(controllers = CommentController.class)
@MockBean(JpaMetamodelMappingContext.class)
class CommentControllerTest {

  @MockBean
  CommentService commentService;

  @Autowired
  MockMvc mockMvc;

  @Autowired
  ObjectMapper objectMapper;

  @Test
  @WithCustomMockUser
  void createComment() throws Exception {
  	// given
    Long boardsId = 1L;
    CommentRequestDto commentRequestDto = new CommentRequestDto("commentRequestDto");
    
    // when
    ResultActions resultActions = mockMvc.perform(post("/comments/board/{boardsId}", boardsId)
        .contentType(MediaType.APPLICATION_JSON)
        .content(objectMapper.writeValueAsBytes(commentRequestDto))
        .with(csrf()));
    
    // then
    resultActions.andExpect(status().isCreated());
  }

}

https://itstory.tk/entry/CSRF-%EA%B3%B5%EA%B2%A9%EC%9D%B4%EB%9E%80-%EA%B7%B8%EB%A6%AC%EA%B3%A0-CSRF-%EB%B0%A9%EC%96%B4-%EB%B0%A9%EB%B2%95

 

CSRF 공격이란? 그리고 CSRF 방어 방법

CSRF 공격(Cross Site Request Forgery)은 웹 어플리케이션 취약점 중 하나로 인터넷 사용자(희생자)가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)를 특정 웹사이트에 요청하게

itstory.tk

아직 궁금한 점 : MockMvc 초기화는 어떻게?

 

AWS : S3 공부하기

+ 생활코딩 : S3 특징

- 많은 사용자가 접속을 해도 이를 감당하기 위해 시스템적인 작업을 하지 않아도 된다

- 저장할 수 있는 파일의 제한이 없다

- 최소 1바이트에서 최대 5TB의 데이터를 저장하고 서비스할 수 있다

- 파일에 인증을 분여 무단으로 엑세스하지 못하도록 할 수 있다

- Http와 BitTorrent 프로토콜을 지원한다

+ AWS의 선두주자는 넷플릭스, 그리고 며칠 전 들었던 MSA에 대해

https://www.samsungsds.com/kr/insights/msa_and_netflix.html

 

넷플릭스로 알아보는 MSA

 

www.samsungsds.com

SpringBoot : AWS S3와 프로그래밍 방식 엑세스를 통해 파일 업로드하는 방법 공부

https://jforj.tistory.com/261

 

[SpringBoot] AWS S3에 파일 업로드하기

안녕하세요. J4J입니다. 이번 포스팅은 AWS S3에 파일 업로드하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 Controller에서 파일 데이터를 받을 수 있기 위해 multipartfile을 사

jforj.tistory.com

-> 개인 과제에 실습해보기 : build.gradle에 의존성 주입, yml, Config 파일 생성

2. JPA심화 강의

JPQL 및 QueryDSL 활용

코드에 문자열이 들어가는게 왜 안좋은건가요?

  1. 문자열은 오타가 발생할 여지가 많다.
  2. 개발할 때 같은 공통적인 문자열이 있을때 한군데에서 수정이 일어나면 모두 수정해야한다.
  3. 잘못된 코드가 있더라도 문자열 자체를 컴파일러가 검사 하지는 않기 때문에 컴파일 시점에 잡지 못한다.
  4. 이로인해 런타임 시점에 버그가 발생한다.
  5. 런타임 시점에 발생한 버그는 서비스 정합성에 영향을 주며 원인을 찾기도 어렵다.

해결방법

  • 문자열을 포함하여 구현된 기능들은 객체화 또는 함수화 해서 컴파일시 체크되도록 한다.
  • 문자열로 선언된 변수들은 상수로 선언하여 공통적으로 관리한다. (상수 클래스 선언 추천 👍) 

QueryDSL로 개발하기

+@Embeddable, @Embedded : @Embeddable 클래스의 필드를 @Embedded 필드가 속한 엔티티가 그 값을 가진다

+@MappedSuperclass : 모든 테이블에 이 엔티티의 필드 값의 매핑정보가 상속되어야 할 경우

 

 

 

728x90

'내일배움캠프 4기 스프링 > 내배캠 TIL📘' 카테고리의 다른 글

02. 17 TIL  (0) 2023.02.17
02. 16 TIL  (0) 2023.02.17
02. 14 TIL  (0) 2023.02.14
02. 13 TIL  (0) 2023.02.14
02. 10 TIL  (0) 2023.02.10