전체 글 100

[TIL][Algorithm] 다익스트라 알고리즘과 그 구현

오늘의 스터디 주제는 알고리즘, 그 중에서도 다익스트라 알고리즘에 대해 자세히 소개하고 싶어 포스팅해본다. 처음 알고리즘을 배울 때 정렬이나 BFS, DFS같은 알고리즘들은 한 번 배우고 아, 이런 식으로 풀면 되겠구나! 가 대충 감이 왔는데, 다익스트라의 경우 감이 잘 안잡혀서 당황했던 기억이 있다. 나와 스터디원들의 감을 다시 잡아보기 위해 포스팅 야무지게 써보겠다 !!! 📌 최단 경로 (shortest path) 우선, 다익스트라 알고리즘과 함께 딸려오는 키워드가 '최단 경로'이다. 알고리즘 문제를 풀 때, 'A에서 B로 가는 최소 비용이 얼마인가?' 이런 유형을 왕왕 본 적이 있을 것이다. 보통은 이런 공간적인 문제를 그래프로 표현하고, 각 지점은 노드, 도로는 간선으로 표현이 된다. 일반적으로 ..

Algorithm 2024.03.29

[TIL][OS] 멀티 프로세스와 멀티 스레드의 차이, 컨텍스트 스위칭

같이 항해하는 친구들끼리 진행해보기로 한 CS 스터디! aka 심포지엄 (ㅋㅋ)이번에는 매번 읽고만 넘기고 자세히 짚어보지는 않았던 멀티 프로세스와 멀티 스레드의 차이에 대해 공부해보기로 했다.이 둘의 차이에 대해 알아보기 전에 먼저 프로세스와 스레드란 뭔지 알아보자. 🔎 프로세스 (Process)란?프로세스는 컴퓨터에서 실행 중인 프로그램을 의미한다.실행 중인 프로그램은 메모리에 올라가서 CPU에 의해 실행되며, 이렇게 실행 중인 프로그램을 프로세스라고 부르는것이다.프로세스는 운영체제(OS)에 의해 관리되고, 프로세스마다 자신의 주소 공간, 메모리, 입출력, 파일 등의 자원을 갖고 있다. 또한 하나의 프로그램이 여러 개의 프로세스로 분리되어 실행될 수도 있다!즉, 프로세스란 '프로그램이..

Computer Science 2024.03.26

[TIL][Test] 단위 테스트/통합 테스트/인수 테스트, 테스트 코드의 필요성

테스트 코드를 프로젝트에 적용하기에 앞서, 테스트에 대해 공부하고 회고해보는 시간을 가지고 포스팅한다. 사실 여태 테스트 코드를 작성하지 않고 Postman 으로만 API 기능 테스트를 진행해왔다.하지만 수동으로 API 요청을 생성한 후 테스트를 실행해야 해서 자동화가 불가능했고, 모든 시나리오와 경로를 수동으로 테스트 해야했기 때문에 그 과정에서 내가 예상하지 못한 버그 확률이 높아졌다. 테스트 해야 할 시나리오를 빼먹기도 했고 🥲 그래서 테스트 코드의 필요성을 느끼고, 비즈니스 로직의 핵심인 서비스 레이어 코드부터 단위 테스트를 진행해보려 한다. 아래 '단위 테스트 단점' 에서 언급할 객체 간 의존성 문제를 해결하기 위해 객체를 mocking 해서 진행할 예정이다! 🔎 테스트 코드란? ..

Framework/Spring 2024.03.22

[TIL][CS] UML / UML 다이어그램이란?

✏️ 대표적인 개념 모델링 도구, UML UML (Unified Modeling Language) 모델링 기술과 방법론을 통합하여 표준화한 객체지향 모델링 언어 소프트웨어 개발 과정에서 의사소통을 원활하게 하기 위해 사용 UML 구성 요소: 사물(Things), 관계(Relationships), 다이어그램(Diagram) 🔹 사물 객체 간의 관계를 형성하는 대상으로 모델을 구성하는 기본 요소 구조 사물 - 시스템의 개념적, 물리적 요소를 표현 (Class, Use Case, Component, Node) 행동 사물 - 시간과 공간에 따른 요소들의 행위를 표현 (Interaction, State Machine) 그룹 사물 - 요소들을 그룹으로 묶어서 표현 (Package) 주해 사물 - 부가적인 설명이나 ..

Computer Science 2024.03.21

[TIL][CS/소프트웨어 설계] 요구사항 정의 및 분석, 분석 도구

오늘은! 소프트웨어 설계에 필요한 요구사항 정의 및 분석에 대해 공부했다. 요구사항이 뭐고, 요구사항을 어떻게 정의하고, 어떤 과정을 통해서 분석하는지 보겠음 우선 가장 첫 번째로 현행 시스템의 구성을 파악하는 것이 필요하다. ✏️ 현행 시스템 파악 절차 개발하려는 시스템의 방향성을 설정하기 위해, 현행 시스템의 구성을 파악하는 절차 1단계 : 시스템 구성, 시스템 기능, 시스템 인터페이스 파악 2단계 : 아키텍처, 소프트웨어 구성(DBMS, 운영체제) 파악 3단계 : 하드웨어 구성, 네트워크 구성 파악 🔹 운영체제(OS) 파악 시 고려 사항 가용성, 성능, 기술지원, 주변기기, 구축 비용이 얼마나 되는지, ... 이런 것 메모리 누수 성능 영향⭐, 구축비용 TCO (특정 기간동안 OS를 관리하고 사용하..

Computer Science 2024.03.12

[TIL][CS] 소프트웨어 개발 방법론

오늘은! 소프트웨어 공학에서 다루는 내용 중 하나인 '소프트웨어 개발 방법론'에 대해 공부했다. 공부한 내용에 대해 다시 쓰면서 외우기도 하고, 사실 전에 개발을 제대로 시작하기 전에 정처기 필기시험 볼 때 공부를 했었는데, 지금 개발을 제대로 시작한 후 볼 때와 느낌 자체가 달라서 회고도 적을 겸 포스팅해본다. ✏️ 소프트웨어란? 컴퓨터 하드웨어에게 동작 방법을 지시하는 명령어 집합인 프로그램과, 프로그램의 수행에 필요한 절차, 규칙, 관련 문서를 정리해 놓은 것 분류 : 시스템 소프트웨어, 응용 소프트웨어, 미들웨어 소프트웨어 우리가 일반적으로 생각하는 프로그램, 소프트웨어라고 불리는 것들은 대체로 응용 소프트웨어에 해당이 된다. 🔹 시스템 소프트웨어 (System Software) 소프트웨어 작동 ..

Computer Science 2024.03.12

[항해99 취업 리부트 코스 수강 후기] 실력적으로 성장하고 싶은 개발자라면.

코스 수강 후기를 쓰기 전에, 먼저 사담으로 말 할 것이 있다면 .. 필자는 평소엔 어떤 후기도 잘 쓰지 않는 사람이다. (순전히 귀찮아서) 하지만 나와 같은 개발자 취준생 분들을 위해, 코스 합류에 고민하고 있다면 혹시나 이 후기가 조금이나마 의사 결정하는 데 도움이 됐으면 해서 이 후기를 적는다. 🔎 필자는 이전에 어떻게/얼마나 개발을 공부했나? 이전에 나는 약 5개월 간의 부트캠프를 진행한 후 수료한 지 한달이 조금 지난 비전공자 백엔드 개발자 취준생이었다. KDT로 진행되는 부트캠프를 수강해 본 사람들이라면, 정말 빠르게 커리큘럼이 지나간다는걸 알 것이다. 수업을 듣는 동안 코드를 이해할 새 없이 빠르게 진행되는 진도로 강사님의 코드를 클론 코딩하다시피 진행돼서, 수업 후 그 날 그 날 나간 진도..

Review 2024.03.10