끄적끄적/CS 정리

CS CS CS CS CS CS CS - Computer Science

무으리 2025. 5. 15. 12:40

MVC 패턴 동작 순서

  1. Http Request - 사용자 요청 Http
  2. DispatcherServlet 
    • 핵심 진입점
    • 클라이언트로 부터 url 요청이 DispatcherServlet에 도달.
  3. Handler Mapping
    • 요청 url에 매핑되는 handler(컨트롤러)를 탐색.
  4. Handler Adapter 
    • 매핑을 통해 찾은 핸들러(컨트롤러)를 실행하기 위해 필요.
    • 요청을 매핑된 핸들러(컨트롤러)에 위임.
  5. Controller
    • 실제 요청로직에 대한 수행 기능.
    • Service, Repository, DB 접근 등
  6. View Resolver
    • 클라이언트 요청에 대한 응답을 렌더링 할 View 를 결정하는 역할
    • 컨트롤러에서 반환된 논리적 view 이름을 실제 view 경로로 매핑
  7. 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)

  • 어드바이스가 적용될 수 있는 위치. 메서드 실행 전후, 예외 발생 시 등 다양한 시점에 적용 가능.

장점

  • 코드 중복 감소 : 공통 기능을 관점으로 모듈화해 재사용함으로 코드 중복을 줄일 수 있다.
  • 유지보수성 향상 : 횡단 관심사를 분리해 핵심 비즈니스 로직과 분리함으로 코드의 유지보수성을 향상시킬 수 있다.
  • 확장성 : 새로운 횡단 관심사를 추가하거나 기존 관점을 변경하는 것이 용이.
  • 핵심 로직 집중 : 횡단 관심사를 분리함으로 핵심 로직에 집중할 수 있다.