분류 전체보기
-
[Git] Git 커밋 되돌리는 다양한 방법 (git reset / git revert)📖 개발 공부/git 2023. 7. 14. 22:47
Git으로 작업을 할 때 버그가 생기거나, 이미 작업했던 커밋 중 수정하고 싶은 경우 커밋 내용을 되돌리거나(git revert), 커밋을 아예 취소하는(git reset) 경우가 종종 발생한다. 이 글에서는 실습과 함께 되돌리거나/취소하는 명령어에 대해 알아보려고 한다. 명령어를 알아보기 전, 실습을 이해하기 위해 간단한 커밋 로그들을 보고가자! commit b366d6832cc4ef88196ad4ba8850b71ce8ba60a8 (HEAD -> main) Author: ayoung0073 Date: Fri Jul 14 22:14:54 2023 +0900 test3.txt 추가 commit aad06133842414db6a3e9bcab1ead015e0a168ab Author: ayoung0073 Dat..
-
[핵심만 콕! 쿠버네티스] 도커 기초 (도커 소개 및 명령어 총정리)📚 개발 도서/핵심만 콕! 쿠버네티스 2023. 7. 12. 23:53
도커 소개 도커는 가상실행 환경을 제공해주는 오픈소스 플랫폼이다. 이 가상실행 환경을 컨테이너라고 부른다. 도커 플랫폼이 설치된 곳이라면 컨테이너로 묶인 애플리케이션을 어디서든 실행할 수 있는 장점을 가진다. 클라우드 컴퓨팅으로 흐름이 넘어오면서, 서비스를 빠르게 배포할 수 있는 방법을 도커가 제공해준다. 한번 만들어진 이미지는 온프레미스 서버든 클라우드 서버든 상관없이 언제나 동일하게 동작하기 때문에, 온프레미스와 클라우드 간 간극을 줄여줬다. 표준화 이식성: 도커 플랫폼 위에서 실행된다면 동일한 실행 환경으로 프로세스를 작동시킬 수 있다. 가볍다: 도커는 실행되는 애플리케이션별로 커널을 공유해서, 다른 가상화 제품에 비해 가볍다. 강한 보안: 컨테이너라는 고립된 환경에서 실행되므로 보안에 유리하다. ..
-
[Kubernetes] sidecar pattern (사이드카 패턴)📖 개발 공부 2023. 7. 10. 00:49
사이드카 패턴은 기본 어플리케이션 컨테이너와 독립적으로 동작하는 별도의 컨테이너를 붙이는 패턴이다. 위의 사진에 나온 오토바이에 연결된 사이드카를 붙이든 떼어내든 상관없이 오토바이에 영향을 주지 않는다. 이와 같이 기본 애플리케이션 컨테이너의 변경이나 수정 없이 독립적으로 동작하는 컨테이너를 붙였다 뗐다 할 수 있다. 패턴에서 사이드카는 기본 애플리케이션에 연결되고 애플리케이션에 대한 지원 기능을 제공한다. 또한 기본 애플리케이션 생명 주기와 동일해서 기본 애플리케이션과 함께 만들어지고 종료된다. 사이드카 패턴을 이용하지 않았을 때통합되어 있는 경우 위에 보이는 사진 설명에서 logging, proxy 기능들을 하나의 애플리케이션에서 모두 들어있다해보자.이는 애플리케이션과 동일한 프로세스에서 실행되어 공..
-
비동기 asynchronous📖 개발 공부 2023. 7. 2. 16:52
쉬운코드님의 유튜브 영상 보면서 정리한 내용입니다. 3가지 관점으로 asynchronous의 개념을 알아보자. 1. programming 관점에서 Synchronous (동기) Synchronous programming: 여러 작업(task)들을 순차적으로 실행하도록 한다. Asynchronous (비동기) Asynchronous programming: 여러 작업(task)들을 독립적으로 실행하도록 한다. 이는 시간을 단축시킬 수 있다. Asynchronous programming과 Multi-threading은 다르다. Asynchronous programming: 여러 작업을 동시에 실행하는 프로그래밍 방법론 Multi-threading: asynchronous programming의 한 종류 mul..
-
[클린코드] 시스템📚 개발 도서/클린코드 2023. 7. 1. 16:18
“복잡성은 죽음이다. 개발자에게서 생기를 앗아가며, 제품을 계획하고 제작하고 테스트하기 어렵게 만든다." - 레이 오지, 마이크로소프트 최고 기술 책임자 이 장에서는 높은 추상화 수준, 즉 시스템 수준에서도 깨끗함을 유지하는 방법을 살펴본다. 시스템 제작과 시스템 사용을 분리하라 construction과 use는 아주 다르다. 소프트웨어 시스템은 (애플리케이션 객체를 제작하고 의존성을 서로 ‘연결’하는) 준비 과정과 (준비 과정 이후에 이어지는) 런타임 로직을 분리해야 한다. 설정 논리는 일반 실행 논리와 분리해야 모듈성이 높아진다. public Service getService() { if (service == null) service = new MyServiceImpl(...); return serv..
-
[클린코드] 클래스📚 개발 도서/클린코드 2023. 6. 15. 21:56
코드의 표현력에 아무리 신경 쓸지라도 좀 더 차원 높은 단계까지 신경쓰지 않으면 깨끗한 코드를 얻기 어렵다. 클래스 체계 추상화 단계는 순차적으로 내려간다. 그래서 프로그램은 신문 기사처럼 읽힌다. 캡슐화 : 캡슐화를 풀어주는 결정은 언제나 최후의 수단이다. 클래스는 작아야 한다 클래스는 작아야 한다. 함수는 물리적인 행 수로 측정했지만, 클래스는 클래스가 맡은 책임을 센다. 클래스 이름은 해당 클래스 책임을 기술해야 한다. 간결한 이름이 떠오르지 않는다면, 필경 클래스 크기가 너무 커서 그렇다. 클래스 이름에 Processor, Manager, Super 같은 모호한 단어가 포함되어있다면, 클래스 책임이 너무 낳아서다. 단일 책임 원칙 (Single Responsibility Principle, SRP..
-
RDB와 NoSQL📚 개발 도서/대규모 시스템 설계 기초 2023. 6. 8. 20:24
쉬운코드님의 유튜브 영상 보면서 정리한 내용입니다. Relation Database의 단점 유연한 확장성의 부족 새로운 column을 추가하고 싶으면 반드시 scheme를 변경해야 한다. scheme를 변경이 필요하여 컬럼을 추가한다면 해당 작업 자체가 굉장히 위험 부담이 될 수 있다. (왜냐하면 기존에 있는 대량 데이터에 대해서 새로운 column을 추가하기 때문에 대용량 write가 필요함) 복잡한 join은 read의 하락 중복 제거(for 데이터의 일관성)를 위해 정규화 진행한다. 이는 데이터 중복을 최소화한다. 하지만 전체 데이터를 읽어오고 싶을 때 join을 많이 해야하는 문제가 발생한다. → 그만큼 DB 서버에 CPU 많이 사용하고, 응답 시간이 늘어난다. 일반적으로 RDB는 scale-ou..
-
intellij로 디버깅 하기📖 개발 공부 2023. 6. 6. 19:40
intellij IDE로 개발을 하고 있는데, 개발을 하면서 실행 결과를 봐야할 때 디버깅을 많이 이용한다. 하지만 디버깅에 여러 방법이 있어서 많이 헷갈렸다 (나만!?) 확실히 각 기능들을 이해하고, 디버깅하기 위해 정리해보려고 한다. 요기 있는 디버깅 버튼들을 알아볼 것이다! (+ resume 버튼) resume 다음 break point로 이동한다. step over 현재 break 된 시점에서 다음 라인으로 이동한다. 그렇기 때문에 다음 break point로 이동하지 않고, break된 시점의 명령어 실행 후 다음 라인으로 이동된다. (이 기능을 몰라서 모든 라인에 break point를 걸었다면, step over을 사용하자.) step into break된 라인에서, 실행되고 있는 라인으로 ..