개발/Tools/프레임워크/Spring

· DEV/Backend
Intro. Restdocs를 떠나다 🐥 카카오 테크 캠퍼스 - 2단계 6주차 마지막 과제는 API 문서를 작성하는 것이다. Restdocs로 예시를 들어주셔서 일단 구현은 했는데, Swagger의 UI와 테스트를 할 수 있다는 점이 맘에 들었기 때문이다 그래서 둘 다 만들어 제출하기로 했다! 재밌잖아! Contents 1. 기본 구성 Swagger 의존성을 먼저 설정합니다 implementation 'io.springfox:springfox-boot-starter:3.0.0' 다음은 application.yml 설정합니다. application.yml에 아래 코드를 빼먹으면 bean을 받지 못해서 프로젝트가 터집니다… ChatGPT로 에러 해결 - Failed to start bean ‘document..
· DEV/Backend
Intro. 무슨 일이지…? 갑자기 Swagger 사용하는 방법 쓰면서 Swagger를 만들고 있었는데 에러가 발생했다 아직 별도의 세팅을 하지 않았는데 에러가 떠서 좀 당황 스러웠다 해결 방안 문제 파악 일단 로그를 봐보자. 프로젝트 부팅 과정에서 Warning이 떴다. 그리고, 내려가면 Null Exception이 뜬다 마지막 프로젝트 실행 이후 달라진 점은 새로운 의존성(Swagger)를 추가했다는거라 설정 파일에서, Swagger 부분을 긁어서 🚀 Chat GPT에게 한 번 물어본다 내가 예상한 문제가 정답이라고 알려준다 해결 방안 GPT에게 최신 정보가 없는거 같아, 구글링을 했다 구글링해보니 spring.mvc.pathmatch.matching-strategy=ant_path_matcher를 ..
· DEV/Backend
문제 상황 🐥 카카오 테크 캠퍼스 - 2단계 5주차 과제 수행 중에 global Exception Handler를 사용하는 과제가 있었다 code를 작성하면서, 직접 에러를 확인하고 싶어서, 아래와 같이 핸들러를 작성하고 실행했다 @ControllerAdvice public class GlobalExceptionHandler { @ExceptionHandler(Exception500.class) public ResponseEntity serverError(Exception500 e){ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("잘 찾아왔다."); } } Controller 코드 : runtime Error를 예시로 삼았다 @..
· DEV/Java
DI (Dependency Injection, 의존성 주입) DI(Dependency Injection, 의존성 주입)는 IoC(Inversion of Control, 제어의 역전)의 구현 방법 중 하나입니다. 즉, IoC가 객체의 생성과 생명주기 관리를 프레임워크가 담당하는 전반적인 개념이라면, DI는 그 개념을 실제로 구현하는 방식 중 하나입니다. DI의 주요 개념 의존성 객체지향 프로그래밍에서 한 클래스가 다른 클래스에 의존하게 되는 경우 예를 들어, 클래스 A가 클래스 B의 메소드를 사용한다면, 클래스 A는 클래스 B에 의존하게 됩니다. 주입: 의존성 주입이란, 객체가 자신이 의존하는 객체를 직접 생성하거나 찾는 대신에 외부 시스템(즉, 프레임워크 또는 IoC 컨테이너)에서 생성된 것을 제공(주입..
· DEV/Java
@Transactional 어노테이션은 Spring에서 데이터베이스 트랜잭션의 범위를 정의하기 위해 사용됩니다 이 어노테이션은 메서드(또는 클래스)를 트랜잭션 내에서 실행되도록 표시합니다. @Transactional 어노테이션은 클래스 수준, 메서드 수준 또는 둘 다에 적용할 수 있습니다. 클래스 수준에 적용하면 해당 클래스 내의 모든 메서드에 대한 기본 트랜잭션 동작이 설정됩니다. 트랜잭션 전파 트랜잭션 전파는 한 메서드에서 다른 메서드를 호출할 때 트랜잭션 동작이 어떻게 전파되는지를 정의합니다. 스프링은 @Transactional 어노테이션의 propagation 속성을 통해 다양한 전파 유형을 지원합니다. 일반적인 전파 유형은 다음과 같습니다: REQUIRED 메서드는 트랜잭션 내에서 실행되어야 합..
· DEV/Java
A - Atomicity Spring Boot에서, [[@Transactional]] 어노테이션을 사용하여 메서드의 원자성을 보장할 수 있습니다. 이 어노테이션은 메서드에서 발생하는 모든 데이터베이스 연산이 하나의 트랜잭션으로 처리되도록 합니다. 만약 메서드 내에서 어떤 예외가 발생하면, 해당 트랜잭션의 모든 연산은 롤백됩니다. @Service public class UserService { @Autowired private UserRepository userRepository; @Transactional public void updateUserEmail(Long id, String newEmail) { User user = userRepository.findById(id).orElseThrow(() -..
· DEV/Java
자바에서 특정한 예외 상황을 더 명확하게 표현하고자 할 때는 커스텀 예외 클래스를 정의할 수 있습니다. 커스텀 예외 클래스를 사용하면 예외가 발생한 원인이나 상황에 대한 자세한 정보를 담을 수 있습니다. Exception 400 유효성 검사 실패나 잘못된 요청을 의미합니다 @Getter public class Exception400 extends RuntimeException { public Exception400(String message) { super(message); } public ApiUtils.ApiResult body() { return ApiUtils.error(getMessage(), HttpStatus.BAD_REQUEST); } public HttpStatus status() { r..
· DEV/Java
- DTO에 @Pattern을 붙이면 된다 멘토님께서는 정규 표현식을 공부하는 것을 추천하지 않는다고 한다. ChatGPT에게 물어보면서 테스트를 진행하는걸 추천하신다 요청 DTO에 정규표현식 적용 DTO(Data Transfer Object)를 생성하고, @Pattern 어노테이션을 적용하면 됩니다. import javax.validation.constraints.Pattern; public class UserRequest { @Getter @Setter public static class JoinDTO { @NotEmpty @Pattern(regexp = "^[\\w._%+-]+@[\\w.-]+\\.[a-zA-Z]{2,6}$", message = "이메일 형식으로 작성해주세요") private Str..
🐥 카카오테크캠퍼스 - 2단계 3주차 - 과제 - 레포지토리 단위테스트 1. 레포지토리 단위테스트를 구현하여 소스코드를 제출하시오. 2. 쿼리를 테스트하면서 가장 좋은 쿼리를 작성해보시오. 핵심 지표 레포지토리 단위테스트가 구현되었는가? 테스트 메서드끼리 유기적으로 연결되지 않았는가? (테스트는 격리성이 필요하다) Persistene Context를 clear하여서 테스트가 구현되었는가 (더미데이터를 JPA를 이용해서 insert 할 예정인데, 레포지토리 테스트시에 영속화된 데이터 때문에 쿼리를 제대로 보지 못할 수 있기 때문에) 테스트 코드의 쿼리 관련된 메서드가 너무 많은 select를 유발하지 않는지? (적절한 한방쿼리, 효율적인 in query, N+1 문제 등이 해결된 쿼리) 🥔 내가 잘 모르는..
· DEV/Java
@DataJpaTest - Spring Boot에서 제공하는 JPA 테스트 유틸리티 - [[Repository]] 주입 및 스캔 등 테스트 보조 이 어노테이션은 Spring Boot에서 제공하는 테스트 유틸리티 중 하나로, JPA 관련 컴포넌트를 테스트하는 데 사용됩니다. 1단계: 임베디드 데이터베이스 사용 @DataJpaTest를 사용하면 테스트를 위한 임베디드 데이터베이스를 메모리에 올립니다. 기본적으로 H2 데이터베이스가 사용되며, 각각의 테스트마다 독립적인 데이터베이스가 생성됩니다. 이를 통해 실제 데이터베이스를 사용하지 않고도 데이터베이스와 상호작용하는 코드를 테스트할 수 있습니다. @DataJpaTest public class UserRepositoryTest { @Autowired priva..
berom
'개발/Tools/프레임워크/Spring' 태그의 글 목록