1. WAS와 WS의 차이
- WAS(Web Application Server): 비즈니스 로직을 넣을 수 있음(Ex-Tomcat, PHP, ASP, .Net 등)
- WS(Web Server): 비즈니스 로직을 넣을 수 없음(Ex-Nginx, Apache 등)
2. 많은 트래픽이 발생할 경우 대처하는 방법
- 스케일 업(Scale Up): 서버에 CPU나 RAM 등을 추가하여 서버의 하드웨어 스펙을 향상시키는 방법
- 스케일 아웃(Scale Out): 서버를 여러 대 추가하여 시스템을 증가시키는 방법
3. CORS 란?
도메인이 다른 2개의 사이트가 데이터를 주고 받을 때 발생하는 문제
서버 내에서 요청이 허락된 도메인에만 데이터를 주기 위해서인데, 요청을 허락하기 위해서는 Access-Control-Allow-Origin : {도메인} 과 같은 내용을 Response의 헤더에 추가해주어야 한다.
4. 아파치는 멀티 프로세스인가 멀티 쓰레드인가?
기본적으로 멀티 프로세스로 구현. 하지만 설정에 따라 멀티 쓰레드 같이 운용 가능
5. 톰캣은 멀티 프로세스인가 멀티 쓰레드인가?
요청을 처리하기 위한 쓰레드 풀을 관리. 그리고 요청이 오면 해당 쓰레드 풀에서 쓰레드를 꺼내 요청을 처리
6. 디자인 패턴
- 생성 패턴
- 팩토리 패턴: 객체를 생성하기 위한 디자인 패턴
- 추상 팩토리 패턴: 객체를 생성하는 팩토리를 생성하기 위한 디자인 패턴
- 빌더 패턴: 상황에 따라 동적인 인자를 필요로 하는 객체를 생성하기 위한 디자인 패턴
- 싱글턴 패턴: 객체를 1개만 생성하여 항상 참조 가능하도록 고안된 디자인 패턴
- 구조 패턴
- 어댑터 패턴: 호환성이 맞지 않는 두 클래스를 연결하여 사용하기 위한 디자인 패턴
- 프록시 패턴: 어떤 객체에 접근하기 위해 대리인을 사용하는 디자인 패턴
- 데코레이터 패턴
- 퍼사드 패턴: 어떤 복합적인 기능에 대해 간략화된 인터페이스를 제공하는 디자인 패턴
- 행위 패턴
- 전략 패턴: 상황에 따라 다른 전략을 사용하기 위한 디자인 패턴
- 옵저버 패턴: 값을 관찰하여 빠르게 반영하기 위한 디자인 패턴
- 커맨드 패턴: 실행될 기능을 캡슐화하여 재사용성이 높은 클래스를 설계하기 위한 디자인 패턴
DatabaseController=> SingletonPattern을 사용하여 데이터베이스를 제어하는 하나의 인스턴스만을 생성
DatabasePool => ObjectPool Pattern을 사용하여 데이터베이스 객체를 미리 생성하여 Performance 향상
UnitFactory => FactoryPattern을 사용하여 객체 생성을 최적화 + Singleton Pattern을 사용하여 하나의 공장을 사용
BaseFrame => ObserverPattern을 사용하여 사용자의 정보가 생신되면 View의 값들도 갱신되게 함
PlayerInfo => StrategyPattern을 사용하여 상황에 따라 다른 스킬을 사용
7. Servlet(서블릿)이란?
클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술. Spring MVC에서 Controller로 이용되며, 사용자의 요청을 받아 처리한 후에 결과를 반환.
8. Spring 기초지식(DI, DL, IoC, AOP)
- DI(Dependency Injection): 한 객체에서 다른 객체를 필요로 하여 의존성을 갖게 하는 기술
- DL(Dependency Look-up): 한 객체에서 필요로 하는 다른 객체를 찾아서 사용하는 기술
- IoC(Inversion of Control): 직접 제어해야 하는 부분에 대한 권한을 프레임워크 등에 넘기는 기술
- AOP(Aspect Oriented Programming): 공통의 관심 사항을 추출하여 원하는 곳에 적용하는 기술
9. VO와 DTO, BO, DAO란?
- DAO(Data Access Object): DB에 접근하여 실제 데이터를 조회 또는 조작하는 클래스, Repository 또는 Mapper에 해당
- BO(Business Object): 여러 DAO를 활용해 비즈니스 로직을 처리하는 클래스, Service에 해당
- DTO(Data Transfer Object): 데이터를 주고 받기 위해 사용하는 클래스
- VO(Value Object): 실제 데이터만을 저장하는 클래스
@Getter
// 데이터만 저장하는 VO
public class Board {
private String title;
private String contents;
}
// DB에 접근하여 데이터를 조회하는 DAO(여기서는 DB쪽 X)
public class BoardRepository {
private List<Board> boardList = new ArrayList<>();
public void add(Board board) {
boardList.add(board);
}
public List<Board> findByTitleContaining(String title) {
return boardList.stream()
.filter(b -> b.getTitle().contains(title))
.collect(Collectors.toList());
}
}
// DAO를 가지고 비지니스 로직을 처리하는 BO
public class BoardService {
private BoardRepository boardRepository;
public void addBoard(Board board) {
boardRepository.add(board);
}
public List<Board> searchBoard(String title) {
return boardRepository.findByTitleContaining(title);
}
}
10. Dispatcher Servlet(디스패처 서블릿)이란?
톰캣과 같은 서블릿 컨테이너를 통해 들어오는 모든 요청을 제일 앞에서 받는 프론트 컨트롤러.
Dispatcher Servlet(디스패처 서블릿)은 공통된 작업을 처리한 후에, 적절한 세부 컨트롤러로 작업을 위임. 그리고 각각의 세부 컨트롤러는 처리할 부분을 처리하고 반환할 view를 Dispatcher Servlet(디스패처 서블릿)에 넘김.
11. Spring에서의 싱글턴 패턴
Java로 기본적인 싱글턴 패턴을 구현하면 단점이 발생한다.
- private 생성자를 갖고 있어 상속이 불가능
- 테스트하기 힘들다.
- 서버 환경에서는 싱글톤이 1개만 생성됨을 보장하지 못한다.
- 전역 상태를 만들 수 있기 때문에 바람직하지 못하다.
그래서 스프링은 컨테이너를 통해 직접 싱글턴 객체를 생성하고 관리
- static 메소드나 private 생성자 등을 사용하지 않아 객체 지향적 개발을 할 수 있다.
- 테스트를 하기 편리하다.
12. MVC 패턴이란?
아키텍쳐를 설계하기 위한 디자인 패턴
- Model: 데이터를 저장하는 컴포넌트
- View: 사용자 인터페이스(UI) 컴포넌트
- Controller: 사용자의 요청을 처리하고 Model과 View를 중개하는 컴포넌트
13. Spring MVC란?
웹 애플리케이션 개발을 위한 MVC 패턴 기반의 웹 프레임워크
아래 컴포넌트들로 구성
- Dispatcher Servlet: 클라이언트의 요청을 먼저 받아들이는 서블릿으로, 요청에 맞는 컨트롤러에게 요청을 전달
- Handler Mapping: 해당 요청이 어떤 컨트롤러에게 온 요청인지 검사
- Controller: 클라이언트의 요청을 받아 먼저 받아들이는 서블릿으로, 요청에 맞는 컨트롤러에게 요청을 전달
- ViewResolver: View의 이름을 통해 알맞은 View를 찾음
- View: 사용자에게 보여질 UI 화면
14. Spring MVC 작동 원리
1) 클라이언트가 URL을 통해 요청을 전송
2) 디스패처 서블릿이 해당 요청에 맞는 컨트롤러에게 전달 (핸들러 매핑을 통해 어느 컨트롤러에게 온 요청인지 찾고 핸들러 어댑터에게 요청의 전달을 맡김)
3) 컨트롤러는 비즈니스 로직을 처리한 후 반환할 뷰의 이름을 반환
4) 디스패처 서블릿은 컨트롤러에게 뷰에 전달한 데이터 추가 (디스패처 서블릿이 뷰 리졸버를 통해 반환할 뷰를 찾은 후)
5) 데이터가 추가된 뷰 반환
15. Spring MVC 장점과 단점 그리고 SpringBoot
장점
- 의존성 주입을 통해 컴포넌트 간의 결합도를 낮출 수 있어 단위 테스트 용이
- 제어의 역전을 통해 빈(객체)의 라이프사이클에 관여하지 않고 개발에 집중 가능
단점
- XML 기반으로 하는 프로젝트 설정은 너무 많은 시간을 필요
- 톰캣과 같은 WAS 별도로 설치 필요
해결책
- 설정 시간 감소(자동설정을 도입하여 디스패처 서블릿 등과 같은 설정 시간을 줄여줌)
- 외부 도구 사용 편리(프로젝트의 의존성을 독립적으로 선택하지 않고 spring-boot-starter로 모아두어 외부 도구들을 사용하기 편리)
- 내장 톰캣(내장 톰캣을 제공하여 별도의 WAS를 필요로 하지 않음)
16. @Bean, @Configuration, @Componenet 어노테이션
- @Bean: 외부 라이브러리 또는 설정을 위한 클래스를 Bean으로 등록할 때 사용
- @Configuration: 1개 이상의 @Bean을 제공하는 클래스의 경우 반드시 명시
- @Component: 직접 개발한 클래스를 Bean으로 등록하고자 하는 경우
17. Spring Filter와 Interceptor의 차이
- Filter: Dispatcher Servlet에 요청 전/후에 부가적인 작업을 처리
- Interceptor: 스프링이 제공. Dispathcer Servlet이 컨트롤러를 호출하기 전과 후에 요청을 가로채서 처리
18. OOP
필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 그 객체들 간의 상호작용을 통해 프로그램을 설계하고 개발하는 방법론.
- 캡슐화: 자료 조작을 내부에서 하는 방식
- 추상화: 여러 객체들의 공통적인 특징(속성과 기능)을 도출
- 상속: 상위클래스의 메소드를 하위클래스에서 재정의해서 사용
- 다형성: 변수 또는 함수가 다양한 방법으로 동작
장점
- 코드 재사용 용이
- 유지 보수 쉬움
단점
- 처리 속도가 상대적으로 느림
- 설계 시 많은 시간과 노력이 필요
19. Thread : 하나의 프로세스 내부에서 독립적으로 실행되는 하나의 작업 단위
1) Thread 클래스 상속받아서 사용
public class MainClass {
public static void main(String[] args) {
MainClass mainCls = new MainClass();
mainCls.main();
}
public void main() {
Thread thread = new myThread();
thread.start();
}
public class myThread extends Thread {
@Override
public void run() {
System.out.println(“myThread”);
}
}
}
2) Runnable 클래스 구현해서 사용
Thread가 아닌 다른 클래스를 상속받고 싶을 때, Runnable 클래스를 구현(자바에서 상속은 1개 클래스까지만 허용)
public class MainClass {
public static void main(String[] args) {
MainClass mainCls = new MainClass();
mainCls.main();
}
public void main() {
Thread thread = new Thread(new myRunnable());
thread.start();
}
public class myRunnable extends Something implements Runnable {
@Override
public void run() {
System.out.println(“myRunnable”);
}
}
}
20. B-Tree(Balanced Tree):
- 트리 자료 구조의 일종. 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조.
- 모든 리프 노드들이 같은 레벨을 가질 수 있도록 자동으로 밸런스를 맞추는 트리. -> 정렬된 순서 보장. 멀티레벨 인덱싱을 통한 빠른 검색(DB에서 사용하는 자료 구조)
- key 검색 과정 : 루트노드에서 시작하여 하향식으로 검색. 검색하고자 하는 key를 k라 가정.
(1) 루트 노드에서 시작하여 key들을 순회하면서 검사
(1-1) 만일 k와 같은 key를 찾았다면 검색을 종료.
(1-2) 검색하는 값과 key들의 대소관계를 비교. 어떠한 key들 사이에 k가 들어간다면 해당 key들 사이의 자식노드로 내려간다.
(2) 해당 과정을 리프노드에 도달할 때까지 반복
고급
1. Spring Security 작동 원리
2. Spring AOP의 작동 원리(JDK 다이나믹 프록시)
3. AspectJ AOP의 작동 원리(CGLib 기반 바이트 조작 프록시)
4. Spring WebFlux란?
5. CDN이란?
물리적으로 떨어져 있는 사용자에게 컨텐츠를 더 빠르게 제공하기 위해 고안된 기술
콘텐츠에 대한 요청이 발생하면 사용자와 가장 가까운 위치에 존재하는 서버로 매핑시켜, 요청된 파일의 캐싱된 버전으로 요청을 처리
'CS > 공부' 카테고리의 다른 글
[CS] 개발자 기초 질문 20선 (0) | 2021.12.08 |
---|