Q. HTTP에 대해 아는 대로 설명
W. 인터넷에서 서버와 클라이언트 간의 통신을 하기 위해 정한 규약이 HTTP이다.
- 무상태성(stateless)
- HTTP method (GET, POST, PUT, DELETE, OPTIONS), status code (401, 409 ...)
Q. HTTP 버전 별로 구분?
- 보통은 1.1을 사용한다.
1.0은 흔히 보고 있는 헤더, 상태코드 추가가 됐습니다.
1.1은 keep-alive TCP는 신뢰성 있는 통신을 하기 위해 커넥션을 맺을 때 3 way handshake 과정이 있다. 매번 하기 어렵다. 기존 연결을 사용
2.0 동기식 처럼 처리하면 느리다. 멀티플랙스드 스트림 한 개로 동시에 여러개 보낸다. 그래도 환영 받지 못했다.
3.0 TCP라 느리다. UDP를 사용한다. (구글에서 QUIC을 만들었음)
Q. GET vs POST, PUT vs PATCH
GET: 리소스를 조회할 때,
POST: 리소스를 만들 때나 변경할 때.
GET보다 POST가 더 안전한가? NO
PUT: 리소스 전체를 업데이트할 때,
PATCH: 리소스 일부만 업데이트할 때.
Q. HTTP vs HTTPS
HTTP는 평문 통신이기 때문에 보안상 취약하다. 암호화된 통신은 HTTPS이다.
양방향 암호화 알고리즘 (RSA)을 통해 서로 암호화, 복호화 처리를 하면서 암호화 된 통신을 할 수 있다.
Q. HTTPS 라고 해서 안전한가?
100% 안전하지는 않다. 인증서가 탈취된다면 뚫릴 수 있다.
JAVA
Q. Interface vs Abstract class
Interface는 상수나 추상 메서드만 존재
Abstract class는 하나 이상의 추상 메서드가 존재
Q. 다중 상속? No.
다이아몬드 문제 : A - (B, C) - D 일때 만약 부모들 중에 메서드가 같으면 누구의 것을 가져올 것인가? -> 다중 상속 금지
Q. Object class
자바에서 최고 조상 클래스
Q. Static 키워드, 장단점
프로세스 메모리 구조를 활용해서 대답해야 한다.
장점
GC의 관리를 받지 않으므로서 GC의 오버헤드를 방지할 수 있다.
단점
static 키워드를 사용하면 데이터 영역으로 가기 때문에 GC 관리를 받지 않는다. 메모리 누수의 원인이 된다.
static 변수를 여러 스레드에서 동시에 접근 가능하기 때문에 동시성 문제가 발생할 수 있다.
객체 지향의 캡슐화를 파괴하는 요인 중 하나이다.
Q. Final 키워드
Final 변수: 상수
Final class: 상속 불가
Final method: override 불가
Q. ==, equals 차이
== 는 레퍼런스 값을 비교, equals 는 객체 안에 있는 값들을 비교
Q. 접근 제어자 종류와 특성
public: 모든 곳에서 접근 가능
protected: 같은 패키지, 상속 받은 자식
default: 같은 패키지
private: 같은 클래스
Q. Throw vs Throws
Q. Error vs Exception
Error: 시스템적으로 문제가 발생했을 때 (ex. stackoverflow error)
Exception: 개발자가 처리할 수 있을 때
checked exception: 컴파일 시 체크 (ex. IO Exception) 트랜잭션 내에 문제가 발생하면 롤백이 되지 않는다.
unchecked exception: 런타임 시 체크 (ex. NullPointException) 트랜잭션 내에 문제가 발생하면 롤백 된다.
Q. Reflection
객체를 통해 클래스 정보를 분석하는 기능
Q. String, StringBuffer, StringBuilder
String: immutable(불변객체)
StringBuffer: mutable, 동시성 처리를 하기 때문에 시간이 오래 걸린다.(thread-safe)
StringBuilder: mutable, 동시성 처리를 하지 않는다.
Q. JVM 구조는?
Q. JVM 메모리 구조 (프로세스 메모리 구조와 비교해서 설명한다.)
method area
stack
heap: 객체 생성, GC 동작
Q. Garbage collection은 무엇인가?
Q. GC 동작방식 설명?
Q. Minor gc? Major gc?
Q. Stop-the-world? GC가 동작하는 동안 해당 쓰레드 외의 다른 쓰레드들이 전부 멈춘다.
Q. GC 종류? 자바 9 이상 default는 G1GC
Q. G1GC에 대해 설명?
Q. 멀티스레드에서 동시성 처리 방법?
비관적 락, 낙관적 락 개념 중요
1. synchronized
2. volatile : 메인 메모리와 캐시 메모리 사이의 데이터 정합성 문제 발생 -> 애초에 메인 메모리를 보게 하자!
3. atomic class
4. concurrentHashMap
5. 불변 객체
Spring
Q. IoC(Inversion of Control): 제어의 역전. 객체를 생성하는 것을 개발자가 했는데 제어권을 스프링 컨테이너에게 줬다.
Q. DI(Dependency Injection): 의존성 주입. 스프링 컨테이너가 제공하는 빈을 통해 객체를 생성한다.
Q. Spring DI 하는 방법?
필드 주입
세터 주입
생성자 주입
생성자 주입을 써야하는 이유 : A서비스, B서비스가 있을 때 서로 DI를 했을 경우 순환 참조 문제 발생 -> 컴파일 시점에 에러가 남. 미리 알 수 있음
Q. AOP?
관점 지향 프로그래밍. 주요 로직 외의 부가적인 로직들을 AOP를 설정해두면 여러 군데에서 사용할 수 있고 주요 로직에 집중할 수 있게 해준다.
Q. Singleton
인스턴스가 단 하나만 사용해야할 때
Q. Spring bean은 왜 모든 객체가 싱글톤으로 만들어졌을까?
스프링 부트의 내장 웹서버는 톰캣. 톰캣 서버 특징은 멀티 스레드 환경을 자동으로 구성함. 인스턴트가 싱글턴 객체가 아니라면 메모리 누수가 일어날 수 있다.
Q. Singleton 단점
static으로 이루어져있어서 동시성 문제 발생
Q. Spring MVC? 동작 순서?
Q. Filter vs Interceptor
요청 -> filter -> dispatcher servlet -> interceptor
interceptor는 DS안에서 동작하기 때문에 Bean을 사용할 수 있다.
Q. Spring boot?
기존의 Spring Framework는 개발 환경 설정이 복잡하고 어려웠다. (ex. web.xml ...)
Q. Spring boot에 autoconfiguration 동작 방식
spring.factories
JPA
Q. N+1
lazy 로딩시 --
Q. N+1 해결 방법
1. 패치 조인을 통해 처음부터 관련된 것들을 한번에 가져옴.
패치 조인 문제점 : 페이징 처리에 어려움이 있다.
2. 배치 사이즈
3. 엔티티 그래프
요즘은 연관관계 아예 안쓰는 회사도 있다.
그럼 eager 로딩하면 되지 않냐? 모든 연관관계의 데이터 다 가져옴. -> eager 로딩 쓸 일 없다.
Q. JPA Entity 객체 생명주기
영속상태: find 해오면 자동으로 영속 상태가 됨.
준영속상태: 데이터를 트랜잭션에서 커밋, 플러시, 클리어 했을 때
비영속상태: 데이터를 지웠을 때
Q. Persistence Context(영속성 컨텍스트)
DB에서 find해오면 영속상태가 되는데 1차 캐시에 저장해둔다.
읽어온 값들을 중간에 변했는지 체크해주는 역할 (더티체킹)
Q. JPA의 트랜잭셔널 옵션?
ReadOnly: 슬레이브에서 읽어감
Propagation 7가지 옵션
isolation 3가지 옵션
DATABASE (NoSQL/RDBMS)
RDBMS vs NoSQL
RDBMS: 관계를 지어서 관리를 해야하는 것들 - 상품, 주문, 배송, 계정
NoSQL:
그 외
Q. 쿠키 vs 세션
쿠키는 클라이언트에서 관리해서 보안이 취약하다.
세션은 서버에서 관리해서 보안이 비교적 좋다.
Q. Kotlin, redis, kafka, msa 등등
Q. msa 패턴, 페일오버
'정기간행물 > daily' 카테고리의 다른 글
서버 환경의 변화 (변재영 멘토님 특강) (0) | 2023.10.28 |
---|---|
[슈코데이 세미나] 불가능을 가능으로 만드는 토스의 엔지니어링 직군 (0) | 2023.10.27 |
단축 URL 생성 (다담다) (0) | 2023.10.20 |
blob? Formdata? MultipartFile? (다담다) (0) | 2023.10.19 |
모던 자바 인 액션 시작 (0) | 2023.10.18 |