마운트란, 파일 시스템을 사용하기 위해 디스크나 외부 저장장치를 특정 디렉토리에 연결하는 것을 말한다.
이를 통해 해당 디렉토리를 통해 저장 장치에 접근할 수 있다.
마운트할 때는 디스크를 마운트하는 것이 아니라, 파일 시스템을 마운트한다.(디스크에하는 줄)
파일 시스템은 여러 가지 타입이 있을 수 있으며,
이러한 파일 시스템들은 각각의 파일과 디렉토리를 어떻게 저장할지 결정한다.
마운트할 때는 해당 파일 시스템의 타입을 명시하고, 파일 시스템을 마운트할 마운트 포인트(디렉토리)를 지정한다.
윈도우 : 자동 인식
윈도우에서는 새로운 저장 장치(USB 포함)를 연결하면 자동으로 해당 드라이브에 대한 마운트가 수행
해당 드라이브의 파일 및 디렉토리에 쉽게 접근가능해짐
리눅스 : 수동 설정 필요
아래는 chat gpt와 나눈 대화이다. (각 각 리눅스와 윈도우)
Q. 만약에 내가 리눅스 서버에 새로 ssd를 추가했어. 그럼 처음부터 끝까지 어떤 과정을 거쳐야 사용할 수 있는지 자세하게 설명좀
A. 새로운 SSD를 추가해서 사용하려면 다음과 같은 과정이 필요합니다.
파티션 생성: 새로운 SSD를 사용하기 위해서는 먼저 파티션을 생성해야 합니다. 이 단계에서는 새로운 SSD에 대한 파티션을 생성하는 작업을 수행합니다. 파티션은 디스크의 논리적인 구획으로서, 디스크를 여러 개의 영역으로 나누어서 사용할 수 있도록 합니다.
파일 시스템 생성: 파티션을 생성한 후에는 해당 파티션에 파일 시스템을 생성해야 합니다. 파일 시스템은 운영체제에서 파일을 저장하고 관리하기 위한 방식을 의미합니다. 이 단계에서는 새로운 파티션에 대해 파일 시스템을 생성합니다.
마운트: 파일 시스템을 생성한 후에는 해당 파일 시스템을 마운트해야 합니다. 마운트는 파일 시스템을 운영체제의 디렉토리 구조에 연결하는 작업을 의미합니다. 이 단계에서는 생성된 파일 시스템을 운영체제의 디렉토리 구조에 연결하고, 해당 디렉토리를 통해 새로운 SSD에 접근할 수 있도록 설정합니다.
부팅 시 자동 마운트 설정: 위의 과정을 모두 마쳤다면 새로운 SSD를 사용할 수 있습니다. 그러나 매번 시스템을 부팅할 때마다 해당 SSD를 수동으로 마운트해야 한다면 번거로울 것입니다. 따라서, 부팅 시 자동으로 마운트 설정을 해주는 것이 좋습니다. 이를 위해서는 /etc/fstab 파일을 수정하여 자동 마운트 설정을 추가해주면 됩니다.
위의 과정을 통해, 새로운 SSD를 사용할 수 있게 됩니다.
Q. 그럼 윈도우는 디스크를 추가하면 어떻게 파일시스템을 생성해?
A. 윈도우에서 디스크를 추가하면, 해당 디스크에 파일 시스템을 생성하기 위해 다음과 같은 과정을 거칩니다.
디스크 관리 유틸리티 실행: 윈도우 운영체제에서는 "디스크 관리"라는 유틸리티를 이용하여 새로운 디스크를 사용할 수 있도록 준비합니다. 이 유틸리티는 "관리 도구" 폴더 안에 있습니다.
디스크 초기화: 디스크 관리 유틸리티에서 새로 추가한 디스크를 선택하고, 초기화 작업을 수행합니다. 초기화 작업은 디스크에 대한 파티션 정보를 생성하고, 파일 시스템을 준비합니다.
파티션 생성: 디스크를 초기화한 후, "새로운 단위 생성" 기능을 사용하여 디스크에 파티션을 생성합니다. 이 과정에서 파티션의 크기와 유형을 선택합니다.
파일 시스템 생성: 파티션을 생성한 후, 해당 파티션에 파일 시스템을 생성합니다. 이 때 NTFS 또는 FAT32와 같은 파일 시스템을 선택할 수 있습니다.
드라이브 문자 할당: 파일 시스템을 생성한 후, 해당 파티션에 할당된 드라이브 문자를 지정합니다. 이 때, 사용자가 지정한 드라이브 문자를 사용하거나, 시스템에서 자동으로 드라이브 문자를 할당할 수 있습니다.
마운트: 마지막으로, 윈도우 운영체제에서 해당 파티션을 마운트합니다. 이렇게 하면 파일 시스템이 해당 드라이브 문자에 연결되어 사용할 수 있게 됩니다.
org.springframework.dao.InvalidDataAccessApiUsageException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call
JpaRepository 사용하여 delete를 하는데 해당 오류가 발생하였다.
JPA에서는 데이터베이스 트랜잭션 내에서 작동한다고 한다.
이렇게 작동하는 JPA는 트랜잭션은 커밋이나 롤백을 하지 않으면 영속성 컨텍스트에만 저장이된다.
(*** 영속성 컨텍스트 : JPA에서 엔티티 객체를 보관 및 관리하는 환경)
즉, 데이터베이스에 엔티티 객체가 저장이 되지 않는다.
@Transactional 어노테이션을 사용하면 JPA의 트랜잭션을 자동으로 시작하고, 커밋 또는 예외발생시 롤백 등을 수행할 수 있다.
그러므로 해당 오류는 delete하는 repository를 호출하는 서비스에서 @Transactional 어노테이션을 추가해주고 서버를 재기동해주니 삭제가 정상적으로 되는것을 확인하였다.