본문 바로가기

전체 글245

맥북에 도커 설치 설치하게 된 이유엘라스틱 서치를 테스트하려고 하는데 맥북에 엘라스틱 서치를 깔기 껄끄러웠습니다.과정설치는 도커 홈페이지에서 각자에 맞는 도커를 다운받으면 됩니다.터미널에 접속한다터미널에서 아래 명령어를 실행한다.쉘 명령어를 보고 의아할 수 할 수 있습니다. 엘라스틱 서치를 안깔았는데 어떻게 컨테이너에 올리지? elasticsearch:7.17.10 이 이미지가 로컬에 없으면:Docker Hub에서 자동으로 이미지를 다운로드다운로드된 이미지로 컨테이너 생성지정된 설정으로 Elasticsearch 실행# 엘라스틱서치 도커 컨테이너 실행docker run -d \ --name elasticsearch \ -p 9200:9200 \ -e "discovery.type=single-node" \ elasticse.. 2024. 11. 19.
🤔 private 메소드는 어떻게 테스트 할까(feat 객체 분리) 상위 public 메소드로 하위 private 메소드를 테스트 할 때 문제점extractNumbers메소드에서 호출되는 메소드들은 다 private 메소드들입니다. 각 기능들을 테스트 하기 위해 extractNumbers메소드를 호출하여 결과중심의 테스트로 private 메소드들을 테스트하였습니다. 문제점은 테스트에 실패했을 때 어느 메소드에서 실패했는지 모르는 것입니다. 유지보수를 위해 잘게 메소드로 나누었지만, 어느 메소드가 잘못됐는지 알지 못하는 모순되는 상황에 봉착 했습니다.```java// private 메소드 양만 봐도 어지럽습니다..public class StringParser { private static final String BLANK = ""; private static f.. 2024. 11. 12.
🚫 else 금지 이유와 개선 법 🚫 else를 사용할 때의 단점1. 두 가지 이상의 책임// ❌ else를 사용하면 하나의 메서드가 성공/실패 두 가지 책임을 가짐public void processPayment(Payment payment) { if (payment.isValid()) { // 결제 성공 처리 payment.approve(); notifySuccess(); savePaymentHistory(); } else { // 결제 실패 처리 payment.reject(); notifyFailure(); saveFailureHistory(); }}// ✅ 실패는 빠르게 리턴하고 성공 로직만 남김public void.. 2024. 11. 12.
🤔 일급 컬렉션을 써야하는 이유 1. 😱 중복된 검증 로직의 지옥에서 탈출하기문제 코드//일급 컬렉션을 사용하지 않을 시public class RacingGame { public void race(List cars) { if (cars == null || cars.isEmpty()) { throw new IllegalArgumentException("자동차가 없습니다."); } if (cars.size() > 8) { throw new IllegalArgumentException("자동차가 너무 많습니다."); } // 게임 로직... } public void announceWinner(List cars) { .. 2024. 11. 12.
🫥 디미터 법칙의 오해 ❓고민: 데이터 활용 책임을 누구에게 맡길 것인가방법 1. 내부 데이터 전달private Rank calculateRankForLotto(Lotto lotto, WinningBalls winningBalls, BonusBall bonusBall) { // WinningBalls의 내부 데이터를 꺼내서 전달 int sameWinningCount = lotto.matchWith(winningBalls.getLottoNumbers());...}방법 2. 객체 자체 전달private Rank calculateRankForLotto(Lotto lotto, WinningBalls winningBalls, BonusBall bonusBall) { // 객체 자체를 전달 int sameW.. 2024. 11. 12.
nginx 설치 및 포트바인딩 sudo apt-get install nginxsudo systemctl start nginxsudo systemctl enable nginxsudo vi /etc/nginx/sites-available/default 전체 내용 삭제:1. ESC 키를 눌러 명령 모드로 진입2. gg를 입력 (파일의 맨 처음으로 이동)3. dG를 입력 (현재 위치부터 파일 끝까지 삭제)새로운 내용 붙여넣기:1. i를 눌러 입력 모드로 전환2. 내용 붙여넣기 (우클릭 또는 Shift + Insert)3. ESC를 눌러 명령 모드로 전환4. :wq를 입력하고 Enter (저장 후 종료)위 방법으로 아래 내용 복붙하기server { listen 80; server_name 15.164.30.67; locatio.. 2024. 10. 24.
Google Java Style Guide 번역 본 글은 Google Java Style Guide를 번역한 글입니다.Google Java 스타일 가이드목차소개소스 파일 기본사항소스 파일 구조포맷팅네이밍프로그래밍 관행Javadoc1. 소개이 문서는 Java 프로그래밍 언어로 작성된 소스 코드에 대한 Google의 코딩 표준을 완전히 정의합니다. Java 소스 파일은 여기에 명시된 규칙을 준수할 때만 Google 스타일을 따른다고 말할 수 있습니다.다른 프로그래밍 스타일 가이드와 마찬가지로, 여기서 다루는 문제는 형식에 관한 심미적 문제뿐만 아니라 다른 유형의 규칙이나 코딩 표준도 포함됩니다. 그러나 이 문서는 주로 우리가 보편적으로 따르는 엄격한 규칙에 초점을 맞추고 있으며, (사람이나 도구에 의해) 명확하게 시행할 수 없는 조언은 피합니다.1.1 용.. 2024. 10. 15.
orElse함수는 잘못 쓰기 쉽다(with orElseGet함수) # 논리 오류를 알게된 경위collectionLike를 데이터베이스에서 찾고 없으면 collectionLike를 새로 만들어 저장하는 코드를 짰다. 코드 검사에서 orElse에 있는 collectionLikeRepository.save()가 항상 호출된다고 위험을 알렸다. @Transactional public void saveCollectionLike(Long memberId, Long collectionId) { Member member = memberRepository.findByIdOrElseThrow(memberId); Collection collection = collectionRepository.findByIdOrElseThrow(collectionId);.. 2024. 10. 9.
빵그리 리팩토링 https://devroach.tistory.com/57 1. 한 함수 내에 추상화 수준 같게 해야 한다. 1-1   Tell, Don't Ask" 원칙[Review 관련]package com.bbangle.bbangle.review.service;import com.bbangle.bbangle.board.domain.Board;import com.bbangle.bbangle.board.repository.BoardRepository;import com.bbangle.bbangle.boardstatistic.service.BoardStatisticService;import com.bbangle.bbangle.exception.BbangleErrorCode;import com.bbangle.bbangle... 2024. 10. 3.