전체 글 245

📌 스레드 풀에서 submit()과 execute()의 차이는 ?!?!?

우선 submit()과 execute() 메서드는 스레드 풀에서 작업을 처리하는데 사용되는 메서드 작업 처리 결과 반환: submit() 메서드는 작업 처리 결과를 받을 수 있도록 Future 객체를 반환 submit()을 사용하면 작업의 결과를 추출하거나 작업이 완료되었는지 확인할 수 있다. 예를 들어, 작업이 어떤 값을 계산하고 그 값을 반환한다면, submit() 메서드는 그 값을 Future 객체로 받을 수 있다. 반면, execute() 메서드는 작업 처리 결과를 반환하지 않는다! 예외 처리: execute() 메서드는 작업 처리 중에 예외가 발생하면 해당 스레드가 종료되고 스레드 풀에서 제거된 후, 새로운 스레드가 생성되어 다른 작업을 처리한다. 이로 인해 execute() 메서드는 예외가 발..

📌 스레드 풀을 생성할 수 있는 여러가지 방법은 뭐가 있을까??????

우선 스레드 풀은 미리 생성된 스레드의 집합 !! ExecutorService 사용하기: Java에서는 ExecutorService 인터페이스를 사용하여 스레드풀을 생성하고 관리할 수 있다. ExecutorService를 사용하면 스레드풀의 크기, 작업 큐의 크기 등을 설정할 수 있다. ExecutorService executorService = Executors.newFixedThreadPool(10); ThreadPoolExecutor 클래스 사용하기: ThreadPoolExecutor 클래스를 직접 사용하여 스레드풀을 생성할 수도 있다. 이는 ExecutorService 인터페이스의 구현체인데, 세밀한 설정이 가능 ThreadPoolExecutor의 생성자를 사용하여 스레드풀의 크기, 작업 큐의 크..

📌 thread run()과 thread start()의 차이가 뭘까?

thread run()과 thread start()는 둘 다 스레드(Thread)를 실행하는 메서드..! 그러나 차이점은 존재! thread run() : 스레드를 직접 실행하는 메서드 이 메서드를 호출하면 현재 스레드에서 run() 메서드가 실행된다 스레드가 별도의 실행 흐름을 가지지 않고 현재 스레드에서 실행 thread start(): 스레드를 시작하는 메서드 이 메서드를 호출하면 새로운 스레드가 생성되고, 해당 스레드에서 run() 메서드가 실행 스레드가 별도의 실행 흐름을 가지며, 동시에 여러 스레드가 실행될 수 있다. thread run()은 스레드를 직접 실행하는 반면, thread start()는 새로운 스레드를 생성하여 실행하는 차이가 존재!!!

🧾 GOF의 proxy패턴 사용하는 이유가 뭘까?

일부 메서드의 동작 변경할때 기존 코드는 손대지 않고 기능을 변경 할 수 있기에...! 가상 프록시 (Virtual Proxy): 비용이 많이 드는 객체를 필요할 때 생성하도록 하는 패턴 ex) 데이터베이스 접근은 데이터가 실제로 사용되기 전까지 프록시가 대신하는데, 이는 초기화를 지연시키는 효과를 가지며, 복사/수정에도 유용 리모트 프록시 (Remote Proxy): 원격 컴포넌트의 클라이언트를 네트워크 주소와 IPC 프로토콜로부터 숨기는 패턴 프록시는 요청을 네트워크를 통해 전송하고, 이 요청은 서버 측 객체에 의해 처리된다. 보호 프록시 (Protection Proxy): 특정 메소드로의 접근을 제어하는 패턴 프록시 메소드는 인증 토큰을 전달받고, 이 토큰이 요청한 연산을 인증하지 못하면 예외를 던..

🧾 Auto commit을 false로 설정해야 하는 이유는????

데이터 변경(입력/수정/삭제) 작업을 수행 할 때 여러개의 테이블 사용하는데, 많은 항목을 다뤄야 하기 때문에 데이터가 중복되지 않도록 여러 테이블에 분산 저장한다 Ex) 게시글 저장(실제 여러 입력작업으로 되어있음) 게시글 ----insert----> 게시글 테이블 + 여러개의 첨부파일 ----insert----> 첨부파일 테이블 모든 데이터 변경 작업이 성공시 테이블에 적용 :commit => 단 한개의 작업이라도 실패시 그 전까지 수행한 작업을 모두 취소 :rollback ▶Auto commit이false인 상태에선 데이터 변경 작업이 커넥션 별로 임시 DB에 보관된다 Auto commit이 "true"로 설정되면 각 SQL 쿼리가 개별적인 트랜잭션으로 처리되어 쿼리가 성공적으로 실행될 때마다 자동..

SQL 49데이터 삭제하기 (DELETE / TRUNCATE / DROP)

데이터 삭제하는 3가지 명령어 DELETE TRUNCATE DROP 데이터 삭제 삭제 삭제 저장 공간 남김 삭제 삭제 저장 구조 남김 남김 삭제 취소 여부 가능 불가능 불가능 플래쉬백 여부 가능 불가능 가능 TRUNCATE (DDL) TRUNCATE명령어는 모든 데이터를 한번에 삭제한다 데이터 삭제 후에 취소가 불가능하여 DELETE 보다 삭제되는 속도 빠르다 데이터 모두 지우고 테이블 구조만 남기는것이 TRUNCATE TRUNCATE table emp; DROP (DDL) DROP명령어는 테이블 전체를 한번에 삭제하는 명령어 삭제후에 취소(ROLLBACK)는 불가능 , FLASHBACK으로 테이블 복구는 가능 DROP table emp; DELETE (DML) DDL문은 DML문과 다르게 암시적인 CO..

SQL 2023.07.25

📌 notify()와 notifyAll()의 차이는 뭘까?!

- notify()와 notifyAll()은 자바에서 스레드 간의 통신을 위해 사용되는 메서드 notify(): notify() 메서드는 현재 객체의 모니터를 소유하고 있는 스레드 중 하나를 깨워서 실행을 재개 notify() 메서드를 호출하면 대기 중인 스레드 중 한 개의 스레드만 실행을 재개하고, 나머지 스레드들은 여전히 대기 상태...! 선택적으로 특정 스레드를 깨울 수 있다 호출한 스레드와 동일한 모니터를 소유하고 있는 스레드 중 하나가 깨어난다 notify() 메서드를 호출한 스레드와 동일한 모니터를 소유하고있는 스레드가 없다면, notify() 호출은 아무런 효과가 없다 notifyAll(): notifyAll() 메서드는 현재 객체의 모니터를 소유하고 있는 모든 스레드를 깨워서 실행을 재개 ..

📌 sleep()과 wait()의 차이는?!?!?

sleep(): sleep()은 Thread 클래스에 정의된 메서드 이 메서드는 스레드의 실행을 특정 시간 동안 일시적으로 중지시킨다 sleep()을 호출한 스레드는 CPU를 양보하고, 슬립하는 동안 시스템 리소스를 소비하지 않는다 지정된 시간이 경과하면 스레드는 실행을 재개한다 sleep()은 프로그램에서 지연을 도입하거나 시간 기반 작업을 생성하는 데 유용..! try { // 5초 동안 실행 일시 중지 Thread.sleep(5000); } catch (InterruptedException e) { // 예외 처리 } wait(): wait()은 Object 클래스에 정의된 메서드 이 메서드는 스레드가 보유한 객체의 잠금을 일시적으로 해제한다 wait()을 호출한 스레드는 다른 스레드가 재개하도록 ..