본문 바로가기

전체 글27

[Java] GC란? GC(Carbage Collection)란? 가비지 컬렉션(Garbage Collection) 가비지 컬렉션(Garbage Collection)은 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 탐지하여 자동으로 해제하는 기능이다. 가비지 컬렉션은 자바만의 기능이 아니다. 개발자가 힙을 사용할 수 있는 만큼 자유롭게 사용하고, 더 이상 사용되지 않는 객체들은 가비지 컬렉션을 담당하는 프로세스가 자동으로 메모리에서 제거하도록 하는 것이 가비지 컬렉션의 기본 개념이다. 가비지 컬렉터(Garbage Collector) 가비지 컬렉터(Garbage Collector)는 가비지 컬렉션을 수행하는 담당자이다. JVM에는 가비지 컬렉션 알고리즘을 수행하는 가비지 컬렉터가 있다. 힙 메모리에 객.. 2022. 5. 12.
[Java] JVM, JRE, JDK JVM Java Virtual Machine (자바 가상 머신) JVM은 자바 바이트코드를 실행할 수 있는 주체이다. Java로 작성된 프로그램은 운영체제에 맞는 실행 파일로 컴파일되는 것이 아닌 .class 라는 확장자를 가진 파일(자바 바이트코드)로 변환된다. 변환된 자바 바이트코드는 JVM 위에서 작동이 된다. 이때, 미리 설치된 JVM 은 운영체제 별로 동일하게 작동하도록 .class 파일에게 환경을 제공한다. JRE Java SE Runtime Environment (자바 런타임 환경) JRE는 컴파일 된 Java 프로그램(자바 바이트코드, class 파일)을 실행하는데 필요한 패키지이다. JRE는 JVM을 포함하고 있다. JVM은 우리가 작성한 코드를 기반으로 한 .class 확장자를 가진 클.. 2022. 5. 12.
[LeetCode] 17. Letter Combinations of a Phone Number - 파이썬(Python) 문제 링크 : https://leetcode.com/problems/letter-combinations-of-a-phone-number/ Letter Combinations of a Phone Number - LeetCode Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 유형 : 백트래킹(BackTracking) 문제 설명 숫자를 포함하는 문자열인 digits이 입력으로 주어졌을 때, Phone Keypad를 통해 해당 digits으로 만들 수 있는 모든 문자 조합을 retur.. 2022. 5. 12.
[Algorithm] 백트래킹(BackTracking) 백트래킹(BackTracking)은 현재 상태에서 가능한 모든 후보군을 따라 들어가며 해결책에 대한 후보를 구축해 나아가다 가능성이 없다고 판단되면 즉시 후보를 포기하면서 정답을 찾아가는 범용적인 알고리즘이다. BackTracking vs Dynamic Programming 백트래킹과 동적 계획법은 재귀를 통해 문제를 해결한다는 공통점이 있지만, 근본적인 차이점을 가지고 있다. 백트래킹(Backtracking) 백트래킹은 현재 상태에서 가능한 모든 후보군(Decision Space)를 하나씩 살펴가면서 해가 될 가능성이 있으면 후보를 구축하고, 해가 될 가능성이 없다면 즉시 후보를 포기하면서 해를 찾아나가는 방식이다. 이때, 해가 될 가능성이 있으면 유망하다(promising)고 하며, 유망하지 않은 노.. 2022. 5. 9.
[Java] JIT 컴파일러란? JIT 컴파일(just-in-time compilation) 또는 동적 번역(dynamic translation)은 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법이다. 컴파일러 vs 인터프리터 컴파일러와 인터프리터 모두 high-level language를 machine language로 번역한다. 컴파일러는 소스 코드(high-level language로 작성) 전체를 링커 등을 통해 한번에 번역하여 목적 파일(기계어로 작성)로 만들어 메모리상에 적재한다. 인터프리터는 소스 코드를 한 행씩 중간 코드로 번역 후 실행한다. 컴파일러는 소스코드 전체를 컴퓨터 프로세서가 실행할 수 있도록 바로 기계어로 변환한다. 인터프리터는 고레벨 언어를 중간 코드(intermediate code)로 변환하.. 2022. 5. 9.
[Algorithm] 동적 계획법(Dynamic Programming) 동적 계획법(Dynamic Programming)이란 복잡한 문제를 간단한 여러 개의 문제로 나누어 푸는 방법을 말한다. 특정한 알고리즘이 아닌 하나의 문제 해결 패러다임으로 볼 수 있다. Dynamic Programming의 조건 분할 가능 큰 문제를 작은 문제로 나눌 수 있을 때 (Problem → Subproblems) 부분 문제 반복(Overlapping Subproblems) Subproblem들이 겹칠 때 → memoization을 통해 필요한 연산 수를 줄일 수 있음 최적 부분 구조(Optimal Substructure) Subproblems의 Solution으로 더 큰 규모의 Problem의 Solution을 구할 수 있을 때 대표 문제 : 피보나치 수열 Fibonacci 📌 Naive R.. 2022. 5. 6.
[Java] JVM이란? Java Virtual Machine의 줄임말. JVM은 ‘자바를 실행하기 위한 가상 기계(컴퓨터)’이다. JVM은 2가지 기본 기능이 있다. 자바 프로그램이 어느 기기, 어느 운영체제 상에서도 실행될 수 있게 만들어 준다. -> WORA 자바 프로그램의 메모리를 효율적으로 관리 & 최적화해 준다. 💡 WORA WORA = Write Once, Run Anywhere ‘한 번 쓰고 모든 곳에서 실행한다’라는 뜻으로, 자바의 개발 철학이다. 자바는 WORA를 구현하기 위해 물리적인 머신과 별개의 가상 머신을 기반으로 동작하도록 설계되었다. 그래서 자바 바이트코드를 실행하고자 하는 모든 하드웨어에 JVM을 동작시킴으로써 자바 실행 코드를 변경하지 않고도 모든 종류의 하드웨어에서 동작되게 한 것이다. Java.. 2022. 5. 5.
[Devops] Jenkins, Docker로 Spring Boot CI/CD 구축하기 👩‍💻 CI/CD 1️⃣ 구성 요소 Jenkins Server : AWS EC2 Ubuntu 18.04 Spring Boot Server : AWS EC2 Ubuntu 18.04 Github Repository Docker Hub Repository 2️⃣ 진행 순서 Jenkins Server에 Docker 설치 Jenkins Server에 Docker를 이용하여 Jenkins 실행 Jenkins 접속 Jenkins와 Github 연동 Jenkins와 Docker Hub 연결 Jenkins Server와 Spring Boot Server SSH 연결 설정 Jenkins와 Slack 연동 Jenkins Pipeline 구성 Spring Boot Project Github Repository Clone Gr.. 2022. 5. 2.
[Tip] Gthub profile 꾸미기 밋밋한 깃허브 프로필 멋들어지게 꾸며보자! 1. 프로필용 Git Repository 만들기 👇 방법은 아래와 같다 GitHub will display your profile README on your profile page if all of the following are true. You've created a repository with a name that matches your GitHub username. The repository is public. The repository contains a file named README.md in its root. The README.md file contains any content.GitHub will display your profile READM.. 2022. 5. 2.