| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
- 백준
- 국비지원
- 부트캠프
- 디자인교육
- baekjoon
- UXUI기초정복
- 티스토리챌린지
- 오픈챌린지
- 백엔드개발자
- Be
- 환급챌린지
- UXUIPrimary
- UXUI챌린지
- 오픈패스
- 오블완
- Java
- 디자인강의
- 국비지원교육
- 패스트캠퍼스
- OPENPATH
- 백엔드 부트캠프
- 국비지원취업
- 시스템설계
- mysql
- API
- 디자인챌린지
- JPA
- 내일배움카드
- KDT
- Spring
- Today
- Total
군만두의 IT 개발 일지
패스트캠퍼스 백엔드 개발 부트캠프 8기 그룹스터디 - 교착 상태, DB 이상현상, 제네릭, HTTP & 암호화 본문
목차
⭐ 요약
- 패스트캠퍼스 백엔드 개발 부트캠프 8기에서 면접 대비를 위한 그룹스터디를 진행한다.
- 각 팀원이 관심 CS 분야를 선택하여 노션에 정리하고 발표하는 방식으로 운영한다.
- 이번 회차에서는 교착 상태(Deadlock), DB 이상현상 및 함수 종속성, 제네릭(Generic), HTTP 메서드 및 암호화를 학습했다.

⭐ 그룹스터디 진행 방식
매 회차마다 팀원들이 각자 관심 있는 CS 분야를 하나씩 선택하여 『면접을 위한 CS 전공지식 노트』를 기반으로 추가 자료를 찾아 노션에 정리한 뒤, 스터디 시간에 발표하고 서로 피드백을 주고받는 방식으로 진행한다. 이번 회차에서 다룬 주제는 아래와 같다.
| 발표 주제 | 분야 |
| 교착 상태(Deadlock) | 운영체제 |
| DB 이상현상 및 함수 종속성 | 데이터베이스 |
| 제네릭(Generic) | Java |
| HTTP 메서드 및 암호화 | 네트워크 |
⭐ 학습 내용
1. 교착 상태(Deadlock) - 운영체제
1-1. 교착 상태란?
한정된 자원을 여러 프로세스가 사용하려 할 때, 각 프로세스가 서로 상대방의 자원을 기다리면서 무한정 멈춰있는 상태이다. 도로에 차가 꽉 막혀 어떤 차도 지나가지 못하는 상황에 비유할 수 있다.
교착 상태를 표현하는 가장 유명한 예시는 식사하는 철학자 문제이다. 철학자(프로세스/스레드)는 양쪽 포크(자원)를 모두 들어야 식사(CPU 할당)를 할 수 있다. 그런데 모든 철학자가 동시에 왼쪽 포크를 들면, 아무도 오른쪽 포크를 들지 못해 영원히 기다리는 교착 상태가 발생한다. 이는 뮤텍스 락을 잘못 사용하면 두 프로세스가 영원히 바쁜 대기 상태에 빠질 수 있다는 동기화 문제와도 연결된다.
1-2. 교착 상태 발생 조건 (4가지 모두 만족해야 발생)
| 조건 | 설명 |
| 상호 배제 | 한 자원을 한 프로세스만 사용함 |
| 점유와 대기 | 자원을 점유한 채로 다른 자원을 기다림 |
| 비선점 | 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못함 |
| 원형 대기 | 프로세스들이 요청·할당받은 자원이 원형 구조를 이룸 |
1-3. 교착 상태 해결 방법
- 예방: 위 4가지 조건 중 하나라도 만족하지 않도록 자원을 할당한다. 다만 상호 배제를 없애면 레이스 컨디션이, 점유와 대기를 없애면 기아 현상이 발생하는 등 현실적인 한계가 있다.
- 회피: 교착 상태가 발생할 것 같으면 자원 할당을 멈추는 방식이다. 대표적으로 은행원 알고리즘이 있으며, 자원 할당 후에도 안정 상태가 유지되는지 사전에 검사한다.
- 검출 후 회복: 교착 상태가 발생하면 그때 해결한다. 다른 프로세스의 자원을 선점하거나, 교착 상태의 프로세스를 하나씩 또는 한꺼번에 강제 종료하는 방법을 사용한다.

2. DB 이상현상 및 함수 종속성 - 데이터베이스
2-1. 이상현상(Anomaly)이란?
정규화를 수행하지 않으면 데이터 중복이 발생하고 무결성이 저하되는 현상이다. 이상현상은 삽입, 삭제, 갱신 세 가지로 나뉜다.
| 이상현상 | 설명 | 예시 |
| 삽입 이상 | 데이터 삽입 시 불필요한 데이터도 함께 삽입해야 하거나, 특정 데이터가 없어 삽입이 불가능한 문제 | 학생이 없는 신설 학과는 테이블에 삽입 불가 |
| 삭제 이상 | 튜플 삭제 시 필요한 데이터까지 함께 삭제되는 데이터 손실 문제 | 학생을 삭제하면 해당 학과 정보까지 소멸 |
| 갱신 이상 | 중복 튜플 중 일부만 변경되어 데이터 불일치가 발생하는 문제 | 학과장 개명 시 100개 레코드를 모두 수정해야 함 |
2-2. 함수 종속성(Functional Dependency)
X → Y일 때 "X가 Y를 함수적으로 결정한다"고 한다. 함수 종속성의 종류는 아래와 같다.
| 종류 | 설명 |
| 완전 함수 종속 | 종속자가 기본키 전체에만 종속되고 기본키의 일부에는 종속되지 않음 |
| 부분 함수 종속 | 종속자가 기본키의 일부 속성에만 종속됨 |
| 이행적 함수 종속 | X→Y, Y→Z이면 X→Z가 성립함 |
| 결정자 함수 종속 | 함수 종속의 결정자가 후보키가 아닌 경우 |
| 다중값 종속 | 한 릴레이션에서 둘 이상의 독립적인 다중값 속성이 존재하는 경우 |
| 조인 종속 | 둘로 나눌 때는 원래의 릴레이션으로 복원이 불가능하나, 셋 이상으로 분리 시 복원이 가능한 특수한 경우 |

3. 제네릭(Generic) — Java ← 내가 발표한 주제
3-1. 제네릭이란?
제네릭(Generic)은 데이터 타입을 일반화하는 것을 의미한다. 클래스나 메서드 내부에서 사용할 객체의 타입을 컴파일 시점에 지정할 수 있어, 잘못된 타입으로 인한 오류를 사전에 방지할 수 있다.
3-2. 주요 타입 변수
| 타입 변수 | 의미 | 주요 사용처 |
| <T> | Type | 가장 범용적으로 사용 |
| <E> | Element | List, Set 등 컬렉션 요소 |
| <K> | Key | Map의 키 |
| <V> | Value | Map의 값 |
| <N> | Number | Integer, Double 등 숫자 타입 |
3-3. 제네릭 클래스 예시
// 제네릭 클래스 선언
class MyArray<T> {
private T element;
public void setElement(T element) {
this.element = element;
}
public T getElement() {
return this.element;
}
}
// 인스턴스 생성 시 실제 타입을 지정한다.
MyArray<Integer> myIntegerArray = new MyArray<>();
MyArray<String> myStringArray = new MyArray<>();
3-4. 제네릭 메서드 예시
public class Util {
// 반환 타입 앞에 <T>를 명시한다.
public static <T> void printArray(T[] array) {
for (T element : array) {
System.out.println(element);
}
}
}
// 다양한 타입의 배열을 동일한 메서드로 처리한다.
Integer[] intArray = {1, 2, 3};
String[] stringArray = {"Hello", "World"};
Util.printArray(intArray);
Util.printArray(stringArray);
3-5. Object 타입과 제네릭 비교
// Object 타입 사용 시: 타입 캐스팅이 반드시 필요하다.
List items = new ArrayList();
items.add("Hello");
String item = (String) items.get(0); // 강제 형변환 필요
// 제네릭 사용 시: 타입 캐스팅이 불필요하고, 잘못된 타입 추가 시 컴파일 에러가 발생한다.
List<String> items = new ArrayList<>();
items.add("Hello");
// items.add(1); // 컴파일 에러
String item = items.get(0); // 형변환 불필요
3-6. 제네릭의 장점 정리
- 타입 안정성 향상: 컴파일 시점에 타입을 체크하여 런타임 오류를 사전에 예방한다.
- 타입 변환 감소: 불필요한 타입 캐스팅이 없어져 코드가 간결하고 명확해진다.
- 코드 재사용성 증가: 하나의 제네릭 클래스·메서드로 다양한 타입을 처리할 수 있다.

4. HTTP 메서드 및 암호화 — 네트워크
4-1. HTTP 요청 메서드
HTTP 메서드는 클라이언트가 서버에 실행을 요구하는 명령이다. 주요 메서드는 아래와 같다.
| 메서드 | 역할 | 서버 데이터 변경 |
| GET | 서버에 존재하는 데이터를 요청. Request Body를 사용하지 않는 것이 일반적 | X |
| POST | 서버에 데이터를 생성. Request Body에 데이터를 담아 전송 | O |
| PUT | 서버의 데이터를 수정하거나, 존재하지 않으면 새로 생성 | O |
| PATCH | 서버의 데이터를 일부만 수정 | O |
| DELETE | 서버의 데이터를 삭제 | O |
4-2. HTTP 주요 상태 코드
| 코드 | 이름 | 의미 |
| 200 | OK | 요청이 성공적으로 처리됨 |
| 400 | Bad Request | 요청 메시지에 문법 오류 존재 |
| 401 | Unauthorized | 권한이 존재하지 않음 |
| 403 | Forbidden | 서비스 요청이 거부됨 |
| 404 | Not Found | 요청한 문서를 찾을 수 없음 |
| 500 | Internal Server Error | 서버 내부 오류 발생 |
4-3. 암호화
암호화는 크게 양방향 암호화와 단방향 암호화로 구분된다.
| 종류 | 특징 | 장점 | 단점 |
| 대칭키 암호화 | 암호화·복호화에 동일한 키를 사용함 | 속도가 빠름 | 키 배송 과정에서 노출 위험 존재 |
| 비대칭키 암호화 | 공개키·비밀키로 암호화·복호화를 각각 수행함 | 키 배송 문제 없이 안전성이 높음 | 대칭키 방식보다 느림 |
| 단방향 암호화 | 암호화만 가능하며 복호화는 불가능함. 해시 알고리즘을 주로 사용함 | 복호화 불가로 보안성이 높음 | Rainbow Table 등 무차별 대입 공격에 취약함 |
단방향 암호화의 Rainbow Table 공격을 방어하기 위해 Bcrypt를 사용한다. Bcrypt는 솔팅(해시 시 랜덤 데이터를 추가)과 키 스트레칭(해시를 반복 적용)을 조합하여 무차별 대입 공격의 난이도를 크게 높인다.

⭐ 예상 면접 질문 정리
- 교착 상태란 무엇이며, 발생 조건 4가지를 설명해 주세요. 상호 배제, 점유와 대기, 비선점, 원형 대기가 모두 충족될 때 발생한다.
- 제네릭을 사용하는 이유는 무엇인가요? 컴파일 시점에 타입을 체크하여 런타임 오류를 방지하고, 타입 캐스팅 없이 코드를 재사용할 수 있기 때문이다.
- GET과 POST의 차이를 설명해 주세요. GET은 서버 데이터를 조회하며 Request Body를 사용하지 않고, POST는 서버에 데이터를 생성하며 Request Body에 데이터를 담아 전송한다.
- 단방향 암호화의 취약점과 해결 방법은 무엇인가요? Rainbow Table 공격에 취약하며, 솔팅과 키 스트레칭을 적용한 Bcrypt 방식으로 보완할 수 있다.
⭐ 후기
- 직접 한 주제를 맡아 정리하고 발표하는 방식이 단순히 읽는 것보다 훨씬 깊이 있게 이해하는 데 도움이 되었다. 내가 발표를 위해 제네릭을 정리하는 과정에서 Object 타입과의 차이, 타입 캐스팅 문제 등 평소에 당연하게 쓰던 개념을 다시 한번 정확히 짚을 수 있었다.
- 팀원들의 발표를 들으면서 교착 상태, DB 이상현상, 암호화 등 개발하면서 자주 마주치는 개념들이 면접에서 어떤 방식으로 물어봐지는지 감을 잡을 수 있었다.
이 글은 패스트캠퍼스의 백엔드 개발 캠프에서 공부한 내용을 작성한 것입니다.
'개발일지 > 패스트캠퍼스' 카테고리의 다른 글
| 패스트캠퍼스 백엔드 개발 부트캠프 8기 그룹 스터디 - Git 브랜치 전략과 협업 플로우 실습 (0) | 2024.03.14 |
|---|---|
| [후기] 패스트캠퍼스 백엔드 개발 부트캠프 8기 네트워킹 데이 (0) | 2024.03.14 |
| [후기] 패스트캠퍼스 백엔드 개발 부트캠프 8기 취업 준비 특강 (0) | 2024.03.05 |
| [Java] Spring Batch - Job/Step 구조와 정산 배치 구현 (0) | 2024.03.03 |
| 패스트캠퍼스 백엔드 개발 부트캠프 8기 그룹스터디 시작 - 면접 대비 CS 지식 학습 (0) | 2024.02.26 |