1. 스트랭글러(교살자) 패턴 - 마틴 파울러 마틴 파울러가 호주 여행을 하면서 상위 나무 가지에서 자라기 시작해서 땅에 뿌리를 내릴때 까지 아래로 자라는 위 나무를 보고 중요한 시스템를 다시 작성하는 방법에 대한 비유를 든다. 중요한 시스템을 다시 작성하는 것은, '새로운 것을 다시 만들면 되는것 아닌가?' 하고 쉽게 생각 할 수 있지만, 생각보다 훨씬 복잡하고 위험성이 있다. 마감일은 다가오고, 압력은 더 심해진다. 하지만 새로운 기능은 추가되는 것들이 있고, 기존 기능은 정상적으로 동작되어야한다. 이전 버그 또한 다시 작성된 시스템에 추가되기도 한다. 새로 작성하는 대신, 대안의 방법은 점진적으로 새로운 시스템을 기존의 가장자리로 부터 생성해 나가는 것이다. 기존 시스템이 교살될 때까지 (죽을때 까..
1. 점근적 분석(Asymtotic Analysis) 이란 임의의 함수가 N -> ∞ 일때, 어떤 함수 형태에 근접해지는지 분석하는 방법이다. 예를들어 f(n) = n2 + 3n 일때, n이 매우 커진다면, 3n은 n2에 비해서 중요도가 떨어진다. n이 매우 커진다면, "f(n) is asymptotic to n2" 라고 할 수 있다. 이 접근적 분석때문에 시간 복잡도 계산시 최고차항을 제외한 모든 항과 최고차항의 계수를 무시하는 것이다. 2. 점근 표기법(Asymtotic Notation) 점근 표기법에는 세 가지 표기법이 있다. (1) Big- omega (Ω): lower bound. 점근적 하한 (2) Big-O (O): upper bound. 점근적 상한 (3) Big-theta (Θ): tig..
1. DDL (Data Definition Language) - 데이터 정의어 : 데이터를 수정 / 삭제 등 데이터 전체 골격을 결정하는 역할의 언어를 말한다. - Conceptual Schema - CREATE, ALTER, DROP, TRUNCATE 2. DML (Data Manipulation Langage) - 데이터 조작어 : Table의 행과 열을 조작하는 언어. - SELECT, INSERT, UPDATE, DELETE 3. DCL (Data Control Language) - 데이터 제어어 : 데이터베이스에 접근하거나 객체에 권한을 주는 등의 역할을 하는 언어 - GRANT, REVOKE, COMMIT, ROLLBACK
JDK 1.7 버전 부터 추가된 try-with-resources. 이런게 있다 정도만 알았고, 언제 사용하는지 정확히 몰랐다. 1. try-with-resources가 생겨난 배경 public static void main(String[] args) { DataInputStream dataInputStream = null; FileInputStream fileInputStream; try { fileInputStream = new FileInputStream("score.dat"); dataInputStream = new DataInputStream(fileInputStream); } catch (FileNotFoundException e) { e.printStackTrace(); } finally {..
git stash는 커밋 되지 않은 작업들과 파일들을 local stash에 저장하고 브랜치에서 수행한 마지막 commit으로 돌아가는 것이다. 이렇게 stashing을 통해서, 다른 곳으로 주의를 돌리고, 끝내지 않은 코드를 나중에 다시 진행할 수 있다. 개발자가 특정 파일을 stashing 하는 것은 작업해야 하는 파일과 커밋 준비된 파일을 구분하고 선택할 수 있도록 하기 때문에 유용하다. 1. stash 사용하기 git stash 명령어는 현재 working directory에 있는 모든 tracked file들을 stash 한다. git stash 2. 특정 파일을 stash 하는 방법 특정 파일을 stash하는 방법은 추가적인 push option과 함께 파일 명(경로) 가 필요하다. git s..
스프링에서 데이터베이스를 학습하던 도중, WAS나 DB 접근 툴 같은 클라이언트를 사용해 DB서버에 접근 할 수 있다는 것을 학습했다. 이때, 클라이언트는 DB 서버에 연결을 네트워크 요청을 하여 TCP/IP 커넥션을 맺는다. 이때, DB 서버는 내부에 session이라는 것을 만드는데, 그리고 앞으로 커넥션을 통한 모든 요청은 이 session을 통해서 실행하게 된다고 하는데, session이 뭔지, 그리고 DB 내부에서도 요청을 thread per request로 처리하는지 궁금했다. 사실 MySQL의 SQL을 학습할 때에, 변수에 있어서 global variable, session variable이 있는것을 알았는데, session이 정확하게 뭔지 몰랐다. 1. MySQL에서의 Thread MySQ..
자바를 처음 접한지는 몇년이 되었지만... 그리고 예외에 대해서 학습할 때부터 예외의 종류를 대충 알고있었지만, 자바를 사용하니 왜 예외의 종류를 아는 것이 중요한지 느꼈다. 예를 들어 Thread.sleep() 메서드의 경우 InterruptedException을 발생하고, try catch를 통해서 해결하거나 메서드에서 throw 하는 방식을 취해야하는데, 이것은 강제된다. 반면에, 0으로 나누거나, IndexOutOfBoundsException 같은 경우는 try catch로 처리해 주지 않아도 된다. 왜 그럴까? 1. Checked Exception Checked Exception은 컴파일타임에 확인되는 예외들이다. 만약 메서드 내에서의 코드 일부분이 checked exception을 throw한..
1. Spring MVC - Thread per request model로 구현되어 있다. - 보통 tomcat 서버는 디폴트로 200개의 thread를 가진 thread pool을 지원한다. 분산시스템에서 API 서버가 아닌, 다른 API 서버의 REST API를 호출해 데이터를 통합하는 경우가 매우 흔한데, Blocking I/O 방식으로 동작하기 때문에 시스템 부하가 높다면 context switching과 thread data loading으로 인해 overhead가 발생한다. 얼마 안되는 코어(많아봤자 8코어)에 200개의 thread가 존재하기 때문에 thread끼리의 경합이 일어나 큰 부하로 이어진다. - 리소스가 부족한 서버에서 처리할 수 있는 동시 처리량은 매우 제한적이다 (thread ..
- Total
- Today
- Yesterday