의문점 공부하기 102

📌 forward와 redirect의 차이는 무엇인가?

forward와 redirect는 웹 애플리케이션에서 사용되는 두 가지 다른 방식의 페이지 전환 Forward (전달): Forward는 서버 내부에서 이루어지며, 클라이언트의 요청을 서버에서 다른 리소스로 전송, 이 과정에서 클라이언트는 전환되지 않고, 이전 요청의 정보가 그대로 유지 Forward는 주로 같은 애플리케이션 내에서 다른 페이지로 이동할 때 사용 EX) 사용자가 로그인 페이지에서 로그인을 성공하면 서버는 Forward를 사용하여 사용자를 대시보드 또는 홈 화면으로 이동시킬 수 있다. Redirect (리다이렉트): Redirect는 클라이언트에게 새로운 URL로 이동하도록 요청 클라이언트는 새로운 URL로 새로운 요청을 보내고, 이 과정에서 이전 요청의 정보는 유지되지 않는다 Redire..

📌 tcp와 udp의 차이점

TCP의 정의 TCP 또는 전송 제어 프로토콜은 TCP / IP 모델의 전송 계층에서 발견되는 연결 지향 프로토콜입니다. 통신을 시작하기 전에 원본 컴퓨터와 대상 컴퓨터 사이에 연결을 설정합니다. 3 방향 핸드 셰이크, 플로우, 오류 및 혼잡 제어를 사용하므로 신뢰성이 높습니다. 원본 컴퓨터에서 보낸 데이터가 대상 컴퓨터에서 정확하게 수신되는지 확인합니다. 수신 된 데이터가 올바른 형식이 아닌 경우 TCP는 데이터를 재전송합니다. 다음 프로토콜은 데이터 전송에 TCP를 사용합니다. HTTP (하이퍼 텍스트 전송 프로토콜), HTTPs (Hypertext Transfer Protocol Secure), FTP (파일 전송 프로토콜), SMTP (Simple Mail Transfer Protocol) 등 U..

📌 301과 302 상태 코드의 의미와 차이는?

301과 302는 HTTP 응답 상태 코드 중 리다이렉션(redirect)을 나타내는 코드 301 Moved Permanently: 이 상태 코드는 리소스가 영구적으로 새로운 위치로 이동되었음을 나타냄. 검색 엔진 및 브라우저는 이 리소스를 새 위치로 기억하고, 이후에 해당 리소스에 대한 요청을 바로 새 위치로 보냄 301 리다이렉션은 주로 웹페이지나 리소스의 URL을 변경하거나 삭제하고 싶을 때 사용 302 Found (또는 302 Moved Temporarily): 이 상태 코드는 리소스가 임시적으로 다른 위치로 이동했음을 나타냄. 요청을 보낸 클라이언트는 임시적으로 새 위치로 이동하되, 검색 엔진과 브라우저는 이 리소스를 캐시하지 않고, 이후에도 원래 위치로 요청을 보낼 수 있다. 302 리다이렉션..

📌 throw와 throws의 차이가 있는걸까?

throw: "throw"는 프로그램 내에서 직접 예외를 발생시킬 때 사용되는 키워드 예외 상황이 발생한 경우, 직접 예외 객체를 생성하고 "throw" 키워드와 함께 해당 예외 객체를 던질 수 있다 이렇게 던진 예외는 해당 메소드 내에서 처리되어야 하는데, 메소드 내에서 예외를 처리하지 않으면, 호출한 곳으로 예외가 전파되어 호출자가 처리하게 된다 throws: "throws"는 메소드 선언 시 예외가 발생할 수 있는 상황을 나타내는 키워드 메소드 선언 시 "throws" 키워드를 사용하여 해당 메소드에서 처리하지 않는 예외를 명시할 수 있다 이는 해당 메소드를 호출한 곳에서 해당 예외를 처리하도록 하는 역할을 하고, 해당 메소드를 호출할 때 예외가 발생할 수 있음을 알려줌 => "throw"는 예외를..

🧾 JSP도 서블릿으로 변환되서 실행되는데 왜 JSP는 서버 재시작 없이 반영되고, 서블릿은 서버 재시작이 필요한걸까?

JSP 파일은 요청이 들어올 때마다 서블릿 코드로 변환되고 컴파일되는데, 수정사항이 발생하면 해당 JSP 파일이 다시 변환되고 컴파일되어 새로운 서블릿 클래스가 생성된다 따라서 서버 재시작 없이도 수정된 내용 반영 가능 서블릿은 웹 애플리케이션 서버가 시작될 때 미리 컴파일되고 클래스로 로딩되는데 서블릿 클래스가 한 번 로딩되면 서버 재시작이나 재컴파일 없이 내용이 변경되지 않는다. 수정사항이 있을 경우 새로운 버전의 서블릿 클래스를 생성하고 서버를 재시작해야만 변경 내용이 적용 결국 컴파일 시점이 달라서 가능한 일

📌 의존성 주입 방법은 무엇이 있을까 ++ ?

Field Injection (필드 주입): 필드 주입은 클래스의 필드에 직접 의존성을 주입하는 방식 클래스의 필드에 @Autowired 애노테이션을 사용하여 의존성을 주입 간결하고 편리하지만, 테스트 시에 의존성을 모의(mock) 객체로 대체하기 어렵다는 단점이 존재 @Service public class UserService { @Autowired private UserRepository userRepository; // ... } Setter based Injection (Setter 주입): Setter 주입은 클래스의 Setter 메서드를 통해 의존성을 주입하는 방식 클래스의 필드는 private으로 선언되어 있고, 각 필드에 대응하는 Setter 메서드에 @Autowired 애노테이션을 사용 ..

📌 XSS 공격이 무엇이고, 어떻게 피할 수 있을까!?!?

XSS(크로스 사이트 스크립팅): 웹 보안 취약점 중 하나로, 공격자가 악의적인 스크립트를 웹 페이지에 삽입하여 사용자들의 브라우저에서 실행시키는 공격 형태, 공격자는 사용자의 세션 정보를 탈취하거나 악성 행동을 수행할 수 있다. Stored XSS (영구 저장형 XSS): 악의적인 스크립트가 웹 서버에 저장되어 다른 사용자들이 해당 스크립트를 불러와 실행하게 된다. 댓글, 포럼 게시물, 프로필 설명 등 사용자 생성 콘텐츠에 주로 발생 Reflected XSS (반사형 XSS): 사용자가 악의적인 링크를 클릭하거나 악의적인 데이터를 서버로 보낼 때 발생 서버는 해당 데이터를 동적으로 웹 페이지에 포함시키고, 이로 인해 악성 스크립트가 사용자의 브라우저에서 실행된다 DOM-based XSS: Documen..

💻 프로젝트 하며 생긴 의문점,,,

오브젝트를 리턴하려면 어떻게 해야할까 요청을 통해 오브젝트를 가져올 수 있는데 응답으로 오브젝트를 리턴 할 수 있다 => 그냥 오브젝트를 리턴하면 됨 ! 뭘로? @RestController= @Controller + @ ResponseBody @controller는 @component로 스프링이 이 클래스의 오브젝트를 알아서 생성하고 다른 오브젝트들과의 의존성을 연결 @responsebody는 이 클래스의 메서드가 리턴하는것은 웹서비스의 ResponseBody하는것 = 리턴할 때 스프링은 리턴된 오브젝트를 Json의 형태로 바꾸고 HttpResponse에 담아 반환한다는것 스프링이 오브젝트를 Json으로 바꾸는 것처럼 오브젝트를 저장하거나 네트워크를 통해 전달할 수 있도록 변환하는 것을 직렬화라 하고, ..

프로젝트하며 공부한 내용

rest 아키텍쳐 패턴은 스프링 프로젝트 내부에서 어떻게 코드 적절히 분리하고 관리 할것인가 rest아키텍처 스타일은 클라이언트(브라우저)가 우리 서비스를 이용하려면 어떤 형식으로 요청을 보내고 응답 받는지에 대한 것, 이러한 rest 아키텍쳐 스타일을 따라 설계된 서비스를 restful 서비스라 칭함 레이어는 사이에 계층이 존재해 자기보다 한단계 낮은 레이어만 사용한다 -컨트롤러가 요청을 받고 컨트롤러는 서비스를 사용, 서비스는 퍼시스턴스를 사용, 퍼시스턴스는 요청한 데이터를 반환 서비스는 다시 데이터 검토 후 가동후 반환 컨트롤러 또한 같은 작업 자바로된 비즈니스 app의 클래스는 보통 두가지 기능을 수행하는 서비스와, 데이터를 담는 서비스 기능을 수행하는 서비스는 컨트롤러, 서비스, 퍼시스턴스 로직..

📌 SQL Injection을 피할 수 있는 방법은 뭐가 있을까??

Prepared Statements (Parameterized Queries): 입력값을 직접 SQL 쿼리에 삽입하지 말고, 파라미터화된 쿼리를 사용하여 입력값을 쿼리에 전달하는 방식을 사용,입력된 쿼리와 데이터를 분리 ORM (Object-Relational Mapping): ORM은 데이터베이스와 애플리케이션 코드 사이의 추상화 계층을 제공하여 SQL 쿼리를 직접 작성하지 않고도 데이터베이스와 상호 작용할 수 있게 해줌 입력 검증 및 제한: 사용자 입력값을 엄격하게 검증하고 허용되지 않은 문자나 패턴을 걸러내는 등의 필터링을 수행 충분한 인증과 권한 관리: 데이터베이스 사용자에게 최소한의 권한만 부여하여, 애플리케이션에서 필요한 작업만 수행할 수 있도록 제어 백엔드 밸리데이션: 클라이언트 사이드에서 ..