문제 설명요약하면, 주어진 삼각형 구조의 꼭대기부터 시작하여, 아래로 내려갈 때 대각선 왼쪽 또는 오른쪽으로만 이동 가능하다는 조건 하에, 경로상의 숫자 합 중 최댓값을 구하는 문제이다. https://school.programmers.co.kr/learn/courses/30/lessons/43105 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 과정 삼각형의 각 칸은 자신의 좌측 상단 혹은 우측 상단들의 값에 영향을 받는다. 따라서, 반복문을 진행하며 삼각형 각 칸의 값을 최댓값으로 업데이트해나가는 DP 로 풀이하였다. 아래와 같이 삼각형의 형태를 직각삼각형 형태로 생각하면 로직을 구현하기 편..
문제 상황로컬(Mac M1)에서 Docker로 만든 이미지는 정상 실행됐음.하지만 docker save로 저장 후 다른 서버에 옮겨서 docker load를 하자 다음과 같은 오류 발생:해결과정1. tar 파일 깨짐 의심에러메시지를 구글링 해봤을 때, 가장 많이 나오는 원인은 ASCII 모드 전송으로 파일이 깨지는 경우이고, 추천 해결 방법은 아래와 같음.https://stackoverflow.com/questions/40622162/docker-load-and-save-archive-tar-invalid-tar-header 하지만 나는 -o, -i 옵션 사용했고, binary 모드 전송도 확인했기 때문에 해당 문제 아니었음 2. 런타임 환경변수 주입 실패Dockerfile의 FROM 절에 들어가는 기본..
문제 설명장르별로 가장 많이 재생된 노래들을 최대 2개씩 골라 전체 재생수가 높은 장르 순으로 정렬해서 베스트 앨범을 만드는 문제이다.세부적인 조건은 아래와 같다. 장르 전체 재생 수가 많은 순서대로 장르 정렬각 장르 안에서는:재생 수가 높은 노래 먼저재생 수가 같으면 고유번호가 낮은 노래 먼저각 장르에서 최대 2곡까지만 수록 https://school.programmers.co.kr/learn/courses/30/lessons/42579# 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 풀이 과정장르명이 문자열로 주어지고 노래를 장르명을 바탕으로 묶고 연산을 수행해야 한다.따라서, 편의를 위해 아래와..
카카오 로그인 과정3단계로 이루어져 있다.https://developers.kakao.com/docs/latest/ko/kakaologin/rest-api#request-code카카오 인증 서버에서 제공해주는 토큰을 사용하는 것은 토큰 만료 기간 설정에 제약이 있어 자체 jwt 구현 및 운용 추천 Step1, Step2는 클라이언트에서 처리할 수 있음백엔드에서는 클라이언트에서 넘겨주는 토큰을 가지고 인증 및 로그인 처리를 구현하면 되는데, Step1,2를 거치지 않으면 Step3도 구현할 수 없기 때문에 테스트할 수 있는 방법에 대해 정리했다.Step1 & 2Kakao Developers 사이트에서 애플리케이션을 만들고 발급받은 restapiKey 와 지정한 redirectUrl 값을 잘 가져와서,아래 ..
STOMPSimple Text Orientated Messaging Protocol의 약자Web Socket 위에서 동작하며 서버를 거쳐 클라이언트 간의 비동기 양방향 통신을 지원하는 프로토콜이다.서버와 클라이언트가 통신할 주체인 메시지의 유형, 형식, 내용들을 정의한다.이름에서 알 수 있듯이 Text 기반의 메시지 형식을 사용한다.pub/sub 형태의 통신이다.PUB(Publish) : 특정 토픽을 구독 중인 모든 클라이언트에게 메시지 발행SUB(Subscribe) : 특정 토픽을 클라이언트가 구독STOMP를 사용한다는 말이 메시지 브로커를 사용한다는 말과 동치는 아니지만, 대부분의 경우, STOMP를 통한 통신은 메시지 브로커와 함께 사용된다. STOMP 사용 이점메시지의 형식을 정의할 수 있기 때문..
문제상황 GET API에 대해서 포스트맨이나 크롬에서 확인해 봤을 때에는 응답 시간이 0.1초 이내로 짧았는데, 스웨거에서 테스트했을 때는 10초 이상 걸리는 상황. 해당 API는 db의 5000개 가량의 데이터를 조회하는 GET API 문제 접근 포스트맨이나 크롬에서 테스트했을 때는 문제가 없었기 때문에 스웨거 관련 세팅을 잘못했을 것이다. 그래도 혹시 모르니 아래와 같이 로그를 찍어보았는데, 스웨거로 실행했을 때에도 포스트맨과 동일하게 ‘요청받은 시각’과 ‘응답 시각’ 차이가 0.1초 이내였다. 즉, 조회 결과를 스웨거 화면상에서 보여줄 때 지연이 발생한다는 것이었다. log.info("요청 받은 시각 : " + new SimpleDateFormat("YYYY. MM. DD HH:mm:ss.SSS")..
Release란? 소프트웨어를 빌드한 결과물을 쉽게 배포할 수 있도록 도와주는 기능이다. 구체적으로, 프로젝트의 버전을 마킹하고, 버전별 변경 사항, 릴리스 노트, 그리고 해당 소스 코드 및 바이너리 파일을 제공하는 데 사용할 수 있다. 언제 사용? 새로운 기능을 추가하거나 기존 기능을 업데이트한 후, 해당 변경 사항을 반영한 소프트웨어의 배포 버전 관리 시 사용. 배포 전략으로 활용할 수 있으며, 프로젝트를 특정 시점으로 롤백할 때 유용하게 사용할 수 있다. Tag Tag는 Commit에 붙일 수 있는 꼬리표로, Commit에 Release 버전을 명시할 수 있다. 예시 상황으로, 기존의 어떤 기능을 업데이트하고 push했는데 해당 기능에 버그가 있어 원래대로 되돌려야 할 때 업데이트 전 커밋의 태그를..
HTTP 통신을 통해 XML 데이터를 ReqeustBody로 받아서 파싱 후 처리한 후 다시 Response Body로 반환하는 API를 만들었다. 그 과정에서 xml 데이터를 String으로 받아서 Document 객체로 변환하고 Tag 들을 파싱 하여 값을 조회하고 수정하는 방법에 그리고 다시 Document를 String으로 변환하는 방법에 대해서 정리하였다. 기본 내장 라이브러리를 사용하기 때문에 build.gradle에 따로 의존성 추가할 건 없다. // build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.2.3' id 'io.spring.dependency-management' version '1.1.4' } ja..
Redis란? Remote Dictionary Server의 약자. Key-Value 형태의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스 기반 DBMS 데이터베이스, 캐시, 메시지 브로커 등으로 사용되며, 인메모리 데이터 구조를 가진 저장소이다. db-engines.com 에 따르면 23년 11월 기준 key-value 형태의 저장소 중 Redis가 가장 인기 있는 DBMS이다. ※ 인메모리 데이터 저장소 사용 이유 데이터베이스에 데이터를 저장하는 경우, 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 성능이 저하된다. 굳이 데이터베이스에 저장하지 않아도 되는 경우, 이러한 부하를 줄이기 위해 인메모리 데이터 저장소를 사용할 수 있다. Redis의 장점 및 특징 데이터를 메모..
문제 상황 Feign Client를 사용하여 Naver Cloud Platform의 SMS 서비스 Open API를 요청하는데 401(Unauthorized) 에러 발생. 해결 과정 Unauthorized 에러이기 때문에 네이버 서버에 인증하는 부분에서 값이 제대로 들어가지 않았다고 생각하여 먼저, 인텔리제이 환경변수에 serviceId, 액세스 키, 시크릿 키 값이 제대로 들어갔는지 확인함. → 제대로 들어가 있었음. HttpHeader를 여러 개 전달해야 했는데, 그 과정에서 여러 개의 헤더가 제대로 들어가지 않았다 생각하여 Header를 만들고 전달하는 방법을 바꾸어 시도 → 동일하게 401에러 발생 스프링 코드의 Feign Client에서 Naver 서버로 Post 요청을 보낼 때, 헤더 값이 제..