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를 받아..
백준 1094번 막대기https://www.acmicpc.net/problem/1094 풀이법 2초라는 널널한 제한시간이므로 단순하게 64,32,16,8,4,2,1 순으로 가능한만큼 X에서 길이를 빼며 최종적인 갯수를 구하면 된다. 코드import sysX = int(sys.stdin.readline().rstrip())#64 32 16 8 4 2 1 numli=[64,32,16,8,4,2,1]count = 0for num in numli: if (X==0):break count+= X//num X= X%num print(count)
백준 1021번 회전하는 큐 풀이법시간 제한이 2초로 매우 넉넉하기 때문에 시간에 대한 고려없이 단순하게 덱 사용해서 rotate 시키면 되는문제다. 코드방향을 향해 1번씩 Rotate해서 찾으면 pop하는 코드import sysfrom collections import dequeN,M=map(int,sys.stdin.readline().rstrip().split(" "))targetLi =list(map(int,sys.stdin.readline().rstrip().split(" ")))dq = deque([i for i in range(1,N+1)])nowCount = 0for target in targetLi: while(True): if(dq[0]==target): ..
백준 1402번 아무래도이문제는A번난이도인것같다https://www.acmicpc.net/problem/1402 풀이법해당 문제는 2개의 수가 주어졌을때 A를 곱으로 나타낸 수들의 합으로 B를 나타낼수있는지를 물어보는 문제이다. 예시입력에서 6은 2x3 -> 2+3=5 이므로 통과하는 모습을 볼수있다. A 인수분해하기??(아님)우선 A를 곱의 형태로 나타내기 위해서는 인수분해 작업을 수행해줘야한다.? .... 문제 해결을 위해 코드를 짜던중 실버5의 난이도에 비해 풀이법이 어려운것처럼 느껴져서 문제를 확인했다. 함정문제 문제를 잘 읽어라아.. 이 문제는 인수 분해후 백트래킹같은 작업을 통해 답을 구하는 작업이 아니였다.음수를 허용하게 되면 * -1 * -1 *-1 *-1 *1*1*1.... ..
백준 10158번 개미 https://www.acmicpc.net/problem/10158 풀이법해당 문제는 단순하게 생각했을때 그냥 개미를 시뮬레이션 해서 풀수있을것처럼 보이고, 실제로 해당방식으로 해결할시 원하는 값을 얻을수 있을것이다. 다만 시간 제한이 0.15초인것을 보면 이러한 구현을 원하는 문제는 아닌듯 보인다. 개미는 대각선으로 움직이고, 벽을 부딪히면 반대방향으로 움직인다 (양옆벽 부딪히면 좌우반전, 위아래 벽은 상하반전)때문에 좌우, 상하에 대해서만 따로따로 생각해서 계산해도 큰 문제 없을것이다. 예시 입력,출력을 보면 좌우: 4시작 -> 2초후 6에서 반전 -> 8초후 0에서 종료상하:1시작 -> 3초후 4에서 반전 -> 7초후 0에서 반전 -> 8초후 1에서 종료다. 일단 높이든,..
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) ...