💭 오늘의 학습 전략
# 모의 기술면접
◼ 이진 탐색 알고리즘(BST)
◼ 트랜잭션
◼ Spring에서 AOP가 필요한 이유
🌼 학습한 것들
◼ 이진 탐색 알고리즘(BST)
- 데이터를 절반씩 나눠 분할정복 기법으로 원하는 값을 찾아내는 알고리즘
- 정렬된 상태의 배열에서만 구현 가능
- 1. 정렬된 배열의 중간 지점 인덱스 지정
- 2. 찾으려는 값과 그 중간 인덱스 값을 비교하고, 같으면 탐색 종료
- 3. 아니라면, 찾으려고 하는 값이 중간 인덱스 값보다 큰 지 작은 지 확인
- 4. 더 작은값 혹은 큰 값이 이 모여있는 쪽에서 위 과정 반복
- 과정이 반복될 때마다 탐색할 배열의 크기는 절반이 되기 때문에 대규모 데이터 검색에 적합
- O(logN)의 시간복잡도
- O(n)인 순차 탐색 알고리즘이 더 효율이 좋을 때: 데이터 양이 적고, 앞쪽에 위치한 데이터를 탐색할 때
◼ 트랜잭션
- 데이터베이스에서 트랜잭션이란, DB상태를 변환시키기 위해 수행되는 여러 개의 작업을 하나로 묶은 하나의 작업 단위(하나 이상의 쿼리가 모여있는 작업 유닛)
- 가장 큰 특징: 트랜잭션이 발생할 때 안정성을 보장하기 위해 필요한 성질인 ACID
- 원자성: 트랜잭션에 속한 모든 작업이 하나라도 실패하면 전부 실패한 것으로 여겨져야 하는 것
- 일관성: 데이터베이스 상태가 일관되어야 한다는 것인데, 트랜잭션 이전과 이후의 데이터베이스 상태가 모두 제약이나 규칙을 어기지 않고 유효해야 한다는 것
- 고립성: 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다는 것인데, 트랜잭션 실행 중 다른 트랜잭션이 동일한 데이터를 변경할 수 없어야 한다는 것
- 지속성: 트랜잭션이 성공한 후의 데이터는 영구적으로 변경되는 것, 모든 트랜잭션은 그 변경에 대한 로그가 남아야 하는 것이다.
- 데이터의 이상현상이나 오염 방지
◼ Spring에서 AOP가 필요한 이유
- AOP는 여러 개의 핵심 비즈니스 로직 외에 공통으로 처리되어야 하는 로깅이나 보안, 트랜잭션 같은 부가기능의 코드를 별도로 분리해서 하나의 단위로 모듈화하는 것
- 사용하는 주된 이유는 한마디로 객체지향을 더욱 객체지향답게 사용할 수 있도록 돕기 위해
- 예를들어 로깅과 같은 공통적이지만 부가적인 기능을 시스템 각각에 추가해야 할 때, 클래스라는 모듈로 분리한다고 해도 불특정 다수의 클래스에 존재하는 것은 불가피
- 그렇게 되면 많은 리소스가 필요하고, 코드가 복잡해지면서 파악이 어려워져 유지보수도 어려워진다.
- 이 때 관점을 분리해서 핵심 비즈니스 로직에 부가적인 관점만 포함시켜주면서 보다 객체지향적일 수 있도록 보완
💨 하루를 마치며
1. 첫 기술면접 연습보다는 편하게 진행했다.
2. 원래 스택/큐를 준비했지만 겹쳐서 급히 이진탐색으로 바꿨는데, 하나 더 정리를 했다고 생각하니 오히려 좋아
3. 활동 진행하고 너무 피곤해서 점심시간에 잠들었는데 조금 늦잠을 자버렸다 ^-ㅠ;;
4. 섹션1을 마무리한지 얼마 안 된 것 같은데 벌써 또 섹션회고가 돌아왔다.. 시간이 진짜 빠르긴 하다.
5. 섹션 회고는 가능한 빨리 하겠지만 주말이 되지 않을까 싶다... 미뤄버린 것들이 조금 많다ㅠ_ㅠ
'공부기록 > TIL' 카테고리의 다른 글
2022/12/16 TIL | API 계층 - DTO (0) | 2022.12.16 |
---|---|
2022/12/15 TIL | Spring MVC, Controller (0) | 2022.12.15 |
2022/12/12-13 TIL | AOP (0) | 2022.12.13 |
2022/12/08-09 TIL | DI (0) | 2022.12.09 |
2022/12/07 TIL | Spring Framework 모듈 구성, SpringBoot (0) | 2022.12.07 |
댓글