설명

깊이와 편의성애 따라 달라진다.

  • 중학생에게 설명 할 수 있을 정도로

지속성

  • 안됐으면 더 쉬운걸로, 성취감
  • 확률을 높여라

테스트 & 리팩토링 & 연습

  • 모든값을 전부 테스트 할 수 없다. 경계값 테스트
  • 테스트 하기 힘들다는 것은 너무 많은 일을 하는 것이다.
  • private을 public으로 바꿔야 할지 의심될때 객체로 만들 후보가 될 수 있음
  • 생성자 여러개일 경우 생성자 안에서 생성자 호출(파라미터 제일 많은거 기준으로)
  • 한번에 하나만 고민할 수 있게 다형성 사용
  • 객체 추출 연습, if문 제거 연습
  • 하나의 프로그램 반복 일정 기간마다 연습
  • 일단 아웃 - 인 방식
  • 인 - 아웃.. 으로 하려면 설계가 잘 되어야, 이미 지식이 있는 경우

빌드? 배포?

  • 빌드 : 배포 가능한 파일 형태로 만드는 것
  • 배포 : 사용자가 사용 가능한 상태로 만드는 것

정적분석? 프로파일링?

  • 정적분석 : 실행 전 예측
  • 프로파일링 : 실행 후 실행결과 분석

스키마

데이터베이스의 구조와 제약조건에 관한 전반적인 명세를 기술한 메타 데이터의 집합. 데이터들이 갖고 있는 관계를 정리하는 설계도

CAP

  • Consistency(일관성), Availability(가용성, 연중무휴), Partition Tolerence(내성, 서버 한대가 망가져도 돌아가야 한다, 최소3대)
  • ACID - Atomicity, Consistency, Isolation, Durability
  • Transaction - All or Nothing, commit 되지 않으면 rollback

AOP

  • @Transactional
  • 인프라 로직 중복 제거(서블릿 필터, 컨트롤 인터셉터도 해당)
  • target : 부가 기능을 부여할 대상
  • advice : target에 제공할 부가 기능을 담은 클래스
  • pointcut : advice가 적용될 target을 지정하는 것을 의미
  • joinpoint : advice가 적용될 수 있는 위치. 예를 들어 method의 실행 단계

DB

  • 쿼리가 원하는 성능이 안나오면 튜닝
  • explain 명령으로 원인 분석
  • dependant subquery, derived 와 같이 타입이 안나오게
  • 되도록 all 나오지 않도록

효과적으로 TDD, 리팩토링, OOP를 연습하는 방법은?
강의를 하다 보면 개발자들에게 듣는 질문 중의 하나는 “테스트 주도 개발(Test Driven Development, 이하 TDD), 리팩토링(Refactoring), 객체 지향 프로그래밍(Object Oriented Programming, 이하 OOP)을 연습하기 좋은 방법은 무엇인가요?”라는 질문을 종종 듣는다. 상당 수의 프로그래머는 프로그래밍을…

객체지향 생활 체조 원칙

  • 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기만 한다.
  • 규칙 2: else 예약어를 쓰지 않는다.
  • 규칙 3: 모든 원시값과 문자열을 포장한다.
  • 규칙 4: 한 줄에 점을 하나만 찍는다.
  • 규칙 5: 줄여쓰지 않는다(축약 금지).
  • 규칙 6: 모든 엔티티를 작게 유지한다.
  • 규칙 7: 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다.
  • 규칙 8: 일급 콜렉션을 쓴다.
  • 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다.

객체지향 모델링

OKKY | 초보 개발자에게 권장하는 객체지향 모델링 공부 방법
원래 다른 글타래 의 답글로 적던 내용인데 다른 분들에게도 혹시 도움이 될까 싶어서 별도 글타래로 옮깁니다. 따라서 다소 맥락이 어색한 부분이 있는 점 양해부탁 드립니다. 아마도 객체지향 모델링 이라는 표현을 자주 들어보셨을 것입니다. 여기서 이야기하는 모델링(modelling) 은 흔히 말하는 3D 모델링 이나 프라모델 같은 단어에서
중요한 것은, 여기까지 오면서 실제 인터페이스의 구현에 대해서는 신경을 쓰지 않았다는 것입니다. 좋은 객체지향 설계에서는 구현이 없어도 각 유형의 공용 API만 보아도 어떻게 서로 연관지어서 구동되는 지 이해할 수 있어야 합니다.
구현을 채워 넣는 것은 이런식으로 추상적인 개념 수준에서 전체적으로 돌아가는 모양의 윤곽이 잡혔을 때 단위 테스트를 작성해가면서 채워 넣어도 늦지 않습니다.

bash build 스크립트 예시

#! /bin/bash
echo "Java QnA Build Script"
cd java-qna
git fetch
local=`git rev-parse HEAD`
origin=`git rev-parse origin/~`

if [[ $local == $origin ]]; then
       echo "NO need to build"
       echo "Good bye"
       exit 0
fi

echo "local: $local"
echo "origin: $origin"
echo "Build start"

git merge origin/honux
rm -rf target
./mvnw clean package
target_pid=`pgrep -f java-qna`
echo "$target_pid shall die..."
kill -9 $target_pid
java -jar target/java-qna-1.0.0.jar &

Status Code

1xx : 정보를 제공함

2xx : 요청이 성공적으로 이뤄짐

3xx : 요청한 해당 자원이 다른 곳에 있음

4xx : 요청(클라이언트)에 문제가 있음

5xx : 서버에 에러가 있음

출처 : http://egloos.zum.com/blackbag/v/4166033

sync와 async, blocking과 non-blocking 차이점

https://www.slipp.net/questions/367#answer-1429
https://www.slideshare.net/unitimes/sync-asyncblockingnonblockingio

Blocking-NonBlocking-Synchronous-Asynchronous
꽤 자주 접하는 용어다. 특히나 요즘들어 더 자주 접하게 되는데, 얼추 알고는 있고 알고 있는게 틀린 것도 아니지만, 막상 명확하게 구분해서 설명하라면 또 만만치가 않은.. 그래서 찾아보면 또 대충 뭔 소린지 알아들을 것 같다가도, 구분해서 설명하라면 머뭇거리게 되긴 마찬가지다. 자료마다 미세하나마 조금씩 차이가 있는 것들도 많아서, 정확하고 유일한 구분법
Blocking/NonBlocking은 호출되는 함수가 바로 리턴하느냐 마느냐가 관심사

바로 리턴하지 않으면 Blocking
바로 리턴하면 NonBlocking
Synchronous/Asynchronous는 호출되는 함수의 작업 완료 여부를 누가 신경쓰냐가 관심사

호출되는 함수의 작업 완료를 호출한 함수가 신경쓰면 Synchronous
호출되는 함수의 작업 완료를 호출된 함수가 신경쓰면 Asynchronous