문제https://school.programmers.co.kr/learn/courses/30/lessons/273712 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr더 이상 업그레이드할 수 없는 아이템의 아이템 ID(ITEM_ID), 아이템 명(ITEM_NAME), 아이템의 희귀도(RARITY)를 출력하는 SQL 문을 작성해 주세요. 이때 결과는 아이템 ID를 기준으로 내림차순 정렬해 주세요. 문제 풀이해당문제에서는 더 이상 업그레이드 할 수 없는 아이템이 무엇인지 구해야합니다.즉 PARENT_ITEM_ID에 해당하는 ITEM_ID는 업그레이드가 가능한 대..
문제FISH_INFO에서 평균 길이가 33cm 이상인 물고기들을 종류별로 분류하여 잡은 수, 최대 길이, 물고기의 종류를 출력하는 SQL문을 작성해주세요. 결과는 물고기 종류에 대해 오름차순으로 정렬해주시고, 10cm이하의 물고기들은 10cm로 취급하여 평균 길이를 구해주세요.컬럼명은 물고기의 종류 'FISH_TYPE', 잡은 수 'FISH_COUNT', 최대 길이 'MAX_LENGTH'로 해주세요. 문제풀이평균이 33 이상인 물고기의 잡은 수, 최대 길이, 물고기 종류를 구해야 한다. 10cm이하의 물고기는 10cm로 취급한 후 평균 길이를 구해야함!!=> IFNULL 함수를 이용해 10cm로 계산해준다.IFNULL(LENGTH, 10) => LENGTH가 NULL인 값은 10으로!SELECT COUN..
문제뱀과 사다리 게임을 즐겨 하는 큐브러버는 어느 날 궁금한 점이 생겼다.주사위를 조작해 내가 원하는 수가 나오게 만들 수 있다면, 최소 몇 번만에 도착점에 도착할 수 있을까?게임은 정육면체 주사위를 사용하며, 주사위의 각 면에는 1부터 6까지 수가 하나씩 적혀있다. 게임은 크기가 10×10이고, 총 100개의 칸으로 나누어져 있는 보드판에서 진행된다. 보드판에는 1부터 100까지 수가 하나씩 순서대로 적혀져 있다.플레이어는 주사위를 굴려 나온 수만큼 이동해야 한다. 예를 들어, 플레이어가 i번 칸에 있고, 주사위를 굴려 나온 수가 4라면, i+4번 칸으로 이동해야 한다. 만약 주사위를 굴린 결과가 100번 칸을 넘어간다면 이동할 수 없다. 도착한 칸이 사다리면, 사다리를 타고 위로 올라간다. 뱀이 있는..
문제https://school.programmers.co.kr/learn/courses/30/lessons/299308 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제풀이각 분기별 분화된 대장균의 총 수를 구해야합니다. 분기란?1 ~ 3월 -> 1분기4 ~ 6월 -> 2분기7 ~ 9월 -> 3분기10 ~ 12 -> 4분기 1. 각 분기를 어떻게 나눌 것인가?!조건을 통해 분기를 나누고 GROUP BY 해준다SELECT CASE WHEN MONTH(DIFFERENTIATION_DATE) BETWEEN 1 AND 3 THEN '1Q' ..
문제https://school.programmers.co.kr/learn/courses/30/lessons/284527 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제풀이2022년 한 해 평가점수가 가장 높은 사원 정보를 구해야합니다. 1. 우리에게 필요한 정보는 HR_GRADE, HR_EMPLOYEES 2개의 테이블에 있습니다 두 테이블을 JOIN해줍니다.HR_GRADE G JOIN HR_EMPLOYEES E ON G.EMP_NO = E.EMP_NO 2. 같은 사원의 1, 2분기 합을 구해야 하기 때문에 사원번호로 GROUP BY로 묶고 SUM 함수를..
1. OpenFeign란?Spring Cloud OpenFeign은 넷플릭스가 개발한 Feign이라는 선언형 HTTP 클라이언트를 확장한 오픈 소스 프로젝트입니다. REST API 기반의 마이크로서비스 아키텍처에서 서로 다른 서비스 간의 통신을 더욱 간결하고 선언적으로 처리할 수 있도록 도와줍니다. OpenFegin은 선언형 방식으로 되어있어 인터페이스와 어노테이션을 정의하기만 하면, Spring이 실행 시점에 자동으로 해당 인터페이스의 구현체를 제공하여 API 통신을 손쉽게 수행할 수 있게 해줍니다. 이를 통해 개발자는 복잡한 HTTP 통신 로직을 신경 쓸 필요 없이, 마치 메서드 호출을 하듯이 외부 API와 통신할 수 있습니다. 2. Gradle 의존성 추가OpenFeign을 사용하기 위해 사용중인..
0. 개요프로젝트를 진행하면서 토스 간편 결제를 도입하기로 결정해서 토스 개발자 센터의 문서를 따라가보며 해당 기능을 구현해 보았습니다.토스의 결제는 위의 그림처럼 진행되는데 서버의 역할인 결제승인 API를 호출하고 해당 응답을 처리하는 기능만 구현해보았습니다. 1. 토스 개발자 센터에서 시크릿 키 발급받기토스 개발자센터에서 시크릿 키를 발급받습니다. (노출되지 않도록 조심!) 저는 실제 운영환경이 아닌 개인 프로젝트를 진행하기 때문에 테스트 키를 통해 진행해보도록 하겠습니다.(테스트 키를 통해 일어난 결제는 이뤄지지 않고 가상으로 이뤄집니다.) 2. 발급받은 키를 이용하기 위해 yml설정을 추가하기application.ymlpayment: secret-key: 시크릿키 넣어줍시다 base-url: ..
1. 상황티켓 예매를 진행하면서 결제 기능을 도입하면서 결제가 성공하면 Reservation의 Status를 변경해야하는 요구사항이 존재했습니다. 해당 로직을 구현하면 아래와 같습니다.@Service@Transactionalpublic class PaymentService { private final PaymentClient paymentClient; private final PaymentRepository paymentRepository; private final ReservationService reservationService; public PaymentService(final PaymentClient paymentClient, final PaymentRepository pay..
문제인체에 치명적인 바이러스를 연구하던 연구소에서 바이러스가 유출되었다. 다행히 바이러스는 아직 퍼지지 않았고, 바이러스의 확산을 막기 위해서 연구소에 벽을 세우려고 한다.연구소는 크기가 N×M인 직사각형으로 나타낼 수 있으며, 직사각형은 1×1 크기의 정사각형으로 나누어져 있다. 연구소는 빈 칸, 벽으로 이루어져 있으며, 벽은 칸 하나를 가득 차지한다. 일부 칸은 바이러스가 존재하며, 이 바이러스는 상하좌우로 인접한 빈 칸으로 모두 퍼져나갈 수 있다. 새로 세울 수 있는 벽의 개수는 3개이며, 꼭 3개를 세워야 한다.예를 들어, 아래와 같이 연구소가 생긴 경우를 살펴보자.2 0 0 0 1 1 00 0 1 0 1 2 00 1 1 0 1 0 00 1 0 0 0 0 00 0 0 0 0 1 10 1 0 0 0..
Redis를 활용한 분산 락(Distributed Lock) 구현하기분산 락은 분산된 서버에서 공유 자원에 동시에 접근하는 것을 제어하기 위해 사용되는 방식으로, 락에 대한 정보를 어딘가에 공통적으로 보관하고 여러대의 서버들은 이 공통된 보관소를 바라보며 임계 영역에 접근할 수 있는지 확인하게 되는데, 공통된 보관소로는 주로 Redis, Zookeeper, MySQL 등이 사용됩니다. 그 중 Redis를 사용해 분산 락을 구현해보도록 하겠습니다. Lettuce vs RedissonRedis를 활용한 분산 락에 구현되는 대표적인 RedisClient는 Lettuce와 Redisson이 존재합니다.Lettuce : Spin Lock 방식으로 락에 대한 획득 시도를 지속적으로 수행하며 락에 대한 타임아웃 지정..