목차 배경 자바 기본 개념을 공부하던 중에 Java 9 부터 제공되는 모듈에 대한 소개가 인상깊어 기록해두었다. 실무에서 사용되는 프로젝트를 보면 규모가 커지면서 협업과 유지보수에 어려움을 겪게되는 경우가 많은데, 이러한 상황에서 프로젝트를 모듈화하여 구성한다면 협업과 유지보수를 쉽게 하고 더 나아가 모듈을 통한 재사용성도 향상시킬 수 있다는 생각이 들어 많은 도움이 될 것 같아 블로그에 추가로 작성하였다. 모듈 들어가기에 앞서, 모듈에 대해 간략하게 먼저 작성하는게 좋을 것 같다. 모듈은 java 9 부터 지원하는 기능이며 패키지 관리 기능까지 포함된 라이브러리이다. 일반적인 라이브러리는 외부 프로그램에서 라이브러리 내부에 포함된 모든 패키지에 접근할 수 있지만, 모듈은 일부 패키지를 은닉하여 접근할 ..
목차 배경 최근 Java 언어에 대한 기본기가 부족하다고 생각해서 기본서를 다시 읽어보며 그 개념을 학습하는 중인데, (이전글 참고) 이번에는 그 중 추상 클래스와 인터페이스의 개념 그리고 차이점에 대해서 살펴보고 정리한 내용을 공유하였다. 실제로 신입 개발자 면접에서 단골 질문으로도 나오는 개념임에도 불구하고 기본 개념을 다시 훑어보고 고민하다보니 그동안 나는 이 두 개념과 그 차이점에 대해 잘못 이해했던 부분이 있었던 것 같고, 실제로 이러한 오해들로 정리된 글도 많이 봐왔던 것 같아 이번 기회에 다시 정리해보고자 한다. 내가 잘못 이해했던 부분과 추상 클래스와 인터페이스의 차이점에 대해 설명하기에 앞서, 두 개념에 대해 간략하게 설명하고 넘어가는게 좋을 것 같다. 추상 클래스 추상화된 클래스라는 의..
목차 클래스 로더(class loader)클래스를 로딩하는 기능을 담당한다. 클래스 로더는 java 파일을 class 파일로 java 컴파일러가 컴파일하고 나면, 이를 수행할 수 있게 번역하고 가공해 준다.다시 말해서 .class 파일을 읽고 → 올바른 명세인지 확인 → 메모리 할당 → 필요한 변수들을 초기화 과정을 진행하여 JVM에서 클래스들을 실행하기 위한 작업을 진행하고 Java 애플리케이션이 실행되는 역할을 한다. 클래스 로더의 역할클래스 로딩 : 클래스 파일을 로드하여 메서드 영역에 클래스의 정보를 저장한다. 이 때, 메서드 영역에 저장되는 클래스의 정보는 클래스의 바이트 코드, 메서드, 변수, 메타데이터등이 포함된다.중복 로딩 방지 : 클래스 로더는 중복 로딩을 방지하기 위해 이미 로딩된 클래..
목차 배경Java의 동작원리와 문법을 제대로 깊게 공부해본 적이 없어 이번 기회에 다시 학습하는 중인데 그 중 자바 실행 환경인 JVM과 기본적인 메모리 구조는 공유해두면 많은 도움이 될 것 같아 블로그에 별도로 기록해두었다.JVM(Java Virtual Machine)자바 프로그램 실행환경을 만들어 주는 소프트웨어 자바 코드(.java)를 컴파일하여 .class 바이트 코드로 만들면, 이 코드를 JVM 환경에서 실행 JVM 구조메모리 주소상 위치 : Low address(0x0000000) ~ High address(0xFFFFFFFF) Heap 영역은 낮은(Low) 메모리 주소에서 높은(High) 메모리 주소로 할당받으며, Stack 영역은 그 반대이다.JVM Runtime Data Areajava ..
목차 배경 최근 코드리뷰를 받는 중에 '빌더 패턴의 단점이 딱 드러나는 케이스인 것 같아요' 라는 의견을 받았다. 사실 Builder 패턴으로 객체를 생성해야하는 이유와 그 장점에 대해서는 다양한 블로그 포스트들과 예시 코드를 통해 자주 접해서 익히 잘 알고있었고 습관적으로 객체 생성시 필요할때 Builder 패턴을 따르고 있음에도 (부끄럽지만) 그 단점과 사용시 유의사항에 대해서는 평소 생각해보지 못했다. 이러한 이유를 계기로 이번 기회에 관련 내용을 스스로 정리하고 공유해두면 좋을 것 같아 글로써 정리해두었다. 내용 Builder 패턴으로 객체 생성시 유의사항에 대해 설명하기 전에, 먼저 일반적인 생성자를 통한 객체 생성과 setter를 통한 객체 생성과 비교해보며 Builder로 객체를 생성해야하는..
목차 배경 도서와 관련된 사이드 프로젝트를 진행하던 중에 도서 data가 필요했고, 대량의 도서 data를 직접 생성해서 입력하는 것은 매우 비효율적이라 생각했다. 그래서 일일이 입력하기보다는 Open API를 활용하여 데이터를 넣어두려고 했는데, API로 내려받은 Data를 하나하나 DB에 넣는것 역시 무의미하고 불필요한 과정일 것이란 생각이 들었다. 조금 더 효율적으로 작업을 진행하고자 구글링하며 찾아보았고 다음 과정으로 도서 data 적재를 진행하였다. (host pc에서 작업한 내용은 모두 mac os 환경을 기준으로 진행하였다) host pc에 open api로부터 도서 정보를 json 형식으로 내려받는다. 1에서 받은 json 형식의 파일을 적절하게 parsing 한다. parsing 한 js..
목차 글 목록 [Docker] 도커 설치와 web GUI 툴 Portainer로 Docker 연동하기 (1/3) [Docker] 도커에 MongoDB 설치 및 MongoDB GUI 툴 Mongo Compass로 접속하기 (2/3) [Docker] Spring Boot 프로젝트에 도커 컨테이너 연동과 Docker-compose 세팅 (3/3) 배경 지난 글 [Docker] 도커에 MongoDB 설치 및 MongoDB GUI 툴 Mongo Compass로 접속하기 (2/3)에 이어서 Mongo DB Dockerize의 마지막 글로, Spring Boot 프로젝트에 도커 컨테이너로 올린 Mongo DB를 연동해보고 더 나아가 Docker Compose를 통해서 도커 컨테이너와 Spring Boot 프로젝트를 ..
목차 글 목록 [Docker] 도커 설치와 web GUI 툴 Portainer로 Docker 연동하기 (1/3) [Docker] 도커에 MongoDB 설치 및 MongoDB GUI 툴 Mongo Compass로 접속하기 (2/3) [Docker] Spring Boot 프로젝트에 도커 컨테이너 연동과 Docker-compose 세팅 (3/3) 배경 지난 글에 이어서 Portainer를 활용하여 도커에 MongoDB를 설치하고, MongoDB GUI 툴인 Mongo Compass로 접속해보도록 하겠습니다. MongoDB GUI 툴은 Robo 3T와 Mongo Compass가 가장 많이 쓰이는 것으로 알고 있는데, Mongo Compass가 상대적으로 UI가 사용하기 간편하고 (주관적이지만) 한눈에 들어오게 ..
목차 글 목록 [Docker] 도커 설치와 web GUI 툴 Portainer로 Docker 연동하기 (1/3) [Docker] 도커에 MongoDB 설치 및 MongoDB GUI 툴 Mongo Compass로 접속하기 (2/3) [Docker] Spring Boot 프로젝트에 도커 컨테이너 연동과 Docker-compose 세팅 (3/3) 배경 사이드 프로젝트를 진행하던 중에 서버와 DB 환경을 구축할때 Docker를 활용해서 개발환경을 구축하였다. 도커를 비롯한 쿠버네티스와 같은 컨테이너 오케스트레이션 플랫폼 사용 경험을 쌓아두면 좋을 것 같기도 했고, 사이드 프로젝트를 진행하면서 최대한 실무에서 활용할 경험을 쌓아두기 위해 개발 & 운영 서버를 분리해서 구축하였고 이에 따른 개발환경 세팅에 많은 스..
목차 도서 정보 가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 예스24 “페이스북의 뉴스 피드나 메신저, 유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까?”IT 경력자라도 느닷없이 대규모 시스템을 설계하려고 하면 막막하다고 느낄 수 있다. 특히나 www.yes24.com 배경 사실 이 책은 어떤 특별한 계기를 통해 읽었다기보다는, 책 내용이 괜찮다고 추천을 받아 한번 읽어보자는 가벼운 마음으로 읽기 시작하였다. 처음에는 가벼운 마음으로 읽기 시작했지만 책 내용이 생각보다 방대하면서 어렵기도 했고, 복잡한 사례들 위주로 소개를 해서 읽는데에 어려움을 겪었다. 하지만 주변에 이 책을 읽는 중이라고 얘기했을때 다들 좋은 책이라고 긍정적인 신호를 보냈을 뿐만 아니라, 사례들 자체는 (어렵지만..
목차 배경사이드 프로젝트를 진행하면서 테스트를 위해 개발해두었던 Mock API 서버를 실제 API 서버로 전환 작업 중에 API 명세를 작성해두면 추후에 관리하기 편할 것 같아서 전환 작업중에 함께 명세 작성 또한 진행하였다. API 명세는 잘 알려진 Swagger를 적용했는데, 생각보다 이 설정이 잘 안되었고 자잘한 이슈가 생겼다. 2022년 말에 릴리즈된 스프링부트 3버전 이상에서 Swagger를 사용할 경우 생길 수 있는 이슈라 챗 지피티한테 물어봐도 적절한 대답을 얻지 못하였고, 구글링을 해봐도 해결책을 쉽게 얻지 못해서 누군가가 이글을 보고 도움을 얻었으면 하는 마음으로 기록해둔다. 먼저 현재 내가 작업중인 프로젝트의 스프링 부트 버전은 3.1.0(3.X.X 버전 이상)이다. (글 후반에 나오..
목차 도서 정보 객체지향의 사실과 오해 - YES24 『객체지향의 사실과 오해』는 객체지향이란 무엇인가라는 원론적면서도 다소 위험한 질문에 답하기 위해 쓰여진 책이다. 안타깝게도 많은 사람들이 객체지향의 본질을 오해하고 있다. 가장 www.yes24.com 배경 신입 개발자 또는 개발자를 준비하는 사람들에게 필독 도서라고 느껴질 정도로 워낙 유명하고 기초적인 도서임에도 불구하고 최근에서야 읽기 시작했다. 최근 회사에서 리팩토링 업무를 맡게 되었는데 객체지향의 특성을 살려서 해보는게 어떻냐는 의견을 받았고, 나도 기왕이면 OOP로 설계와 구현을 해보면 좋은 경험이 될 것 같다는 생각이 들어 업무 자체에 흥미도 생겼다. 물론 좋은 경험을 쌓고 업무에 대한 흥미가 생기는건 긍정적인 시그널이다. 하지만 나는 관..