목록전체 글 (37)
Optimal Solution

빌드 자동화 관련 환경 설명나는 빌드 자동화를 구축해보기 위해 아래와 같은 환경으로 작업했다.- 언어 : Java- 버전 관리 : Github- 빌드 도구 : Gradle- 운영체제 : Windows Github에서 빌드 자동화를 구축하는 방법 - Github ActionGithub에서 CI/CD를 구축하려면 Github Action을 사용한다.Github Action은 Github에서 제공하는 CI/CD 툴이다.완전 순수 100% 내가 다 CI/CD 환경을 구축해보면 좋은 경험이겠으나, 이를 위해선 CI/CD를 위한 서버를 구성해야 한다는 어려움이 있다.Github Action은 CI/CD를 위해 필요한 서버를 제공해주기 때문에 부담이 적고 간편하게 설정할 수 있다는 장점이 있다. Github Acti..
빌드 자동화경우에 따라 다를 수 있지만, 나는 이런 상황을 경험한 적이 있다. 개발을 하면서 간단히 무언가를 검증하기 위해 프로덕션과는 무관한 로깅용 코드를 짜고는 한다.이러한 코드들은 늦어도 PR을 날리기 전에는 제거해주어야 한다.하지만 이런 코드들을 제거하지 않았다는 것을 PR을 날리기 직전에 깨달았다. 그래서 로깅용 코드만 제거한 후 PR을 날려 머지를 하고 잠시 휴식을 취하고 왔는데, 아뿔싸 문제가 발생한다."빌드가 안 되는데 ?" 문제가 됐던 로깅용 코드는 특정 상황에서 로그를 남기도록 if문 안에 들어있었다.if문을 지우면 해결될 것이라 아무 생각 없이 if문을 지웠는데, 그 아래 코드는 else문이었다.if문이 없는데 else가 나와버리니 컴파일 단계에서 에러가 발생한 것이다. 그 당시에는 ..
CI/CD란 ?CI/CD란 Continous Integration(CI)와 Continous Delivery/Deployment(CD)를 아우르는 용어이다.DevOps라는 분야의 핵심 업무로도 알려져 있다. CICI는 지속적 통합이라는 의미를 가지고 있다.모든 개발자의 작업물을 하루에 여러 번이고 공유 레파지토리에 병합(merge)하는 방식이며, 각 병합은 자동화된 빌드 및 테스트 프로세스를 트리거한다.CI의 주요 목표는 병합 시 버그를 조기에(사전에) 자주 감지하고 수정하여 안정적인 소프트웨어를 더 쉽게 생성할 수 있도록 하는 것이다. CI의 프로세스는 아래와 같다. - 개발자는 코드 변경 사항을 공유 레파지토리에 자주 commit, push한다. - 자동화된 빌드 프로세스는 코드를 검사하여 예상대..

2023년 11월에 회사에 입사하고나서, Android 개발을 맡지 않게 되어 따로 Android 개발을 건드릴 일이 없었다.최근 간만에 감 좀 살려보고자 Android Studio를 켜서 프로젝트를 하나 생성했는데 기본으로 생성되는 Activity 코드를 보고 눈을 싹싹 비볐다. 분명 예전에는 이렇게까지 현란하게 코드 스니펫이 있던 것 같지는 않은데 ... 내 기억 속의 코드는 이랬다.class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity..

Stack과 Queue를 학습하기 전에 한 기업의 직무 면접에서 '스택과 큐를 비교해서 설명해주세요' 라는 질문을 받은 적이 있다. 직무 면접에서 자료구조 질문은 거의 '리스트와 셋, 맵을 비교하고 차이점을 중심으로 설명해주세요' 와 같은 질문은 많이 받았지만, 스택과 큐는 너무 쉽고 기초적인 내용이라서 그런가 단 한 번도 질문을 받은 적이 없었다. 그래서인지 순간적으로 LIFO, FIFO 개념에 혼동이 와 멘탈이 흔들렸던 기억이 있다(다행히 답변은 잘 했었음). 스택과 큐는 자료구조를 학습하면서 거의 초반부에 나오는 매우 심플한 자료구조이며, 비슷하면서도 다른 방식으로 동작하기 때문에 함께 묶이곤 한다. 오늘은 스택과 큐에 대해 학습하며 명쾌하게 이해해보도록 하자. 스택 (Stack) 스택은 배열, 리..

Hash와 Hash Table을 학습하기 전에 해시는 분명 2학년 때 자료구조 수업에서 학습했다. 그런데 당시의 나는 해시라는 개념을 명확하게 이해하지 못했던 것 같다. 수업 시간에 해시 ... ? 해시태그 ... 해시 브라운 ... 해쉬스완 ... 이런 생각을 했던 기억이 있는 것을 보면 말이다. 각설하고, 해시는 상당히 강력한 힘을 가지고 있다. 이번 포스트에서는 해시란 무엇인지, 해시 함수란 무엇인지, 해시 테이블이 무엇인지를 학습하며 해시가 가진 강력한 힘을 보다 잘 활용할 수 있는 것이 목표이다. 해시 함수 (Hash function) 해시를 설명하기 전에 해시 함수에 대해 알아야 한다. 왜냐하면 해시는 해시 함수를 통해 만들어진 값이기 때문이다. 해시 함수는 말 그대로 함수이다. 입력이 주어지..

ArrayList와 Vector를 학습하기 전에 https://optimal-solution.tistory.com/entry/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-Array%EC%99%80-List [자료구조] Array와 List Array, List를 학습하기 전에 일반적으로 '선형 자료구조'를 떠올리면, Array(배열)와 List(리스트)가 있다. 컴퓨터공학의 자료구조 과목에서 가장 먼저 배우는 자료구조 두 가지가 바로 '배열'과 '링크 optimal-solution.tistory.com 이전 포스트에서 Array와 List를 다루면서, Array와 LinkedList, ArrayList라는 3가지 자료구조를 다뤘다. 그런데, 나는 이전에 객체지향 프로그래밍을 학습하면..

Array, List를 학습하기 전에 일반적으로 '선형 자료구조'를 떠올리면, Array(배열)와 List(리스트)가 있다. 컴퓨터공학의 자료구조 과목에서 가장 먼저 배우는 자료구조 두 가지가 바로 '배열'과 '링크드 리스트' 이기도 한데, Array와 List는 어떻게 다른지 명확하게 이해하는 것은 실제 개발하는 데 있어 중요하다고 생각한다. Java나 Kotlin을 사용해 개발하다 보면 Array, ArrayList나 LinkedList 등 다양한 형태의 Array와 List를 마주하기 때문이다. 우리는 주어진 상황에서 어떤 자료구조를 선택해야 가장 효율적인지 이해하고 사용할 수 있는 개발자가 되어야 한다. Array (배열) Array는 인덱스와, 인덱스에 대응하는 데이터들로 이루어진 자료구조이다...