본문 바로가기
반응형

전체 글183

깊이 우선 탐색 vs 너비 우선 탐색 Intro 현재 'do it! 알고리즘 코딩 테스트' 책으로 공부 중인데 그래프 탐색 문제만 나오면 해당 문제가 깊이 우선탐색을 해야 하는지 너비 우선 탐색을 해야 하는지 자꾸만 헷갈린다. 다 풀고 답을 확인해보면 너비 우선으로 풀었어야 할 문제를 깊이 우선으로 푸는 바람에 시간초과가 난다거나, 너비 우선으로 풀어서 답이 도출되지 않아 확인해 보니 깊이우선으로 풀었어야 한다거나...(이건 그냥 내가 잘못 푼 듯ㅎ) 공부가 덜 됐구나 생각이 들어서 오늘은 깊이 우선 탐색과 너비 우선 탐색을 비교하고, 어떤 문제에 어떠한 탐색 방식을 사용해야 하는지 알아보려 한다. 깊이 우선 탐색(Depth-First Search, DFS) 깊이 우선 탐색이란 선택된 첫 노드를 시작으로 다음 분기로 넘어가기 전에 해당 분기.. 2024. 2. 2.
배포 자동화에 들어가기 앞서 - 리눅스 기본 명령어, aws EC2 초기 설정 리눅스 기본 명령어 리눅스는 최상위 유저를 CLI환경에서 #으로 표시, 일반 유저를 $로 표시함 명령어에 대한 도움말은 --help 또는 -h를 명령어 뒤에 붙여서 확일할 수 있음 구분 명령어 설명 비고 시스템 관련 uname - 시스템의 모든 정보를 확인 - 시스템 이름, 사용 중인 운영체제와 버전, 호스트명, 하드웨어 정보 등 cat 파일의 내용을 화면에 출력 파일 처리 ls 현재 디렉터리 내 파일 및 폴더들의 목록을 표시 pwd - print working directory의 약자 - 현재 작업중인 디렉토리의 절대 경로를 출력 rm 파일 삭제 cp 파일 복사 cpio 파일을 복사하고 압축 mv 파일 이동 프로세스 ps 현재 실행되고 있는 프로세스 목록 출력 pmap 프로세스ID를 기준으로 메모리 맵.. 2024. 1. 11.
자동 배포로 한걸음 다가가기 - 빌드 관리 도구 Gradle Intro자동 배포에 대해서 공부하다 보니 빌드에 대한 지식이 부족함을 느꼈다. 항상 프로젝트를 생성함과 동시에 빌드 도구가 나도 모르는 사이 다운받아져서 당연한 듯 사용하다 보니, 언제 다운받아지고 어떻게 사용되는지에 대해 깊게 모르고 있었다. 그래서 오늘은 빌드 관리도구가 정확히 어떤 일들을 도맡고 있는지, 그중에서도 Gradle은 어떻게 동작하는지에 대해서 알아보려 한다. 빌드 도구란?소프트웨어 개발에 있어서 소스 코드를 실행 가능한 애플리케이션으로 만들어주는 도구를 뜻한다. 프로젝트를 진행하게 되면 단순히 자신이 작성한 코드만드로 개발하는 것이 아니라 많은 라이브러리들을 활용해서 개발을 하게 된다. 이때 사용되는 라이브러리들의 수가 굉장히 많아진다면 관리하기가 수월하지 못할 수 있다.(빌드 도구를.. 2024. 1. 5.
배포 자동화에 들어가기 앞서 - CI/CD, docker hub, docker compose 지속적 통합(Continuous Integration, CI) 코드 통합을 위한 단계의 자동화 CI 장점 코드 통합을 위한 단계들의 중복을 최소화함으로서 개발 생산성 향상 주기적인 실행으로인해 문제점을 빠르게 발견 → 버그 수정 용이 ⇒ 코드의 퀄리티 향상 도출 자동 빌드 CI는 새로운 코드 변경 사항이나 커밋이 이루어질 때 자동으로 빌드 프로세스를 실행 → 소스 코드를 컴파일하고 필요한 실행 파일 또는 라이브러리를 생성하는 것을 의미 자동 테스트 빌드 후 정의된 테스트 스위트*를 실행하여 코드 변경이 이전 코드와 호환되며 예상대로 작동하는지 확인 주기적인 실행 CI는 코드 변경이 이루어질 때마다 주기적으로 실행됨 → 빠르게 피드백을 받고 문제를 빠르게 감지하고 수정할 수 있도록 도와줌 버전 관리 시스템.. 2024. 1. 2.
배포 자동화에 들어가기 앞서 - Docker mysql container 생성, IDE에 docker DB container 연동 docker 기본 명령어 docker pull [image name]:[tag(option)] - 도커 이미지 다운로드 - 태그 없을경우 최근 버전으로 다운로드됨 (latest) docker images 도커 이미지 목록 docker ps - 도커 컨테이너 실행중인 목록 출력 - ps → process status의 줄임말 docker ps -a 도커 컨테이너 실행중인 + 종료된 목록 출력 docker create [container name] 도커 컨테이너 생성(only create) → -d 옵션을 사용할 수 없음 docker start [container name or container id] 도커 컨테이너 실행(only start) docker run [container name] 도커 컨테이너 .. 2023. 12. 27.
배포 자동화에 들어가기 앞서 - Docker 기초 도커 서버 환경이 계속해서 바뀜에 따라 DB와 같이 안전해야 할 서버들이 문제가 생기는 경우가 많았다. 그러한 이유로 도입된 개념이 도커이다. 컨테이너 기반의 오픈소스 가상화 플랫폼 컨테이너는 격리된 공간에서 프로세스가 동작하는 기술 호스트형 가상화 방식: OS를 가상화 하는 방식, 비교적 사용법이 간단하지만 무겁고 느려서 운영환경에선 사용할 수 없음 게스트 OS : 호스트형 가상화 방식에비해 성능이 향상되었으나 추가적인OS를 설치하여 가상화 하는 방법이므로 마찬가지로 성능 문제가 있음 프로세스를 격리하는 방식: 단순히 프로세스를 격리하므로 가볍고 빠르게 동작함 → 리눅스 컨테이너 기술 이미지 컨테이너 실행에 필요한 파일과 설정값 등을 포함하고 있는 것 상태값을 가지지않고 변하지 않음 컨테이너는 이미지를.. 2023. 12. 27.
java LinkedList 인덱스의 의미 Intro 예전에 공부할 때는 그저 외우는 수준에서 그쳤는데, 오늘은 CS를 준비하면서 그 원리가 궁금해졌다. 그 원리를 파헤쳐 보자우! ArrayList vs LinkedList ArrayList의 경우는 메모리에 저장될 때 연속적으로 저장되고, LinkedList의 경우 메모리에 불연속적으로 저장되나 해당 데이터와 다음 데이터를 가리키는 포인터가 저장되는 노드의 형태로 저장이 된다. 또한 ArrayList는 데이터의 중간 삽입 또는 중간의 데이터를 삭제할 경우 LinkedList에 비해 속도가 느리다. 반면 LinkedList의 경우 해당 노드들이 가리키는 포인터의 값들만 변경하면 되기때문에 ArrayList에 비해 데이터의 중간 삽입 또는 중간 데이터들의 삭제가 더 용이하다고 한다. LinkedLi.. 2023. 12. 7.
[개인 프로젝트] 예산 관리 어플리케이션 github 주소 GitHub - newnyee/saving: 💰 예산 관리 어플리케이션💰 예산 관리 어플리케이션. Contribute to newnyee/saving development by creating an account on GitHub.github.com ❓ 프로젝트 목적- JWT 발급/인증 - RESTful API 설계 - Spring Scheduler를 활용한 알림 서비스 - 동적 쿼리를 이용한 통계 및 통계 확인을 위한 Dummy data 생성 - 타이트한 개발 일정 분배 📆 작업 기간 & 인원2023.11.09 ~ 2023.11.15 (7일) 2024.01 ~ 리팩토링 진행중 개인 프로젝트 🎤 프로젝트 소개본 서비스는 사용자들이 개인 재무를 관리하고 지출을 추적하는 데 도움을 주는 애.. 2023. 11. 17.
프리온보딩 인턴십 백엔드 TIL #6 Bounded Context 현재 두번째 프로젝트를 진행중인데 Review, ReviewStatus 엔티티를 어느 도메인에 넣고 관리할 것이냐에대한 논의를 나누던 도중 팀원분중 한분이 Bounded Context 라는 용어를 사용하며 어떠한 도메인에서 관리하는게 논리적인지에 대한 설명을 해주셨다. 단어의 뜻을 몰라서 찾아보았다. DDD의 목적 DDD의 핵심 목표는 어플리케이션 또는 그 안의 모듈간의 의존성은 최소화하고, 응집성은 최대화 하는것 이다. Bounded Context 동일한 모델이더라도 context에 따라 해석되는 의미가 달라질 수 있다. 예를 들자면 회사에서의 판매부, 경리부 그리고 배송부에서의 상품명은 ‘상품의 이름’ 이라는 자체 그 원래 뜻은 같으나 각각의 부서에서 의미하는바가 다를 수.. 2023. 11. 5.
반응형