-
새로운 프로젝트를 접하며개발/개발노트 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에 대..
-
spring transaction개발/Spring 2021. 4. 6. 21:48
출처 deveric.tistory.com/86 https://goddaehee.tistory.com/167 글 작성 동기 : 스프링 트랜잭션에 대해 알아보고자 다수의 트랜잭션이 경쟁시 발생할 수 있는 문제 다수의 트랜잭션이 동시에 실행되는 상황에선 트랜잭션 처리방식을 좀 더 고려해야 한다. 예를들어 특정 트랜잭션이 처리중이고 아직 커밋되지 않았는데 다른 트랜잭션이 그 레코드에 접근한 경우 다음과 같은 문제가 발생할 수 있다. ▶ Problem1 - Dirty Read - 트랜잭션 A가 어떤 값을 1에서 2로 변경하고 아직 커밋하지 않은 상황에서 트랜잭션B가 같은 값을 읽는 경우 트랜잭션 B는 2가 조회 된다. - 트랜잭션 B가 2를 조회 한 후 혹시 A가 롤백된면 결국 트랜잭션B는 잘못된 값을 읽게 된 ..
-
junit5 에러 테스트개발/Spring 2021. 3. 21. 13:28
예외를 기대하고 테스트를 할 때가 있다. 이런경우 예제를 찾아보니 1. @Test(expected = IllegalArgumentException.class) @Test(expected = IllegalArgumentException.class) 와 같이 어노테이션을 통해 간단히 테스트를 할 수 있었지만, junit5 환경으로 작업해보면서 되지 않았다. 2. 두번째로는 try catch를 사용하여 테스트를 할 수 있었다. try { userRepository.findByIdAndIsDeleted(1l, false).orElseThrow(()-> new IllegalArgumentException("없는 사용자 id 입니다.")); }catch (IllegalArgumentException e){ Syst..
-
JVM(Java Virtual Machine) 구조개발/JAVA 2021. 3. 19. 23:09
학습을 기록하기 위한 글로 아래 블로그를 통해 학습 하였습니다. jeong-pro.tistory.com/148 출처: https://jeong-pro.tistory.com/148 [기본기를 쌓는 정아마추어 코딩블로그] JVM 구조와 자바 런타임 메모리 구조 (자바 애플리케이션이 실행될 때 JVM에서 일어나는 일, 과정 JVM(Java Virtual Machine) : 자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체다. CPU나 운영체제(플랫폼)의 종류와 무관하게 실행이 가능하다. 즉, 운영체제 위에서 동작하는 프로세스로 자 jeong-pro.tistory.com JVM - Class Loader, Execution Engine, Garbage Collector, Runtime Data Are..
-
Garbage collection -가비지 컬렉션개발/JAVA 2021. 3. 19. 22:55
가비지 컬렉션을 학습을 기록하기 위에 쓰는 글이며, 다른 분들이 잘 정리한 글들을 적은 것이며 참조한 글들은 아래와 같습니다. yaboong.github.io/java/2018/06/09/java-garbage-collection/ d2.naver.com/helloworld/1329 www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 다른 블로그들을 참고하여 잡힌 개념 : JVM의 Runtime Data Area 에서 참조를 잃은 Heap 메모리 데이터를 삭제 하는게 garbage collector의 역할. garbage collection이 일어나는 동안에는 수행하는 쓰레드를 제외한 모든 쓰레드가 일시정지된다(stop-the-..
-
Collection과 Map개발/JAVA 2021. 3. 19. 14:30
Collection 인터페이스는 List, Set, Queue로 크게 3가지 상위 인터페이스로 분류 된다. 종류와 특징은 다음과 같다. 인터페이스 인터페이스 특징 구현클래스 특징 Collection Set 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다. HashSet - 가장빠른 임의 접근 속도 - 순서를 예측할 수 없음 TreeSet - 정렬방법을 지정할 수 있음 List 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. LinkedList - 양방향 포인터 구조로 데이터의 삽입, 삭제가 빈번할 경우 데이터의 위치정보만 수정하면 되기에 유용 - 스택, 큐, 양방향 큐 등을 만들기 위한 용도로 쓰임 Vector - 과거에 대용량 처리를 위해 사용했으며, 내부에서 자동으로 ..
-
array형 json string값을 object로 변환할때 ( json string array to object)개발/JAVA 2021. 3. 17. 16:11
{"id" : "아이디", "name" : "이름"} 과 같이 json 형태의 string을 object로 변환하는 것은 obejct mapper로 간단하게 변환할 수 있다. String userStr = "{"id" : "아이디", "name" : "이름"}"; ObjectMapper objectMapper = new ObejctMapper(); User user = objectMapper.readValue(userStr, User.class); 하지만 [ {"id" : "아이디", "name" : "이름"}, {"id" : "아이디", "name" : "이름"}] 와 같이 array인 형태는 어떻게 해야할까? list형태로 생각되어 List로 변환하려 하였으나 잘 되지 않았다. -> List가 아닌 ..