전체 글 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

프로세스

프로세스 컴퓨터에서 실행되고 있는 프로그램을 말한다. CPU 스케줄링의 대상이 되는 작업이라는 용어와 같은 의미로 쓰인다. 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어나고, 이후 운영체제의 CPU 스케줄러에 따라 CPU가 프로세스를 실행한다. 프로세스와 컴파일 과정 프로세스는 프로그램이 메모리에 올라가 인스턴스화된 것을 말한다. ex) 프로그램은 구글 크롬 프로그램(chrome.exe)과 같은 실행 파일이며, 이를 두 번 클릭하면 구글 크롬 프로세스로 변환되는 것이다. 프로그램을 만드는 과정은 만드는 언어마다 다를 수 있으며 컴파일 언어인 C언어 기반의 프로그램을 기준으로 설명하면 컴파일러가 컴파일 과정을 통해 컴퓨터가 이해할 수 있는 기계어로 번역하여 실행할 수 있는 파일을 만들게 된..

CS 공부 2023.07.06

CPU / 메모리

CPU(Central Processing Unit)란? 메모리에 존재하는 명령어를 해석해서 실행하는 부품이다. 운영체제의 커널(운영체제의 핵심 부품으로, 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 드 운영체제의 중추적인 역할을 함.)이 프로그램을 메모리에 올려 프로세스로 만들면 CPU가 이를 처리한다. CPU의 구성요소 제어장치(CU, Control Unit) 프로세스 조작을 지시하는 CPU의 한 부품, 입출력 장치 간 통신을 제어하고 명령어들을 읽고 해석하며, 데이터 처리를 위한 순서를 결정한다. 레지스터(Register) CPU 안에 있는 매우 빠른 임시기억장치이다. CPU와 직접 연결되어 있어 연산 속도가 메모리보다 월등히 빠르다. CPU는 자체적으로 데이터를 저장..

CS 공부 2023.06.24

WebRTC(Mesh, MCU, SFU)

우리 프로젝트의 메인 기능인 화상채팅을 위해서 webRTC라는 기술을 처음 접하게 되었다. WebRTC는 Web Real-Time Communication이다. 브라우저간의 오디오, 영상 미디어를 스트리밍하며 데이터 교환을 할 수 있도록 하는 기술이다. 실시간으로 웹에서 데이터를 교환할 수 있는 이유는 '시그널링'이라는 NAT 우회 과정을 거치게 된다. STUN 서버에 의해 NAT 트래버셜 작업이 이루어지고 이 STUN 서버에 요청을 보내면 NAT 뒤에 있는 Peer 들이 서로 연결할 수 있는 IP와 포트를 찾아준다. STUN서버가 각 사용자들을 연결해준다. 근데 이 STUN 서버에서 항상 연결을 해주는게 아니기 때문에 이때 대안으로 TURN 서버를 사용한다. 근데 이 TURN 서버는 시간 지연이 필수적..

카테고리 없음 2023.05.24

TIL - 20230523(모각코ON: 프로젝트 시작)

드디어 항해99실전 프로젝트를 시작했다. 조를 되게 잘 만난 것 같아서 기분이 좋다. 되게 잘하시는 프론트분께 부탁해서 리더 부리더를 신청했고, 미니프로젝트때 같은 조로 뵈었었던 백앤드분, 그리고 평소에 친하게 지내던 프론트분이 같은 조가 되었다. 어쩌다보니 평산신씨3명이 모여서 평산신씨 트리오가 되었다.ㅋㅋ 프로젝트 주제는 모각코ON:이다. 기획단계에서 처음에는 여행을 큰 틀로 가져가려고 했었다. 그런데 여행이라는 주제는 참 좋았지만서도, 빌드업을 하루 이틀 하다보니 다들 이건 좀 아니다 싶어 하시는게 눈에 보였고, 그래서 한번 기획을 엎게 되었다. 아이디어 회의부터 다시하게 되었고, 거듭해서 디자이너님, 프론트분들, 백앤드분들과 의견을 나누고 나눈 끝에 온라인으로 화상채팅방을 통해 만나서 모각코를 하..

TIL 2023.05.23

Clone Coding Project - StarCraftChatting

https://eastlight0418.tistory.com/57 WIL - 20230521(클론코딩 StarCraftChatting 회고) 클론 코딩 프로젝트로 좀 웃기긴 하지만 StarCraftChatting을 클론 코딩해보았다. 사실 채팅 자체를 처음 구현해보는 것이라서 처음에는 좀 겁을 먹은 것이 사실이다. 같은 조원 분들 중 한분께서 채 eastlight0418.tistory.com https://github.com/been1118/StarCraft-Chatting-CloneCoding GitHub - been1118/StarCraft-Chatting-CloneCoding Contribute to been1118/StarCraft-Chatting-CloneCoding development by ..

Project 2023.05.21