전체 글243 [아웃소싱 프로젝트] 이미지 저장용 게시물 2024. 9. 24. [Spring] GlobalExceptionHandler UserServiceif (!passwordEncoder.matches(deleteUserRequestDto.getPassword(), user.getPassword())) { throw new UnauthorizedPasswordException();} 비밀번호가 일치하지 않을 때 비밀번호 불일치 메세지를 던지기 위해서 예외처리를 했다. UnauthorizedPasswordExceptionpublic class UnauthorizedPasswordException extends GlobalException { public UnauthorizedPasswordException() { super(UNAUTHORIZED_PASSWORD); }} GlobalExceptionCons.. 2024. 9. 22. [Spring] ApiResponse 예시 코드 분석 package com.sparta.sweethoney.util;import com.fasterxml.jackson.annotation.JsonInclude;import lombok.Getter;import lombok.RequiredArgsConstructor;import org.springframework.validation.BindingResult;import org.springframework.validation.FieldError;import org.springframework.validation.ObjectError;import java.util.HashMap;import java.util.List;import java.util.Map;@JsonInclude(JsonInclude.Include... 2024. 9. 21. [Spring] AuthUser 예시 코드 분석 @Auth@Target(ElementType.PARAMETER)@Retention(RetentionPolicy.RUNTIME)public @interface Auth {} annotation 패키지에 Auth 어노테이션으로 파일 생성AuthUser@Getterpublic class AuthUser { private final Long id; private final String userName; private final String email; private final UserRole userRole; public AuthUser(Long id, String userName, String email, UserRole userRole) { this.id = id; .. 2024. 9. 21. [Spring] AuthFilter 예시 코드 분석 package com.sparta.sweethoney.filter;import com.sparta.sweethoney.domain.user.entity.User;import com.sparta.sweethoney.domain.user.repository.UserRepository;import com.sparta.sweethoney.util.JwtUtil;import io.jsonwebtoken.Claims;import jakarta.servlet.*;import jakarta.servlet.http.HttpServletRequest;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;import org.sprin.. 2024. 9. 21. [Spring] JwtUtil 예시 코드 분석 package com.sparta.sweethoney.util;import io.jsonwebtoken.*;import io.jsonwebtoken.security.Keys;import jakarta.annotation.PostConstruct;import jakarta.servlet.http.Cookie;import jakarta.servlet.http.HttpServletRequest;import org.springframework.beans.factory.annotation.Value;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import java.io.UnsupportedEnc.. 2024. 9. 21. [CS] 싱글톤 패턴 ppt싱글톤 패턴 - Google Slidesyoutubehttps://www.youtube.com/watch?v=YYdlgXU2uZU 2024. 9. 18. [Spring] Naver Open API 2024. 9. 18. [Spring] RestTemplate RestTemplate 을 이용하면 내 서버에서 카카오에서 만든 주소검색 API 라든지 로그인이라든지 기능을 가져와서 간편하게 구현할 수 있다. 이럴 때 우리의 Client 의 입장이 되어서 Kakao 서버에 요청을 진행해야한다.프로젝트 하나는 8080 포트, 하나는 7070 포트로 서버 코드를 만들어서 진행.RestTemplate 의 Get 요청 (단건 Get)client-controller@GetMapping("/get-call-obj")public ItemDto getCallObject(String query) { return restTemplateService.getCallObject(query);}client-servicepublic class RestTemplateService { .. 2024. 9. 17. [Spring] Service Test Code 작성 @Transactionalpublic CommentSaveResponse saveComment(AuthUser authUser, long todoId, CommentSaveRequest commentSaveRequest) { User user = User.fromAuthUser(authUser); Todo todo = todoRepository.findById(todoId).orElseThrow(() -> new InvalidRequestException("Todo not found")); if (!managerRepository.existsManagerByUser_IdAndTodo_id(authUser.getId(), todo.getId())) { thr.. 2024. 9. 14. [Spring] Controller Test Code 작성 @PostMapping("/todos")public ResponseEntity saveTodo( @Auth AuthUser authUser, @Valid @RequestBody TodoSaveRequest todoSaveRequest) { return ResponseEntity.ok(todoService.saveTodo(authUser, todoSaveRequest));} 할 일을 등록하는 위 코드를 테스트 코드로 작성하려 한다. 우선 기본 세팅으로 @WebMvcTest(TodoController.class)class TodoControllerTest { private MockMvc mockMvc; @Autowired private ObjectMapper o.. 2024. 9. 14. [Spring] AOP AOP(Aspect Oriented Programming)관점지향 프로그래밍은 복잡한 프로그래밍 세상에서 관심사를 분리하여 모듈로 사용하는데 목적이 있다. AOP 는 핵심기능과 횡단 관심사 (부가기능) 를 분리해서 관리하는 것AOP 의 키워드1. 어드바이스 ( Advice )2. 포인트컷 ( PointCut )3. 타겟 ( Target )4. 조인포인트 ( JoinPoint )5. 애스팩트 ( Aspect ) a. 어드바이스어드바이스는 실제로 실행되는 횡단관심사(부가기능) 코드를 의미b. 포인트컷 포인트컷은 AOP 에서 어드바이스를 적용할 구체적인 범위를 선택하는 규칙.해당 범위는 특정 패키지 내의 모든 메서드들일 수도 있고, 특정 패키지내의 클래스의 모든 메서드들일 수도 있음.c. 타겟 타겟은 AOP .. 2024. 9. 10. [Spring] 통합 테스트 통합 테스트 (Integration Test)두 개 이상의 모듈이 연결된 상태를 테스트할 수 있음.모듈 간의 연결에서 발생하는 에러 검증 가능함.더보기@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) // 서버의 PORT 를 랜덤으로 설정합니다. @TestInstance(TestInstance.Lifecycle.PER_CLASS) // 테스트 인스턴스의 생성 단위를 클래스로 변경합니다. @TestMethodOrder(MethodOrderer.OrderAnnotation.class) class ProductServiceIntegrationTest { @Autowired ProductService produc.. 2024. 9. 10. [Spring] Mockito 관심 상품 최저가 업데이트 Service 코드테스트 코드ProductService의 updateProduct 메서드를 테스트하려면 ProductService 객체를 생성할 때 생성자로 ProductRepository, FolderRepository, ProductFolderRepository를 전달해줘야함.하지만 전달하려해도 인터페이스들인데 어떻게 전달하지?그리고 또 전달한다고 해도 updateProduct 메서드 내부의 productRepository.findById(id) 코드는 어떻게 처리하지? 라는 의문이 듦.가짜 객체 ( Mock )가짜 객체 (Mock object) 로 분리MockRepository실제 객체와 겉만 같은 객체동일한 클래스명, 함수명실제 DB 작업은 하지 않음DB 작업이 이뤄지는.. 2024. 9. 9. [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.. 2024. 9. 9. 이전 1 2 3 4 5 6 7 ··· 17 다음