전체 글
-
[CS] 자바 Gabage CollectionCS 2024. 1. 18. 22:46
Gabage Collection : GC라고 하며 Heap 영역에서 참조되지 않는 객체의 자원을 해제해서 메모리 공간을 효율적으로 사용할 수 있게 도와줍니다. 하지만 GC가 동작하는 동안 다른 동작이 멈추게 되는데 이를 Stop - The - World라고 합니다. GC가 동작할 때 GC와 관련된 모든 쓰레드가 멈추기 때문에 GC가 동작하는 시간을 최대한 줄여야 합니다. GC는 어떤 기준으로 객체를 지울까요? 어딘가에 참조되어 있다면 Reachable, 참조되어 있지 않다면 Unreachable로 객체를 분류한 다음 Mark, Sweep, Compaction 알고리즘을 통해 Unreachable 객체를 제거합니다. Mark 동작은 GC ROOT로부터 그래프 구조로 저장된 객체 중 Reachable인 것들..
-
[CS] 자바 메모리 영역CS 2024. 1. 16. 17:57
클래스 파일을 실행시키면 class loader가 클래스 파일을 런타임 데이터 영역에 메모리를 올립니다. 런타임 데이터 영역은 5가지 입니다. Static(Method) 영역 Heap 영역 Stack 영역 PC register Native Method Stack 1번, 2번, 3번에 대해 알아보겠습니다. Static(Method) 영역 JVM이 실행되고, 클래스가 메모리에 올라갈 때 생성됩니다. Class 정보, Class 변수, 생성자, 메소드가 올라가 있습니다. 어디서든 Static 영역은 참조가 가능합니다. Stack 영역 기본 자료형, 지역 변수, 매개 변수가 저장됩니다. 메서드 내부의 기본 자료형에 해당하는 변수입니다. 클래스에서 정의되는 자료형은 다른 영역에 저장됩니다. Heap 영역 Stri..
-
면접 일지커리어 일지 2024. 1. 9. 23:58
최근에 면접의 기회를 얻어서 면접을 다녀왔습니다. 면접에서 경험했던 좋은 기억이 남아 배움의 기회도 있었고, 부족했던 점을 느낄 수 있었습니다. 면접을 본 기업은 클라우드 솔루션을 제공하는 중소기업과 동시에 다양한 Saas 서비스를 제공하려는 스타트업 느낌의 회사였습니다. 면접에서 떨어졌지만 그 이유는 내가 회사에 어떻게 기여할 수 있을지에 대한 질문에서 해당 직무에 대한 이해가 부족해 보이는 답변을 했다고 생각합니다. 다음 포스트는 기술 질문 중에 하나로 받았던 자바 메모리 구조에 대한 글을 써볼려고 합니다.
-
자바 애플리케이션 배포하는 방법Server 2024. 1. 3. 11:32
자바를 빌드하면 build 폴더 아래에 jar 파일이 생성됩니다. jar를 빌드할 때마다 덮어써집니다. jar 파일을 복사하여 서버로 사용할 컴퓨터에서 언제든지 사용 가능합니다. 자바가 설치된 운영체제에서 jar 파일이 존재하는 위치에서 java -jar 'jarname.jar' 이 명령어로 애플리케이션을 실행 시킬수 있습니다. [빌드 -> 빌드 후 생성된 jar 파일 --> jar 파일을 배포할 환경으로 전달 --> 배포] 이 과정은 기본적인 자바 애플리케이션 배포 메커니즘입니다. 주의할 것이 있다면, application파일 같은 정적인 파일도 같이 전달해줘야 합니다.
-
[CS] Java의 JVM이란?CS 2023. 12. 25. 23:04
프로그래밍 언어가 실행되는 방법에 따라 컴파일러(Compiler) 언어와 인터프리터(Interpreter)언어로 나누어집니다. 컴파일러는 컴파일 + 실행, 인터프리터는 실행이라는 차이점으로 상황에 따라 장단점을 가지고 있습니다. 자바는 컴파일러 언어로 실행을 위해 단 한 번의 컴파일과 실행 과정을 거치게 됩니다. 자바 코드를 빌드하면 .class 파일이 만들어집니다. javac 명령어와 같습니다. 이후 class 파일을 실행시키면 CPU가 읽을 수 있는 기계어로 번역 되는 과정이 필요합니다. 이 역할을 수행 하는 것인 JVM입니다. 프로젝트의 규모가 커질 때 컴파일 되는 시간이 오래 걸릴 수 있다는 단점을 가지고 있습니다. 이러한 단점을 해결 하기 위해 JVM에는 JIT(Just-In-Time) 컴파일러..
-
[개발 일지] 내가 기술블로그를 쓰게 된 이유개발일지 2023. 12. 18. 22:18
내가 기술 블로그를 쓰게 된 이유 싸피 8기를 시작하게 되었고 개발과 알고리즘을 공부하면서 블로그로 정리해놓고 싶었지만, 바쁘다는 핑계로 깃에만 올려놓고 블로그를 미뤘다. 최근 2학기가 시작되었고 프로젝트를 진행하면서 글로 남기고 개발자들이 공감할 만한 경험을 하면서 블로그를 통해 이야기를 공유해 보자 했고, 기술적인 글과 프로젝트 회고와 같이 자유롭게 글을 써보려고 한다. 유익하고 재미난 글로 돌아오겠다. 기대해도 좋다. 내가 기술 블로그를 쓰게 된 이유 2 최근에 '소프트웨어 장인'이라는 책을 읽게 되었는데, 어떻게 소프트웨어 개발에 전문성을 나타내야 하는가에 대한 내용에서 개인의 성장이 높은 소프트웨어 품질 즉 고객을 위한 소프트웨어 개발 중 하나라는 점을 알게 되었고 기술 블로그를 통해 성장을 확..
-
[Web] 웹 서버란 무엇인가?Web 2023. 12. 18. 22:00
머리말 Java 기반의 Spring 프레임워크를 활용하여 서버를 구현하다 보면 Spring과 Spring boot의 차이에 대해 의문을 가졌고, 내장 Tomcat의 유무에 따라 나눠진다고 알고 있습니다. Tomcat은 웹 애플리케이션 서버이며 어떤 역할을 하는지 이 포스트의 끝을 통해 알아보려 합니다. 추가적으로 이 포스트로 웹 서버의 역할에 대해 이해할 수 있습니다. Web Server와 Web Application Server 우선 웹으로 제공하는 서비스가 특별한 사용자를 위한 서비스가 아닌 모두에게 공지하는 문서를 제공하고자 한다면 Spring boot기반 서버가 필요할까요? 정답은 없어도 됩니다. 사용자의 데이터를 저장하거나 변경하는 것 없이 웹에 접근하는 누구에게나 똑같은 정보를 제공하려면 동적..
-
[자료구조] TrieCS 2023. 8. 1. 15:57
트라이 자료구조란 단어나 문자를 검색할 때 사용이 됩니다. 그렇다고 Hash를 쓰면 되는데 왜 트라이 자료구조를 사용하는가? 문자열은 데이터 사이즈가 숫자에 비해 크다 1억 개의 데이터를 HashMap으로 구현한다면 어마어마한 공간이 필요할 것입니다. 메모리를 줄여 문자열 간에 중복되는 문자를 최적화하는 것은 트라이의 목적입니다. 트라이는 Key Value로 트리 자료구조를 구현하며 문자열 길이가 m일 때 O(m)의 시간복잡도를 가지게 됩니다. 아래 [그림 1]은 apple 과 banana 문자를 트라이 자료구조로 구현했을 때입니다. 만약 단어를 추가하는데 이미 존재하는 단어 일 땐 다음과 같이 T/F로 표기합니다. apple 단어가 추가되어있을 때 app을 추가하면 apple의 e와 app의 마지막 p..