System.out.println 메소드는 현업에서 절대 쓰지 말아야 하는 이유
·
Java
자바를 처음 배울 시 가장 많이 사용했던 메소드 System.out.println()은 현업에서 사용하지 않는다. 그 이유를 정리해보자. 1. 로그 저장 불가 System.out.println() 은 로그가 표준 출력으로 출력된다. 즉, 파일로 저장되지 않고 휘발된다는 의미이다. 현업에서는 로그를 서버에 모으거나 파일로 저장하는 방법으로 문제가 발생했을 시 열어봐서 확인하는 용도로 사용한다. 표준 출력으로 한번 출력되고 어디에도 저장되지 않으면 로그의 제 역할을 할 수 없다. 로그된 데이터는 실제로 기록되어야 한다. 하지만 System.out.println() 만으로는 불가능하다. @slf4 log메소드를 사용하자. 2. 동기화 문제 System.out.println() 메소드 내부를 살펴보면 new L..
스레드 풀 , DB커넥션 풀
·
카테고리 없음
스레드풀이란?? 1. 작업처리에 사용되는 스레드를 제한된 개수만큼 정한다. 2. 작업큐 (Queue)에 들어오는 작업들을 하나씩 스레드가 맡아 처리한다. 그렇게 하면 작업처리 요청이 폭증되어도 스레드의 전체개수가 늘어나지 않으므로 (제한해서 하나씩 처리하기 때문) 시스템 성능이 급격히 저하되지 않는다. 3. 작업 처리가 끝난 스레드는 다시 작업 큐에서 새로운 작업을 가져와 처리한다. 사용이유 - 병렬 작업 처리가 많아지면 스레드생성으로 메모리 사용량이 늘어져 성능저하로 이어진다. 스레드의 폭증을 막으려면 스레드 풀을 사용해야 한다. 따라서 작업 처리 요청이 폭증해도 작업 큐라는 곳에 작업이 대기하다가 여유가 있는 스레드가 그것을 처리하므로 스레드의 전체 개수는 일정하며 애플리케이션의 성능도 저하되지 않는..
equals와 hashCode
·
Java
equals() - 동일성 equals는 객체 주소값을 비교한다. 이것을 동일성이라고 한다. 재정의 되지않은 상태에서는 주소값으로 비교하게 된다. 결과는 false - 동등성 메모리 주소는 다르지만 값이 같은 경우 동등성이라고 한다. 이것을 비교하기 위해 재정의 한다. 두 객체를 생성하고 동일한 값을 넣어준다면 둘은 각각 다른 객체이지만 동일한 값을 가지고 있다. 즉, 동등하다. hashCode() 객체의 해시 코드를 반환한다. 객체를 식별하는 하나의 정수값이라고도 한다. 객체의 필드들을 조합하여 해시 코드 생성하게 되는데 31이 홀수이자 소수여서 곱하여 만든다. hashCode 같은경우 객체의 해시 코드를 반환하는데 equals만 재정의 할 경우 hash값을 사용하는 hashset,map등에서 동등성이..
String Builder 와 String Buffer
·
Java
String str = "hell";str += "o";str += "!"; 이렇게 구하는 경우 당연히 우리는 str이 hello! 가 됨을 알고있다.그런데 String은 final로 선언된 불변객체라고 하였다.따라서 이 경우는 실제로hell  ,  hello   , hello!    이렇게 불변의 객체가 하나씩 생기게 되며, 이 중 참조할 내용이 없는 [ hell ], [ hello ] 두 개는 가비지 컬렉션의 대상이 된다.이는 당연히 자바의 메모리에 있어 좋지 않은 영향을 끼치게 될 것이다. String 이 불변인 이유??보안여러 참조 변수가 같은 String 객체를 참조하고 있다고 하더라도 안전하다.String 객체를 누가 조작할 수가 없기 때문이다.String 객체를 이리저리 전달할 때 원본 St..
HashSet 내부 구현
·
Java
예전 국비학원 프로젝트 진행 시 랜덤추천 서비스 기능을 만든적이 있다. 그 당시 자바 스터디를 하고 있었고 컬렉션에 순서를 보장 하지 않는 Set을 구현 하면 되겠다 생각해 사용했는데 시간이 지나 HashSet은 완전한 랜덤값이 아니라는 것을 알게 된것을 정리하는 시간 HashSet의 내부를 까보면 HashMap이 있다. 또 HashSet의 add메소드를 보면 map에 key에 객체를 넣고 value에 더미값(new Object)을 넣는다. 그 후에 key값을 hash메소드에 넣는다. 그 후 key를 해쉬코드로 변환해 h 에 저장 후 리턴한다. hashCode는 각 객체를 고유한 정수의 값으로 반환 해준다. HashSet과 HashMap은 hash값을 이용해 저장하고 관리한다. 저렇게 변환되어 저장되면 ..
트랜잭션 전파
·
책/토비의 스프링
트랜잭션 정리의 시간 어떻게 동작되는걸까 트랜잭션 전파에 대해 공부를 해보자 일단 트랜잭션 전파수준에 7가지 단계가 있다. 머 이런식으로 정할 수가 있다. default는 required다. REQUIRED Default 속성 기본적으로 부모 트랜잭션이 있으면 부모 트랜잭션에 종속 부모 트랜잭션이 없을 경우에는 새로운 트랜잭션 생성 SUPPORTS 부모 트랜잭션이 있을 때만 해당 부모 트랜잭션에 종속 부모 트랜잭션이 없으면 트랜잭션이 적용되지 않는다. MANDATORY 부모 트랜잭션이 있을 때만 해당 부모 트랜잭션에 종속 부모 트랜잭션이 없으면 예외가 발생한다. REQUIRES_NEW 부모 트랜잭션을 무시하고 무조건 새로운 트랜잭션 생성 부모 트랜잭션은 현재 트랜잭션이 종료될 때 까지 대기상태로 존재 자..
트랜잭션
·
책/토비의 스프링
트랜잭션이란?트랜잭션은 데이터베이스에서 하나의 기능을 수행하기 위한 작업의 단위이다.데이터베이스에 접근 하는 방법은 쿼리이므로 여러개의 쿼리들을 하나로 묶는 단위라고 말할 수 있다. 트랜잭션의 특징으로는원자성,일관성,독립성,지속성 ACID라고 하는 4가지가 있다. [ Atomicity - 원자성 ] 작업이 모두 반영되거나 모두 반영되지 않아야 한다. all or nothing 이라는 말이 있다. [ Consistency - 일관성 ]데이터베이스의 제약이나 규칙을 만족해야 한다 [ Isolation - 독립성 ]트랜잭션을 수행 시 다른 트랜잭션이 영향을 주거나 받아서는 안된다 [ Durability - 지속성 ] 트랜잭션이 성공적으로 수행되었다면, 영원히 반영되어야 한다.   여기서 독립성이 중요한 포인트..
박우빈 - Practical Testing: 실용적인 테스트 가이드 리뷰
·
인프런 강의/Practical Testing: 실용적인 테스트 가이드
강의리뷰 박우빈 - Practical Testing: 실용적인 테스트 가이드 기존에 작성해오던 테스트 코드를 한 번 더 정리하는 시간이었다. 테스트 코드를 작성하는 방법의 큰 틀은 비슷하지만 개발자마다 조금씩은 다른 거 같다. 좋았던 점 기억에 남는 점들을 짧게 정리해 보았습니다. 테스트는 왜 작성해야 하는가? 문서화 빠른 피드백 자동화, CI에서 우리가 작성한 테스트 코드로 버그가 배포되는 것을 방지 리팩토링 시 신뢰도 일반적으로 Given-When-Then 패턴을 중심으로 작성한다. 기대 결과를 검증(Then) 부분에서 사용하는 메서드의 차이가 보였다. 기존에 사용하던 방법 기존에 사용하던 assertThat 을 사용해 검증할 경우에는 한줄에 하나값만 테스트 할수있다. 강의에서나온 방법 extract..