전체 글
-
[클린코드] 시스템📚 개발 도서/클린코드 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된 라인에서, 실행되고 있는 라인으로 ..
-
[Git] Git의 다양한 merge 방법 이해하기 (Merge / Squash & Merge / Rebase & Merge)📖 개발 공부/git 2023. 5. 28. 16:13
Merge 커밋 이력을 모두 남길 때 사용한다. 일반적으로 많이 사용된다. 두 개 이상의 브랜치를 병합하여 새로운 커밋을 만든다. 병합 커밋은 두 브랜치의 변경 내용을 모두 포함하며, 두 브랜치의 변경 내용이 충돌할 경우 사용자가 충돌을 해결해야 한다. merge를 사용하면 병합된 커밋 히스토리가 남기 때문에 브랜치 간의 관계가 명확하게 나타난다. 여기엔 두가지 옵션이 있다. fast-forward 옵션 대상 브랜치의 최신 커밋이 현재 브랜치의 커밋을 포함하고 있는 상태로 브랜치 포인터(각 브랜치의 최신 커밋을 가리키는 참조)를 이동시킨다. fast-forward 병합은 병합 대상 브랜치의 커밋 히스토리가 현재 브랜치의 커밋 히스토리에 뒤쳐져 있을 때 사용된다. 이 경우, 단순히 현재 브랜치를 대상 브랜..
-
MVC 패턴카테고리 없음 2023. 5. 28. 12:13
Model Model은 앱이 포함해야할 데이터가 무엇인지를 정의한다. Model은 Data와 애플리케이션이 무엇을 할 것인지를 정의하는 부분으로 내부 비즈니스 로직을 처리하기 위한 역할을 한다. 모델은 컨트롤러가 호출을 하면 DB와 연동하여 사용자의 입출력 데이터를 다루는 일과 같은 데이터와 연관된 비즈니스 로직을 처리하는 역할을 한다. View 사용자에게 보여주는 화면(UI) 사용자와 상호작용을 하며 컨트롤러로부터 받은 모델의 결과값을 사용자에게 화면으로 출력하는 일을 한다. MVC에서는 여러개의 View가 존재할 수 있다. Controller Controller는 Model과 View 사이를 이어주는 인터페이스 역할을 한다. Controller는 앱의 사용자로부터의 입력에 대한 응답으로 Model 또..
-
MVVM 패턴카테고리 없음 2023. 5. 21. 19:32
MVVM(Model-View-ViewModel) 패턴에서는 뷰와 뷰모델 사이의 양방향 데이터 바인딩을 발견할 수 있다. 뷰 모델 안에서 그리고 뷰에게 수정사항들을 자동적으로 이동시킨다. 뷰모델에서 변화를 주기 위해서, 뷰모델은 옵저버 패턴을 사용한다. View에서 사용자의 입력을 ViewModel로 전달 → ViewModel에서 Model로 데이터 요청 및 처리 → View는 ViewModel를 Provider나 Stream 등을 통하여 구독하거나 데이터 상태 관리를 통해 View를 업데이트 Model 데이터 소스는 원격 데이터베이스, 로컬 데이터베이스 또는 RESTful API와 같은 것이 될 수 있다. 데이터 소스에 액세스하는 것은 데이터 레포지토리(Data Repository)를 통해 이뤄진다. 사..
-
[Git] commit을 변경하는 git commands📖 개발 공부/git 2023. 5. 14. 22:32
git commit —amend git commit 커맨드에 —amend 옵션을 붙이면 직전에 남긴 커밋 메시지를 수정할 수 있다. 예를 들어 다음과 같이 오타를 포함한 커밋을 한다고 치자. git commit -m "feat: date_pickeㄱ 구현" 이를 —amend 옵션을 통해 수정할 수 있다. 다음과 같은 텍스트 에디터가 나오면, 커밋 메시지를 수정하면 된다. --amend 를 실행하면 commit id가 완전히 변하게 된다. git cherry-pick 다음 명령어는 다른 브랜치에 있는 커밋을 선택적으로 현재 브랜치에 적용시킬 때 사용하는 커맨드이다. 현재 branch에 붙는 commit은 새로운 commit id가 부여된다. -n flag를 추가하면 add만 수행하고 commit은 하지 않..