📌 GET과 POST요청의 차이를 말하라.
[ GET ]
- 데이터 전송
- 데이터는 URL의 쿼리 매개변수로 전송된다.
- URL에 노출되므로 민감한 정보를 전달하기에 적합하지 않다.
- 캐싱
- 브라우저에서 GET 요청이 캐시 될 수 있다.
[ POST ]
- 데이터 전송
- 데이터는 HTTP 요청의 본문(body)에 포함되어 전송된다.
- URL에 노출되지 않으므로 더 많은 양의 데이터와 민감한 정보를 보내기에 적합하다.
- 캐싱
- 브라우저에서 POST 요청이 캐시되지 않는다.
어떤 요청 메서드를 사용할지는 요청의 목적과 보안 상의 고려사항 등에 따라 결정되며, 일반적으로 GET은 리소스를 가져오는 데 사용되고, POST는 리소스를 생성할 때 사용된다.
📌 어떻게 도메인 간의 요청이 작동하나?
도메인 간의 요청(Cross-Origin Request)은 웹 애플리케이션에서 한 도메인(origin)에서 다른 도메인으로 HTTP 요청을 보내는 것을 의미한다. 브라우저는 동일 출처 정책(Same-Origin Policy)을 따르고 있어, 보안상의 이유로 다른 출처 간의 직접적인 요청이 제한되지만 다양한 방법을 사용하여 도메인 간 요청을 활성화할 수 있다.
[ CORS (Cross-Origin Resource Sharing) ]
- 서버에서 브라우저로 전송되는 HTTP 헤더를 사용하여 브라우저에서 도메인 간 요청을 허용하는 매커니즘이다.
- 서버는 요청을 허용할 출처를 명시하고, 브라우저는 이 허용된 출처에서만 요청을 수행할 수 있도록 허용한다.
[ JSONP (JSON with Padding) ]
- <script> 요소를 사용하여 도메인 간 요청을 수행하는 방법이다.
- 다른 도메인에서 스크립트를 가져오는 것은 브라우저의 Same-Origin Policy에서 제외되어 있기 때문에 JSONP를 사용할 수 있다.
[ 서버 프록시 (Server Proxy) ]
- 클라이언트에서 서버로 요청을 보내는 대신, 동일한 도메인에서 서버로 요청을 보내고 해당 서버에서 다른 도메인으로 요청을 전달하는 방법이다.
- 서버 사이에서 통신이 이루어지므로 브라우저의 Same-Origin Policy를 우회할 수 있다.
[ Cross-document Messaging ]
- HTML5에서 도입된 방법으로 window.postMessage를 사용하여 다른 창 또는 프레임으로 메시지를 보내고 받는 방법이다.
도메인 간 요청을 허용하는 방법은 보안상의 이유로 신중하게 다뤄져야 한다. CORS를 사용하는 것이 표준적인 방법 중 하나이다.
📌 JSONP의 구현 원칙은 무엇인가?
[ 콜백 함수 (Callback Function) ]
- JSONP 요청은 서버에서 데이터를 받은 후에 호출할 콜백 함수를 정의해야 한다.
- 콜백 함수는 클라이언트 측에서 정의되어야 하며, 서버 응답의 일부로서 동적으로 생성되는 스크립트에 포함된다.
[ 동적으로 생성된 <script> 태그 ]
- JSONP 요청은 <script> 태그를 사용하여 데이터를 서버로부터 가져온다.
- 서버는 JSONP 응답을 JavaScript로 래핑 한 후, 해당 스크립트를 동적으로 생성하여 클라이언트에게 전송한다.
[ 콜백 함수 이름 전달 ]
- JSONP 요청은 서버에 요청을 보낼 때 매개변수로 콜백 함수 이름을 전달한다.
- 서버는 이 콜백 함수 이름을 사용하여 응답을 래핑 하고, 해당 함수를 호출한다.
[ 클라이언트 ]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JSONP Example</title>
</head>
<body>
<script>
function handleData(data) {
console.log("Data received:", data);
}
</script>
<!-- JSONP 요청을 보내는 스크립트 태그 -->
<script src="http://localhost:8080/data?callback=handleData"></script>
</body>
</html>
[ 서버 ]
@RestController
public class JsonpController {
@RequestMapping("/data")
public String getData(@RequestParam("callback") String callback) {
String responseData = "{\"key\":\"value\"}";
return callback + "(" + responseData + ")";
}
}
📌 디자인 패턴에 대해 말하라.
디자인 패턴은 소프트웨어 디자인에서 특정한 문제를 해결하기 위해 반복적으로 사용되는 최적의 해결책을 포괄적으로 기술한 것이다.
디자인 패턴은 고급 소프트웨어 개발에 있어서 공통된 문제에 대한 해결 방법을 공유하고, 코드의 재사용성과 유지보수성을 증가시키기 위한 가이드로서 사용된다.
📌 알고 있는 디자인 패턴이 있는가?
[ 생성 (Creational) 패턴 ]
- 싱글턴 패턴 (Singleton Pattern)
- 인스턴스가 하나만 생성되도록 보장하는 패턴
- 빌더 패턴 (Builder Pattern)
- 생성자에 들어갈 매개 변수를 메서드로 하나하나 받아들여서 복잡한 객체의 생성 과정과 표현 방법을 분리한 패턴
- 추상 팩토리 패턴 (Abstract Factory Pattern)
- 관련된 객체들의 집합을 생성하는 인터페이스를 제공하며, 구체적인 클래스의 생성은 서브 클래스에 위임하는 패턴
[ 구조 (Structural) 패턴 ]
- 어댑터 패턴 (Adapter Pattern)
- 서로 다른 인터페이스를 갖는 클래스들이 함께 동작할 수 있도록 인터페이스를 제공하는 패턴
- 데코레이터 패턴 (Decorator Pattern)
- 객체에 추가적인 기능을 동적으로 추가할 수 있도록 하는 패턴
- 컴포지트 패턴 (Composite Pattern)
- 객체들을 트리 구조로 구성하여 단일 객체와 복합 객체를 동일하게 다룰 수 있도록 하는 패턴
[ 행위 (Behavioral) 패턴 ]
- 관찰자 패턴 (Observer Pattern)
- 객체 간의 일 대 다의 종속 관계를 정의하여, 어떤 객체의 상태가 변할 때 종속 객체들이 자동으로 알림을 받을 수 있도록 하는 패턴
- 전략 패턴 (Strategy Pattern)
- 알고리즘군을 정의하고 각각을 캡슐화하여 교체할 수 있도록 만드는 패턴
- 명령 패턴 (Command Pattern)
- 요청을 객체의 형태로 캡슐화하여 사용자가 보낸 요청을 나중에 이용할 수 있도록 하는 패턴
📌 추상 팩토리와 심플 팩토리의 차이가 무엇인가?
심플 팩토리는 단순한 객체 생성을 위해 사용되고, 추상 팩토리는 연관된 객체의 집합을 생성하고 교체 가능한 팩토리들을 제공하는데 주로 사용된다.
주니어 자바 개발자를 위한 100가지 질문 (9. Spring)_1
📌 스프링 사용의 장점은 무엇인가? 스프링(Spring)은 Java 기반의 오픈 소스 프레임워크로, 다양한 기능을 제공하여 개발자들이 효과적으로 엔터프라이즈급 애플리케이션을 개발할 수 있도록 도
dev-density.tistory.com
'Java' 카테고리의 다른 글
주니어 자바 개발자를 위한 100가지 질문 (9. Spring)_2 (1) | 2024.02.23 |
---|---|
주니어 자바 개발자를 위한 100가지 질문 (9. Spring)_1 (0) | 2024.02.21 |
주니어 자바 개발자를 위한 100가지 질문 (8. Internet)_1 (0) | 2024.02.19 |
주니어 자바 개발자를 위한 100가지 질문 (7. 예외 클래스) (0) | 2024.02.16 |
주니어 자바 개발자를 위한 100가지 질문 (6. Java Web)_2 (0) | 2024.02.15 |