Spring boot40 Unit Test - Repository https://dhmk47.tistory.com/88 Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분 When 구체화 dhmk47.tistory.com https://dhmk47.tistory.com/89 Unit Test - Service 저번글에 이어서 이번에는 Service 계층의 단위 테스트를 진행하겠습니다. 진행 과정 @RequiredArgsConstructor @Service public class ProductService { private final ProductRepository p.. Spring boot/기본 정리 2022. 12. 21. Unit Test - Service https://dhmk47.tistory.com/88 Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분 When 구체화 dhmk47.tistory.com https://dhmk47.tistory.com/90 Unit Test - Repository https://dhmk47.tistory.com/88 Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 .. Spring boot/기본 정리 2022. 12. 21. Unit Test - Controller Web Layer 중 컨트롤러 영역에 대한 Unit Test를 해보겠습니다. Given-When-Then 패턴으로 사용합니다. Given 테스트에서 구체화하고자 하는 행동을 시작하기 전에 테스트 상태를 설명하는 부분 When 구체화하고자 하는 그 행동 Then 어떤 특정한 행동 때문에 발생할 거라고 예상되는 변화에 대한 설명 https://dhmk47.tistory.com/89 Unit Test - Service 저번글에 이어서 이번에는 Service 계층의 단위 테스트를 진행하겠습니다. 진행 과정 @RequiredArgsConstructor @Service public class ProductService { private final ProductRepository productRepository; p.. Spring boot/기본 정리 2022. 12. 20. @MockMvc, @SpringBootTest, @WebMvcTest @MockMvc 웹 애플리케이션을 애플리케이션 서버에 배포하지 않고도 스프링 MVC의 동작을 재현할 수 있는 클래스 @ExtendWith(MockitoExtension.class) class ProductRestControllerTest { @InjectMocks private ProductRestController productRestController; @Mock private ProductService productService; private MockMvc mockMvc; @BeforeEach public void init() { mockMvc = MockMvcBuilders.standaloneSetup(productRestController) // 추가적으로 커스텀도 가능합니다. .setCont.. Spring boot/기본 정리 2022. 12. 20. Mokito @Mock , @MockBean , @Spy , @SpyBean Test Double - Mokito 스프링과 Junit을 이용해서 테스트 코드를 작성하다 보면 테스트 환경(database, api)을 구현하는 코드까지 작성해야 하고 실제 테스트할 코드보다 환경을 구현하는 코드가 훨씬 더 복잡해지게 됩니다. 이런 문제 영역을 해결하기 위해서 Test Double이라는 것이 나왔고 Java에서는 대표적으로 Mockito가 있습니다. Mokito 어노테이션에는 @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks가 존재합니다. Test Double을 사용하는 이유 @RequiredArgsConstructor @Service public class ProductService { private final ProductRepository prod.. Spring boot/기본 정리 2022. 12. 19. TDD(Test Driven Development) TDD Test Driven Development의 약자로 테스트가 주도하는 개발이라는 의미로 해석합니다. 1. 항상 실패하는 테스트를 먼저 작성하고 (RED) 2. 테스트를 통과하는 프로덕트 코드를 작성하고 (Green) 3. 테스트가 통과하면 프로덕트 코드를 리팩토링합니다. (Refactor) 상세 설명 더보기 1. Ask(질문): 테스트 작성으르 통해 시스템에 질문 (결과는 실패로 응답하게 합니다.) 2. Respond(응답): 테스트를 통과하는 코드를 작성해서 질문에 대답 (성공으로 응답하게 합니다.) 3. Refine(정제): 아이디어를 통합하고 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제 (리팩토링) 4. Repeat(반복): 다음 질문을 통해 대화를 계속 진행 TDD 방법으.. Spring boot/기본 정리 2022. 12. 18. [위니아에이드] 팀 프로젝트 - AWS S3 이미지 업로드 지금까지는 이미지를 upload 폴더를 만들어서 해당 폴더에 이미지, 파일을 저장 및 관리를 하였습니다. 하지만 Heroku를 통해 배포를 하려면 static 폴더와 target 폴더에 이미지, 파일을 저장해야 합니다. 그 이유는 컴파일 시 -> src 폴더의 파일이 target폴더로 복사 html, js 등 파일은 target폴더의 static 폴더 참조 그래서 src에 파일 없고 target에만 파일 존재하면 컴파일 시 src의 빈 폴더를 복사하기 때문에 src에 업로드해야 합니다. 반대로 src에만 파일이 있다면 컴파일 하지 않으면 복사를 하지 않기 때문에 target의 static 안의 이미지를 참조할 수 없습니다. 그래서 두개의 폴더에 전부 이미지를 업로드, 로드를 성공시키고 배포를 해보니 다시.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 11. 17. [위니아에이드] 팀 프로젝트 - 이미지 삽입과 업로드 지난번에 관리자의 기능 중 Solution 게시글을 작성하는 로직을 작성했습니다. 처음에는 작성과 DB INSERT까지 에러가 없었으며 임시 폴더도 정상적으로 삭제가 되어서 문제가 없다고 생각했습니다. 하지만 작성된 게시글을 수정을 위해 DB에서 데이터를 불러와서 이미지 경로를 요청하는 과정에서 문제가 생겼습니다. 이미지를 삽입하면 요청을 보내고 업로드 했던 경로를 응답해주는 Ajax가 있습니다. 자세한 코드는 아래의 글을 참고하시면 됩니다. https://dhmk47.tistory.com/79 [위니아에이드] 팀 프로젝트 - 관리자 Solution 게시글 작성 클론 웹 사이트에서 자주 하는 질문과 자가진단과 같은 해결책을 알려주는 게시판이 있습니다. 이번에는 이 데이터를 관리자 페이지에서 작성을 구현하.. Spring boot/위니아에이드 클론코딩 프로젝트 2022. 11. 11. JWT를 이용한 인증, 권한 관리 JWT를 이용하는 로직을 연습하고 싶어서 강사님께 많이 여쭈어보고 인터넷에도 검색하며 공부를 하였는데.. 사용하시는 분마다 구현 로직이 달라서 어떤 틀을 가지고 구현을 해야 할지 갈피를 못 잡고 있었습니다. 우선은 JWT를 이용해서 인증과 권한 체크를 자유롭게 이용해서 원하는 데이터를 받을 수 있게끔 구현해보라고 강사님께서 조언을 해주셨습니다. 그래서 많은 시도를 해보다가 구현을 했습니다. 하지만 이게 올바른 방법이다 라고 말할 수 없는 부분이고 많은 허점이 있지만 그래도 JWT의 인증 방식을 이해하고 나름대로 내 입맛에 맞게끔 구현한 것에 만족하며 더욱 공부가 필요한 부분이라고 생각이 듭니다. JWT? Cookie 와 Session은 서버 저장소에 Key Value의 형태로 저장됩니다. 그렇기 때문에 .. Spring boot/기본 정리 2022. 11. 2. AOP에서 HttpServletRequest 사용하기 AOP는 메서드에 관하여 메서드 호출 전, 후에 어떠한 로직을 하고 싶을 때 사용을 합니다. @Before(value = "enableValidCheck()") public void validCheck(JoinPoint joinPoint) { Object[] args = joinPoint.getArgs(); for(Object arg : args) { if(arg.getClass() == BeanPropertyBindingResult.class) { BindingResult bindingResult = (BindingResult) arg; Map errorMap = new HashMap(); if(bindingResult.hasErrors()) { bindingResult.getFieldErrors() .. Spring boot/기본 정리 2022. 11. 1. REST API REST는 다음과 같은 구성으로 이루어져 있습니다. 자원(Resource) -> URI 행위 -> HTTP Method 표현 -> 어떻게 표현할지 URI와 URL의 차이 URL -> 전체 주소 https://naver.com/index/test URI -> 도메인을 포함하지 않고 뒤의 요청 메시지 index/test -> 자원이라고 표현 HTTP Method 중에서 자주 사용되는 것들 POST -> Create를 의미합니다. GET -> Select를 의미합니다. PUT -> Update를 의미합니다. DELETE -> Delete를 의미합니다. REST의 특징 Uniform (유니폼 인터페이스) Uniform Interface는 URI로 지정한 Resource에 대한 조작을 명시하고 HTTP Metho.. Spring boot/기본 정리 2022. 10. 31. Error Code 100번대 -> 요청을 받았으며 작업을 계속한다(잘 사용하지 않습니다.) 200번대 -> 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킵니다. 300번대 -> 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 합니다. 400번대 -> 클라이언트에 오류가 있음을 나타냅니다. (클라이언트의 요청이 잘 못 되었을 때) 500번대 -> 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타냅니다. (요청은 정상이지만 서버에서 문제가 생겼을 때 -> 오타, DB 연결 문제 등등..) 400: 매개변수 타입 오류 403: 매핑주소로 들어갈 권한이 없을 때 404: 경로 문제 405: 매핑주소 문제 400번대의 오류를 몇 가지 살펴보면 위와 같습니다. Spring boot/기본 정리 2022. 10. 31. 이전 1 2 3 4 다음