본문 바로가기
728x90

Java30

GC 개념 및 동작 원리 지난 글에서 JVM의 구조에 대해 정리해 보았는데 JVM의 구성 요소중 GC에 대해서는 자세한 설명이 빠져있었다. GC만 정리하더라도 글 한 개의 분량이 될 것 같아서 이번 글에 이어서 GC에 대해 정리해본다. Garbage Collection 이란 학부생 때 C언어를 이용한 과제를 진행했을 때 malloc() 함수 사용 후 free() 함수를 실행해서 메모리를 해제해준 기억이 있다. 그 다음 학기에 자바 강의를 수강했는데 자바에서는 별도로 메모리를 관리하지 않아도 되고, GC가 알아서 메모리를 관리해준다고 배웠던 기억이 남아있다. 지난 JVM 정리에서 알 수 있듯이 자바를 이용해 개발할 때는 직접 메모리 공간을 할당/반환을 하지 않고, JVM을 통해 할당받고, 반환하게 된다. 이렇게 자바에서는 JVM의.. 2022. 9. 13.
JVM 이란? 들어가며 최근 자바 AOP에 관심이 생겨 수강했던 백기선의 더 자바 - 바이트코드 조작의 마법 강의 내용 중 바이트코드를 설명하기 전, JVM과 그것과 관련된 것들에 대한 내용을 접하게 되었다. 입사 후 자바를 사용한지 2년 가까이 되었지만 JVM과 관련된 지식은 학부생때 잠깐 배웠던 지식이 전부라 관련 내용을 정리해보고 싶어서 간단하게 정리하였다. 자바와 JVM, JRE, JDK 학부생 시절에 자바 수업을 위해 인터넷에서 자바를 다운로드받은적이 있다. 당시 다운로드할 때 jre, jdk 등 차이를 알수없는 요소들이 있던것으로 기억한다. JVM 구조에 대해 정리하기 전, 자바와 JVM, JRE, JDK가 어떻게 다른지 정리하려고 한다. 이 챕터를 읽고 나면 자바를 다운로드했다 라는 말에서 어색함을 느낄 .. 2022. 8. 23.
[Effective Java] Item01. 생성자 대신 정적 팩토리 메서드를 고려하라 들어가며 최근 회사에서 인턴 멘토링을 하게 되며 길게 늘어지는 빌더의 사용 대신 정적 팩토리 메서드의 사용을 추천한 적이 있다. 평소 빌더 패턴을 이용한 객체 생성보다는 정적 팩토리 메서드 패턴을 이용한 객체 생성을 즐겨 쓰던 터라 관련 코멘트를 남겼지만, 코멘트를 남기다 보니 빌더 패턴에 비해 정적 팩토리 메서드 패턴이 갖는 명확한 장점이 무엇인지 나 스스로도 모호하다고 생각했다. 관련 자료를 다시 찾아보고 정리한 바에 따르면 인스턴스 생성에 필요한 인자가 많고 자주 변한다면 빌더 패턴을 사용하는 것이 좋으나, 매 인스턴스 생성시마다 사용하는 인자가 정해져있는 상황에서는 정적 팩토리 메서드 패턴이 더 장점을 갖는 것 같다. 이와 관련해서 이번 포스트, 다음 포스트에서 각 패턴의 특징을 정리해보려고 한다.. 2022. 1. 10.
[Java] Spring 다중 profile 설정하기 Spring 프로젝트를 진행하다보면 로컬, 개발, 운영 환경에서 서로 다른 설정값을 넘겨줘야 하는 경우가 있다. 로컬, 개발 환경에서의 DB와 운영 환경에서의 DB를 분리한다던지, 과금이 필요한 외부 api를 사용하는 경우 로컬 환경에서는 더미 api로 요청을 보내는 등의 경우가 그 예이다. Spring을 이용해서 프로젝트를 진행할 경우 application.yml이라는 파일을 통해 설정값을 스프링 프로젝트에 주입해줄 수 있으며 환경별로 다른 값을 넘겨줄 수 있다. 다음은 로컬, 개발, 운영 환경에 서로 다른 DB 커넥션 정보를 넘겨주는 application.yml 파일의 예이다. server: port: 2580 error: whitelabel: enabled: false servlet: encodin.. 2021. 6. 9.