📌 GET과 POST요청의 차이를 말하라. [ GET ] 데이터 전송 데이터는 URL의 쿼리 매개변수로 전송된다. URL에 노출되므로 민감한 정보를 전달하기에 적합하지 않다. 캐싱 브라우저에서 GET 요청이 캐시 될 수 있다. [ POST ] 데이터 전송 데이터는 HTTP 요청의 본문(body)에 포함되어 전송된다. URL에 노출되지 않으므로 더 많은 양의 데이터와 민감한 정보를 보내기에 적합하다. 캐싱 브라우저에서 POST 요청이 캐시되지 않는다. 어떤 요청 메서드를 사용할지는 요청의 목적과 보안 상의 고려사항 등에 따라 결정되며, 일반적으로 GET은 리소스를 가져오는 데 사용되고, POST는 리소스를 생성할 때 사용된다. 📌 어떻게 도메인 간의 요청이 작동하나? 도메인 간의 요청(Cross-Origi..
분류 전체보기
📌 301과 302 상태 코드의 의미와 차이는 무엇인가? 301과 302는 HTTP 상태 코드(Status Code)중 리다이렉션(Redirection)을 나타내는 코드이다. 이 두 코드는 클라이언트(브라우저 등)에게 요청한 리소스가 다른 위치에 있음을 알려주며, 클라이언트는 해당 위치로 자동으로 이동하여 리소스를 가져온다. [ 301 (Moved Permanently: 영구 이동) ] 요청한 리소스가 영구적으로 다른 위치로 이동했음을 나타낸다. 클라이언트는 이후에 해당 리소스를 새로운 위치로 요청해야 한다. 브라우저는 캐시를 업데이트하고 검색 엔진은 새로운 위치를 기억하여 인덱스를 업데이트한다. [ 302 (Found: 찾음 , Moved Temporarily: 일시적 이동) ] 요청한 리소스가 일시적..
📌 throw와 throws의 차이는 무엇인가? [ throw ] 예외를 명시적으로 발생시키는 데 사용한다. 예외가 발생하면 해당 예외 객체가 생성되고, 프로그램의 실행 흐름이 해당 예외를 처리할 수 있는 부분으로 전달된다. 일반적으로 메서드나 블록 내에서 예외 조건이 발생할 때 사용한다. throw new Exception("에러 발생~"); [ throws ] 메서드 선언부에 사용되며, 해당 메서드가 어떤 종류의 예외를 던질 수 있는지를 나타낸다. 메서드가 어떤 예외를 던질지 미리 선언함으로써, 메서드를 호출하는 클라이언트는 해당 예외에 대한 처리를 해야 한다. public void something() throws IOException { ... } throw는 예외를 발생시키는 데 사용하고, th..
📌 쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까? 세션은 서버 측에서 관리되며, 사용자의 브라우저에 저장되는 쿠키와 달리 사용자의 정보를 서버에 저장한다. 이는 쿠키가 비활성화되거나 사용자가 쿠키를 거부하는 경우에도 사용자의 세션을 유지할 수 있게 한다. 세션 ID는 일반적으로 쿠키를 통해 사용자의 브라우저에 전송되지만, 쿠키를 사용할 수 없는 경우에는 URL 매개변수나 폼 데이터, 세션 스토리지, 로컬 스토리지 등을 이용하여 보관할 수 있다. 📌 스프링 MVC와 struts의 차이는 무엇인가? Spring MVC와 Struts 모두 Java 기반의 웹 애플리케이션 개발을 지원하는 프레임워크이지만 몇 가지 차이점이 있다. [ 아키텍처와 설계 ] Spring MVC Spring 프레임워크의 일..
📌 JSP와 Servlet의 차이점은 무엇인가? JavaServer pages(JSP)와 Servlet은 모두 Java를 기반으로 하는 웹 애플리케이션 개발을 위한 기술이지만 몇 가지 차이점이 있다. [ 문법 및 구조 ] JSP HTML 안에 Java 코드를 삽입하는 방식으로 동적 웹 페이지를 생성한다. Servlet Java 코드 안에 HTML 코드를 삽입하는 방식으로 동적 웹 페이지를 생성한다. [ 유지보수 및 디자인 ] JSP 코드가 섞이기 쉽기 때문에 디자인과 비즈니스 로직을 분리하기 어렵다. Servlet 코드의 구조화와 분리가 더 쉽다. [ 방식 ] JSP 내부적으로 서블릿으로 변환되어 실행된다. Servlet 자바 클래스로 직접 작성되어 실행된다. 일반적으로 JSP는 프론트엔드와 백엔드의 통..
📌 복사가 사용되는 이유는 무엇인가? 원본 객체를 복사하지 않고 대입하여 사용하게 되면 원본 객체의 안전성을 보장하기 어렵기 때문이다. 📌 객체 복사는 어떻게 할 수 있나? [ Cloneable 인터페이스와 clone 메서드 사용 ] 이는 얕은 복사를 수행한다. class MyClass implements Cloneable { private int value; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } // 사용 예제 MyClass originalObject = new MyClass(); MyClass clonedObject = (MyClass) originalObject.c..
📌 reflection이란 무엇인가? reflection은 프로그램이 자기 자신의 구조를 검사하고 수정할 수 있는 능력을 나타낸다. Java에서는 java.lang.reflect 패키지를 통해 reflection을 지원한다. [ reflection으로 할 수 있는 작업 ] 클래스 정보 얻기 클래스의 이름, 메서드, 필드, 생성자 등에 대한 정보를 얻을 수 있다. 인스턴스 생성 및 메서드 호출 클래스의 인스턴스를 생성하고, 해당 인스턴스의 메서드를 호출할 수 있다. 필드에 접근 클래스의 필드에 접근하여 값을 읽거나 변경할 수 있다. [ reflection 사용처 ] 런타임에 클래스를 동적으로 로드해야 할 때 플러그인 아키텍처 구현 private 메서드 단위 테스트 reflection은 강력한 기능이지만 런..
📌 notify()와 notifyAll()의 차이는 무엇인가? notify()와 notifyAll()은 모두 스레드 간 통신을 위해 사용되는 메서드로 객체의 모니터 락을 소유한 스레드가 다른 스레드에게 신호를 보내는 데에 활용되지만 몇 가지 차이점이 있다. [ 대상 스레드 ] notify() 현재 객체의 모니터 락을 소유한 스레드 중에서 하나를 선택하여 깨운다. 선택된 스레드만이 대기 상태에서 깨어나고 나머지 대기 중인 스레드는 여전히 대기 한다. notifyAll() 현재 객체의 모니터 락을 소유한 스레드가 대기 중인 모든 스레드를 깨운다. 여러 개의 스레드가 대기 중이면 모든 스레드가 깨어나고 경쟁 상태에 진입하게 된다. [ 성능과 경쟁 상태 ] notify() 선택된 하나의 스레드만이 깨어나므로 경..