분류 전체보기136 17. 자바 리플렉션(reflection)이란 무엇인가? 자바 가상 머신(JVM)은 클래스 정보를 클래스 로더를 통해 읽어와 해당 정보를 JVM 메모리에 올린다. 해당 클래스의 정보를 담은 Class 타입의 객체를 생성하여 메모리의 Heap 영역에 저장해 두게 된다. ava에서는 이렇게 만들어진 Class 타입의 객체를 통해 구체적인 클래스 타입을 알지 못해도 그 클래스의 메소드, 타입, 변수들에 접근할 수 있도록 하는 자바 API를 제공하게 된다. 저장된 클래스 정보는 마치 클래스를 거울 앞에 데려가 그 모습을 보여주는 것과 닮아, Reflection이라는 이름을 가지게 되었다. 한가지 특이한 점은 리플렉션은 접근 제어자와는 무관하게 클래스의 필드나 메서드를 호출할 수도 있다. 자바에 그런 것도 있었나? 사실 알게 모르게 우리는 Reflection을 사용하고.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 9. 26. 16.데몬 스레드는 무엇인가요? 멀티태스킹 운영체제에서 Daemon이란 “사용자가 직접 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 수행하는 프로그램”을 의미한다. 일반적으로 윈도우의 서비스나 네트워크 서비스 등을 처리하는 프로그램으로 이해할 수 있다. 🤔여담으로 Daemon의 유래는 과거 MAC 개발자들이 맥스웰의 도깨비 사고 실험(보이지 않는 곳에서 스스로 분자를 골라내는 일을 하는 도깨비)에서 영감을 얻어 도깨비, 악마라는 뜻의 Daemon을 사용했고, 유닉스 시스템이 이 용어를 채용하면서 굳어졌다 한다. 자바의 데몬 스레드 자바의 데몬 스레드도 위 설명과 유사하게 제어 없이도 백그라운드에서 동작하며 애플리케이션(Normal Thread)을 보조하는 역할을 수행하는 스레드이다. JVM이 가질 수 있는 쓰레드의 종류는 크게 N.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 9. 1. 15. 스레드와 프로세스 프로세스 일반적으로 디스크에 존재하는 “프로그램”을 실행시켜서 동작하게 만들면 하나의 “프로세스”가 프로그램의 인스턴스로 메모리에 올라간다. 이때 여러 프로그램을 실행시키는 것은 멀티 프로세스라고 한다. 우리가 컴퓨터를 하는데 보통 워드, 크롬, 웹엑스 등 여러 프로그램을 동시에 실행하는 것이 바로 멀티 프로세스이다. 하나의 프로세스는 내부에 논리적인 저장 공간으로 Code, Data, Stack, Heap 등의 자원과 여러 개의 스레드로 구성될 수 있다. 스레드는 프로세스의 자원을 이용해서 실제로 작업을 수행하는 역할을 한다. 따라서 모든 프로세스에는 최소한 하나의 스레드가 존재한다. 자바 JVM(Java Virtual Machine)은 주로 하나의 프로세스로 실행되며, 동시에 여러 작업을 진행하기 위.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 31. 14. JAVA 병렬과 동시성 자바의 멀티스레드 환경과 동시성 이슈를 알아보기 위하여 몇 가지 개념을 정리해보고자 한다. 동시성 이슈 어떤 두 사건이 같은 시간에 일어날 때 동일한 데이터를 조작하기 때문에 예상했던 결과가 달라질 수 있는 상황이다. 개발에서 주의해야 흔하게 발생할 수 있는 이슈 중 하나가 바로 동시성 이슈다. 동시성(Cocurrency) 여러 작업이 동시에 발생하는 것처럼 보이기 위해 번갈아 가면서(Context Switching) 작업을 수행하는 것이 동시성이다. 겉에서 보기엔 여러 작업이 동시에 실행되고 있는 것처럼 보이지만 실제로는 빠른 시간에 하나씩 번갈아가면서 처리하고 있다. 따라서 동시성은 구현도, 디버깅도 어렵다. 동시성의 목적은 자원의 유휴 시간을 최소화하는 것이다. 컴퓨터가 작동 가능한 상황에서도 아무.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 30. LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법 - 본론2 서론에서 말했듯 LINE에서 활용하는 이벤트 기반 아키텍처의 개요는 아래와 같다. 🔥 오픈챗 서버에서는 메시지 전송과 메시지 리액션, 메시지 읽음 등과 같은 오픈챗 내 다양한 행위를 모두 이벤트로 간주하고 이벤트가 생성될 때마다 스토리지에 저장한 후 오픈챗에 참여하고 있는 모든 사용자에게 서버 푸시로 ‘새로운 이벤트가 생성됐으니 받아 가세요’라고 알린다. 서버 푸시를 받은 사용자(클라이언트)는 스토리지에 새로 들어온 이벤트를 페치(fetch) 이벤트 API로 받아가고 새 메시지 등을 화면에 추가하는 액션을 실행한다. 이번엔 핫 챗에서 급증하는 트래픽을 다룰 수 있는 LINE 만의 노하우 두 번째 방법을 알아보자. 🎮핫 챗에서 급증하는 트래픽을 다루는 방법 ✅case2. 오픈챗 참여 요청 급증 라인 오픈챗.. 기술블로그 2023. 8. 29. 13. Iterator의 자매품? Enumeration, ListIterator 자바 진영에서는 Collection Framework에 규정된 컬렉션에 저장된 원소 하나하나를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있다. 컬렉션 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메서드를 정의하고 있어 이를 통해 각각의 요소로 접근할 수 있다. 따라서 Collection 인터페이스를 상속받는 List, Set 인터페이스에서도 iterator() 메서드를 사용할 수 있다. Iterator란 무엇인가? 에서 다루었듯이 Iterator는 총 네가지 메서드(hasNext(), next(), remove(), forEachReaminaing())로 컬렉션을 모두 순회한다. 순회는 무조건 단방향으로만 반복가능하고 값을 변경하거나 .. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 10. 12. Iterator란 무엇인가? List list = new LinkedList(); Iterator iterList = list.iterator(); 자바에서 Iterator는 Collection Framework의 값을 조회, 삭제할 때 사용한다. 위와 같은 방식으로 Iterator 참조변수 = 컬렉션.iterator();로 선언하여 사용한다. Iterator Interface public interface Iterator { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } default void forEachRemaining(Consumer 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 8. 11. Queue에서 Poll()과 remove()의 차이점은 무엇인가요? Queue에서는 Enqueue, Dequeue와 같은 기본적인 같은 동작을 하는 메서드가 여러 개 있다. 그 대표적인 경우가 Poll()과 remove()이다. Poll vs Remove /** * Retrieves and removes the head of this queue. This method differs * from {@link #poll poll} only in that it throws an exception if this * queue is empty. * * @return the head of this queue * @throws NoSuchElementException if this queue is empty */ E remove(); /** * Retrieves and removes.. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 7. 10. HashMap과 TreeMap? HashMap과 Hashtable? HashMap과 TreeMap Map이란 key-value 형식을 기반으로 데이터를 저장할 수 있는 자료구조이다. 이때, Key는 데이터에 유일성을 가지고 있어야 한다. 필자 개인적으로 지금까지 Map 객체를 사용할 때 구현체로 HashMap을 주로 사용했는데 이 기회에 어떤 구현체가 있고 어떤 차이가 있는지 알아보자. public interface Map { int size(); boolean isEmpty(); boolean containsKey(Object key); boolean containsValue(Object value); V get(Object key); V put(K key, V value); V remove(Object key); void putAll(Map 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 4. LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법 - 본론1 서론에서 말했듯 LINE에서 활용하는 이벤트 기반 아키텍처의 개요는 아래와 같다. 🔥 오픈챗 서버에서는 메시지 전송과 메시지 리액션, 메시지 읽음 등과 같은 오픈챗 내 다양한 행위를 모두 이벤트로 간주하고 이벤트가 생성될 때마다 스토리지에 저장한 후 오픈챗에 참여하고 있는 모든 사용자에게 서버 푸시로 ‘새로운 이벤트가 생성됐으니 받아 가세요’라고 알린다. 서버 푸시를 받은 사용자(클라이언트)는 스토리지에 새로 들어온 이벤트를 페치(fetch) 이벤트 API로 받아가고 새 메시지 등을 화면에 추가하는 액션을 실행한다. 자 그럼 이제 핫 챗에서 급증하는 트래픽을 다룰 수 있는 LINE 만의 노하우를 알아보자. 🎮핫 챗에서 급증하는 트래픽을 다루는 방법 ✅Case 1. fetch 이벤트 API 요청 급증 이 .. 기술블로그 2023. 8. 2. 9. Collection과 Collections의 차이점은 무엇인가요? Collection Collection은 java.util. package에 포함되어 있으며 Collection framework의 루트 인터페이스이다. 주로 비슷한 성질을 가진 각각의 객체들을 묶어 놓기 위해 만들어 놓았다. Collection은 인터페이스의 main sub-interface로는 List, Set, Queue가 있다. Map의 경우 java의 Collection framework에 포함되기는 하지만 Collection을 직접적으로 상속받고 있지는 않다. Collection 인터페이스의 주요 메서드로든 add(), remove(), clear(), size(), contains()가 있다. Collections Collection Collections interface class 각각의 .. 백엔드 개발자라면 대답해야 할 100가지 질문 2023. 8. 2. LINE 오픈챗 서버가 100배 급증하는 트래픽을 다루는 방법 - 서론 📑서론, 오픈챗? 오픈챗은 메신저형 소셜 네트워크와 장점을 공유한다. 여러 사람이 동시에 소통할 수 있으며, 실시간으로 참여하지 않더라도 남겨진 메시지를 통해 수월하게 소통할 수 있다. 또한 접속만 하고 있다면, 참여 여부와 상관없이 인원과 채팅내역이 지속된다. 파일, 목소리, 단체통화 등 여러 형태로 소통이 가능하며 연동된 앱에 따라선 송금, 선물등의 행위까지 수월하게 할 수 있으며 대부분 모바일이 연동되므로 비교적 접속과 참여가 자유롭다. 한 오픈챗에 수천 명부터 수만 명의 사용자가 참여할 수 있고, 활발한 오픈챗은 한 오픈챗에서만 1분에 20만 개의 API 요청을 처리하기도 한다. 통계적으로 라인의 오픈챗 서버는 1분에 천만 개, 하루에 약 100억 개의 API요청을 처리하고 있다. 따라서 네이버의.. 기술블로그 2023. 8. 1. 이전 1 ··· 7 8 9 10 11 12 다음