끄적끄적/CS 정리
CS CS CS CS CS CS CS - Computer Science
무으리
2025. 5. 15. 12:40
MVC 패턴 동작 순서
- Http Request - 사용자 요청 Http
- DispatcherServlet
- 핵심 진입점
- 클라이언트로 부터 url 요청이 DispatcherServlet에 도달.
- Handler Mapping
- 요청 url에 매핑되는 handler(컨트롤러)를 탐색.
- Handler Adapter
- 매핑을 통해 찾은 핸들러(컨트롤러)를 실행하기 위해 필요.
- 요청을 매핑된 핸들러(컨트롤러)에 위임.
- Controller
- 실제 요청로직에 대한 수행 기능.
- Service, Repository, DB 접근 등
- View Resolver
- 클라이언트 요청에 대한 응답을 렌더링 할 View 를 결정하는 역할
- 컨트롤러에서 반환된 논리적 view 이름을 실제 view 경로로 매핑
- View
- Thymeleaf 등으로 구성된 실제 화면을 사용자에게 Response(응답)
HttpStatusCode(Http 상태 코드)
1xx : 정보 응답
- 100 : Continue :
- 101 : Switching Protocal :
- 102 : Processing :
2xx : 성공 응답
- 200 : Ok : 요청이 성공적으로 처리됨
- 201 : Created : 요청이 성공적이며 그 결과로 새로운 리소스 가 생성됨
- 202 : Accepted : 요청은 수락되었으나 아직 처리되지 않음
- 204 : No Content : 응답 본문이 없음 (Delete 등)
4xx : 클라이언트 오류 응답
- 400 : Bad Request : 잘못된 문법으로 서버가 요청을 이해할 수 없음.
- 401 : Uuauthorized : 비인증 - 로그인 되지 않음
- 403 : Forbidden : 로그인 되었지만 요청에 대한 권한이 존재하지 않음.
- 404 : Not Found : 서버는 요청받은 리소스를 찾을 수 없음.
5xx : 서버 오류
- 502 : Bad Gateway :
- 503 : Service Unavailable :
- 504 : Gateway Timeout :
B-tree 인덱스 - HashTable
B-tree
균형 이진 탐색 트리 구조이다. 각 노드가 2개 이상의 자식 노드를 가질 수 있는 다진 트리이다.
균형 이진 트리로 검색/삽입/삭제가 모두 O(log n)의 성능을 갖는다.
범위 검색과 정렬된 결과 조회에 매우 좋다.
HashTable
(Key, Value) 형식으로 데이터를 저장하는 자료구조.
검색 속도가 매우 빠르지만 다음과 같은 경우 성능이 좋지 않음
- 데이터의 분포가 너무 좁거나 거의 동일할 때
- Where 절에서 함수나 연산이 실행되는 경우
- Like 에서 와일드카드 "%" 가 문자열 앞에 존재하는 경우.
충돌 해결
- 분리 연결법(채이닝) : 배열의 각 인덱스가 연결 리스트를 가지고 있어 중복 값을 리스트로 저장.
- 개방 주소법(오픈 어드레싱) : 충돌시 인접한 빈 슬롯에 삽입.
HashMap 과 HashTable
| HashMap | HashTable | |
| ThreadSafe | 비동기 방식 | 동기 방식 |
| 모든 메서드에 Synchronized | ||
| 성능 | 빠르다.(단일 스레드에서 우수함) | 느리다. |
| Null 값 | Key-Value 모두 널값 허용 | Key-Value 모두 널 값을 허용하지 않음. |
Web Server 와 WAS
Web Server
- 정적인 콘텐츠(HTML, CSS, 이미지 등)를 제공하는 서버
- HTTP 프로토콜을 이용해 클라이언트에게 웹 페이지 제공
- Apache, Nginx
WAS
- Web Application Server 의 약자
- 동적인 콘텐츠(웹 애플리케이션, 비즈니스 처리, DB 연동 등)를 처리하고 제공하는 서버
- 웹 애플리케이션 실행 및 데이터 처리, 웹 서버와 클라이언트 간의 중계 역할
- Tomcat
예외 처리 구문
Try-Catch-Finally
try : 예외가 발생할 수 있는 코드를 try 코드 안에 넣는다.
catch : 예외가 발생하면 실행되는 블록으로 특정 예외 타입을 지정할 수 있다.
finally : 예외 발생 여부와 상관없이 항상 실행되는 구문으로 주로 자원 해제에 사용된다. Return 전에 실행
Throw vs Throws
throw
- 개발자가 실제 예외 객체를 강제로 발생시키는 함수
throws
- 예외가 발생할 가능성이 있는 클래스나 메서드의 선언부에 명시하는 함수.
- 자신을 호출한 메서드나 클래스로 예외를 던짐.
Checked vs Unchecked
Checked
- Exception을 상속받는다.
- try-catch 등으로 예외 처리를 반드시 해야 한다.
- 컴파일 시점에 검사됨
- IOException, SQLException 등이 존재
Checked Exception 종류 및 의의
| IOException | 입출력 관련 오류 (파일, 스트림 등) |
| FileNotFoundException | 존재하지 않는 파일에 접근할 때 발생 (IOException의 하위) |
| SQLException | JDBC 사용 시 DB 연동 오류 발생 |
| ParseException | 문자열 파싱 오류 (예: SimpleDateFormat) |
| ClassNotFoundException | Class.forName()으로 클래스를 찾을 수 없을 때 |
| InstantiationException | 추상 클래스 또는 인터페이스를 인스턴스화하려고 할 때 |
| IllegalAccessException | 접근 제한된 클래스, 필드, 메서드에 접근할 때 |
| InvocationTargetException | 리플렉션으로 호출한 메서드가 예외를 던질 때 |
| InterruptedException | 쓰레드가 wait() 또는 sleep() 중 인터럽트될 때 |
| NoSuchMethodException | 존재하지 않는 메서드를 리플렉션으로 호출할 때 |
| MalformedURLException | 잘못된 URL 형식 사용 시 발생 (네트워크 관련) |
Unchecked
- RuntimeException을 상속받는다.
- 런타임(실행) 시점에 발생하는 예외이다.
- IndexOutOfBoundException, IllegalArgumentException, NullPointerException 등이 존재.
Unchecked Exception 종류 및 의의
| NullPointerException | null 값을 참조할 때 발생 (null.someMethod() 등) |
| ArrayIndexOutOfBoundsException | 배열의 잘못된 인덱스에 접근할 때 발생 |
| ArithmeticException | 산술 계산 중 오류 발생 (예: 0으로 나누기) |
| ClassCastException | 잘못된 타입 캐스팅 시 발생 |
| IllegalArgumentException | 메서드에 잘못된 인자를 넘길 때 발생 |
| IllegalStateException | 객체의 상태가 잘못되었을 때 발생 (초기화 안 된 객체 사용 등) |
| NumberFormatException | 문자열을 숫자로 변환할 때 잘못된 형식일 경우 발생 |
| IndexOutOfBoundsException | List나 배열 등에서 범위를 벗어난 인덱스 접근 시 |
| UnsupportedOperationException | 지원하지 않는 연산을 수행하려고 할 때 발생 |
| ConcurrentModificationException | 컬렉션을 반복하면서 동시에 수정할 경우 발생 |
Exception vs Error
Exception 과 Error 모두 Throwable 을 상속받는다.
Exception
- 프로그램 실행 중 발생할 수 있는 예외적인 조건으로 개발자가 처리할 수 있으며 복구 가능성이 존재한다.
- try-catch로 처리가 가능
- Checked 와 Unchecked 로 나뉜다.
Error
- 시스템 레벨에서 발생하며 개발자가 해결할 수 없는 심각한 문제를 의미한다.
- 복구 가능성이 거의 없으며 메모리 부족 또는 스택 오버플로 등이 있다.
- OutOfMemoryError, StackOverflowError 등이 존재.
Wrapper 클래스 와 Auto Boxing/ Auto UnBoxing
Wrapper 클래스
- 기본 타입의 자료형 (int, double, boolean)을 객체로 감싼 클래스이다. (Integer, Double, Boolean 등)
AutoBoxing
- 기본 타입 자료형을 자동으로 Wrapper 객체로 변환하는 기능/ UnBoxing 은 반대.
Session 과 Cookie
둘 다 웹에서 사용자 상태를 유지하기 위해 사용하는 대표적인 기술이다.
쿠키
- 정의 : 클라이언트에 저장되는 작은 데이터
- 저장 위치 : 클라이언트 (브라우저 내부)
- 동작 방식 : 클라이언트가 쿠키를 서버에 매 요청마다 전송
- 만료 시점 : 유효기간 설정 가능 및 사용자가 삭제 가능
- 보안
- 데이터 노출 가능성 : 낮음 - 데이터는 서버에 저장되므로 클라이언트가 접근 불가
- 변조 위험성 : 세션 ID를 탈취당하지 않는 한 직접 변조는 어려움.
- 속도
- 요청 처리 속도 : 빠름 (서버는 별도 조회 없이 요청만 처리)
- 네트워크 전송 : 네트워크 부담 증가
- 서버 부하 : 적음
세션
- 정의 : 서버에 저장되는 사용자 정보
- 저장 위치 : 서버
- 동작 방식 : 서버가 세션 ID를 발급하고, 클라이언트는 이를 쿠키로 저장.
- 만료 시점 : 브라우저 종료 또는 일정 시간 후 만료
- 보안
- 데이터 노출 가능성 : 높음
- 변조 위험성 : 존재
- 속도
- 요청 처리 속도 : 느림 (서버가 세션 저장소에서 사용자 정보 조회 필요)
- 네트워크 전송 : 세션 ID만 쿠키로 전달 -> 상대적 부담이 적음
- 서버 부하 : 많음
AOP란? (Aspect Oriented Programming)
aop는 관점 지향 프로그래밍이라고 불린다.
관점 지향은 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것이다.
즉 핵심 비즈니스 로직과 로깅, DB 연결, 파일 입출력 등을 분리해서 모듈화 한다는 의미이다.
핵심 개념
관점(Aspect)
- 횡단 관심사를 모듈화한 단위 : ex) 로깅 관점, 트랜잭션 관점, DB 연결 등
포인트 컷(Pointcut)
- 관점을 적용할 위치를 지정합니다. 특정 메서드, 클래스 등을 대상으로 함.
어드바이스(Advice)
- 관점의 기능이 실제로 적용되는 방법. Before, After, Around 등 다양한 타입이 존재
조인 포인트 (Join Point)
- 어드바이스가 적용될 수 있는 위치. 메서드 실행 전후, 예외 발생 시 등 다양한 시점에 적용 가능.
장점
- 코드 중복 감소 : 공통 기능을 관점으로 모듈화해 재사용함으로 코드 중복을 줄일 수 있다.
- 유지보수성 향상 : 횡단 관심사를 분리해 핵심 비즈니스 로직과 분리함으로 코드의 유지보수성을 향상시킬 수 있다.
- 확장성 : 새로운 횡단 관심사를 추가하거나 기존 관점을 변경하는 것이 용이.
- 핵심 로직 집중 : 횡단 관심사를 분리함으로 핵심 로직에 집중할 수 있다.