전체 글 227

[책] 함께 자라기

'애자일이야기'의 김창준님이 쓰신 책이다. 개발바닥 유튜브에서 '우아한형제들'의 김영한님이 추천하는 영상을 보고 읽게 되었다. 한동안 잊고 지내던 애자일의 정신 등 너무도 좋은 얘기들로 가득한 책이라, 감탄을 하면서 읽었다. 책에서 얘기하는 내용 중 인상적인 부분들을 정리해본다. 개발자는 단순히 경력만 많다고 해서 실력이 비례해서 높지 않다. 업무를 위해서만 개발을 하고, 따로 학습하거나 연습하지 않는 것은 야구선수가 경기중에만 야구를 하고, 따로 연습하지 않는 것과 같다. 꾸준한 훈련/연습을 통해야지만 경기에서 제대로 실력을 발휘할 수 있다. 개발자는 업무로 개발하는 시간 외에 성장을 위해 학습하고 연습하는 시간이 꼭 필요하다. 업무에서는 짧은 주기로 피드백을 얻으면서 교정을 하여야 발전할 수 있다. ..

책 이야기 2022.04.16

템플릿 메소드 패턴

공통적으로 적용되는 클래스의 사용방법을 템플릿화해서 추상클래스(abstract class)를 이용해서 정해둔다. 이때, 사용방법(메소드들 사용 순서 등)은 final 메소드로 만들어서 자식 클래스에서 override해서 엉뚱하게 사용하는 것을 방지한다. 템플릿 메소드 패턴은 알고리즘의 골격을 정의한다. 알고리즘의 일부 단계를 자식클래스에서 구현할 수 있으며, 알고리즘의 구조는 그대로 유지하면서 특정 단계만 자식 클래스에서 재정의해서 사용 위와 같이 추상 클래스에서 run() 메소드를 final로 만들어서 사용방법을 알려주고, 개별 메소드나 추사 메소드는 자식 클래스에서 정의하여 사용.

디자인패턴 2022.04.16

클린코드 1장 - 깨끗한 코드

코드가 존재하리라 혹자는 코드를 자동으로 생성하는 시대가 올 거라는 말과 함께, 모델이나 요구사항에 집중해야 한다고 얘기한다. 프로그래밍 언어의 추상화 수준은 점차 높아지겠지만, 요구사항을 상세하게 명시하여 기계가 이해하고 실행할 정도로 정확하고 상세하게 정형화하는 코드는 없어질 수 없다. 모호한 요구사항에서 정형화된 표현과 제대로 명시된 요구사항을 뽑아내는 것은 개발자의 역할이다. 나쁜 코드 나쁜 코드는 개발 속도를 크게 떨어뜨린다. 코드를 고칠 때마다 엉뚱한 곳에서 문제가 생기기 때문이다. 팀의 생산성은 계속해서 떨어진다. 이에 새로운 인력을 추가로 투입하지만, 새 인력은 나쁜 코드를 더 양산하며 결국 생산성은 거의 0이 된다. 이에 대해, 새로 차세대 프로젝트를 시작하지만, 기존 시스템에서 계속해서..

redis 고가용성을 위한 백업

redis의 디스크 고가용성 구성(백업)은 AOF(Append Only File)과 RDB(Snapshot) 방식이 있다. AOF방식은 명령이 실행될 때마다 text 파일에 추가하는 방식이며, RDB방식은 특정간격마다 메모리 내용을 스냅샷 형태로 디스크에 바이너리로 전체로 남긴다. 업계에서는 AOF가 예기치 않은 종료시 손실이 적고 실시간 성능에 영향이 적어서 많이 사용한다. ■ RDB 직접적인 저장명령(SAVE, BGSAVE)이 있거나 자동(conf파일에 save) 설정에 따라 저장한다. reds.conf에 save 설정을 넣어두면 일정 조건시 RDB파일을 저장하면서 지연의 사유가 된다. SAVE로 저장하면 main process가 저장하여 저장중에 변경이 안되고, BGSAVE는 별도 process를 ..

redis 2022.04.13

redis 설정

redis.conf 설정 사항사항이다. 디폴트 설정에서 변경을 검토해야 하는 설정을 파란색으로 표기 - NETWORK설정 bind 0.0.0.0 ( redis의 외부 오픈 설정, 외부접속 허용) protected-mode no (보안 설정 모드) port 6379 (수신할 포트) - GENERAL 설정 pidfile /var/run/redis/redis-server.pid ( pid 파일 위치) loglevel notice logfile /var/log/redis/redis-server.log databases 16 # 기본적으로 16개의 데이터베이스를 갖는다. select 4 와 같이 데이터베이스를 바꿀 수 있다. - SNAPSHOTTING 설정 save 해당 시간안에 변경이 있으면 데이터 전체 rdb..

redis 2022.04.13

클린코드 목차

클린코드의 정의 1장. 깨끗한 코드 좁은 범위의 클린코드 2장 - 의미있는 이름 3장 - 함수 4장 - 주석 5장 - 형식 맞추기 넓은 범위의 클린코드 6장 - 객체와 자료구조 7장 - 오류처리 8장 - 경계 9장 - 단위테스트 10장 - 클래스 더 넓은 범위의 클린코드 11장 - 시스템 12장 - 창발성 13장 - 동시성 14장 - 점진적인 개선 추가적인 클린코드 15장 - JUnit 들여다보기 16장 - SerialDate 리팩토링 17장 - 냄새와 휴리스틱

자바의 정석1

정리차원에서 훓어보면서 기억할 만한 부분만 남겨봅니다. Chapter 1. 자바언어의 특징 : 운영체제에 독립적, 자동 메모리 관리, 멀티쓰레드 지원, 동적 로딩 Chapter 6. 객체 지향 프로그래밍1 - 메서드 호출시 매개변수가 기본형일 경우 복사해서 넘겨지고, 클래스이면 주소값이 넘겨진다. - static 메서드에서는 일반 인스턴스 메서드나 변수를 사용할 수 없다. - 기본 생성자는 클래스에 정의된 생성자가 하나도 없을때 컴파일러가 만들어 준다. Chapter 7. 객체 지향 프로그래밍2 - 상속관련하여, 생성자와 초기화블럭은 상속되지 않는다. 멤버만 상속된다. - 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받는다. - 부모 클래스와 같은 이름의 sta..

자바 2022.04.11

자바 코딩의 기술 - 9장 ( 실전 준비 )

코드의 첫 90%에 개발 시간의 첫 90%가 쓰인다. 코드의 나머지 10%에 개발 시간의 마지막 90%가 쓰인다. - 톰 카길 9-1 정적 코드 분석 도구 - SpotBugs( https://spotbugs.github.io/) 자바에서 가장 오래된 정적 코드 분석도구이다. - Checkstyle(https://checkstyle.sourceforge.io/), PMD(https://pmd.github.io/) 도 유명하나, 다소 장황하고 특정 코드 방식을 고집하는 등 선호도를 탄다. - Error Prone(https://errorprone.info/) 은 ConcurrentHashMap 내 버그를 감지하면서 유명해 졌는데, 구글이 자체 개발했다. - Code Inspection( https://www..

자바 코딩의 기술 - 8장 ( 데이터 흐름 )

객체 지향 프로그래밍은 동작부를 캡슐화해 코드를 이해하기 쉽게 만든다. 함수형 프로그래밍은 동작부를 최소화해 코드를 이해하기 쉽게 만든다. - 마이클 페더스 8-1. 익명 클래스 대신 람다 사용하기 Map values = new HashMap(); Double square(Double x) { Function squareFunction = new Function() { @Override public Double apply(Double value) { return value * value; } }; return values.computeIfAbsent(x, squareFunction); } 위와 같이 익명클래스(squareFuction)을 만드는 것보다 람다 표현식이 낫다 Map values = new H..

자바 코딩의 기술 - 7장 ( 객체 디자인 )

컴퓨터 과학의 모든 문제는 또 다른 간접 게층을 추가해 풀 수 있다. 하지만 대부분 또 다른 문제를 양산한다. - 데이비드 휠러 7-1. boolean 매개변수로 메서드 분할 void log(String message, boolean classified) throws IOException { if (classified) { writeMessage(message, CAPTAIN_LOG); } else { writeMessage(message, CREW_LOG); } } 위는 기장(Captain)과 승무원(Crew)로그 처리 부분과 같이 서로 연관 없는 부분을 메서드를 각각 분리하는게 좋다. void writeToCaptainLog(String message) throws IOException { write..

반응형