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 ..
1. 동기화란 [예]하나의 객체를 두개의 Thread가 접근할 때 생기는 일 귤 두박스가 있을때, 한 박스당 하나의 스레드가 담당하도록 설정하고 상한 귤을 골라 개수를 계산한다고 할때, badCounter는 두 박스가 공유함. heap 메모리 안에 badCounter 객체가 있고, cpu는 single core일때, Thread1과 Thread2에는 context switching이 일어나면서 실행이 될 것이다. t1이 담당하는 박스에 상한 귤이 2개이고, t2가 담당하는 박스에 상한 귤이 5면 state값이 7개 여야하는데, 그게 보장이 안될 수 있다. increment 메서드 안에 state++ 코드가 cpu레벨에서 어떻게 실행되는지가 중요하다. 프로그래밍언어를 cpu가 이해할 수 있는 명령어로 변환..
1. 데이터 베이스의 원칙 (1) 무결성 (Data integrity) - 데이터의 무결성은 데이터의 정확성(Accuracy), 일관성(Consistency)가 유지되는 것을 말하며, 데이터의 무결성을 유지하는 것은 DBMS의 중요한 기능이다. (2) 안정성 (Data reliability) - 데이터는 복원력이 있어야 하며(resilient), 고장이 나지 않아야 한다. - 인증/인가되지 않은 사용자로부터 데이터를 보호해야 한다. (3) 확장성 (scalability) - 데이터베이스는 확장할 수 있어야 한다. (Scale-up & Scale-out) 2. 다양한 데이터베이스 종류 데이터베이스는 일반적으로 컴퓨터 시스템에 전자 방식으로 저장된 구조화된 정보 또는 데이터의 체계적인 집합을 의미하는데, D..
자바 5 버전 부터 Varargs의 개념이 도입되었다. (아마 5부터 등장한 제네릭의 영향인것으로 개인적으로 추정한다) 따라서 여러 argument를 메서드에서 받을 수 있다. void foo(T... args); 위 코드에서 T...는 T[ ] 로 변환된다. 하지만 문제는 T의 값이 가 다른 타입의 파라미터일 경우 동작하지 않는다. new T[ ]를 사용할 수 없기 때문에 new Object[ ] 라는 것을 사용한다. 만약 내 메서드가 T... 타입의 argument를 가지고 있으면, Safe: array의 요소가 T의 인스턴스인지에 대해서만 달렸다. 사실에 내 메서드가 의존한다.If your method only depends on the fact that the elements of the arra..
자바에서 array를 list로 변환하는 방법에는 두 가지 방법이 있다. 자바에서 Array를 list로 변환하기 위해서 1. Arrays.asList(array) 방법 2. List.of(array) 방법 총 두 가지 방법이 있다. 차이점은 무엇일까? 1. 변경가능 여부 (Mutable / Immutable) Arrays.asList()로 반환된 list는 변경이 가능하다. 하지만, List.of()에서 반환된 메서드는 변경이 불가능하다. Arrays.asList 메서드를 뜯어보면 다음과 같이 List를 리턴한다. @SafeVarargs @SuppressWarnings("varargs") public static List asList(T... a) { return new ArrayList(a); } 반..
- Total
- Today
- Yesterday