전체 글(81)
-
좀비프로세스와 고아프로세스
좀비프로세스와 고아프로세스 좀비 프로세스(자식이 먼저 종료 + 부모가 wait()호출 X) 자식 프로세스가 부모프로세스보다 먼저 종료 + 부모프로세스가 아직 wait()를 호출하지 않은 자식프로세스의 상태 자식 프로세스가 종료되어도 사용하던 리소스를 운영체제에게 반환하지 못하기때문에 완전히 제거되지 못한다. 이러한 경우에 대비하여, 커널은 자식프로세스의 최소한의 정보(자식프로세스의 PID, 프로세스의 종료 상태 등)을 가지게 된다. 이후, 부모프로세스가 wait() 시스템콜을 호출하여 종료상태를 회수하게 되면, 좀비프로세스가 정상적으로 제거된다. 고아 프로세스(부모가 먼저 종료) 부모 프로세스가 자식 프로세스보다 먼저 종료하게 되면, 이때, 자식프로세스의 상태를 고아프로세스라고 한다. 자식프로세스의 부모..
2024.01.15 -
프로세스 관리
프로세스 관리 운영체제가 프로세스를 전부 생성하는 것이 아니라! 시스템이 부팅된 후 최초의 프로세스만 직접 생성하고 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제-생성하게 된다. 이때 프로세스를 생성한 프로세스를 부모프로세스, 부모프로세스에 의해 생성된 프로세스는 자식 프로세스라고 한다. 결과적으로 프로세스는 트리를 형성한다. 현실세계와 다르게 자식프로세스가 먼저 죽고, 부모프로세스는 그 이후에 죽는 구조이다. 프로세스 생성과 종료 부모프로세스는 fork() 시스템콜을 통해 자식프로세스를 생성한다. fork() 시스템 콜 : fork() 시스템 콜을 통해 생성된 자식 프로세스는 부모프로세스를 복제하기때문에 부모와 동일한 형태를 가진다. (단, PID값은 서로 다름!) 이후, 자식프로세스가 ..
2024.01.15 -
deleteAll()보다 deleteAllInBatch()가 더 권장되는 이유가 뭐야?
deleteAll vs deleteAllInBatch deleteAll() : SimpleJpaRepository()에 오버라이딩되어 있으며, MyBatis, JdbcTemplate 등 기술에 상관없이 사용가능하다. 또, deleteAll()이 실행되면, findAll()의 결과로 얻은 리스트를 순회하며, 데이터를 한개씩 삭제함. 즉, N개의 데이터가 존재하면 N개릐 DELETE쿼리가 실행된다. -> 테스트 실행시간이 오래 걸림. deleteAllInBatch() : 테이블에 있는 데이터를 전부 지우는 DELETE쿼리가 실행된다. 즉, 데이터 크기와 관계없이 한번의 쿼리로 clear가 가능함. package org.springframework.data.jpa.repository.support; @Repo..
2024.01.15 -
기본 생성자를 추가할때, AccessLevel을 PRIVATE이 아닌 PROTECTED를 하는 이유는?
@NoArgsConstructor(access = AccessLevel.PROTECTED) 기본 생성자를 추가할때, AccessLevel을 PRIVATE이 아닌 PROTECTED를 하는 이유는? @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) // 기본생성자를 생성하되, 접근수준을 protected로 하자! @Entity public class Product extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String productNumber; } @NoArgsConstructor(access = AccessLeve..
2024.01.12 -
Spring시 알아야할 기초개념
Library VS Framework - 라이브러리 - 내 코드(초록색박스)가 주체가 됨 - 프레임워크 - 내 코드가 수동적임 Spring IOC(Inversion of Control) - 객체의 생명주기를 제3자(IoC컨테이너)가 관리해줌 DI(Dependency Injection) - 컨테이너가 주입해준 객체를 사용한다. AOP(Aspect Oriented Programming) - 로깅 등 공통적으로 사용되는 기능을 분리하여 관리 참조 블로그 : https://programforlife.tistory.com/107#google_vignette ORM - 객체 지향 패러다임과 관계형 DB 패러다임의 불일치 - ORM을 사용함으로써 개발자는 비즈니스 로직에 집중할 수 있다. JPA Java진영의 ORM..
2024.01.12 -
What's BDD?
DisplayName 한 문장으로 작성 및 행위에 대한 결과까지 작성하길 권고함. 도메인용어를 사용하기 음료 1개 추가 테스트 음료 1개를 추가하면 주문 목록에 담긴다. (권장) 특정 시간 이전에 주문을 생성하면 실패한다. 영업 시작 시간 이전에는 주문을 생성할 수 없다. (권장) BDD (Behavior Driven Development) given : 시나리오 진행에 필요한 모든 준비과정 (값, 객체 등) when : 시나리오 행동 진행 then : 시나리오 진행에 대한 결과 검증
2024.01.12