컴퓨터 프로그래밍 158

[Spring] Mockito

관심 상품 최저가 업데이트 Service 코드테스트 코드ProductService의 updateProduct 메서드를 테스트하려면 ProductService 객체를 생성할 때 생성자로 ProductRepository, FolderRepository, ProductFolderRepository를 전달해줘야함.하지만 전달하려해도 인터페이스들인데 어떻게 전달하지?그리고 또 전달한다고 해도 updateProduct 메서드 내부의 productRepository.findById(id) 코드는 어떻게 처리하지? 라는 의문이 듦.가짜 객체 ( Mock )가짜 객체 (Mock object) 로 분리MockRepository실제 객체와 겉만 같은 객체동일한 클래스명, 함수명실제 DB 작업은 하지 않음DB 작업이 이뤄지는..

[Spring] 단위 테스트 프레임워크 JUnit5, Given-When-Then 패턴

User Guide Linkhttps://junit.org/junit5/docs/current/user-guide/#writing-tests-annotationsBefore - After@BeforeEachvoid setUp() { System.out.println("각각의 테스트 코드가 실행되기 전에 수행");}@AfterEachvoid tearDown() { System.out.println("각각의 테스트 코드가 실행된 후에 수행\n");}@BeforeAllstatic void beforeAll() { System.out.println("모든 테스트 코드가 실행되기 전에 최초로 수행\n");}@AfterAllstatic void afterAll() { System.out.pri..

[내배캠] Spring Project 22조 뉴스피드 프로젝트 팀 KPT 회고

KPT 회고KEEP, 다음 프로젝트로 가져갈소통을 자주 하면서 수월하게 프로젝트를 진행했습니다.팀원 모두가 한 명도 포기하지 않고 자신이 맡은 역할을 다 해냈습니다.프로젝트 시작 초반에 ERD 및 와이어프레임을 정하고 개발을 시작해서 관계설정및 이해하기 편리했습니다.추가 구현 개발시 의견을 서로주고 피드백을 하며 스코프 내에 구현해가는 과정이 좋았습니다.여러 기술을 적용해보는 것이 좋았습니다.의견이 많이 나오는 것이 좋았습니다.   PROBLEM, 버려야 할property yml 파일이 깃헙에 merge할떄 환경변수명 & 디렉토리 등이 일치하지 않아 충돌이 발생했습니다.프로젝트에만 집중 하다보니 알고리즘이나 TIL 에 조금 소홀해졌습니다.개인 강의를 완강하지 못했습니다.파일 디렉토리를 정리하지 못해 약간..

[Spring] 인터페이스의 default 메서드

인터페이스의 default 메서드// 해당 댓글이 있는지 확인Optional findByTodo_IdAndId(Long todoId, Long commentId);default Comment findByIdAndTodoIdOrElseThrow(Long todoId, Long commentId) { return findByTodo_IdAndId(todoId, commentId) .orElseThrow(() -> new NoSuchElementException("댓글을 찾을 수 없습니다."));} default 메서드의 특징:기본 구현 제공:인터페이스에서 default 메서드를 정의하면 해당 메서드의 기본 구현을 제공한다. 이를 통해 인터페이스를 구현하는 클래스들이 이 메서드를 재정의하지 않아도 ..

[Spring] RequestEntity

RequestEntity// 일정 등록@PostMapping("/todo")public RegistTodoResDto createTodo(@RequestBody RegistTodoReqDto requestDto) { return todoService.createTodo(requestDto);}기존 방식의 createTodo 메서드는 'RegistCommentResDto' 객체를 직접 반환하므로 클라이언트는 HTTP 응답 본문에서 이 객체만 받게 된다.이 방법은 단순하지만 HTTP 상태 코드나 헤더를 세밀하게 제어할 수 없다.Spring은 자동으로 200 OK 상태 코드를 설정한다. // 일정 등록@PostMapping("/todo")public ResponseEntity createTodo(@Req..

[Spring] [Memo] 메서드, 변수 명 선택, 중복된 @Transactional 처리, Pagenation 시 추가 데이터 압축 등 추가 Tips

메서드 명 선택// 일정 전체 조회 ( 페이지네이션 )@GetMapping("/todos")public List getTodos(@RequestParam(value = "page") int page, @RequestParam(value = "size", defaultValue = "10") int size) { // 응답 보내기 return todoService.getTodos(page-1, size);}메서드명 선언 시에 getTodos 보다 getTodoList 가 더 좋다 나중에 보면 무작정 다 가져오는 건 거의 없고 보통 특정 조건이 하나 붙는 경우가 있다.객체를 만들 때 목적에 맞게 메서드 새로 생성Comment ..

[Spring] 필터, 로깅

필터 필터란?Spring Boot에서 필터(Filter)는 HTTP 요청 및 응답을 가로채서 특정 작업을 수행하기 위해 사용됨.필터는 주로 보안, 로깅, 인증, 권한 부여, 데이터 압축, 데이터 변환, 캐싱 등의 목적으로 사용되며, 요청이 컨트롤러에 도달하기 전에 또는 응답이 클라이언트에 전달되기 전에 특정 로직을 실행할 수 있게 함. 필터가 필요한 이유 공통 작업 처리: 애플리케이션 전반에 걸쳐 공통적으로 수행되어야 하는 작업을 중앙에서 처리할 수 있음. 예를 들어, 모든 요청에 대해 CORS 처리, 로깅, 요청 및 응답의 인코딩 설정 등을 필터에서 처리할 수 있음.보안: 인증 및 권한 부여와 같은 보안 관련 작업을 처리할 수 있음. 요청이 실제 컨트롤러에 도달하기 전에 인증된 사용자만 접근할 수 있도..

[Spring] JWT 다루기

토큰 생성에 필요한 데이터Base64로 Encode된 Secret Key를 properties에 작성해두고 @Value를 통해 가져옵니다.JWT를 생성할 때 가져온 Secret Key로 암호화합니다.이때 Encode된 Secret Key를 Decode 해서 사용합니다.Key는 Decode된 Secret Key를 담는 객체입니다.@PostConstruct는 딱 한 번만 받아오면 되는 값을 사용 할 때마다 요청을 새로 호출하는 실수를 방지하기 위해 사용됩니다.JwtUtil 클래스의 생성자 호출 이후에 실행되어 Key 필드에 값을 주입 해줍니다.암호화 알고리즘은 HS256 알고리즘을 사용합니다.Bearer 란 JWT 혹은 OAuth에 대한 토큰을 사용한다는 표시입니다.로깅이란 애플리케이션이 동작하는 동안 프로..

[Spring] JWT 란?

JWT(Json Web Token)란 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token 이다.즉, 토큰의 한 종류.일반적으로 쿠키 저장소를 사용하여 JWT를 저장.JWT 사용 이유Session1 이 모든 Client의 로그인 정보를 소유하고 있음 Session 마다 다른 Client 로그인 정보를 가지고 있을 수 있음.Session1: Client1, Client2, Client3Session2: Client4Session3: Client5, Client6만약 Client 1의 로그인 정보를 가지고 있지 않은 Sever2 나 Server3 에 API 요청을 하게되면 문제가 발생할 수 있음해결방법Sticky Session: Client 마다 요청 Server 고정함..