개요 개발을 시작한 이후 처음으로 오픈소스에 기여했다. 오픈소스에 기여한 이유와 오픈소스에 기여하는 과정, 그리고 이 과정에서 느낀 점을 정리했다. 오픈소스에 기여한 이유? 이번에 오픈소스 2개에 기여를 했는데, 각 오픈소스에 대한 간략한 설명과 기여한 이유는 아래와 같다. 1. SST ION 소개 SST ION(링크)는 프론트엔드 프레임...
[GitHub Actions] cron 비활성화 자동으로 막기 (keepalive workflow)
문제점 Github 공식 문서(링크)에 따르면, public repository 에 60일 동안 commit 이 발생하지 않으면 cron 으로 작동하는 Github Actions 는 비활성화 된다. Warning: To prevent unnecessary workflow runs, scheduled workflows may be disable...
[SQLD] PARTITION BY 이용해서 누적 합계 구하기
PARTITION BY PARTITION BY 절에 ORDER BY 를 사용하면 누적 합계를 표시한다. 예시 아래와 같은 테이블이 있다고 해보자. 사원번호 이름 부서코드 급여 101 Alice mkt 3000 ...
[SQLD] 정규화, 비정규화, 정규형(1~5)
정규화 개념 데이터의 중복을 줄이고 무결성을 지키기 위해 사용하는 데이터베이스 구성 방법. 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미. 무결성의 종류는 4가지가 있는데, 여기서는 자세히 다루지 않음. 장점 데이터를 작고 관리하기 쉽게 나누어 데이터 중복을 제거. 단...
[Java] orElse 와 orElseGet 의 차이
개요 Optional 객체의 메서드인 orElse 와 orElseGet 은 매개변수로 메서드를 전달했을 때 다른 방식으로 작동한다. 결론부터 말하면 아래와 같다. orElse: null 여부와 상관없이 메서드 실행 orElseGet: null 일 때만 메서드 실행 Optional 객체의 값이 있는 경우에는 어떻게 동작하는지 살펴보자....
[Spring] 공통 Response 클래스 구현
작업 환경 OS: MacOS Java: 17.0.6 Spring Boot: 3.2.3 Gradle: 8.5 개요 백엔드에서 프론트엔드로 response 를 보내줄 때 공통된 형식으로 보내주고 싶었다. 예를 들어, 닉네임을 변경하는 API POST /member 는 기존에 아래와 같은 데이터를 response body 에 담아 ...
프로그래머스 Level 0 - 평행 (Java)
프로그래머스 - Level0 평행 문제 설명 문제 설명 생략 🙋♂️나의 풀이 🤔문제 접근 점을 각각 a, b, c, d 이라 하고, 각 점을 이어서 직선 2개를 만들 수 있는 경우의 수는 총 3가지이다. (a - b) 와 (c - d) (a - c) 와 (b - d) (a - d) 와 ...
[Spring] Spring Rest Docs 적용 및 Github Pages 자동 배포
개요 테스트 코드가 통과해야만 API 명세서를 생성해주는 Spring Rest Docs 를 로컬에서 적용하고, 생성된 API 명세서 결과 파일(html)을 Github Actions 을 이용해서 Github Pages 로 정적 배포하는 과정을 정리했다. 테스트 코드를 한번도 작성해본 경험이 없어서 테스트 코드에 대한 개념도 없고, Spring Re...
프로그래머스 Level 1 - 가장 많이 받은 선물 (Java)
프로그래머스 - Level1 가장 많이 받은 선물 문제 설명 문제 설명 생략 🙋♂️나의 풀이 🤔문제 접근 서로 주고 받은 선물의 개수와 선물 지수를 구하기 위해 아래와 같은 형식으로 데이터를 정리했다. { "giver1": { "receiver1": 2, // giver1 -> rece...
프로그래머스 Level 1 - [PCCP 기출문제] 1번 / 붕대 감기 (Java)
프로그래머스 - Level1 [PCCP 기출문제] 1번 / 붕대 감기 문제 설명 문제 설명 생략 🙋♂️나의 풀이 🤔문제 접근 attacks 2중 배열의 맨 마지막 원소에는 마지막으로 공격하는 시간에 대한 정보를 얻을 수 있다. 반복문을 이용해서 1초부터 마지막 공격 시간까지 현재 시간을 1초씩 증가시킨다. ...