전체 글42 부동 소수점 이 글은 컴퓨터에서 소수를 나타내는 방식인부동 소수점에 대해서 정리한 글입니다. 실수란?실수는 수직선 상에서 나타낼 수 있는 모든 숫자를 말합니다. 실수로는 정수, 유리수, 무리수 등 모든 수를 포함하는 개념입니다. 실수는 언제 사용될까?실수는 연속적인 데이터나 정확한 표현이 필요할 때 사용합니다. 정수만으로는 표현할 수 없는 값, 정밀도가 필요한 계산에 적합합니다.예시로는 수학, 과학, 공학, 컴퓨터 그래픽, 금융과 같은 분야에 사용됩니다. 컴퓨터에서 실수는 어떻게 표현할까?현 시점에서 실수는 이진수 기반의 부동 소수점 방식으로 표현됩니다. 이는 IEEE 754 표준에 따라, 실수를 유효숫자와 지수로 나누어 표현합니다. 부동 소수점 방식은 무엇일까?부동 소수점은 컴퓨터가 실수를 효율적으로 저장하고 계산.. 2025. 1. 11. immutable 객체로 만드는 방법 이번 글은 불변 객체란 무엇이고 어떻게 만들수 있을지에 대한방법을 이야기하는 글입니다. 불변 객체(immutable Object)란?불변 객체는 객체를 생성 후 그 상태를 바꿀 수 없는 객체를 말합니다.객체의 상태를 바꿀수 없다는 말은 어떤 의미를 가질까요? 이는 객체가 생성된 이후 내부 데이터(필드 값)을 변경할 수 없는 특성을 의미합니다. 대표적인 예로 String 클래스를 들 수 있습니다. 이를 코드로 확인해 보겠습니다.public class Main { public static void main(String[] args) { String immutableObject = "immutable"; immutableObject.replace("immutable", "muta.. 2025. 1. 9. JVM 정복하기 📍 JVM이란?JVM(Java Virtual Machine)은 Java 플랫폼의 초석입니다. 이는 하드웨어 및 운영 체제의 독립성, 컴파일된 코드의 작은 크기, 악성 프로그램으로부터 사용자를 보호하는 기능을 담당하는 기술의 구성 요소 입니다.JVM은 추상 컴퓨팅 머신입니다. 실제 컴퓨팅 머신처럼 명령어 세트가 있으며 실행 시 다양한 메모리 영역을 조작합니다.JVM은 java 프로그래밍 언어에 대해 아무것도 알지 못하며, 특정 바이너리 형식인 클래스 파일 형식만 알고 있습니다. 클래스 파일에는 java Virtual Machine 명령어(또는 바이트 코드)와 심볼 테이블 및 기타 보조 정보가 포함되어 있습니다. Q. JVM이 어떻게 악성 프로그램으로부터 사용자를 보호하는가?바이트 코드 검증, 클래스 로더.. 2025. 1. 9. [Effective Java] 생성자 대신 팩터리 메서드를 고려하라 오늘 알아볼 주제는 "생성자 대신 팩터리 메서드를 고려하라"입니다.왜 생성자 대신 팩터리 메서드를 고려해야 할까요? 먼저 정적 팩터리 메서드가 생성자보다 좋은 장점 5가지에 대해 알아보도록 하겠습니다. 장점1. 이름을 가질 수 있습니다.2. 호출될 때마다 인스턴스를 새로 생성하지 않아도 됩니다.3. 반환 타입의 하위 타입 객체를 반환할 수 있는 능력이 있습니다.4. 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있습니다.5. 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 됩니다. 장점이 있으면 단점도 늘 있는법 단점에 대해서도 알아보도록 하겠습니다.단점1. 상속을 하려면 public이나 protected 생성자가 필요하니 정적 팩터리 메서드만 제공하면 하위 클.. 2024. 12. 11. [Mysql] 트랜잭션과 잠금 이번 글은 트랜잭션과 잠금에 대해서 알아보도록 하겠습니다. 트랜잭션트랜잭션은 하나의 논리적인 작업이 100% 적용(commit)이 되거나 100% 적용이 되지 않아야 함(rollback)을 보장해주는 것입니다.트랜잭션은 작업의 일부만 진행되는 현상(Partial update)를 발생하지 않게 만들어주어 작업의 완정성을 보장해 줍니다. 추가로, MySQL 서버에서 트랜잭션을 지원하는 엔진은 InnoDB 스토리지 엔진입니다. MyISAM과 MEMORY는 트랜잭션을 지원하지 않습니다. MySQL에서 트랜잭션트랜잭션은 논리적인 작업 셋 자체가 100% 적용(COMMIT)되거나 아무것도 적용되지 않음(ROLLBACK)을 보장해 줍니다. InnoDB 테이블과 MyISAM 테이블 차이를 알아보기 위해 아래 코드를 적.. 2024. 12. 11. [운영체제] 스케줄링 스케줄링을 왜할까?한정된 CPU 자원 내에서 멀티 프로세스 환경의 여러 프로세스를 효율적으로 실행시키기 위함입니다.주어진 자원 내에서 최대한 효율적으로 자원을 활용하는 것이 당연한 부분입니다. 스케줄링(Scheduling) : 순서를 짠다, 일정 순서를 정합니다. 5가지 목적공평성 : 모든 프로세스가 공평하게 실행되어야 합니다.효율성 : 자원을 효율적으로 사용해야 합니다.안정성 : 높은 우선순위의 프로세스를 먼저 처리하도록 합니다.반응 시간 보장성 : 일정 시간 내에 응답할 수 있도록 스케줄링 해야 합니다.무한 연기 방지 : 프로세스에 대한 처리가 무한히 연기되지 않도록 스케줄링 해야 합니다. 스케줄링은 어떤 단계를 갖고 있는가? 스케줄링은 장기 스케줄, 중기 스케줄, 단기 스케줄링이 있습니다. 장기 스.. 2024. 11. 26. Redis SortedSet 정말 빠른가? 랭킹 측정에서 List의 Collection과Redis의 Sorted 성능 비교를 측정한글 입니다.테스트 상황100만명의 임의로 생성한 유저를 저장한 상태에서 List와 SortedSet으로 각각임의의 랭킹을 가진 유저를 조회해보는 테스트 입니다. 임의 User 데이터 삽입 ( Redis )@Testvoid insertUser() throws Exception { for (int i = 0; i Redis에 SortedSet으로 User 데이터를 추가합니다. ZCOUNT 명령어로 100만개의 데이터가 저장되었습니다. SortedSet vs ArrayList507079번 순위의 유저를 조회하는 상황을 테스트 해보겠습니다. ArrayList 테스트@Testvoid inMemorySort() { .. 2024. 10. 17. 좋아요에서 발생하는 동시성 이슈 좋아요 기능을 구현하면서 생긴 동시성 문제 해결 과정을작성한 글입니다. 문제 상황2명이 동시에 좋아요을 누르게 된 경우, 2명의 좋아요가 전부 반영되지 않는 상황 좋아요 기능을 구현한 코드public Long like(Long postId) { Post post = postRepository.findById(postId).orElseThrow(() -> new PostNotFound()); post.addLikeCnt(); postRepository.save(post); return postId;}게시물 조회 후, 좋아요 갯수 증가 Service 계층 로직입니다. breakPoint를 Thread기반으로 해서, 2개의 요청이 Thread애 동시에 접근할 수 있는 환경을 만들어줍니다.. 2024. 10. 14. Fan Out TimeLine on Read vs Write 팬 아웃 타임라인의조회를 더 빠르게한 경험을 담은 글 입니다. FanOut이란소셜 미디어나 뉴스 피드와 같은 시스템에서 사용되는 데이터 전송 패턴으로, 사용자의 활동이나 게시물이 다른 사용자들의 타임라인에 어떻게 전달되는지를 설명하는 방식입니다. FanOut Read란사용자가 자신의 타임라인을 조회할 때마다, 그때 실시간으로 팔로우하는 사용자의 최신 게시물을 수집하여 타임라인을 구성하는 방식입니다. FanOutRead 흐름잡기public PostCursorDto execute(Long userId, PostsCursorRequest request) { userReadService.getUser(userId); List followings = followReadService.getFollow.. 2024. 10. 11. 이전 1 2 3 4 5 다음