Github Action이란? GitHub Actions는 GitHub 저장소 내에서 직접 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD(지속적 통합 및 지속적인 배포) 플랫폼이다. 사용하는 이유 공식 문서에는 GitHub Actions를 사용하는 몇 가지 이유와 목적이 설명되어 있다. 워크플로우 자동화: Github Action은 CI/CD(지속적 통합 및 지속적인 배포)를 자동화하여 개발 프로세스를 더욱 효율적이고 빠르게 만들어 준다. 이는 코드의 빌드, 테스트, 배포를 한 곳에서 관리할 수 있게 해준다. 더불어 이러한 자동화를 통해 개발 프로세스 속도를 크게 높이고 수동 오류를 줄일 수 있다. 이벤트 기반 트리거: Github Action은 특정 이벤트(예: 푸시, 풀 요청, 이슈..
JVM은 자바 바이트코드를 실행시키는 가상 컴퓨터로, 자바의 "한 번 작성하면 어디서나 실행된다"는 특징을 실현합니다. 주요 구성 요소 Class Loader SubSystem 클래스 로더는 자바의 런타임 중에 필요한 클래스와 인터페이스를 동적으로 로드합니다. 이 과정을 크게 3단계 로딩(Loading), 링킹(Linking), 초기화(Initialization)로 나눌 수 있습니다. 로딩(Loading) : .JVM(Java Virtual Machine)의 클래스 로딩 과정에서 매우 중요한 첫 번째 단계입니다. 이 단계에서는 자바 프로그램이 실행되면서 필요한 클래스 파일들을 메모리로 로드하는 과정이 이루어집니다. 바이트코드 읽기: 클래스 로더는 .class 파일에서 바이트코드를 읽어들입니다. 이 파일은..
GitFlow란? Branch 간의 문제 없이 배포까지 안정적으로 할 수 있도록 Branch를 관리하는 전략이다. GitFlow에서 주로 사용하는 Branch는 5가지가 있다. 1. Main 실제 운영 환경에 존재하는 코드만 갖고 있는 Branch 따라서 안정적인 코드만 갖고 있어야 한다. 2. Dev Main Branch를 베이스로 생성한 Branch 다음 배포에 나갈 Feature 개발건들을 Merge하고 모든 작업 내용을 갖고 있는 Branch 3. Feature 어떤 Feature를 개발할 때 만드는 Branch 커밋을 다 한 경우에는 다시 Dev Branch에 Merge해준다. 4. Release Dev Branch를 베이스로 생성하는 Branch 다음 배포에 나갈 코드를 스냅샷을 뜨는 느낌으로..
특정 브랜치에서 작업을 하다가 다른 브랜치로 checkout해야하는데, 해당 작업을 완료하지 않았거나, 커밋하기엔 애매할 때 어떻게 해야할까? Git에서는 이럴 때 사용할 수 있는 stash가 있다. 우선, 만약에 stash를 사용하지 않고 바로 다른 브랜치로 checkout하면 어떤 일이 발생할까? 이전 브랜치에서 작업했던 내용이 checkout한 브랜치에도 영향을 주게 된다. stash는 working directory의 변경사항을 감춘다. 따라서 checkout을 하더라도 다른 브랜치에 영향을 주지 않는다. git stash 사용방법 git add 후 git stash하면 끝! 다른 브랜치 갔다와서 git stash pop git stash WIP - working in process 임시 작업 숨..
Merge와 Rebase에 관해 헷갈리는 부분이 생겨서 이번 기회에 정리하고자 한다. merge는 현재 브랜치에 내가 원하는 브랜치의 내용을 가져오는 것이다. git checkout feature git merge main feature브랜치로 main브랜치의 커밋내용을 가져온다. rebase는 base를 바꾼다. base란? 자신이 파생된 브랜치(조상 브랜치)와 공통으로 가지고 있는 커밋이 base다. git checkout feature git rebase main feature 브랜치의 base를 main 브랜치의 최신 커밋으로 바꾸겠다. 원격 저장소에서 프로젝트를 가져올 때 git fetch + git merge ⇒ git pull git fetch + git rebase 2가지 방법이 있다. 그..
객체지향 설계의 핵심은 협력을 위해 필요한 의존성은 유지하면서 변경을 방해하는 의존성은 제거하는데 있다. 이런 관점에서 객체지향 설계란? 의존성을 관리하는 것 객체가 변화를 받아들일 수 있게 의존성을 정리하는 기술 변경과 의존성 어떤 객체가 협력하기 위해 다른 객체를 필요로 할 때 두 객체 사이에 의존성이 존재하게 된다. 이러한 의존성은 실행 시점과 구현시점에 서로 다른 의미를 가진다. 실행 시점 - 의존하는 객체가 정상적으로 동작하기 위해선 실행 시에 의존 대상 객체가 반드시 존재해야 한다. 구현 시점 - 의존 대상 객체가 변경될 경우 의존하는 객체도 함께 변경한다. public class PeriodCondition implements DiscountCondition { private DayOfWee..
협력의 관점에서 객체는 두 가지 종류의 메시지 집합으로 구성된다. 객체가 수신하는 메시지의 집합 외부의 객체에게 전송하는 메시지의 집합 메시지(message) 협력하는 객체들이 사용할 수 있는 유일한 의사소통 수단. 메시지 전송 or 메시지 패싱: 다른 객체에 도움 요청 메시지 전송자: 해당 메시지를 전송하는 객체 [client] 메시지 수신자: 메시지를 수신하는 객체 [server] 메시지 = 오퍼레이션명(operation name) + 인자(argument)로 구성되어 있다. ex) 메시지 = isSatisfiedBy(screening) 메시지 전송 = 메시지 수신자 + 메시지 ex) 메시지 전송 = condition.isSatisfiedBy(screening) // condition이 메시지 수신자..