❕Chat GPT가 추천한 이름이니 너무 뭐라고 하지 말 것
WEEK STUDY
- 주차마다 모든 팀원들이 주제에 해당하는 부분에 대해 요약.md를 작성해 pr을 보냅니다.
- 돌아가면서 간단하게 발표와 질의응답 시간을 가집니다.
- 익명 투표로 베스트 워크북을 선정합니다.
- 베스트 워크북으로 선정된 팀원의 md는 메인에 링크됩니다.
SPECIAL STUDY
- 주차마다 팀원들끼리 돌아가면서 당번을 정합니다.
- 당번은 평소 주차 스터디 주제보다는 심화된 주제에 대해 딥다이브 아티클을 발표합니다.
- 주마다 하루씩 만나 대면으로 스터디합니다.
- 부득이한 사유가 있다면 1회 불참이 가능합니다. 다만 SPECIAL SRUDY 당번인 경우에는 불참이 불가능합니다.
- 지각이나 결석이 있을 경우 3000원의 벌금이 있습니다.
- 스터디 직전까지 PR을 작성해야 합니다.
- 스터디에 불참하더라도 스터디룸 대여비는 모두 분할하여 정산합니다.
주차 | 날짜 | 주제 | 당번 |
---|---|---|---|
1 | 7/24 | Java & Spring | 조희수 |
2 | 7/31 | Java & Spring | 정혜선 |
3 | 8/7 | Network | 김성일 |
4 | 8/14 | Network | 문인규 |
5 | 8/21 | Network, Database | 진성일 |
6 | 8/28 | Network, Operating System | 황인준 |
7 | 9/4 | Operating System | 조희수 |
8 | 9/11 | Operating System | 정혜선 |
-
1주차
JVM
- 그럼, 자바 말고 다른 언어는 JVM 위에 올릴 수 없나요?
- 반대로 JVM 계열 언어를 일반적으로 컴파일해서 사용할 순 없나요?
- VM을 사용함으로써 얻을 수 있는 장점과 단점에 대해 설명해 주세요.
- JVM과 내부에서 실행되고 있는 프로그램은 부모 프로세스 - 자식 프로세스 관계를 갖고 있다고 봐도 무방한가요?
final 키워드
- 그렇다면 컴파일 과정에서, final 키워드는 다르게 취급되나요?
인터페이스와 추상 클래스의 차이
- 왜 클래스는 단일 상속만 가능한데, 인터페이스는 2개 이상 구현이 가능할까요?
리플렉션
- 의미만 들어보면 리플렉션은 보안적인 문제가 있을 가능성이 있어보이는데, 실제로 그렇게 생각하시나요? 만약 그렇다면, 어떻게 방지할 수 있을까요?
- 리플렉션을 언제 활용할 수 있을까요?
static class와 static method
- static 을 사용하면 어떤 이점을 얻을 수 있나요? 어떤 제약이 걸릴까요?
- 컴파일 과정에서 static 이 어떻게 처리되는지 설명해 주세요.
Java의 Exception
- 예외처리를 하는 세 방법에 대해 설명해 주세요.
- CheckedException, UncheckedException 의 차이에 대해 설명해 주세요.
- 예외처리가 성능에 큰 영향을 미치나요? 만약 그렇다면, 어떻게 하면 부하를 줄일 수 있을까요?
Synchronized
- Synchronized 키워드가 어디에 붙는지에 따라 의미가 약간씩 변화하는데, 각각 어떤 의미를 갖게 되는지 설명해 주세요.
- 효율적인 코드 작성 측면에서, Synchronized는 좋은 키워드일까요?
- Synchronized 를 대체할 수 있는 자바의 다른 동기화 기법에 대해 설명해 주세요.
- Thread Local에 대해 설명해 주세요.
Java Stream
- Stream과 for ~ loop의 성능 차이를 비교해 주세요,
- Stream은 병렬처리 할 수 있나요?
- Stream에서 사용할 수 있는 함수형 인터페이스에 대해 설명해 주세요.
- 가끔 외부 변수를 사용할 때, final 키워드를 붙여서 사용하는데 왜 그럴까요? 꼭 그래야 할까요?
-
2주차
Java의 GC
- finalize() 를 수동으로 호출하는 것은 왜 문제가 될 수 있을까요?
- 어떤 변수의 값이 null이 되었다면, 이 값은 GC가 될 가능성이 있을까요?
equals()와 hashcode()
- 본인이 hashcode() 를 정의해야 한다면, 어떤 점을 염두에 두고 구현할 것 같으세요?
- 그렇다면 equals() 를 재정의 해야 할 때, 어떤 점을 염두에 두어야 하는지 설명해 주세요.
IoC와 DI
- 후보 없이 특정 기능을 하는 클래스가 딱 한 개하면, 구체 클래스를 그냥 사용해도 되지 않나요? 그럼에도 불구하고 왜 Spring에선 Bean을 사용 할까요?
- Spring의 Bean 생성 주기에 대해 설명해 주세요.
- 프로토타입 빈은 무엇인가요?
DispatcherServlet
- 여러 요청이 들어온다고 가정할 때, DispatcherServlet은 한번에 여러 요청을 모두 받을 수 있나요?
- 수많은 @Controller 를 DispatcherServlet은 어떻게 구분 할까요?
JPA와 같은 ORM을 사용하는 이유
- 영속성은 어떤 기능을 하나요? 이게 진짜 성능 향상에 큰 도움이 되나요?
- N + 1 문제에 대해 설명해 주세요.
@Transactional
- @Transactional(readonly=true) 는 어떤 기능인가요? 이게 도움이 되나요?
- 그런데, 읽기에 트랜잭션을 걸 필요가 있나요? @Transactional을 안 붙이면 되는거 아닐까요?
-
3주차
AOP
- @Aspect는 어떻게 동작하나요?
Java 에서 Annotation
- 별 기능이 없는 것 같은데, 어떻게 Spring 에서는 Annotation 이 그렇게 많은 기능을 하는 걸까요?
- Lombok의 @Data를 잘 사용하지 않는 이유는 무엇일까요?
Tomcat
- 혹시 Netty에 대해 들어보셨나요? 왜 이런 것을 사용할까요?
HTTP에 대해 설명해 주세요.
- 공개키와 대칭키
- HTTPS Handshake 과정에서는 인증서 사용 이유
- SSL과 TLS의 차이
웹소켓과 소켓 통신의 차이
- 소켓과 포트의 차이
- 여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가
- 사용자의 요청이 무수히 많아지면, 소켓도 무수히 생성되는지
TCP와 UDP
- Checksum
- TCP와 UDP 중 Checksum을 수행하는 프로토콜
- Checksum을 통해 오류를 정정 가능 유무
- TCP가 신뢰성을 보장하는 방법
- TCP의 혼잡 제어 처리 방법
- HTTP는 TCP를 사용하는 이유
- 브라우저가 서버가 TCP를 쓰는지 UDP를 쓰는지 어떻게 알 수 있는 방법
- 본인이 새로운 통신 프로토콜을 TCP나 UDP를 사용해서 구현한다고 하면, 프로토콜 선택 기준
-
4주차
IP 주소는 무엇이며, 어떤 기능을 하고 있나요?
- IPv4와 IPv6의 차이
- 수많은 공유기에서는 고정 주소를 제공하는 기능의 동작 방법
- IPv4를 사용하는 장비와 IPv6를 사용하는 같은 네트워크 내에서 통신하는 방법
- IP가 송신자와 수신자를 정확하게 전송되는 것의 보장 유무
- IPv4에서 수행하는 Checksum과 TCP에서 수행하는 Checksum의 차이
- TTL(Hop Limit)
- IP 주소와 MAC 주소의 차이
OSI 7계층
- Transport Layer와, Network Layer의 차이
- L3 Switch와 Router의 차이
- Layer는 패킷 명칭
- 각각의 Header의 Packing Order
- ARP
3-Way Handshake
- ACK, SYN 같은 정보 전달 방식
- 2-Way Handshaking 를 하지 않는 이유
- 두 호스트가 동시에 연결을 시도했을 때 통신 연결 수행 방법
- SYN Flooding 에 대해 설명
**www.github.com을 브라우저에 입력하고 엔터를 쳤을 때, 네트워크 상 어떤 일이 일어나는지**
- DNS 쿼리를 통해 얻어진 IP가 가리키는 곳
- Web Server와 Web Application Server의 차이
- URL, URI, URN의 차이
DNS
- DNS는 몇 계층 프로토콜
- UDP와 TCP 중 사용하는 프로토콜
- DNS Recursive Query, Iterative Query
- DNS 쿼리 과정에서 손실이 발생할 경우 처리 방법
- 캐싱된 DNS 쿼리가 잘못 될 경우 에러 보장 방법
- DNS 레코드 타입 중 A, CNAME, AAAA의 차이
- hosts 파일의 역할과 DNS와 비교하였을 때 우선순위
Stateless와 Connectionless
- HTTP는 Stateless 구조를 채택 이유
- Connectionless의 성능 해결 방법
- TCP의 keep-alive와 HTTP의 keep-alive의 차이
-
5주차
라우터 내의 포워딩 과정
- 라우팅과 포워딩의 차이
- 라우팅 알고리즘
- 포워딩 테이블의 구조
로드밸런서
- L4 로드밸런서와, L7 로드밸런서의 차이
- 로드밸런서 알고리즘
- 로드밸런싱 대상이 되는 장치중 일부 장치가 문제가 생겨 접속이 불가능할 경우, 로드밸런서가 해당 장비로 요청을 보내지 않도록 하는 방법
- 로드밸런서 장치를 사용하지 않고, DNS를 활용해서 유사하게 로드밸런싱을 하는 방법
서브넷 마스크와 게이트웨이
- NAT
- 서브넷 마스크의 표현 방식
트랜잭션과 ACID 원칙
- ACID 원칙 중, Durability를 DBMS가 보장하는 방법
- 읽기에는 트랜잭션을 걸지 않아도 되는지
트랜잭션 격리 레벨
- 모든 DBMS가 4개의 레벨을 모두 구현하는지
- 만약 MySQL을 사용하고 있다면, (InnoDB 기준) Undo 영역과 Redo 영역
- 스토리지 엔진
-
6주차
인덱스
- 일반적으로 인덱스는 수정이 잦은 테이블에선 사용하지 않기를 권하는 이유
- ORDER BY/GROUP BY 연산의 동작 과정을 인덱스의 존재 여부와 연관지어서 설명
- 기본키는 인덱스라고 할 수 있을까요? 그렇지 않다면, 인덱스와 기본키의 차이
- 외래키와 인덱스의 차이
- 인덱스가 데이터의 물리적 저장에 미치는 영향과 데이터가 저장되는 방식
- RDB와 NoSQL (ex. Redis, MongoDB 등) 인덱스 차이
정규화
- 정규화를 하지 않을 경우, 발생할 수 있는 이상현상에 대해 설명해 주세요.
- 각 정규화에 대해, 그 정규화가 진행되기 전/후의 테이블의 변화에 대해 설명해 주세요.
- 정규화가 무조건 좋은가요? 그렇지 않다면, 어떤 상황에서 역정규화를 하는게 좋은지
DB Locking
- Optimistic Lock/Pessimistic Lock에 대해 설명해 주세요.
- 물리적인 Lock을 건다면, 만약 이를 수행중인 요청에 문제가 생겨 비정상 종료되면 Lock이 절대 해제되지 않는 문제가 생길 수도 있을 것 같습니다. DB는 이를 위한 해결책이 있나요? 없다면, 우리가 이 문제를 해결할 수 없을까요?
DB의 Connection Pool
- DB와 Client가 Connection을 어떻게 구성하는지 설명해 주세요.
Table Full Scan, Index Range Scan
- 가끔은 인덱스를 타는 쿼리임에도 Table Full Scan 방식으로 동작하는 경우가 있습니다. 왜 그럴까요?
- COUNT (개수를 세는 쿼리) 는 어떻게 동작하나요? COUNT(1), COUNT(*), COUNT(column) 의 동작 과정
-
7주차
쿠키와 세션의 차이에 대해 설명
- 세션 방식의 로그인 과정
- HTTP의 특성인 Stateless
- Stateless의 의미를 살펴보면, 세션은 적절하지 않은 인증 방법이지 않은지
- 규모가 커져 서버가 여러 개가 됐을 때 세션 관리 방법
HTTP 응답코드에 대해 설명해 주세요.
- 401 (Unauthorized) 와 403 (Forbidden)의 의미적인 차이
- 200 (ok) 와 201 (created) 의 차이
- 필요하다면 저희가 직접 응답코드를 정의해서 사용할 수 있는지
HTTP Method 에 대해 설명해 주세요.
- HTTP Method의 멱등성
- GET과 POST의 차이
- POST와 PUT, PATCH의 차이
- HTTP 1.1 이후로, GET에도 Body에 데이터를 실을 수 있게 되었음에도 왜 아직도 이런 방식을 지양하는가
인터럽트
- 하드웨어 인터럽트 vs 소프트웨어 인터럽트
- 인터럽트 처리 방식
- Polling 방식
- 동시에 두 개의 인터럽트가 발생한다면?
프로세스
- 프로세스 vs 스레드
- PCB
- 리눅스에서 프로세스와 스레드의 생성 방법
- 데몬 프로세스
- 자식 프로세스가 상태를 알리지 않고 죽거나 부모 프로세스가 먼저 소멸된다면?
- 리눅스에서 프로세스 트리의 루트 노드에 위치하는 프로세스
-
8주차
프로세스 주소 공간
- 초기화하지 않은 변수가 저장되는 곳
- Stack과 Heap의 크기와 크기가 결정되는 순간
- 개발자가 아닌 사용자가 이 크기를 결정할 수 있는지
- Stack과 Heap 중 접근이 더 빠른 곳
- 공간을 분할하는 이유
- 스레드의 주소 공간
- "스택"영역과 "힙"영역은 정말 자료구조의 스택/힙과 연관?
- IPC의 Shared Memory 기법은 프로세스 주소 공간 중 들어가는 곳
스케쥴러
- 단기, 중기, 장기 스케쥴러와 현재 사용하는 스케쥴러
- 프로세스의 스케쥴링 상태
- preemptive/non-preemptive 에서 존재할 수 없는 상태
- Memory가 부족할 경우, Process의 상태 변화
컨텍스트 스위칭
- 컨텍스트 스위칭이 발생했을 때 프로세스와 스레드의 차이
- 컨텍스트 스위칭이 발생할 때, 기존의 프로세스 정보가 커널스택에 저장되는 형식
- 컨텍스트 스위칭이 발생하는 시점
프로세스 스케쥴링 알고리즘
- RR을 사용할 때, Time Slice에 따른 trade-off
- 싱글 스레드 CPU 에서 상시로 돌아가야 하는 프로세스가 있을 때 사용하는 스케쥴링 알고리즘
- 동시성 vs 병렬성
- 타 스케쥴러와 비교하여, Multi-level Feedback Queue가 해결하는 문제점
- 스레드의 스케줄링 알고리즘
가상화가 무엇이고, 이것이 가상머신과 어떠한 차이가 있는지 설명해 주세요.
- 그렇다면 Docker는 둘 중 어디에 속하나요? 왜 사람들이 Docker를 많이 채택할까요?
- 하나의 Host OS에서 돌아간다면 충분히 한 컨테이너가 다른 컨테이너에 간섭할 수 있는 위험이 있지 않을까요? 이를 어떻게 방어할 수 있을까요?
- Docker 위에 Docker를 올릴 순 없을까요?
주차 | 베스트 워크북 | 딥다이브 |
---|---|---|
1 | 조희수 | JVM |
2 | 정혜선 | Spring 동작 원리 |
3 | 정혜선 | QUIC |
4 | 김성일 & 문인규 | Virtual Thread |
5 | 김성일 | InnoDB |
6 | 황인준 | DB Rock |
7 | 정혜선 & 황인준 | JPA |
8 | 조희수 | Spring Security |
-
브랜치
week${n}/name
-
커밋
태그이름 내용 Feat 새로운 기능 (파일 추가도 포함)을 추가할 경우 Update 코드 수정을 한 경우 Docs 문서를 수정한 경우 Rename 파일 혹은 폴더명을 수정하거나 옮기는 작업만인 경우 Remove 파일을 삭제하는 작업만 수행한 경우 -
폴더
week${n}/name/summmary.md
작성- 이미지는
week${n}/name/img/
밑에 작성