의문점 공부하기/🧾공부하며 33

🧾 Servlet++

*서블릿 메서드는 절대 주소없이 호출 못함 +http 종류 생성 post 조회 get 변경 put 삭제 delete 정보만 가져올때 head 서블릿 실행 방법 http://서버주소:포트번호/웹애플리케이션이름/서블릿URL 예) http://localhost:8080/java-web/ex 서블릿 구동 과정 1) 웹 브라우저가 서블릿 실행을 요청한다. 2) 서블릿 컨테이너는 해당 URL의 서블릿 객체를 찾는다 3.1) 서블릿 객체를 아직 만들지 않았다면, => 서블릿 클래스에 대해 인스턴스를 생성한다. => 생성자를 호출한다. => init()를 호출한다. => service()를 호출한다. 3.2) 서블릿 객체가 생성되어 있다면, => service()를 호출한다. 만약 웹 애플리케이션이 종료된다면 => 생..

🧾 Servlet에 대해

Servlet 인터페이스: javax.servlet.Servlet 인터페이스는 모든 서블릿 클래스가 구현해야 하는 기본 인터페이스 init, service, destroy, getServletConfig, getServletInfo 등의 메서드를 정의하 ServletConfig 인터페이스: javax.servlet.ServletConfig 인터페이스는 서블릿의 초기화 파라미터를 읽어오기 위해 사용하는 인터페이스 getInitParameter, getInitParameterNames, getServletContext 등의 메서드를 정의하고 있다. ServletRequest 인터페이스: javax.servlet.ServletRequest 인터페이스는 클라이언트 요청 정보를 처리하기 위해 사용하는 인터페이스 ..

🧾 Http 요청 방식 get과 post 비교!

HTTP 요청 방식인 GET과 POST는 웹 애플리케이션에서 클라이언트(브라우저)와 서버 간에 데이터를 전송하는 방식을 나타낸다 GET 방식: 데이터 전송 방식: URL의 쿼리 매개변수에 데이터를 첨부하여 전송, 데이터는 주소 뒤에 '?'와 'key=value' 형식 데이터 노출: URL에 데이터가 노출되므로 보안에 취약, 민감한 정보를 전송하는데 적합하지 않음 요청 제한: URL에 데이터가 포함되어 있어 길이에 제한, 대부분의 브라우저에서는 약 2,048자 캐싱: 브라우저가 이전에 받은 데이터를 캐시하여 다시 요청 시 캐시된 데이터를 사용할 수 있음 웹 페이지 조회, 검색 등 데이터를 서버에 전달하거나 받을 때 사용 POST 방식: 데이터 전송 방식: HTTP 요청의 본문(body)에 데이터를 포함하여..

🧾 HTTP에서의 Stateless로 만들어야하는 이유! + 세션은 보관소? + 쿠키란??

HTTP에서의 Stateless란 상태없는(무상태) 특성을 의미 HTTP는 클라이언트와 서버 간의 각각의 요청(request)과 응답(response) 사이에 연결이 지속되지 않는다는 것 HTTP 프로토콜은 각 요청을 독립적으로 처리하며, 이전 요청과 관련된 정보를 서버가 유지하지 않는다. =>이전 요청과 현재 요청 간에는 아무런 상태 정보가 공유되지 않음..! ex) 사용자가 웹 브라우저를 통해 웹 페이지를 요청하면 서버는 해당 페이지를 제공하고 연결을 끊는다. 이후에 사용자가 다른 페이지를 요청하면 서버는 이전 요청과 관련된 정보를 기억하지 않고 새로운 요청에 대해 독립적으로 응답 이러한 방식으로 HTTP는 상태 정보를 서버 측에서 유지하거나 관리하지 않기 때문에 간단하고 확장성이 높은 프로토콜로 사..

🧾 자바 직렬화는 왜 쓸까

자바 직렬화: 자바 객체를 바이트 스트림으로 변환하는 과정 바이트 스트림은 파일에 저장하거나 네트워크를 통해 전송할 수 있다. 네트워크 통신: 객체를 네트워크를 통해 전송해야 할 때 직렬화를 사용할 수 있다. 객체를 직렬화하여 바이트 스트림으로 변환하고, 이를 네트워크를 통해 전송할 수 있다. 수신 측에서는 바이트 스트림을 역직렬화하여 원래의 객체로 복원할 수 있다. 분산 시스템: 분산 시스템에서는 여러 컴퓨터 간에 객체를 전송해야 할 때 직렬화를 사용할 수 있다. 객체를 직렬화하여 전송하고, 수신 측에서는 역직렬화하여 객체를 사용할 수 있다 데이터베이스 저장: 객체를 데이터베이스에 저장해야 할 때도 직렬화를 사용할 수 있다. 객체를 직렬화하여 바이트 스트림으로 변환하고, 이를 데이터베이스에 저장할 수 ..

🧾 동적 프록시란 ???

먼저 프록시란? - 클라이언트와 서버 사이에서 중계 역할을 하는 컴퓨터나 응용 프로그램 - 프록시 서버는 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접근할 수 있도록 해주며, 이를 통해 데이터 전송 시간을 절약하고 네트워크 병목 현상을 방지하는 등의 이점을 제공 동적 프록시 - 프로그래밍에서 특정 클래스의 인터페이스를 구현하는 클래스를 런타임에 동적으로 생성하는 기술 - 프록시 패턴의 한 형태로, 대상 객체에 대한 액세스를 제어하거나 추가적인 행동을 추가하는 등의 목적으로 사용 - 동적 프록시를 사용하면 개발자는 매번 프록시 클래스를 직접 작성하지 않아도 된다 - 프록시 객체는 런타임에 동적으로 생성되며, 이렇게 생성된 프록시 객체는 원래 객체를 대신하여 원래 객체에 대한 연산을 수행할 ..

🧾 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 쿼리가 개별적인 트랜잭션으로 처리되어 쿼리가 성공적으로 실행될 때마다 자동..

🧾 스레드를 재사용해야 하는 이유

스레드가 데드가 되면 사용 못하지만 다시 사용할 수 있게 해주면 되지 않나?? => 실행완료된 스레드는 가비지가 된다 가비지 컬렉터가 가비지가된 스레드 수집하여 해제 시키기 전까지는 그 스레드를 위해 할당된 메모리를 사용 할 수없다 스레드를 매번 만들면 결국 가비지만 계속 늘어나게 되고 => 메모리 낭비!!!!!!!!!! 스레드는 실제 OS가 생성하고, 스레드는 생성하는데 시간이 걸림 스레드를 자주 생성하면 스레드 생성하는데 시간을 많이 소요하게됨!!! sleep()을 이용한 스레드 재활용 방식은 일정 시간이 지난 후 스레드가 작업하게 만드는 방식 스레드가 잠든 사이에 작업할 내용을 설정해두면, 스레드가 깨어났을 때 변경 사항에 따라 작업을 수행한다. 이 방식으로 한 개의 스레드를 재활용하여 작업을 처리..

🧾 여러 스레드가 공유된 메모리에 접근하여 값을 변경하면????

여러 스레드가 같은 메모리에 접근하여 값을 변경할 때 문제가 발생 →의도된 대로 동작하지 않음 여러 스레드가 동시에 실행할 때 문제가 발생할 수 있는 코드 블럭을 Critical Section 또는 Critical Region이라 칭함 여러 스레드가 같은 메모리를 동시에 접근해도, 메모리 조회만 하면 문제 없는데 이를 스레드 안전이라 부른다 해결책은? => synchronized 키워드를 사용, 한 번에 한 스레드만 해당 메서드 또는 블록에 진입할 수 있다 다른 스레드는 진입한 스레드가 해당 메서드나 블록의 실행을 마칠 때까지 기다려야 한다 public synchronized void criticalMethod() { // Critical Section // 동기화가 필요한 작업 수행 } =>코드 블록에..