CS 22

[Architecture] MSA (vs MA)

오늘은 애플리케이션을 구성하는 방법론인 MSA와 MA에 대해 알아보고, 각각의 특징과 장단점에 대해서 설명드리겠습니다. 대략적인 Architecture image입니다. 사진만 봐도 Monolitic은 한 곳에 뭉쳐져 있고, MSA는 각각 Microservice로 분산되어 있는 것을 육안으로 확인할 수 있습니다.MSA (Microservice Architecture)소프트웨어 시스템을 여러 작은 독립적인 서비스로 분할하여 개발하고 배포하는 방식SOA (Service Oriented Architecture)의 특징을 공통으로 가집니다SOA: 대규모 컴퓨터 시스템을 구축할 때의 개념으로 업무상 일 처리에 해당 소프트웨어 기능을 서비스로 판단하고 그 서비스를 네트워크상에 연동하여 시스템 전체를 구축해 가는 방..

CS 2024.10.22

[CS] HTTP, HTTPS의 개념과 차이점에 대해 알아보자

평소 HTTP와 HTTPS의 차이를 HTTPS = HTTP + Security 정도로만 파악하고 있었는데, 이번에 확실하게 개념 정리를 하려고 합니다. 이들이 무엇이고 왜 사용하는지와 둘의 차이점에 대해 알아보겠습니다. HTTP(Hypertext Transfer Protocol) 클라이언트와 서버 간 통신을 위한 통신 규칙 세트 또는 프로토콜 사용자가 웹 사이트를 방문하면, 사용자 브라우저가 웹 서버에 HTTP 요청을 전송하고, 웹 서버는 클라이언트 요청에 대해 HTTP 응답을 합니다. 웹 서버와 사용자 브라우저는 데이터를 일반 텍스트로 교환하기에 HTTP 프로토콜은 네트워크 연결을 작동하게 하는 기본 기술입니다. 클라이언트 요청에 대한 성공 응답은 200(OK), 201(Created) 등으로 구성되고..

CS 2023.12.01

[CS] I/O 속도 개선을 위한 ios_base::sync_with_stdio(false), cin.tie(NULL), '\n'

백준에서 간단한 stack 문제를 푸는 도중 발생한 시간 초과 문제입니다. 모든 테스트케이스를 고려했었고, 100% 확신을 한 상태에서 제출을 했는데 다음과 같은 issue가 발생했습니다. 설마설마하고 ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL) 코드를 넣었는데 정답 처리가 되었습니다. 그래서 이러한 사례가 많았는데, 막연하게 시간초과 방지를 위해 코드를 달아주는 것 외에는 정확히 모르고 있었습니다. 그래서 이 코드들에 대해 무엇이고 어떠한 상황에 사용하는지 알아보려고 합니다. ios_base::sync_with_stdio(false): C/C++ 표준 스트림 간 동기화 비활성화 처리 장점 일반적으로 C++ 표준 스트림(cin + co..

CS 2023.08.15

[CS] 면접을 위한 CS 전공지식 노트 정리(chapter4 데이터베이스)

데이터베이스 단원의 목차에 대해 설명드리겠습니다. SECTION 1 데이터베이스의 기본 SECTION 2 ERD와 정규화 과정 SECTION 3 트랜잭션과 무결성 SECTION 4 데이터베이스의 종류 SECTION 5 인덱스 SECTION 6 조인의 종류 SECTION 7 조인의 원리 4.1 데이터베이스의 기본 데이터베이스(DB, DataBase)는 여러 사람이 공유하여 사용할 목적으로 체계화해 통합, 관리하는 데이터의 집합입니다. 해당 데이터베이스를 제어, 관리하는 통합 시스템을 DBMS(DataBase Management System)라고 하며, 데이터베이스 안에 있는 데이터들은 특정 DBMS마다 정의된 쿼리 언어(query language)를 통해 삽입, 삭제, 수정, 조회 등을 통해 수행할 수 있..

CS 2023.06.05

[컴퓨터 구조] chapter3 정리(컴퓨터 연산 : 부동소수점)

오늘은 부동 소수점에 대해서 알아보겠습니다. 부동소수점(=떠돌이 소수점 방식)은 실수를 컴퓨터 상에서 근사하여 표현할 때 소수점의 위치를 고정하지 않고, 그 위치를 나타내는 수를 따로 적는 것으로, 유효숫자를 나타내는 가수와 소수점의 위치를 풀이하는 지수를 나누어 표현합니다. (컴퓨터에서 소수점 이하의 값을 가지는 실수를 표현하는 방법) https://ko.wikipedia.org/wiki/%EB%B6%80%EB%8F%99%EC%86%8C%EC%88%98%EC%A0%90 부동소수점 - 위키백과, 우리 모두의 백과사전 위키백과, 우리 모두의 백과사전. 초기의 전기기계식 프로그래밍 가능한 컴퓨터 Z3에는 부동소수점 산술 기능이 포함되었다. (뮌헨의 국립 독일 박물관) 부동소수점(浮動小數點, floating ..

CS 2023.05.28

[컴퓨터 구조] chapter3 정리 (컴퓨터 연산 : 덧셈, 뺄셈, 곱셈, 나눗셈)

컴퓨터 연산에서 배울 내용들은 정수 연산(사칙연산, 오버플로우), 부동소수점, 컴퓨터가 수를 표현하는 방법 및 산수 연산 알고리즘, 알고리즘을 수행하기 위해 하드웨어를 어떻게 설계해야 하는지에 대한 것입니다. 정수 덧셈 및 뺄셈 ex) 7 + 6 다음과 같이 올림수가 발생하면 오른쪽에서 왼쪽으로 옮겨줍니다. ex) 7 - 6 = 7 + (-6) MSB에서 Carry나 Borrow한 값을 무시해 주면 값이 1이 나옴을 확인할 수 있게 됩니다. 역부호화(부호화 + 1)한 후 덧셈을 하는 과정이라고 보면 될 것 같습니다. 오버플로(Overflow) 오버플로는 데이터를 저장하는데 사용되는 메모리 영역에 더 많은 데이터가 들어가려고 할 때 발생하는 상황을 말합니다. 주로 산술 연산이나 메모리 할당과정에서 발생하고..

CS 2023.05.22

[CS] 복잡도, 선형 자료 구조, 비선형 자료 구조

자료구조(data structure)는 효율적으로 데이터를 관리하고 수정, 삭제, 탐색, 저장할 수 있는 데이터 집합을 말합니다. 대표적으로 스택, 큐, 힙, 리스트 등이 있습니다. 복잡도 시간 복잡도, 공간 복잡도 빅오 표기법(Big-O) 시간 복잡도란 "문제를 해결하는 데 걸리는 시간과 입력의 함수 관계"를 가리킵니다. 알고리즘 로직이 "얼마나 오랜 시간"이 걸리는지를 함수형식으로 표현해 주는 것을 빅오 표기법이라고 하고, 예시를 들어 입력 크기 n에 대해서 알고리즘을 해결하는 데 걸리는 시간이 O(n^3)이라고 하면, 다음과 같은 코드를 생각할 수 있습니다. int ans = 0; for(int i=1;i

CS 2023.05.20

[컴퓨터 구조] chapter2-3 정리 (동기화, 컴파일러, 어셈블러, 링커, 로더)

저번 포스팅에서는 MIPS 명령어에 따라 달라지는 주소 지정 방식을 설명하였습니다. 이번에는 동기화와 C언어의 번역계층에 대해 상세하게 다루어보고, 프로그램 번역과 실행 과정에서 중요한 역할을 하는 컴파일러, 어셈블러, 링커, 로더의 역할에 대해 설명드리려고 합니다. 동기화란 무엇인가? 태스크(작업)가 서로 독립적인 경우에는 병렬 처리가 쉽지만, 서로 협력해야 하는 경우가 있습니다. 협력은 일반적으로 다른 태스크들이 읽어야 하는 값을 어떠한 다른 태스크가 읽고 있음을 의미합니다. 태스크가 언제까지 쓰기를 마쳐야 다른 태스크들이 안전하게 데이터를 읽을 수 있는지 알려면 태스크 동기화가 필요합니다. "동기화"가 존재하지 않으면, 데이터 경쟁관계(data race)의 위험이 있습니다. 여기에서 데이터 경쟁관계..

CS 2023.05.04

[컴퓨터 구조] chapter2-2 정리(컴퓨터 언어 : 명령어)

오늘은 chapter2 뒷부분에 대해서 설명하려고 합니다. 앞 단원에서, 명령어의 표현과 C코드를 MIPS로 변환하는 방법과 2의 보수법을 사용한 음수의 표현, MIPS의 각종 명령어에 대해서 알아보았습니다. 뒷부분에서는 프로시저의 기본적인 개념과 호출 순서, 레지스터에 관련한 내용들에 대해 알아보고 프로시저(논리프 프로시저, 리프 프로시저)에 대해서 설명드리려고 합니다. 이에 더해 프로그램 실행에 필요한 메모리 레이아웃의 구성은 어떻게 되는지와, 명령어에 따른 주소지정방식에 대해 정리하려고 합니다. 2.8 하드웨어의 프로시저 지원 2.9 문자와 문자열 2.10 32비트 수치와 주소를 위한 MIPS의 주소 지정 방식 프로시저(procedure)란 ? - 프로시저나 함수는 이해하기 쉽고 재사용이 가능하도록..

CS 2023.04.20

[CS] 객체지향 생활체조 9가지 원칙

오늘은 객체지향 생활체조 원칙에 대해서 알아보려고 합니다. 객체지향 생활체조는 객체지향 프로그래밍을 개발하면서 생산성을 높이기 위한 9가지 원칙입니다. 이러한 원칙들은 소프트웨어 개발자들이 코드를 작성할 때, 유지보수 가능하고 재사용 가능하며 확장 가능한 코드를 작성하도록 도와줍니다. 저는 "객체지향 생활체조 9가지 원칙"이 코드 구현을 하는 데 있어서도 굉장히 중요한 요소가 될 것이라고 생각했고, 개발자가 되어 사람들과 협업을 할 때에도 중요할 것 같아서 생활체조 9가지 원칙에 대해 알아보려고 합니다. 1. 한 메서드에 오직 한 단계의 들여쓰기만 하라(One level of indentation per method) public void processOrder(Order order) { if (orde..

CS 2023.04.15