목록전체 글 (299)
개발자로 후회없는 삶 살기

서론※ 아래 내용을 다룹니다.Hash 알고리즘Set 자료구조 내부 원리hashCode와 Equals를 재정의 해야 하는 이유 본론- List vs Set 특징 비교1. List1) 인덱스가 있다.2) 중복을 허용한다.3) 순서가 있다. 2. Set1) 인덱스가 없어서 순서가 없다.2) 중복을 허용하지 않고 유일한 요소만 저장할 수 있다.3) 요소를 포함하고 있는지 중복을 체크하는 속도가 매우 빠르다.자바의 Set은 위와 같은 특징을 가지고 있어서, 중복 제거 할 때 용이하게 사용되고, 순서가 필요한 경우엔 사용할 수 없다. 3번 특징처럼 체크 속도가 왜 이렇게 빠른지 구현하면서 알아보자. - Set의 문제점public class MyHashSetV0 { private int[] elementData..

서론※ 아래 내용을 다룹니다.배열리스트ArrayList각각의 성능 비교 본론- ArrayList와 배열의 차이점배열의 단점 : 동적으로 배열의 크기를 조절할 수 없고, 너무 크게 잡으면 메모리가 낭비된다.이러한 단점을 극복하는 ArrayList는 배열의 문제점을 해결하고 간편하게 사용할 수 있도록 도와주는 자료구조이다. 직접 간단하게 구현해보면서 실제 ArrayList 클래스 내부 구조를 파악해보자 ArrayList 내부 구현 코드를 보면 Object 배열을 사용하고 기본 크기는 10이다. 🚨 범위를 초과하면 어떻게 될까?배열을 사용하기 때문에 범위를 초과하면 당연히 OOB 에러가 난다. - 동적 배열우리가 원하는 리스트는 동적으로 저장할 수 있도록 크기가 커지는 것이다. 따라서 ArrayList 내부..

서론※ 아래 내용을 다룹니다.제네릭 타입제네릭 메서드와일드 카드타입이레이저각각의 사용 목적 본론- 제네릭이 필요한 이유public class IntegerBox { private Integer value; public Integer get() { return value; } public void set(Integer value) { this.value = value; }}IntegerBox는 정수를 저장하는 박스이고, StringBox는 문자열을 저장하는 박스이다. 🚨 요구사항이 늘어난다면?Boolean, Double 등 요구사항에 있는 타입의 Box를 전부 새로 만들어야 한다.코드가 다 똑같이 생겼는데 데이터 타입만 달라 코드 중복이 발생한다. ->..

서론※ 아래 내용을 다룹니다.모듈화버저닝 본론- 모듈화란?작성한 코드를 재사용 가능한 단위로 분리하는 것으로 여러 프로젝트에서 공통적으로 사용되는 이미지 빌드 잡이나 배포 잡을 모듈로 만들고 재사용할 수 있다. -> 모듈화가 필요한 이유액션을 사용하는 레포지토리가 1개면 상관 없는데 100개라면 100개의 레포에 모두 액션을 작성해야 한다. 또한, 이미지 빌드 코드를 수정해야 한다면 100개를 전부 수정해야 한다. 보통 액션은 환경과 시크릿 값만 다르고 다른 로직은 비슷한데, 비슷한 로직을 100번 작성해야 하는 것은 매우 비효율적이다. 따라서 공통된 로직을 중앙화된 특정 레포지토리 한 곳에서 관리하고 이를 레포지토리에서 가져와서 참조하면 공통 변경 사항이 있을 경우 모듈만 수정하면 된다. 환경변수와 시..

서론※ 아래 내용을 다룹니다.개발 환경 CICD개발 + 운영 환경 CICD개발 + 운영 + QA 환경 CICD 본론- 다양한 배포 시나리오1) 로컬 작업 내용을 개발 환경에 배포2) 로컬 작업 내용을 개발 환경에 배포하고 릴리즈 브랜치를 간접적으로 사용하여 운영 환경에 배포3) 로컬 작업 내용을 개발, QA, 운영 환경에 배포4) 로컬 작업 내용을 개발, QA, 스테이징 환경에 배포하고 승인 시 운영 환경에 배포다수의 인원이 하나의 프로젝트에 참여하여 개발을 진행할 때, git flow 방식을 사용하면 위와 같은 시나리오로 개발과 테스트, 배포를 하게 된다. 2번 내용에서 릴리즈 브랜치를 두는 이유는 아래에서 알아보자. -> CICD 프로세스1) CI : 변경된 코드의 테스트 코드가 성공하는지 확인하고 ..

🚨 서론 (문제 상황)이슈를 생성했을 때, 특정 키워드 [critical, normal]이 포함되어 있는 경우에만 해당 키워드가 포함된 슬랙 채널에 훅을 날리고 싶은 상황이다. 워크플로우는 위와 같이 작성할 수 있다. 1) 이슈의 제목이 critical 키워드가 있다면 크리티컬 웹 훅 URL로 훅 전송2) normal도 동일이슈의 제목이 critical이냐 normal이냐를 따지게 되면 추후 다른 키워드가 추가될 때마다 워크에 if문이 추가된다. 하지만, 키워드가 증가하게 되면 중복된 코드 작성이 수반된다. 1) 키워드 개수만큼의 if문을 사용하여 실행할 잡과 스킵할 잡을 선택2) 키워드 개수만큼의 웹 훅 URL 시크릿 값 수정만약 키워드의 개수가 5개라면 매번 중복된 작업을 해야하고 이는 매우 비효율..

서론※ 아래 내용을 다룹니다.깃헙 액션의 다양한 기능 본론- 체크아웃레포의 코드를 가져와서 사용할 수 있는 작업이다. 깃헙 액션 마켓플레이스에 등록된 액션으로, 레포의 코드에 테스트가 있다면 테스트를 하고 빌드 할 수 있다. name: checkout-flowon: workflow_dispatchjobs: no-checkout: runs-on: ubuntu-latest steps: - name: cat readme fail run: cat README.md checkout: runs-on: ubuntu-latest steps: - name: checkout uses: actions/checkout@v4 - name: cat run..

서론※ 아래 내용을 다룹니다.컴포넌트 종류이벤트 트리거 별 특징본론- 컴포넌트 종류1. 워크플로우깃헙 액션으로 동작할 전체 흐름을 의미하며, 푸시, 풀 리퀘 등 깃헙 이벤트에 의해서 트리거 된다. 특정 이벤트 외에도 특정 시간, 수동으로 워크 플로우를 실행할 수 있다. 2. 이벤트워크플로우를 실행하는 활동이다. 푸시, 풀 이벤트 발생 시 워크플로우가 작동하려면, 원하는 레포지토리의 원하는 브랜치에 푸시, 풀 이벤트 설정이 되어 있어야 한다. 3. 러너워크플로우가 동작하는 서버이다. 하나의 러너에서 하나의 잡이 동작한다. 위 사진에서 러너1, 러너2는 잡을 실행하는 서버로 하나의 잡을 실행할 수 있다. 4. 잡러너에서 실행되며, 워크플로우에서 동작할 스탭이다. 하나의 워크 플로우에 여러 개의 잡을 설정할 ..