cs 8

[CS] 멀티스레딩 & 멀티프로세싱 (feat: 멀티스레딩 예시 코드)

오늘은 멀티스레딩과 멀티프로세싱이 뭔지 알아보자!면접 질문에 많이 나오는 CS 지식 중에 하나인데 아직 정확하게 알고 있지 않은 것 같아서 이참에 정리해보려고한다. 그 전에 프로세스와 스레싱에 대해 생각해본다면 다음과 같다.1️⃣ 프로세스 VS 스레드1) 프로세스 : 프로세스는 프로그램이 운영체제에 의해 실행 중인 인스턴스를 의미한다. 즉, 실행 중인 프로그램을 의미한다. 프로세스는 독립적인 메모리 영역을 가지고 있다. 2) 스레드 : 스레드는 프로세스 안에서 실행되는 작업의 흐름이다. 포로세스와는 별개로 하나의 프로세스 안에 여러 개의 스레드가 존재할 수 있다. 이 스레드는 스택 영역만 독립적이며 코드, 데이터 힙 메모리를 공유한다.2️⃣ 멀티 프로세스 vs 멀티 스레딩1) 멀티 프로세스 : 프로세스가..

[Server] CORS 오류 해결 & CORS가 뭘까

프로젝트를 하면서 그 유명한 CORS 문제가 발생했다. 프론트 팀원에게 응답 헤더로 보내고있는 access token이 undefined 이라고 찍힌다고 말해줘서 오류를 한참 수정했다..CORS 문제였던 것!public CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(List.of("http://localhost:3000")); configuration.setAllowedMethods(List.of("GET", "POST", "PUT", "DELETE", "OPT..

[Server] Spring 패키지 구조, 각각의 기능

동기들이랑 AI기반 회의 플랫폼을 개발 중이다. Spring 공부를 하고 싶어서 백엔드 역할을 맡아서 참여하게 되었다. Spring은 처음이다보니 폴더 구조 이해에 어려움이 있어 그 내용을 정리해보려고 한다. Spring 에서 패키지 구조는 어떻게 구성할 수 있을까!보통 Spring의 폴더 구조는 아래와 같이 구성한다. MVC 설계를 기준으로 다음과 같다.com.example.projectname├── controller├── service├── repository├── model ├── dto├── config└── util 여기서 사실 안에 코드도 중요하지만 폴더의 구조를 설계하는 것도 대단히 중요하다. 그 이유는 코드의 가독성, 유지보수성 때문이다. Spring은 각각의 코드가 의존성 주입을 통해 ..

[알고리즘] List와 Set의 시간 복잡도 비교

알고리즘 공부를 하기 위해 코테를 풀다보니 List와 Set의 시간복잡도 차이에 놓치고 있는 부분이 생겼다. List vs Set 시간 복잡도 기능ListSet추가 (Add)O(1)O(1)제거 (Remove)O(n)O(1)탐색 (Serch)O(n)O(1)정렬 (Sort)O(n logn)-  여기서 내가 놓친 것은 "remove"이다. List는 순서가 있는 자료구조이고, Set는 순서가 없는 자료구조이다. 그렇기 때문에 List에서 제거를 할때는 탐색을 통해 해당 값을 찾고, 제거한다. 하지만 Set은 내부적으로 해시 테이블의 구조로 이루어져있다. 그래서 제거하는데 시간복잡도가 O(1)이 걸린다. Set이 해시 테이블 기반으로 구현되어있다고?set에 대해 조금 더 자세히 살펴보기 위해 해시 테이블을 생각..

[CS] 디자인 패턴 - 구조 패턴

디자인 패턴 중 구조패턴에 대해서 알아보자.1. 구조 패턴구조 패턴은 객체나 클래스를 활용해 큰 구조를 만들 때, 그 구조를 효율적이고 유연하게 설계하는 방법을 제공하는 디자인 패턴이다.  구조 패턴의 종류로는 프록시, 어댑터, 브리지, 복합체, 데코레이터, 퍼사드, 플라이웨이트 패턴이 있다. 주요 패턴인 프록시 패턴을 자세하게 살펴보자면 다음과 같다. 1-1 프록시 패턴 (Proxy Pattern)프록시 패턴은 어떤 객체에 접근하기 전, 그 접근을 제어하거나 추가적인 작업을 수행하기 위해 중간계층 프록시를 두는 디자인 패턴이다.  예를 들어, 클라우드와 서버 사이에서 많이 사용된다. http와 https 트래픽을 관리하거나, 배포 환경에서 Cloudflare와 같은 서비스로 대규모 트래픽을 필터링하고 ..

📚 CS/그 외 2024.11.20

[CS] 디자인 패턴 - 생성패턴

오늘은 생성 패턴에 대해서 알아보자.   1. 생성 패턴생성 패턴은 객체 생성 방식을 다루는 디자인 패턴이다. 객체 생성 과정에서의 문제를 해결하고 코드의 유연성과 재사용성을 높이는 역할을 한다.생성 패턴의 종류로는 싱글톤, 팩토리, 추상팩토리, 빌더, 프로토타입 패턴이 있다. 여기서 싱글톤과 팩토리 패턴에 대해서 자세하게 살펴보면 다음과 같다. 1-1. 싱글톤 패턴 (Singleton Pattern)싱글톤 패턴은 클래스의 오직 하나의 인스턴스만 가지는 패턴이다. 다수의 인스턴스를 생성하지 않고, 동일한 인스턴스를 모든 모듈에서 공유하며 사용한다. [장점]리소스 절약 : 하나의 인스턴스를 여러 곳에서 공유하므로 객체 생성 비용이 줄어든다.일관성 유지 : 단일 인스턴스를 사용하므로 데이터가 항상 일관성을 ..

📚 CS/그 외 2024.11.19

[알고리즘] 선택 정렬 (selection sort) 이란?

📚 선택 정렬 알고리즘이란?선택 정렬은 제자리 정렬 알고리즘이라도 불린다. 선택 정렬은 정렬되지 않은 리스트에서 가장 작은(또는 큰) 원소를 선택하여 해당 원소를 리스트의 앞쪽부터 차례대로 정렬해 나가는 알고리즘이다. 리스트의 각 요소를 한번씩 검사하여, 해당 순서에 맞는 원소를 선택하고 그 자리에 배치한다. 1️⃣ 선택 정렬의 구체적 과정 1) 배열에서 최솟값을 찾아 배열의 맨 앞 요소와 교환한다. 2) 그 다음, 나머지 배열에서 다시 최솟값을 찾아 두 번째 요소와 교환 3) 이 과정을 배열이 정렬될 때까지 반복 2️⃣ 시간복잡도 비교 3️⃣ Java로 알아보는 선택 정렬import java.util.*;public class Main { public static void selection (i..

[CS] 디자인 패턴 (3) - MVVM

오늘은 디자인 패턴의 마지막으로 MVVM 패턴에 대해서 정리를 해보자. MVVM 패턴이란?MVVM 패턴은 Model, View, ViewModel로 이루어진 디자인 패턴으로 어플리케이션의 유지보수와 테스트 용이성을 높이기 위해 사용된다. MVVM은 UI 코드와 비즈니스 로직을 분리하여 코드의 재사용성을 높이고, 데이터 바인딩을 통해 실시간 데이터 업데이트를 용이하게 한다.  1. MVVM 패턴의 구조-> Model + View + ViewModel로 구성 2. MVC 구성요소1) Model : Model은 어플리케이션의 데이터와 비즈니스 로직을 담당한다. 데이터베이스, 네트워크, 로컬 저장소와의 통신을 처리하고, 데이터의 저장, 검색, 조작을 수행한다. 2) View : View는 사용자 인터페이스를 나..

📚 CS/그 외 2024.06.23