비전공자에서 주니어 개발자까지
close
프로필 배경
프로필 로고

비전공자에서 주니어 개발자까지

  • 분류 전체보기 (86)
    • 개발 도서 (15)
    • 스프링 (12)
    • 코테대비 (0)
    • CS (2)
      • 네트워크 (9)
      • 데이터베이스 (11)
      • 운영체제 (13)
    • 개발 (20)
  • 글쓰기
  • 설정

자바에서 제공하는 안전한 멀티 스레드 환경 - 1 (소개)

스레드란?자바에서 의미하는 스레드를 알아보기 전에 가장 기초가 되는 운영체제 측면에서 스레드를 알면 이해하기 쉽다. 스레드는 프로세스 내에서 실행되는 가장 작은 실행 단위를 의미한다.컴퓨터의 운영체제는 여러 프로세스를 동시에 실행할 수 있는데, 하나의 프로세스 역시 여러 스레드로 나뉘어 동시에 작업을 수행할 수 있다.더보기프로세스는 운영체제에서 실행 중인 프로그램을 의미한다.단순히 하드디스크에 저장된 정적인 파일 형태의 프로그램과는 다르게, 실행을 위해 메모리에 올라와서 CPU 자원을 할당받아 명령어를 수행하는 동적인 상태를 말한다.위 설명만 들으면 매우 복잡하고 어렵게 느껴질 수 있지만, 프로세스는 카페 스레드는 바리스타라고 생각할 수 있다. 단일 스레드와 멀티 스레드의 차이점우리가 쓰는 컴퓨터에서의 ..

  • format_list_bulleted CS
  • · 2025. 9. 16.
  • textsms

JVM과 JVM 메모리 구조

JVM이란?Java Virtual Machine의 약자로 직역하면 자바 가상 머신이다.자바 가상 머신이라는 의미를 알기 위해선 프로그래밍 언어를 컴퓨터가 어떻게 읽고 이해하는지 알면 이해하기 쉽다.컴퓨터는 기계어(0, 1)만 직접 이해할 수 있기 때문에 사람이 쓰는 언어인 Java, C, Python 등을 직접 이해하지 못한다.따라서 사람이 작성한 소스 코드는 번역 과정을 거쳐야 한다.먼저 C나 C++ 같은 언어는 컴파일러가 소스 코드를 한 번에 기계어로 바꿔서 실행 파일을 만든다.파이썬, 자바스크립트 같은 언어는 인터프리터가 코드를 한 줄씩 읽으면서 실행한다.하지만 자바는 위 두 개의 방식을 절충해 하이브리드 언어라고도 불리는데 이유는 다음과 같다.먼저 소스를 바이트코드 라는 중간 형태로 컴파일하고, ..

  • format_list_bulleted CS
  • · 2025. 9. 7.
  • textsms
프로젝트 아키텍처 설계 - 레이어드? 헥사고날?

프로젝트 아키텍처 설계 - 레이어드? 헥사고날?

아키텍처 선택레이어드 아키텍처로 진행했던 프로젝트 중 의존성 관리가 어려워진 경험이 있었다.처음에는 간단했던 구조가 클래스가 많아지고 구조가 점점 복잡해지면서 단일 책임 원칙 위반과 중복 코드 문제가 발생했었다.이러한 문제를 겪고 프로젝트 아키텍처에 공부를 했고, 내가 겪은 문제를 시원하게 해결해줄 아키텍처가 있다는 것을 알았다. 레이어드 아키텍처의 문제점레이어드 아키텍처는 controller - service - repository 구조를 가지고 있다.이 구조를 모식도와 계층으로 표현하면 다음과 같다.이 구조의 장점은 구조가 단순하고 직관적이다.각 계층의 역할이 명확하게 나뉘어져 있어, 아키텍처를 이해하고 개발 초기 단계에 설계하기가 쉽다.하지만 프로젝트 규모가 점점 커지고 복잡해지면서, 개발자들이 지..

  • format_list_bulleted 개발
  • · 2025. 8. 12.
  • textsms
Querydsl 서브쿼리 중복 코드 개선 - 의존성 분리

Querydsl 서브쿼리 중복 코드 개선 - 의존성 분리

중복코드 문제Querydsl을 활용해 서브쿼리를 작성할 때 리뷰 갯수를 가져오는 서브쿼리의 중복코드가 많았다. 같은 클래스에서는 메서드로 분리해 사용했지만, 다른 클래스에서는 관련 없는 클래스로부터 서브쿼리 메서드를 가져다 쓰는 구조였다.핵심 문제는 서로 다른 클래스에 동일한 서브쿼리 메서드가 중복 작성된 것이었습니다.특히, MemberCustomRepositoryImpl은 회원(Member)과 관련 없는 리뷰(Review) 서브쿼리 메서드를 포함하고 있어 단일 책임 원칙을 위반했습니다.이러한 구조는 클래스 간 불필요한 의존성을 높여 코드의 재사용성과 유지보수성을 저하시킬 수 있다.해결서브쿼리 전용 유틸 클래스를 생성하고, static 메서드로 공통 서브쿼리 로직을 제공해 분리했다. 또한, 서브쿼리 전담..

  • format_list_bulleted 개발
  • · 2025. 8. 11.
  • textsms
통계 데이터 비동기로 관리하기

통계 데이터 비동기로 관리하기

현재 구조는 통계 데이터가 변경될 때마다 mongoTemplate을 사용해 MongoDB에 직접 접근하여 값을 수정하는 방식이다.이 방식은 간단하고 빠르게 구현할 수 있지만, 트래픽이 몰리는 상황에서는 DB에 과도한 부하가 발생하여 연결이 불안정해질 수 있다.이를 개선하는 방법으로, 데이터 변경 시 즉시 MongoDB에 반영하지 않고, Redis에 먼저 캐싱한 뒤 일정 시간마다 MongoDB로 동기화 하는 방법을 사용할 것이다. 개선 전 설계1차 도식화우선 위 글을 바탕으로 도식화를 한 상황이다.핵심은 Redis 캐시 도입으로 MongoDB에 직접적인 읽기/쓰기 요청을 줄여, 트래픽을 분산시킬 수 있다.2차 도식화Redis 캐싱 과정을 더 구체적으로 도식화하면 다음과 같다. 도식화된 그림을 바탕으로 현재..

  • format_list_bulleted 개발
  • · 2025. 8. 1.
  • textsms

개발 환경 통일을 위한 Docker Compose 도입

프로젝트 도중에 팀원이 테스트 때문에 넣어뒀던 데이터가 다 사라진 상황이 있었다.나는 혼자 도커 볼륨을 사용하고 있어 그런 문제가 없었고, 이 상황에서 내 개발 환경뿐만 아니라 모든 팀원의 개발 환경이 같다면 이러한 문제를 해결할 수 있다고 생각했다.또한 운영체제가 달라서 생길 수 있는 잠재적인 문제 또한 해결하기 위해 도커 컴포즈 스크립트를 작성하기로 했다. Docker Compose 선택도커 컴포즈를 선택한 이유는 다음과 같다. 1. 통일된 환경 보장각자 다른 운영체제를 사용하더라도 동일한 환경에서 개발 가능하고 로컬 설치로 인한 버전 차이나 설정 차이 문제 해결할 수 있다.2. 간편함과 편의성단순히 개인의 컴퓨터에서 docker-compose up -d 명령어만 입력하면 모든 서비스가 실행되어 새로..

  • format_list_bulleted 개발
  • · 2025. 7. 30.
  • textsms
  • navigate_before
  • 1
  • 2
  • 3
  • 4
  • ···
  • 15
  • navigate_next
공지사항
전체 카테고리
  • 분류 전체보기 (86)
    • 개발 도서 (15)
    • 스프링 (12)
    • 코테대비 (0)
    • CS (2)
      • 네트워크 (9)
      • 데이터베이스 (11)
      • 운영체제 (13)
    • 개발 (20)
최근 글
인기 글
최근 댓글
태그
  • #국비지원
전체 방문자
오늘
어제
전체
Copyright © 쭈미로운 생활 All rights reserved.
Designed by JJuum

티스토리툴바