Q. 객체 지향 설계 5원칙
A.
- SRP (Single Responsibility Principle) : 단일 책임 원칙
- 클래스는 단 하나의 책을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유여야 한다.
- OCP (Open-Closed Principle) : 개방-페쇄 원칙
- 확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
- LSP (Liskov Substitution Principle) : 리스코프 치환 원칙
- 상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
- ISP (Integerface Segregation Principle) : 인터페이스 분리 원칙
- 인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
- DIP (Dependecny Inversion Principle) : 의존 역전 원칙
- 고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.
Q. RESTful API 에 대해
A. REST 란 REpresentational State Transfer 의 약자인데, 여기서 ful 을 붙여 ~한 API 라는 표현으로 사용된다.
REST 는 Resource Oriented Architecture 인데 API 설계의 중심에 자원이 있고, HTTP Method 를 통해 자원을 처리하도록 설계하는 것이다.
RESTful 하게 API 를 디자인 한다는 것은?
- 리소스와 행위를 명시적이고 직관적으로 분리하는 것이다.
- Message 는 Header 와 Body 를 명확하게 분리해서 사용한다.
Q. TCP 와 UDP 비교
A. 1. TCP : 대부분의 인터넷 응용 분야들은 신뢰성과 순차적인 전달을 필요로 한다. UDP 로는 이를 만족시킬 수 없으므로 다른 프로토콜이 필요하여 탄생한 것에 TCP 이다. TCP 는 신뢰성이 없는 인터넷을 통해 종단간에 신뢰성 있는 바이트 스트림을 전송하도록 특별히 설계되었다. TCP 서비스는 송신자와 수신자 모두가 소켓이라고 부르는 종단점을 생성함으로써 이루어진다. TCP 에서 연결 설정은 3-way handshake 를 통해 행해진다. TCP 는 멀티 캐스팅이나 브로드캐스팅을 지원하지 않는다.
- UDP : 비연결형 프로토콜이다. IP 데이터코그램을 캡슐화하여 보내는 방법과 연결 설정을 하지 않고 보내는 방법을 제공한다. UDP 는 흐름제어, 오류제어 또는 손상된 세크먼트의 수신에 대한 재전송을 하지 않는다. 이 모두가 사용자 프로세스의 몫이다. 종종 클라이언트는 서버로 짧은 요청을 보내고, 짤븡ㄴ 응답을 기대한다. 만약 요청 또는 응답이 손실된다면, 클라이언트는 time out 이 되고 다시 시도할 수 있으면 된다. 코드가 간단할 뿐만 아니라 TCP 처럼 초기 설정에서 요구되는 프로토콜보다 적은 메시지가 요구된다. UDP 를 사용한 것들에는 DNS 가 있디ㅏ. 어떤 호스트 네임의 IP 주소를 찾을 필요가 있는 프로그램은, DNS 서버로 호스트 네임을 포함한 UDP 패킷을 보낸다. 이 서버는 호스트의 IP 주소를 포함한 UDP 패킷으로 응답한다. 사전에 설정이 필요하지 않으며 그 후에 해제가 필요하지 않다.
Q. Statement , PreparedStatement, Callablestatement 각각의 차이점
A. Statement 와 PreparedStatment 의 가장 큰 차이점은 캐시의 사용여부이다.
- Statement
- 쿼리 문장 분석 -> 컴파일 -> 실행 의 단계를 실행할 때마다 거친다
- 파라미터로 전달되는 SQL 이 완성된 형태로 전달되기 때문에 한눈에 무슨 SQL 인지 파악이 가능
- 매번 컴파일 하기 때문에 성능상 이슈가 있다.
- PreparedStatement
- 쿼리 문장 분석 -> 컴파일 -> 실행의 단계를 한 번 거친 후 캐시에 담아 재사용한다.
- 미리 컴파일되기 때문에 성능상으로 더 낫다.
- ? 로 표시되기 때문에 한눈에 무슨 SQL 인지 파악하기 어렵다.
- Callablestatement
- 데이터베이스 내에 프로시저를 선언하여 클라이언트에서 저장된 프로시저를 실행만 해주면 그 프로시저 내용이 처리된다.
- 즉 프로지서 호출을 위해서 사용하고, 속도가 빠르다는 장점이 있다.