의문점 공부하기/📌 Java 54

JPA

JPA: Java Persistence API JPA는 자바 진영에서 ORM 기술 표준으로 사용하는 인터페이스의 모음 ORM이란? ORM은 DB와 실제 객체간의 간격을 매핑해주는 Object Relational Mapping 기술 +DB의 CRUD 동작을 모두 메소드로 처리할 수 있게 한다. JPA는 인터페이스의 모음으로, 구현체가 따로 없다. 일반적으로 사용되는 구현체는 Hibernate가 존재 JPA를 왜 써야하나? JPA 장점 Query문 작성 실수를 피할 수 있다. Query같은 경우는 컴파일 시, 오류가 여부 검사가 어렵다 실제로 해당 쿼리가 동작하는 기능이 수행되어야 하기 때문에, 배포 후 오류가 발견된다면...? 협업 상황 시, 다른 사람 코드를 이해하기가 더 쉽다. JPA 단점 정형화 되어..

📌 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"는 예외를..

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

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..

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

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

📌 스프링 MVC와 struts의 차이에 대하여

스프링 MVC와 Struts는 둘 다 웹 애플리케이션 개발을 위한 프레임워크 아키텍처: 스프링 MVC: 스프링 프레임워크의 일부로, 웹 계층을 구성하는 하나의 모듈입 스프링의 IoC(Inversion of Control)와 AOP(Aspect-Oriented Programming) 개념을 기반으로하며, 컴포넌트 간의 결합도를 낮추는 구조를 제공 Struts: Struts프레임워크는 웹 계층과 비즈니스 계층을 분리하는 구조를 가지며,요청기반 + 웹 계층을 주로 다루는 프레임워크, 요청 핸들러, 응답 핸들러, 태그 라이브러리의 세 가지 주요 구성 요소로 구성 컨트롤러 개념: 스프링 MVC: 컨트롤러는 @Controller 어노테이션으로 표시되며, 메서드 단위로 요청을 처리 메서드에서 반환되는 뷰 이름을 기반..

📌 그렇다면 쿠키를 사용할 수 없을 때 세션을 대신 사용할 수 있을까!?!??!????

우선 결론부터 말하자면 있다...! 쿠키는 클라이언트 측에 데이터를 저장하고 관리하는 메커니즘으로, 사용자의 웹 브라우저에 저장하고 세션은 서버 측에서 데이터를 관리하고 저장하는 메커니즘으로, 클라이언트 측에 직접 저장되는 것은 아니다. 쿠키대신 세션을 사용해야 할 상황에는 쿠키 비활성화: 사용자가 웹 브라우저의 쿠키를 비활성화한 경우, 쿠키를 사용하여 상태 정보를 유지하기 어려워져 서버 측에서 세션을 생성하여 사용자의 상태 정보를 관리해야함 보안 및 개인 정보 보호 강화: 민감한 데이터를 클라이언트 측에 저장하지 않고, 서버 측에 보다 안전하게 관리하려는 경우 세션을 활용 쿠키 용량 한계 초과: 쿠키는 용량 제한이 있기 때문에 대량의 데이터를 저장해야 할 때는 세션을 활용하는 것이 유리 ++세션 사용시..