분류 전체보기 68

시간 복잡도, 공간 복잡도

알고리즘의 '시간복잡도(Time Complexity)'와 '공간복잡도(Space Complexity)'는 알고리즘이 문제를 해결하는 데 걸리는 시간과 사용하는 메모리 공간의 양을 측정하는 데 사용되는 개념이다. 이들은 알고리즘의 성능을 분석하고 비교하는 데 중요한 지표들이다. 시간복잡도 알고리즘이 문제를 해결하는 데 소요되는 시간의 양을 나타내는 척도이다. 주로 연산의 횟수를 기반으로 한다. 알고리즘의 시간복잡도는 입력 크기에 대한 함수로 표현된다. 일반적으로 빅 오(Big O) 표기법을 사용하여 표현하며, 가장 큰 영향을 주는 항만을 고려한다. 예를 들어, O(1), O(log n), O(n), O(n^2) 등이 있다. 시간복잡도가 작을수록 알고리즘의 실행 시간이 적고 효율적으로 동작한다. 따라서 알고..

Algorithm 2023.07.28

절차지향 / 객체지향 / 함수형 프로그래밍

절차지향, 객체지향, 함수형 프로그래밍은 세 가지 주요 프로그래밍 패러다임이다. 이들 각각은 다른 방식으로 프로그램을 구성하고 작성하는데 사용된다. 절차지향 프로그래밍 절차지향 프로그래밍은 프로그램을 일련의 절차(순차적인 단계)로 보는 패러다임이다. 데이터와 함수를 분리하여 처리한다. 즉, 데이터와 함수가 서로 독립적으로 존재한다. 전통적인 프로그래밍 언어 중 C, Pascal, COBOL 등이 절차지향 프로그래밍을 대표적으로 사용한다. 프로세스를 중심으로 프로그램을 설계하며, 프로그램의 흐름을 제어하는 것에 초점을 둔다. 객체지향 프로그래밍 객체지향 프로그래밍은 프로그램을 상호작용하는 객체들의 집합으로 보는 패러다임이다. 객체는 데이터와 그 데이터를 처리하는 메서드(함수)를 하나로 묶은 것이다. 데이터..

카테고리 없음 2023.07.28

TCP / UDP

TCP (Transmission Control Protocol)와 UDP (User Datagram Protocol)는 둘 다 인터넷 프로토콜 스택의 중요한 프로토콜로, 데이터를 전송하는 데 사용된다. 공통점: 전송 계층 프로토콜: TCP와 UDP는 모두 전송 계층 프로토콜로, OSI 모델에서 4번째 계층에 해당한다. 이들은 네트워크에서 데이터를 보내고 받는 역할을 담당한다. 패킷 기반 통신: TCP와 UDP 모두 데이터를 패킷 단위로 전송한다. 데이터를 더 작은 조각들로 분할하여 전송하며, 이러한 패킷들은 독립적으로 노드 간에 교환된다. 차이점: 연결 지향성: TCP: 연결 지향 프로토콜이다. 데이터를 전송하기 전에 논리적인 연결을 성립한 후에 데이터를 교환한다. 3-way handshake를 통해 연..

CS 공부 2023.07.26

트랜잭션 (Transaction)

트랜잭션 트랜잭션은 데이터베이스에서 하나느이 논리적 기능을 수행하기 위한 작업의 단위를 말한다. 데이터베이스에 접근하는 방법은 쿼리이므로, 여러 개의 쿼리들을 하나로 묶는 단위를 말한다. 트랜잭션은 ACID특징을 갖고 있다. Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)의 약어이다. 활동 (Active) : 트랜잭션이 실행 중인 상태 실패 (Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태 철회 (Aborted) : 트랜잭션이 비정상적으로 종료되어 롤백 연산을 수행한 상태 부분 완료 (Partial Committed) : 트랜잭션의 마지막 연산까지 실행했으나 커밋 연산이 실행되기 직전의 상태 완료 (Committed) :..

CS 공부 2023.07.26

@SpringBootTest / @WebMvcTest

@SpringBootTest와 @WebMvcTest는 스프링 부트 프레임워크에서 테스트를 작성할 때 사용되는 어노테이션이다. 둘 다 테스트를 쉽게 작성하고 테스트할 때 필요한 빈(Bean)들을 자동으로 로드하는 데 도움이 되지만, 사용하는 방식과 대상이 다르다. @SpringBootTest @SpringBootTest 어노테이션은 애플리케이션의 전체 컨텍스트를 로드하며, 통합 테스트를 작성할 때 사용된다. 따라서 모든 빈들이 로드되고 설정 파일들이 활성화된다. 데이터베이스나 메시징 시스템과 상호작용하는 경우, 실제로 실행되는 애플리케이션과 비슷한 환경에서 테스트를 수행할 수 있다. 애플리케이션의 여러 레이어를 테스트할 수 있으므로, 시스템의 통합성과 동작을 더 정확하게 테스트할 수 있다. 하지만 테스트가..

Spring 2023.07.25

Spring Rest Client

Rest Client Rest API 서버에 HTTP 요청(GET, POST, PUT, DELETE 등)을 보낼 수 있는 클라이언트 툴 또는 라이브러리이다. 예시로 UI가 갖춰져 있는 Postman을 떠올릴 수 있겠다. RestTemplate Blocking I/O 기반의 Synchronous API이다. 따라서 순차적으로 실행중인 라인이 끝나기 전까지 다음 라인으로 넘어가지 않는다. spring-boot-starter-web 의존성을 등록하면, RestTemplateAutoConfiguration 이 자동 설정된다. 또, RestTemplateBuilder 를 빈으로 자동 등록해준다. WebClient Non-Blocking I/O 기반의 Asynchronous API이다. WebClientAutoCo..

Spring 2023.07.25

자료구조(List, Set, Map)

List List 인터페이스는 중복을 허용하면서 저장 순서가 유지되는 컬렉션을 구현하는데 사용된다. List 인터페이스에서 지원하는 클래스는 ArrayList, LinkedList 등이 있다. 동일한 특성의 데이터들을 묶는다는 것과 반복문 내에 변수를 이용해서 하나의 묶음 데이터들을 모두 접근할 수 있다는 점에서 배열과 비슷하다. 하지만, 리스트는 길이가 가변적이다. 이를 동적 할당이라고 하는데, 처음 선언하고 그 길이를 변경할 수 없는 배열과 달리 리스트는 데이터를 추가하고, 삭제함에 따라 길이를 변경할 수 있다. 또한, 데이터들이 연속적으로 나열된다. (메모리에 연속적으로 나열되지 않고, 각 데이터들은 주소로 연결되어 있다.) 그리고, 각각의 데이터들 사이에 빈 공간을 허용하지 않는다. List 장단..

Algorithm 2023.07.24

스프링 컨테이너 (Spring Container)

Spring Container 스프링 컨테이너는 자바 객체의 생명 주기를 관리하며, 생성된 자바 객체들에게 추가적인 기능을 제공한다. 스프링에서는 자바 객체를 빈(Bean)이라 한다. 스프링 컨테이너는 내부에 존재하는 빈의 생명주기를 관리(빈의 생성, 관리, 제거 등)하며, 생성된 빈에게 추가적인 기능을 제공하는 것이다. 스프링 컨테이너는 XML, 어노테이션 기반의 자바 설정 클래스로 만들 수 있다. 원래 XML을 통해 직접적으로 설정해 주어야 했지만, 스프링 부트가 등장하면서 대부분 사용하지 않게 되었다. 스프링 컨테이너의 종류 BeanFactory : 스프링의 가장 기본적인 컨테이너로, 빈의 생성과 관리에 대한 기능을 담당한다. 지연 초기화를 지원하며, 어플리케이션의 시작 시점에 모든 빈을 로드하지 ..

Spring 2023.07.24

의존성 주입(Dependency Injection, DI)

의존관계란? "A가 B를 의존한다."는 것은 "의존대상 B가 변하면, 그것이 A에 영향을 미친다."라고 말할 수 있다. 즉, B의 기능이 추가 또는 변경되면, 그것으로 인해서 A에도 영향이 미친다는 것이다. 예를 들자면, 어떤 제품의 설계도가 바뀌었을 때 그 설계도로 인해서 생산자가 그 제품을 만드는 방법을 수정해야 한다. 설계도가 변함으로써 생산자의 행위에 영향을 미쳤다. 이를 "생산자가 설계도에 의존한다."라고 말할 수 있다. class Producer { private Blueprint blueprint public Producer() { blueprint = new Blueprint(); } } 코드로는 이렇게 표현할 수 있겠다. 두 클래스가 강하게 결합되어 있고, 객체들 간의 관계가 아니라 클래..

Spring 2023.07.23

(Spring Boot) AOP(Aspect Oriented Programming)를 이용한 예외처리

AOP AOP는 Aspect Oriented Programming의 약자로 관점 지향 프로그래밍이라고 불린다. 관점 지향은 쉽게 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하는 것이라고 이해할 수 있다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. Exception같은 전체 로직 어디에서든지 동작할 수 있는 기능을 하나로 묶어 전역으로 처리하는 것으로 쉽게 이해할 수 있겠다. @ExceptionHandler @ExceptionHandler 어노테이션을 메서드에 선언하고 특정 예외 클래스를 지정해 주면해당 예외가 발생했을 때 메서드에 정의한 로직을 처리를 할 수 있다. 즉, 처리하고 싶은 Exception을 정의한..

Spring 2023.07.20