1 . 객체지향
프로그래밍에서 필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고
그 객체들간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍
장점:코드 재사용 용이 , 유지보수 쉬움
단점: 설계시 많은 시간 , 노력이 필요
추상화 : 공통의 속성이나 기능을 묶어 이름을 붙이는 것
캡슐화 : 코드를 재수정 없이 재활용 , 접근 제어자를 통한 정보 은닉
상속 : 부모클래스의 속성과 기능을 그대로 이어받아 사용할수있게하고
기능의 일부분을 변경해야할경우 상속받은 자식 클래스에서 해당 기능만 다시 정의할수 있게 함
다형성 : 하나의 변수명,함수명 이 상황에따라 다른 의미로 해석되는것
오버라이딩 : 상위 클래스가 가지고 있는 메서드를 하위 클래스가 재정의해서 사용
오버로딩 : 같은 이름의 함수를 여러개 정의하고 매개변수와 타입을 다르게 하는 것
2 . solid : 객체 지향 설계
SRP : 단일 책임 원칙 : 한 클래스는 하나의 책임만 가져야 한다.
OCP : 개방 폐쇄 원칙 : 확장에는 열려있어야하나 변경에는 닫혀잇어야 한다.
LSP : 리스코프 치환 원칙 : 객체는 프로그램의 정확성을 깨뜨리지 않으면서 하위 타입의 인스턴스로 바꿀수 있어야 한다.
ISP : 인터페이스 분리 원칙 : 하나의 일반적인 인터페이스보다 여러개의 구체적인 인터페이스가 낫다.
DIP : 의존관계 역전 원칙 : 추상화에 의존해야하지 구체화에 의존하면 안된다.
3 . 프로세스와 스레드
프로세스 : 운영체제로부터 시스템 자원을 할당받는 작업의 단위
스레드 : 프로세스 내에서 실행되는 여러 흐름의 단위
4 . 제네릭
클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것
컬렉션 클래스에서 제네릭을 사용하는 이유: 컬랙션 클래스에 저장되는 인스턴스 타입을 제한하여 런타임에 발생할수 있는 잠재적인 모든 예외를 컴파일 시점에서 잡아 낼수 있음
5 . 컬렉션 프레임워크
List : 순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다.
Set : 순서를 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다.
Map : 키, 값으로 이루어진 데이터의 집합으로, 순서는 유지되지 않으며 키의 중복을 허용하지 않으나 값의 중복은 허용한다.
6 . 데드락: 둘 이상의 스레드가 lock을 획득하기 위해 기다리는데 , 이 lock을 잡고 있는 스레드도 똑같이 다른 lock을 기다리면서 서로 블락상태에 놓이는것
해결방법으로는 우선순위를 선정해 자원을 선점하도록 하는 것과 공유 불가능한 상호 배제 조건을 제거하는 것
7 . AOP : 관점 지향 프로그래밍 : 핵심적인 관점 , 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화
8. DI : 의존성주입의 약자, 객체들간의 의존성을 줄이기 위해 사용되는 스프링의 IOC컨테이너의 구체적 구현 방식
필드 , SETTER , 생성자 주입 3가지가 있으며 ,개발코드 부분에서 객체를 생성하는 것이 아니라 데이터 주입만 담당하는 별도의 공간에서 객체를 생성하고
데이터 간의 의존성을 주입해 개발코드에서 가져다 쓰면서 의존성을 줄임
9 . IOC : 제어의 역전으로 인스턴스의 생성부터 소멸까지 개발자가 아닌 컨테이너가 대신 관리해주는 것
10 . 필터와 인터셉터의 차이점 : 실행시점에서 차이 필터는 dispatcherServlet로 요청이 가기전에 실행되고 인터셉터는 controller로 요청이 가기전 실행되어 호출되는 시점에서 차이가 존재
11 . 클래스와 인스턴스 , 객체
클래스 : 속성과 행위를 변수와 메소드로 정의한 것
인스턴스(객체) : 클래스에서 정의한것을 토대로 실제 메모리에 할당 된것
객체(Object)는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스(Class)이며,
이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스(Instance) 이다.
12 . String , builder , buffer
String : String은 불변하다는 특징을 가지고 있어 수정을 하지못하고 새로운 String 인스턴스가 생성되고 전에 있던 String은 GC에 의해 사라짐
buffer : 멀티 쓰레드 프로그래밍에서 동기화
builder : 단일 쓰레드 프로그램에서 사용
13. TCP (Transmission Control Protocol) 전송 제어 프로토콜
- 연결지향 - TCP 3 way handshake (가상 연결)
TCP 3 way handshake란?
SYN : 접속 요청 , ACK:수락
1. 클라이언트 에서 SYN을 서버 쪽으로 전송을 한다.(연결 가능한지 체크)
2.요청을 수락을 하게 되면 서버가 다시 클라이언트에서 SYN 과 ACK를 보내준다.
3.그렇게 되면 클라이언트는 서버가 접속 요청과 수락이 되었다는것을 확인하고 서버 쪽으로 ACK를 보낸다.
4.(1,2,3)이 되면 데이터 전송을 한다.
- 데이터 전달 보증
- 순서 보장
- 신뢰가능한 프로토콜
14 .UDP (User Datagram Protocol) 사용자 데이터그램 프로토콜
TCP 의 기능이 모두 없다.
단순하고 빠른게 다다.
IP와 동일하지만 PORT만 추가된것이다.
15 . IP (인터넷 프로토콜)
지정한 IP 주소(IP Address)에 데이터 전달
패킷이라는 통신 단위로 데이터 전달
16 . N+1 문제 : Lazy 로딩에 의해 한번에 모든 정보를 가져오지않아 발생하는 문제 패치조인을 사용해서 해결 가능
17 . 영속성 컨텍스트
영속성 컨텍스트는 엔티티를 영구 저장하는 환경이라는 뜻이다. EntityManager는 영속성 컨텍스트에 Entity를 보관하고 관리
영속성 컨텍스트 장점
1차캐시 : 1차캐시에서 데이터를 먼저 찾고 없으면 DB에서 찾는다.
동일성 보장
쓰기 지연 : 트랜잭션을 커밋하기 직전까지 쿼리를 날리지 않고 영속성 컨텍스트에 보관한다.
변경 감지 : 스냅샷을 이용하여 영속성 컨텍스트에 저장된 엔티티는 변경이 일어나면 자동으로 데이터베이스 에서 수정된다.
지연 로딩 : 실제 객체 대신 프록시 객체를 로딩해두고 해당 객체를 실제 사용할 때 영속성 컨텍스트를 통해 불러오는 방법
비영속 : 영속성 컨텍스트와 전혀 무관한 상태로 순수한 객체의 상태 (처음 객체가 생성되면 비영속 상태)
영속 : 영속성 컨텍스트에 저장된 상태
준영속 : 영속성 컨텍스트에서 관리하다, 영속성 컨텍스에서 분리된 상태, 준영속 상태는 영속 상태 였던 적이 있기 때문에 @Id 값을 반드시 가지고 있습니다.
삭제 : 삭제된 상태
18 . GC:
young : 새롭게 생성된 객체가 할당되는 영역 이며 많은 객체가 young영역에 생성되었다가 사라짐
새로 생성된 객체가 Eden 영역에 할당 Eden영역이 꽉차게 되면 Minor GC 실행
Eden 영역에서 사용되지 않는 객체의 메모리 해체 , Eden 영역에서 살아님은 객체는 1개의 Suvivor 영역으로 이동
이 과정이 반복되다 Survivor 영역이 가득차게 되면 살아남은 객체를 다른 Suvivor영역으로 이동
이 과정이 반복되어 살아남은 객체는 Old 영역으로 이동
old : young영역에서 살아남은 객체가 복사되는 영역 , young영역보다 크게 할당 old 영역이 꽉차게 되면 Major GC
19 . 세션과 쿠키
세션 : 일정시간 동안 같은 사용자로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지 시키는 기술
저장 웹 서버
쿠키 : 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일
차이 : 쿠키는 서버의 자원을 전혀 사용 하지 않고 세션은 서버의 자원을 사용
보안면에서는 세션이 더 우수 , 요청 속도는 쿠키가 더 빠르다.
20 . JWT
jwt : 유저를 인증하고 식별하기 위한 토큰 기반의 인증
header , payload , signature (header 는 알고리즘 , 사용자의 데이터나 권한 , 비밀키 )
1.사용자가 웹서비스 인증
2.서버에서 서명된 jwt 생성 하여 클라이언트에 응답으로 돌려줌
3.클라이언트가 서버에 데이터 요청시 jwt 를 헤더에 첨부
4. 검증 후 데이터 내려줌
HS256 : jwt의 서명 부분과 유저가 보낸 jwt의 header.payload 부분을 똑같은 secret key로 서명후 같은지 비교하는 방식으로 토큰을 검증
21 . MVC 와 MVVM 패턴
MVC
- 비즈니스 로직과 ui로직을 분리 유지보수를 독립적으로 수행
클라이언트로부터 요청이 들어오면 dispatcherServlet이 가장 먼저받는다.
HandlerMapping이 요청 URL과 매핑되는 Controller 검색 후 리턴
HandlerAdapter에서 알맞은 controller 처리요청
ViewResolver에서 controller가 리턴한 view 검색후 view를 클라이언트로 보냄
MVVM
VIEW (사용자가 보여지는 VIEW)
VIEWMODEL VIEW를 표현하기 위해 만들어진 VIEW 위한 MODEL
MODEL 비즈니스 로직 ,서비스 클라이언트 등으로 구성
VIEW에 입력이 들어오면 VIEWMODEL에게 명령
VIEWMODEL은 필요한 데이터를 MODEL에게 요창
MODEL은 VIEWMODEL에게 요청된 데이터를 응답
VIEWMODEL은 응답 받은 데이터를 가공해서 저장
VIEW는 VIEWMODEL과의 DATABINDING으로 인해 자동으로 갱신
22 . equlas 재정의
객체의 주소값이 다르기 때문에
객체를 같도록 하기 위해서 id라는 pk값으로 equlas를 재정의
hashcode 는 같은 값을 가진 객체가 서로 다른 해시값을 갖게 될 수 있는 문제점으로 equlas 와 hashcode는 같이 재정의를 해주는것이 좋다.
hashcode 는 객체를 식별할 하나의 정수 값 이다.
23 . JVM
자바 컴파일러가 .java 파일을 컴파일 하면 .class라는 자바 바이트코드로 변환 , 바이트 코드는 기계어가 아니기 때문에 운영체제에서 실행을 못하는데 이때 운영체제가 이해 할수 있도록 해석해주는것
Class Loader : 클래스 파일을 동적으로 로드 하고 링크를 통해 배치하는 작업을 수행 바이트 코드들을 엮어서 JVM의 메모리 영역인 Runtime Data Areas에 배치
Execution Engine : 바이트 코드를 명령어 단위로 읽어서 실행한다.
Runtime Data Area : 자바 애플리케이션을 실행 할 때 사용되는 데이터들을 적재 하는 영역
24 . 자바메모리 영역
메서드 영역
static 변수, 전역 변수, 코드에서 사용되는 Class 정보 등이 할당됩니다.
스택(Stack)
지역 변수, 함수(메서드) 등이 할당되는 LIFO(Last In First Out) 방식의 메모리입니다.
힙(Heap)
new 연산자를 통한 동작할당된 객체들이 저장되며, 가비지 컬렉션에 의해 메모리가 관리됩니다.
25 . REST(Representational State Transfer)
자원을 이름으로 구분하여 해당 자원의 상태를 주고 받는 모든 것을 의미한다.
REST 구성 요소
자원(Resource) URI : 모든 자원에 고유한 ID가 존재하고 자원은 Server에 존재한다.
행위 : http 프로토콜의 Method를 사용한다.
표현:Client가 자원의 상태에 대한 조작을 요청하면 Server는 이에 적절한 응답을 보낸다.
특징 :
서버-클라이언트 구조 : 자원이 있는 쪽이 server , 자원을 요청하는 쪽이 Client 이다.
Stateless(무상태) : HTTP 프로토콜이 Stateless Protocol이므로 REST역시 무상태성을 갖는다.
Client의 context를 server에 저장하지 않는다.
캐시 처리 가능 : 웹에서 사용하는 기존의 인프라를 그대로 활용할수 있다.
계층화 : Client는 REST API Server만 호출 한다.
장점 :
HTTP 프로토콜의 인프라를 그대로 사용하므로 별도의 인프라를 구축할 필요가 없다.
HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
서버와 클라이언트의 역할을 명확하게 분리한다.
단점:
표준이 존재 하지 않는다.
사용할수 있는 메소드가 4가지 밖에 없다.
26 . Call by value / Call by reference
call by value : 메서드를 호출 할때 값을 넘겨준다.메서드 호출하는 호출자의 변수와 호출당하는 수신자의 파라미터는 복사된 서로 다른 변수
값만을 전달하기 때문에 수신자의 파라미터를 수정해도 호출자의 변수에는 아무런 영향이 없다.
call by reference : 주소를 직접 전달 한다.
호출자의 변수와 호출당하는 수신자의 파라미터는 동일한 변수
메서드 내에서 파라미터를 수정하면 그대로 원본 변수에 반영
27 . 싱글톤
객체의 인스턴스가 오직 1개만 생성 되는 패턴
최초 한번 new 연산자를 통해 메모리 영역을 사용하기 때문에 메모리 낭비 방지 , 데이터 공유가 쉽다.
28 . ORM : 객체와 DB의 테이블을 Mapping 시켜 RDB 테이블을 객체지향적으로 사용하게 해주는 기술
29 . JPA : 쿼리를 만들지 않음 , 1차 캐싱 , 쓰기지연 , 변경감지 , 지연로딩 , 객체 중심으로 개발 가능
MYBATIS : 쿼리문을 XML로 분리 , 복잡한 쿼리 작성 가능 , 객체,쿼리문 모두 관리 해야 함
30 . 블로킹 / 논블로킹 , 동기 / 비동기
블로킹/논블로킹
= 요청받는 함수가 제어권(함수실행권)을 언제 넘겨주느냐의 차이
블로킹 : 요청받는 함수가 작업을 모두 마치고 나서야 요청자에게 제어권을 넘겨줌 (그동안 요청자는 아무것도 하지않고 기다림)
논블로킹 : 요청받은 함수가 요청자에게 제어권을 바로 넘겨줌 (그동안 요청자는 다른 일을 할 수 있음)
동기/비동기
= 요청받은 함수가 작업을 완료했는지를 체크해서 순차적 흐름의 차이
동기 : 작업을 동시에 수행 , 동시에 끝남
비동기 : 시작 ,종료가 일치 x