전체 글71 DFS와 BFS 알고리즘 완벽 가이드!! [탐색 알고리즘의 기본부터 예제 코드까지] 포스팅 하나로 탐색 알고리즘은 그래프를 순회하거나 특정 조건을 만족하는 경로를 찾는 데 자주 사용된다. 특히 깊이 우선 탐색(DFS)과 너비 우선 탐색(BFS)은 가장 기초적이면서도 중요한 탐색 기법으로, 많은 문제 해결의 기반이 된다. 이번 포스팅 에서는 DFS와 BFS의 개념, 작동 방식, 예제 코드, 그리고 두 알고리즘의 차이점으로 작성해보려 한다. DFS (Depth-First Search: 깊이 우선 탐색)DFS란?깊이 우선 탐색은 시작 노드에서 한 방향으로 깊게 들어가며 탐색을 진행하는 방식이다. 한 경로를 끝까지 탐색한 후, 더 이상 갈 곳이 없을 때 다른 경로로 이동한다.주요 특징:스택 자료구조(혹은 재귀 호출)를 사용한다.그래프의 경로가 깊은 곳까지 먼저 탐색된다.순환 구조나 무한 루프를 방지하.. Algorithm/Java 2025. 1. 4. Spring WebSocket의 기본 개념과 [클라이언트-서버] 연결 Spring WebSocket의 기본 개념과 클라이언트-서버 연결 WebSocket은 서버와 클라이언트 간의 양방향 실시간 통신을 가능하게 하는 기술이다. 이를 통해 클라이언트와 서버는 연결이 유지되는 동안 자유롭게 데이터를 주고받을 수 있다.Spring에서는 @Configuration과 TextWebSocketHandler를 사용해 WebSocket 서버를 간편하게 구축할 수 있다. 이번 포스트에서는 Spring WebSocket의 주요 개념과 이를 통해 어떻게 클라이언트 연결을 관리하고 메시지를 전송하는지에 대해 다뤄본다. 1. WebSocketSession과 TextMessageWebSocketSessionWebSocketSession은 WebSocket 연결을 추적하고 관리하는 핵심 객체.. JAVA/Spring 2025. 1. 1. 네트워크 기본 개념 Socket 통신: OSI 7 계층 네트워크 기본 개념 Socket 통신: OSI 7 계층 안녕하세요, Java 개발자 min입니다. 이번 포스팅에서는 네트워크의 기본 개념과 Socket 통신을 중심으로 OSI 7 계층에 대해 정리해보겠습니다. 네트워크는 개발자가 반드시 알아야 할 핵심 분야로, 효율적인 시스템 설계와 안정적인 통신 구현에 필수적인데요, 특히 Socket 통신은 클라이언트-서버 간 데이터 교환의 기본 구조를 이해하는 데 중요한 역할을 합니다. 1. 네트워크란?네트워크(Network)는 두 개 이상의 장치(Device)가 데이터를 주고받기 위해 연결된 상태를 의미한다.인터넷, 로컬 네트워크, 블루투스 등 다양한 형태가 존재하며, 네트워크는 물리적 연결뿐만 아니라 논리적 연결을 포함한다. 2. OSI 7 계층: 네트워.. CS(Computer Science) 2025. 1. 1. 스레드(Thread)란? 스레드(Thread)란?스레드는 프로세스 내에서 실행되는 최소 단위의 작업 흐름이다. 일반적으로 하나의 프로세스는 하나의 스레드를 가지지만, 멀티스레드 환경에서는 여러 스레드가 하나의 프로세스에서 동시에 실행될 수 있다. 스레드는 같은 메모리 공간을 공유하면서 독립적으로 실행되기 때문에 효율적인 병렬 처리가 가능하다. 스레드는 CPU 활용도를 높이고, 작업의 응답 속도를 개선하며, 멀티태스킹을 구현할 때 유용하다. 그러나 동시에 여러 작업이 실행되므로 스레드 동기화와 같은 이슈가 발생할 수 있다. 스레드의 특징메모리 공유스레드는 하나의 프로세스 내에서 메모리를 공유한다. 전역 변수와 힙 영역을 여러 스레드가 공유하지만, 스택 영역은 독립적이다.경량 프로세스스레드는 프로세스에 비해 생성 및 종료가 .. CS(Computer Science) 2025. 1. 1. 프로세스란 무엇인가? 프로세스란 무엇인가?프로세스는 컴퓨터에서 실행 중인 프로그램을 의미하며, 운영 체제의 핵심 요소로 관리된다. 프로그램이 디스크에 저장된 정적인 코드라면, 프로세스는 실행 중인 프로그램의 동적인 작업 단위를 말한다.하나의 프로그램이 여러 번 실행되면 동일한 프로그램이라도 각각의 실행이 독립적인 프로세스로 구동된다. 프로세스는 다양한 상태를 가지며, 이 상태들은 운영 체제가 프로세스를 효율적으로 관리하기 위해 사용된다.프로세스의 생성, 실행, 대기, 종료 등은 특정 이벤트나 스케줄링 알고리즘에 따라 전환된다. 프로세스의 주요 상태생성 상태(Create)프로세스가 생성되고 초기화 중인 상태를 말한다.준비 상태(Ready)프로세스가 CPU를 사용할 준비가 되어 있는 상태이다. CPU가 할당되기를 기다리는.. CS(Computer Science) 2025. 1. 1. Java에서 외부 프로세스 실행: Runtime.getRuntime().exec() 메서드 사용법 Java에서 외부 프로세스 실행: Runtime.getRuntime().exec() 메서드 사용법Java는 내장된 Runtime 클래스를 통해 외부 프로세스를 실행할 수 있다.이 메서드를 사용하면 Java 프로그램 외부에서 명령어를 실행할 수 있으며, 외부 시스템 명령을 실행한 결과를 처리할 수 있다. 주로 파일 컴파일이나 시스템 명령어 실행을 자동화할 때 유용하다. Runtime.getRuntime().exec() 메서드exec() 메서드는 주어진 명령어를 외부 프로세스에서 실행하는 역할을 한다.이를 통해 운영 체제의 명령줄 명령어를 Java 프로그램에서 실행할 수 있다. 예를 들어, Java 파일을 컴파일하는 javac 명령어를 실행할 수 있다. 예시 코드아래 예시 코드는 Java 프로그램에서.. JAVA/메서드 정리 2024. 12. 31. Jackson과 Lombok @Data 어노테이션을 이용한 JSON 데이터 처리 Jackson과 Lombok @Data 어노테이션을 이용한 JSON 데이터 처리자바에서 JSON 데이터를 자바 객체로 변환할 때는 Jackson 라이브러리를 많이 사용한다. Jackson은 ObjectMapper를 사용하여 JSON 데이터를 쉽게 자바 객체로 변환할 수 있게 해준다. 이번 포스팅에서는 Jackson을 활용해 JSON 데이터를 객체로 변환하는 방법과, Lombok의 @Data 어노테이션을 사용하여 자동으로 생성된 메서드들이 어떻게 유용하게 작동하는지 살펴보겠다. 또한, 여러 클래스에 @Data 어노테이션을 사용할 경우에도 어떻게 정확하게 값을 추출할 수 있는지에 대해 설명할 것이다. Jackson을 이용한 JSON 데이터 변환Jackson은 JSON 데이터를 자바 객체로 변환하는 데 매.. JAVA/Spring 2024. 12. 31. Java에서 ProcessBuilder와 클래스패스 설정에 대한 이해 Java에서 ProcessBuilder와 클래스패스 설정에 대한 이해Java 프로그램을 외부에서 실행할 때, ProcessBuilder를 사용하여 외부 프로세스를 실행하는 경우가 많다. 하지만, 외부 프로세스에서 클래스를 로드할 때 클래스패스(classpath) 설정과 실행 디렉토리가 일치하지 않으면 예상치 못한 문제가 발생할 수 있다. 특히, java 명령어를 통해 실행할 때, 클래스 파일을 찾는 경로에 대한 이해가 중요하다. 1. 클래스패스 설정의 중요성java 명령어는 클래스를 찾기 위해 클래스패스를 사용한다. 클래스패스는 -cp 옵션을 통해 지정할 수 있다. 이때, 클래스패스를 설정하는 방식에 따라 외부 프로세스에서 클래스를 올바르게 로드할 수 있느냐의 차이가 발생한다. 예를 들어, -cp t.. JAVA/Spring 2024. 12. 30. Face Recognition 라이브러리와 Google Colab을 활용한 얼굴 인식 구현하기 Face Recognition 라이브러리와 Google Colab을 활용한 얼굴 인식 구현하기안녕하세요. 오늘은 Google Colab 환경에서 face_recognition 라이브러리를 사용해서 얼굴 인식을 구현하는 방법을 소개하려고 합니다. Face Detection과 Recognition의 이해얼굴 인식 기술은 크게 두 가지 단계로 나눌 수 있습니다.Face Detection(얼굴 감지)이미지에서 얼굴이 있는 영역을 찾아내는 기술입니다.HOG(Histogram of Oriented Gradient) 알고리즘을 주로 사용합니다.Face Recognition(얼굴 인식)감지된 얼굴이 누구의 얼굴인지 식별하는 기술입니다.얼굴 특징을 인코딩하여 기존 데이터와 비교하는 방식으로 동작합니다. Googl.. AI 2024. 12. 27. Python으로 검색 엔진 성능 비교하기: FAISS vs ChromaDB SentenceTransformer와 FAISS 및 ChromaDB를 활용한 임베딩 검색 성능 비교 이번 글에서는 문장을 벡터(임베딩)로 변환하여 검색하는 두 가지 도구인 FAISS와 ChromaDB를 활용한 검색 성능 비교를 진행하였다. 두 도구를 활용해 검색 속도와 초기 설정 시간 등을 벤치마킹하고, 이를 바탕으로 어떤 상황에서 어떤 도구를 선택해야 하는지 판단할 수 있도록 하였다.이 글에서는 벤치마크를 진행한 코드의 세부 내용과 각 라이브러리의 특징, 사용 방법을 다룬다. 주요 코드 설명1. 임베딩 준비문장을 벡터로 변환하기 위해 SentenceTransformer 모델을 사용하였다.from sentence_transformers import SentenceTransformerclass Searc.. AI 2024. 12. 26. 판다스를 활용한 데이터 전처리 및 MySQL Workbench 데이터 가공 판다스를 활용한 데이터 전처리 및 MySQL Workbench 데이터 가공 이번 포스팅 에서는 Python의 pandas를 이용하여 데이터를 전처리한 뒤, MySQL Workbench를 통해 데이터를 가공하고 이를 다시 export하는 학습 과정을 정리합니다.이 과정은 실제 프로젝트에서 공공 데이터를 RDBMS로 적재하여 분석하거나 가공할 때 매우 자주 사용되는 방법론입니다. 1. 학습 배경이번 학습은 공공데이터 포털에서 제공하는 전국자동차검사소표준데이터를 활용하여 데이터를 수집하고, 이를 가공 및 전처리하는 과정으로 진행되었습니다.이 데이터는 CSV 파일 형태로 제공되며, 실무에서의 데이터 정제 및 DB 적재 프로세스를 체험해볼 수 있는 좋은 사례가 됩니다.주요 학습 목표는 다음과 같습니다.pan.. DATA 2024. 12. 24. Kaggle을 활용한 런던 자전거 대여 데이터 분석 및 인사이트 Kaggle을 활용한 데이터 분석: 자전거 대여 패턴 분석오늘은 Kaggle의 London Bike Sharing 데이터셋을 활용한 분석 내용을 공유하려 합니다. 분석 환경 설정기본적인 데이터 분석을 위해 pandas, numpy, seaborn, matplotlib 라이브러리를 사용했습니다. 진행과정이번 포스팅에서는 Kaggle의 London Bike Sharing Dataset을 활용하여 자전거 대여 패턴을 분석하고, 이를 기반으로 비즈니스적인 통찰력을 도출한 내용을 공유한다. 자전거 대여 데이터는 다양한 변수들, 예를 들어 날씨, 시간대, 온도 등과 밀접하게 연관이 있어, 이를 분석하면 자전거 대여 서비스를 최적화하는 데 도움이 된다. 본 분석에서는 시각화와 코드 예시를 통해 데이터를 탐색.. DATA 2024. 12. 24. 이전 1 2 3 4 ··· 6 다음