BackEnd/SpringBoot

0.의존성 추가implementation 'org.springframework.boot:spring-boot-starter-amqp' 0.Docker rabbitmq: image: rabbitmq:4.0-management container_name: rabbitmq restart: always environment: RABBITMQ_DEFAULT_USER: guest RABBITMQ_DEFAULT_PASS: guest ports: - "5672:5672" # AMQP 통신 포트 - "15672:15672" # Management UI 포트 (브라우저 접속용) volumes: - rabbitmq_data:/var/lib..
1. 통합테스트란하나의 부품이 아니라, 전체가 잘 조립되어 돌아가는지 확인하는 테스트이다.단위테스트가 메서드 하나에 대해서만 테스트 한다면 통합테스트는 요청-> Controller -> Service -> Repository -> 실제 DB까지의 로직을 한번에 검증합니다. 2. 왜 통합테스트가 필요한가?통합테스트가 필요한 이유는 메서드들이 단위 테스트에서 정상적으로 작동하더라도 SQL 쿼리가 잘못되었거나 DB 제약조건때문에 실패하는 경우도 있고, 메서드끼리의 흐름이 정상적으로 이뤄지는지 확인해야하기 때문이다. 3.MockMvc 단위테스트에서도 테스트하기위한 메서드외에는 가짜 객체를 만드는 Mock을 사용했었는데,통합테스트에서는 HTTP 요청을 보낼 수 있게 해주는 가짜요청하게 해주는 ..
0. 상황최근 프로젝트에서 유저가 특정 기능을 신청하는 API를 구현하고 있었습니다. 기획 요구사항은 명확했습니다. 신청 상태가 '대기(PENDING)인 요청은 요청자당 하나만 존재해야 한다는 것이었습니다. 즉, 이미 심사 중인 건이 있다면 중복으로 신청할 수 없도록 막아야 했습니다. 그래서 서비스계층에서 비즈니스 로직을 통해 이를 검증하도록 코드를 작성했습니다. DB에서 해당 유저의 PENDING 상태인 요청이 존재하는지 조회하고, 만약 존재한다면 예외를 던져 요청을 거부하도록 처리했습니다. 하지만 동시성에 대한 생각을 하게되었습니다. 1. 동시성이란싱글 코어 혹은 멀티 코어 환경에서 여러 작업이 번갈아 가며 실행되어, 마치 동시에 실행되는 것처럼 보이는 성질인데지금은 동시에 신청 API를 받아..
1.QueryDSL 이란?타입 안전한 쿼리를 자바 코드로 작성할 수 있게 해주는 프레임워크이다. 기존 JPA에서 @Query로 JPQL을 직접 이렇게 작성했다.이렇게 작성한 쿼리문은 런타임까지 문법오류를 알수없다는 단점이 있었다....@Query("SELECT m FROM Member m WHERE m.username = :username")List findByUsername(@Param("username") String username); 반면 QueryDSL은 Q클래스를 활용하여 코드기반으로 작성하기 때문에 컴파일 시점에서 오류 체크가 가능하다.QMember member = QMember.member;List result = queryFactory .selectFrom(member) ...
1.204 No Content204 코드에 대한 설명을 MDN 플랫폼에서는 다음처럼 정의하고 있다.HTTP 204 No Content 성공 상태 응답 코드는 요청이 성공했으나 클라이언트가 현재 페이지에서 벗어나지 않아도 된다는 것을 나타냅니다. 2. 404 Not Found404 코드에 대한 설명을 MDN 플랫폼에서는 다음처럼 정의하고 있다.HTTP 404 Not Found 클라이언트 오류 응답 코드는 서버가 요청받은 리소스를 찾을 수 없다는 것을 의미합니다. 404 페이지를 띄우는 링크는 대체로 브로큰 링크(broken link) 또는 데드 링크(dead link)라고 부릅니다. 3. 204 와 404사용에 대한 의문현재 대학교 동아리에서 개발중인 웹사이트를 개발자도구를 키고 살펴보며 단건 조회에..
1.NULL 이란?NULL은 값이 없음을 나타내는 문자이다. (참조가 아무 객체도 가리키고 있지 않다.)사실 맨 처음 프로그래밍을 배울때 NULL의 개념에 대해 들으면, 이게 뭔지 햇갈릴수 있다. 여기 간단한 예시용 사람 클래스가 있다. class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } public void sayHello() { System.out.println("안녕하세요! 제 이름은 " + name + "입니다."); }} 그리고 이제 사람들의 리스..
1.Flyway란?Flyway는 데이터베이스 마이그레이션 도구다.데이터베이스 스키마 변경을 버전관리할수있게 해주는 도구라고 보면 된다. 2.Flyway쓰는 이유SpringBoot에서 jpa ddl-auto를 auto로 해두면 자동으로 db 구조를 바꿔주는데 이걸 왜써야할까? 개발자가 직접 SQL 실행하면 누가 언제 어떤 변경을 했는지 추적하기 어려워 지고, 그렇다고 auto로 해두면 production 환경에서의 실제 데이터가 사라질 위험이 있을수있다.그래서 이를 파일로 남겨서 안전하게 db에 접근하고 변경 이력을 버전으로 관리하는거다. 3.FlyWay 사용하기우선 기존 JPA 의 ddl-auto 설정을 validate로 바꿔줘서 이제 Entity를 만들었을때 자동으로 db에 반영되는것을 막는..
1. @Mock을 사용하는 이유 단위테스트는 테스트 대상 클래스만 검증하려는 목적이 있지만, 보통 클래스는 여러 다른 클래스에 의존되어있다.그래서 다른 클래스들은 정상적으로 작동하고 있다고 가정을 해야지 원하는 대상 클래스에 대한 테스트를 진행할수 있을것이다. 여기에 서비스에 대한 단위테스트를 작성하고 싶지만 레포지토리와 연결되어있다. 하지만 레포지토리에서 DB를 사용해서 데이터를 얻어야하고, 또한 서비스에 대한 테스트인데 DB정보가 바뀌는거에 의해 서비스의 단위테스트 결과가 바뀐다면 그건 잘못된 테스트일것이다.public class UserService { private final UserRepository userRepository; public UserService(UserRepos..
박종범_
'BackEnd/SpringBoot' 카테고리의 글 목록