2021.01.22 - [프로그래밍 노트/JAVA] - [JAVA] 가비지 컬렉터(GarabageCollector,GC)GC(Garbage Collector) 란?GC는 메모리 관리 기법 중 하나로 시스템에 있는 모든 객체의 수명을 정확히는 몰라도 런타임에 대신 객체를 추적하여 쓸모없는 객체를 알아서 제거해준다. 이렇게 자동 회수한 메모리는 깨끗이 비우고 재활용할 수 있게 된다.즉, c나 c++ 처럼 개발자가 직접 메모리를 해제하는 것이 아닌 JVM 에서는 GC가 메모리를 자동 해제해 준다.프로그래머가 저수준 세부를 일일이 신경쓰지 않는 대가로 저수준 제어권을 포기한다는 사상이 바로 자바 관리 방식의 핵심이다.동적으로 할당했던 메모리 영역(Heap 영역)에서 필요 없게 된 메모리 객체(참조가 없는 객체)..
전체 글
초보 개발자의 지식 공유의 장Redis 의존성 추가spring-boot-starter-data-redis 의존성 추가implementation("org.springframework.boot:spring-boot-starter-data-redis")SpringBoot에서 외부 라이브러리 버전을 관리하기에, spring-boot-starter-data-redis 를 추가하면 해당 SpringBoot버전에서 관리하는 외부라이브러리가 자동으로 추가된다.나는 현재 SpringBoot 3.2.4 버전을 사용하여 lettuce 6.3.2.RELEASE 버전이 자동 추가된 것을 볼 수 있다.관리되는 버전은 https://docs.spring.io/spring-boot/docs/3.2.4/reference/html/dependency-version..
애플리케이션을 개발할 때 중요하지만 잘 지켜지지 않는 것이 테스트코드를 작성하는 것이다.테스트 코드를 왜 작성해야할까? 여러가지 이유가 있겠지만 결국 유지보수 비용의 절감. 즉, 개발시간의 단축이다.테스트코드가 없는 상태에서 애플리케이션의 크기가 거대해지면 기능 추가나 변경이 어려워진다. 이 상태에서 여러 개발자의 손을 타게되면 코드는 더욱더 복잡해지고 리팩토링은 커녕 자연스레 모두가 수정하기 꺼려하는 코드가 된다. (테스트 코드 부재로 여러 케이스별를 검증시에 시간이 오래걸리므로) 이렇게 코드는 방치되고 해당 기능을 수정할 때 유지보수 비용은 폭발적으로 늘어난다. 만약 테스트 코드를 작성한다면 위 상황을 모두 방지할 수 있다.자동화된 테스트? 회귀 테스트?크고 복잡한 시스템에서는 수정한 코드가 어디에 ..
프로그래밍에서 사용되는 응집도과 결합도에 대해 살펴보자참고로 좋은 아키텍처는 높은 응집도와 낮은 결합도를 추구한다.응집도관련 요소가 얼마나 한 모듈에 모여 있는가를 나타낸다.메서드, 함수 수준부터 크게는 모듈 수준에 이르기까지 모든 수준에서 응집도를 판단할 수 있다.몇 가지 기준을 대입해서 생각해보면 응집도를 판단하는데 도움이 된다.관련 코드가 한 패키지(또는 한 모듈)에 모여 있는가?관련 코드가 한 클래스에 모여 있는가?관련 코드가 한 함수에 모여 있는가?관련 코드가 한 패키지에 모여 있는가?카드가 등록되고 등록 결과를 SMS에 전송하는 기능이 필요하다고 하자.만약 카드가 등록되고 SMS 전송이 필요하니 SMS 전송기능이 card 패키지안에 있다면 응집도가 낮다고 볼 수 있다.통지 전송 관련 기능이 c..
swagger를 사용하면 api 문서 관리 및 협업에 유용하다.코드와 문서가 분리되어 있으면, 문서 업데이트가 누락될 가능성이 있다. (최신화 x)기존 프로젝트에 적용되어있는 springfox swagger를 사용하려 했더니 spring-boot 3.x 버전에서 지원을 하지 않는다고 한다. (springfox는 2018년 6월 기준으로 업데이트가 중단됨)springdoc는 v2 부터 spring-boot 3.x를 지원하니 해당 lib를 이용하면 되겠다. 워낙 문서가 잘되어 있어서 문서만 보고 적용이 가능하다. 자주 사용될만한 설정만 적어 놓자https://springdoc.org/#Introduction하나의 SpringBoot 어플리케이션에서 여러개의 OpenAPI 를 정의할 수 있다.외부에 제공하는 ..
Fixture Monkey?The easiest way to generate controllable arbitray test objects테스트를 수행할 때 필드가 많은 객체 생성이 필요할때가 있다.Fixture Monkey를 사용하면 테스트 케이스에 맞는 필드값만 설정하고 나머지 필드는 임의의 값으로 생성되게하여 객체를 손쉽게 생성할 수 있다.FixtureMonkey 생성val fixtureMonkey = FixtureMonkey .plugin(KotlinPlugin()) .build()// fixtureMonkey로 객체를 생성하게 되면 필드 타입에 맞는 임의의값이 생성되는데// 특정 필드 타입의 제약조건을 전역적으로 생성하고 싶다면, 아래와 같이 Cusomization Options 를 설정할 ..
개요Gradle Moulti Module 로 구성된 프로젝트에서 PR 요청시 모든 프로젝트의 test를 돌리는 job이 등록되어 있었는데 test 완료 시간도 오래걸릴 뿐더러 수정사항이 없는 모듈의 테스트도 돌아가는 것이 맘에들지 않아 개선 해보고자 한다.방법1. matrix로 모듈들을 정의matrix로 multi module 프로젝트 이름을 정의하고 병렬적으로 실행시키는 방법이다.matrix에 정의된 module 의 숫자만큼 runner에서 병렬 실행name: PR Test & Analysison: pull_request: types: [ opened, reopened, synchronize ] branches: - master - devconcurrency: group..
스레드와 코루틴 스레드 Thread 클래스의 인스턴스는 프로그램이 실행될 때 운영체제의 네이티브 스레드를 나타낸다. 스레드(Thread)의 각 인스턴스는 해당 스택에 대한 메모리를 사용하고 초기화하기 위한 시간이 필요하다. 스레드의 컨텍스트 전환은 꽤 비싼 작업이기 때문에 별도의 스레드에서 짧은 작업을 호출하는 것은 좋은 결과를 가져오기 어렵다. 코루틴 (CoRoutine) 코루틴은 힙 메모리의 객체를 의미하며 코루틴 간의 전환은 운영체제 커널 작업이 아니다. 코루틴은 프로세스에 할당된 힙 메모리 영역을 공유해서 사용한다. 즉, 스레드에 비해 빠르고 적은 비용으로 생성할 수 있으며 자원도 적게 사용된다. 간단 사용법 코루틴은 CoroutineContext 인터페이스로 표시되는 컨텍스트에서 실행된다. El..
부정사(不定詞) : 품사가 정해져 있지 않음 부정사는 동사 본래의 성질을 가지고 있으므로 목적어, 보어 등을 취할 수 있으며, 문장 안에서 명사, 형용사, 부사의 역할을 한다. to + 동사원형 형태의 to 부정사 to를 사용하지 않은 원형부정사 부정사의 명사적 용법 부정사가 문장 안에서 주어, (타동사, 전치사의) 목적어, 보어, 동격의 자리에 위치하여 명사 역할을 하는 것을 말한다. 1. 주어 자리 자신을 안다는 것은 어렵다. To know oneself is difficult. It(가주어) is difficult to know oneself. 사전을 사용하는 것은 필요하다. To use the dictionary is necessary. It(가주어) is necessary to use the d..
1형식 문장(S + V) - 완전 자동사 완전 자동사 : 목적어나 보어가 필요없이 주어에 대한 설명이 가능한 동사 Fire burns. The brid sings sweetly. The earth moves round the snu. There is a beautiful river in that village There + be + 주어 형태는 '~이 있다' 의 뜻을 나태내며 1형식 문장에 속한다. There은 형식상의 주어로 문장을 인도하는 유도부사이며, 진짜 주어는 be동사 다음에 오는 명사 이다. There are many people in front of therailorad station. 2형식 문장(S + V + C) - 불완전자동사 불완전 자동사 : 동사만으로 주어에 대한 설명이 불가능하므..