개발
-
Z GC(초안)개발/JAVA 2021. 8. 9. 01:48
자바 버전별 기능을 다시 찾아보던 중 java 10에서 병렬 처리 가비지 컬렉션 도입으로 성능 향상이라는 글을 보았다. https://www.skyer9.pe.kr/wordpress/?p=287 JAVA 버전별 특징 – 상구리의 기술 블로그 JAVA 버전별 특징 출처1 : https://thatisgood.tistory.com/entry/Java-10-버전-특징 출처2 : https://ggomi.github.io/jdk-version/ JDK 1.0 JDK1.1 1997년 JDBC, RMI, Reflection, JIT, Inner Class JDK 1.2 1998년 자바를 세가지 버전으로 나눴 www.skyer9.pe.kr 병렬처리 가비지 컬렉션 parallel GC는 이미 java 7,8에 기본으로..
-
면접 질문 답변으로 떠올리지 못했던 hash table에 대해개발/개발노트 2021. 8. 8. 02:08
최근 추천받은 책에서 안전 해시 설계에 대한 글을 보면서 전에 기술면접때 받은 한 질문이 떠올랐다. 질문은 무수히 긴 스트링 값이 있을때, 거기서 해당 단어가 있는지 없는지 확인하고자 한다면 어떻게 해야할까?였다. 분명 좋은 방법이 있을텐데 당시 난 아무런 방법을 떠올리지 못했고, 단순히 contains을 통해 포함 유무를 확인했을 것 같다고 했다. 면접이 끝날 때쯤 질문시간에서 난 해당 질문에 대해 해결 키워드를 질문을 했고, 해시 테이블을 사용해 보라는 답변을 받았다. 말을 듣고, 해시테이블에 해당 해시코드로부터 인덱스를 가져와 나눠져서 저장하는 그림이 연상되었다. 하지만 하나의 스트링을 나눠서 저장하는 로직에 대한 전처리에 대한 것은? 이런 의문은 들었지만 솔직히 해시 테이블이나 해시 맵을 떠올리지..
-
@Transactional(readOnly = true)는 필요한가?개발/Spring 2021. 8. 8. 00:03
회사에서 작업하면서 단순히 데이터 목록을 findall을 통해 조회한 값을 리턴하는 메서드에 당연하단 생각으로 @Transactional(readOnly = true) 을 주었었다. 그리고 리뷰를 하는도중 동료가 @Transactional(readOnly = true)의 역할이 무엇인지 물었었고 나는 readOnly=true인 상태이면 영속성 컨텍스트에 관리를 받지않아, 스냅샷 저장. 변경감지 수행등을 하지 않아 성능적으로 나아 이 옵션을 달았다고 답변을 했다. 그리고 이어지는 질문은 그럼 해당 옵션이 아예 없으면 되는데, 왜 필요한가였다. 떠올린 생각과 한 얘기는 1. readonly true일때는 master가 아닌 reader DB로 호출되는 장점이 있지만 현재는 개발단계로 하나의 db만 사용하고 ..
-
boolean 타입 명 앞의 is에 대해개발/JAVA 2021. 7. 11. 20:33
dto 객체에서 비어있는지 여부를 판단하기 위해 empty 라는 변수를 추가했다. 그리고 boolean형을 가져올때 isEmpty 식으로 boolean 타입을 묻곤 하기 때문에 큰 생각없이 변수 명을 isEmpty와 같이 지정하고 값을 가져올때도 isEmpty() 로 isEmpty 값을 가져 오도록 했다. 하지만 이처럼 is가 붙은 경우 isEmpty 값이 true를 주고 다시 isEmpty() 메서드를 통해 가져올 때 메서드의 내용은 public boolean isEmpty() { return isEmpty; } 로 isEmpty의 값을 그대로 리턴하지만 isEmpty 의 값을 true로 줬기 때문에 false로 리턴한다. boolean 형의 변수명의 규칙과 주의할 점을 찾아봐야 하겠다. 발견 1 Lo..
-
non clustered index 로 검색할때 order by, limit 조건에 따라 지연 현상(mysql)개발/MySQL 2021. 6. 25. 23:33
약 20만개의 데이터가 들어 있는 테이블을 날짜로 조회하려고 하니, 평소와는 다르게 지연이 생겼다. 이를 찾다, 찾다 확인해보니 해당 쿼리의 응답이 늦는 것을 확인 할 수 있었다. 1. 지연이 생기는 코드 SELECT * FROM table WHERE date BETWEEN "2021-06-24" AND "2021-06-25" ORDER BY id desc LIMIT 100; index를 걸어둔 date를 해당 구간으로 조회를 한 후 100를 id 기준 내림차순으로 정렬하는 쿼리이다. 하지만 결과가 제한된 수인 100개 이상일 때는 문제가 없지만 이 이하가 되는 경우 응답이 늦었다.(정렬기준이 오름차순도 마찬가지였다. 즉 limit 수보다 근소하게 작을때, 오름차순이든, 내림차순이든 정렬을 함께 하게되면..
-
typeOrm에서 entity 의 필드값은 왜 private가 아닐까? (캡슐화x)개발/개발노트 2021. 6. 24. 18:24
이번에 typecript + nestjs 환경으로 구성된 프로젝트를 보며 궁금한 점이 생겼다. javascript에서도 ORM 프레임 워크가 있으며 이는 jpa와 아주 유사했다. 눈에 익어 코드를 이해하는데 무리는 없었으나 큰 의문이 생겼다. 프로젝트 내 코드에서도, typeORM 공식 사이트 예제코드에서도 필드에 대한 접근제어자가 없는 것이다. 내가 알기론 javascript의 접근 제어자 default 값은 public이다. 따라서 entity의 필드값들의 타입은 public이란 것인데 높은 안정성이 필요한 개체 값이 변동 가능성이 높은 public인 것인지 의문이 든다. 많은 사람들이 변동가능성에 대해 생각을 했을 것인데 왜일까? 찾아보니 비슷한 내용이 https://stackoverflow.com..
-
새로운 프로젝트를 접하며개발/개발노트 2021. 6. 16. 10:49
nestjs에서 typescript로 개발되고 있는 프로젝트에 합류하여 작업하게 되었다. 업무 돌입에 앞서 접하며 생기는 의문점들을 적어보고 학습하면서 풀어보려고 한다. 1. 처음 nodejs로 개발한다고 들었는데 와보니 nestjs? javascript를 사용한다고 하였는데 nestjs? 차이들은? 나중에 정이한다면 분류는 어디에 해야할까? 2. typescript는 객체지향언어라고 알고 있다. 따라서 각 객체 클래스들을 정의하는데 생성자가 없다. 해당 프로젝트에서는 속성만 들어있고 로직은 서비스단에서 처리하고 있다. 이를 객체지향으로 객체클래스에서 처리하도록 할 수 없나? 해야하지 않을까? 3. object -> object 컨벌팅이 선언으로 끝난다. 아주 강력한 매퍼가 사용되고 있는 것 같은데 중간..
-
클러스터드 인덱스와 넌 클러스터드 인덱스개발/MySQL 2021. 4. 8. 22:48
참고 : https://lng1982.tistory.com/144 생각 : 클러스터드 인덱스는 테이블당 하나만 생성되며 pk가 이 클러스터드 인덱스다. 클러스터드 인덱스는 정렬되어있기 때문에 leaf level의 인덱스가 필요하지 않아서 db 용량을 덜 차지한다. 저장할때 물리적으로 정렬하여 저장한다 넌 클러스터드 인덱스는 검색 향상을 위해 사용자가 추가하는 것이 해당된다. 한 테이블당 249개까지 생성이 가능하다 넌 클러스터드 인덱스는 별도의 공간에 테이블을 생성하여 데이터를 정렬하고 leaf level의 인덱스가 필요하다 테이블 전체 데이터 집합 중에 특정 조건에 의해 데이터가 걸러지는 비율을 선택도라 하며 클러스터드 인덱스는 정려되어 있기 대문에 넌 클러스터드 인덱스보다 높다 MySQL은 PK에 대..