본문 바로가기

분류 전체보기

(107)
JVM에 관하여 Java는 쓰는데 JVM이 뭐지? Java를 사용하는 데에는 아주 간단한 과정이 있습니다. 자신의 OS에 맞는 JDK를 설치하고 내가 짠 Java 코드를 javac 명령어로 실행시키면 프로그램이 구동됩니다. 근데 이러한 과정은 맥, 윈도우, 리눅스 모두 같은 과정을 거쳐서 사용할 수 있습니다. 이것은 Java 언어의 특성이자 JVM을 이용해서 가능한 일입니다. JVM이란? Java Virtual Machine 자바 바이트 코드를 해석하고 실행 자바 애플리케이션을 클래스 로더(Class Loader)를 통해 읽어서 자바 API와 함께 실행 자바의 WORA(Write Once Run Anywhere) 컨셉을 위해 사용되는 소프트웨어 JVM은 우리가 흔히 사용하는 프로그램들과 똑같은 소프트웨어입니다. 단지 자..
[프로그래머스] 후보키 카테고리 문자열 처리 나만의 카테고리 DFS 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/42890 코딩테스트 연습 - 후보키 [["100","ryan","music","2"],["200","apeach","math","2"],["300","tube","computer","3"],["400","con","computer","4"],["500","muzi","music","3"],["600","apeach","music","2"]] 2 programmers.co.kr 요점 데이터베이스에서 후보키 특성에 대해 이해하고 있으면 편하다 List 혹은 Array를 다루는 법에 대해 알아야한다 참고 지식 java.util.Set 풀이 (Java) import..
HandlerMethodArgumentResolver에 대해서 Spring을 활용해서 웹 개발을 하던 중 의문이 생겼습니다. Controller에서 Parameter를 받을 때 Model을 넣어주면 해당 Model의 생성자는 어디에 있지? 객체가 생성되어 있고 값이 들어가 있는데 생성자는 어디에 있는지 알 수가 없었습니다. 그러다 찾은 것이 HandlerMethodArgumentResolver입니다. HandlerMethodArgumentResolver Spring에서 제공하는 인터페이스 중 하나로 컨트롤러에서 특정 조건에 맞는 파라미터에 원하는 값을 바인딩 해주는 역할을 합니다. 위의 상황과 같이 Model이 파라미터라면 모델 객체를 생성하고 값을 넣어서 반환해주는 것이 이 인터페이스의 역할입니다. Custom HandlerMethodArgumentResolver..
Java의 직렬화란 1. 직렬화(Serialization)란? 직렬화의 정의는 데이터구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장하고 나중에 재구성할 수 있는 포맷으로 변환하는 과정입니다. 즉, 다른 환경으로 데이터를 전송하거나 저장할 때 서로 재구성할 수 있는 형태로 변환하고 역변환하는 것을 직렬화/역직렬화라고 합니다. 2. Java에서의 사용 Java에서 사용하는 곳은 다른 곳으로 전송 혹은 전송 받을 때 사용하거나 특정 객체를 영속화(메모리가 아닌 영속적인 디스크에 저장할 때) 사용한다. 예를 들어보면 Java 에서는 ObjectOutputStream 클래스로 객체를 저장할 수 있는데 이때 매개변수로 넘길 수 있는 것은 Serializable의 구현체만 가능하다. 즉, 직렬화가 가능하도록 한 객체를 byt..
HTTP/3에 대해서 HTTP/2도 이제야 막 알아가던 시점인데 벌써 3이라니! HTTP3.0이 2020년 10월에 추가되었습니다. 어떻게 이렇게 소문도 없이 나왔는지 모르겠습니다. 그래서 이제서라도 알아보려고 정리해봅니다. 이전의 HTTP https://marrrang.tistory.com/38?category=925235 이것도 한번 참고해보시면 좋을 듯합니다 ㅎㅎ HTTP/3을 보기 이전에 HTTP/2에 대해서도 잘 모르니 짚고 넘어가겠습니다. HTTP1.1을 사용하던 때와 다르게 리소스들이 증가하였고 점점 더 병렬 수행하는 것이 중요해짐에 따라서 개선이 필요했습니다. 기존에는 Plain Text(평문)을 사용했지만 2.0부터는 바이너리 포맷으로 인코딩 된 Message, Frame으로 구성되었습니다. 1.0에 비해서 ..
[프로그래머스] 방금그곡 (Java) 카테고리 문자열 처리 나만의 카테고리 문자열 처리 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/17683 코딩테스트 연습 - [3차] 방금그곡 방금그곡 라디오를 자주 듣는 네오는 라디오에서 방금 나왔던 음악이 무슨 음악인지 궁금해질 때가 많다. 그럴 때 네오는 다음 포털의 '방금그곡' 서비스를 이용하곤 한다. 방금그곡에서는 TV, programmers.co.kr 요점 문자열에서 정보를 추출하기 ChronoUnit과 DateTimeFormatter를 이용하면 시간 차이를 구할 수 있다 Java 11 이상이라면 String.repeat()를 활용하여 반복을 처리할 수 있다 char 형을 완벽한 빈 값으로는 선언할 수는 없고 \0 값을 활용해야 한다 참..
Kafka Streams (카프카 스트림즈)에 대해서 https://www.youtube.com/watch?v=vKxhPUUEDmM 이 글은 위의 링크 많이 참조하여 작성하였습니다. 한번 보시면 좋을것 같아요 ㅎㅎ Kafka Streams는 뭘까? 카프카에 대한 정의는 분산 이벤트 스트리밍 플랫폼으로써 프로듀서와 컨슈머를 통해 데이터를 생산하고 받아와서 처리하는곳에 사용해왔습니다. 이 기술은 강력한 성능을 가지고 있고 단순히 메시지를 전달하는 것이 아닌 연속적으로 대용량의 메세지를 처리하는 곳에도 사용해왔었습니다. 이제는 컨슈머로 받아와서 처리하는 것보다 더 빠르고 안전하게 실시간으로 처리할 수 있게 카프카에서 지원해준 것이 Kafka Streams입니다. 간단하게는 어떤 Topic으로 들어오는 데이터를 Consume하여 Kafka Streams에서 제공하..
Redis에 대해서 Redis는 무엇일까? 정의는 메모리 기반의 Key-Value 구조의 데이터 관리 시스템 Memcache와 차이점 그리고 종종 MemCache와 종종 비교됩니다. 그럼 MemCache를 잠시 살펴봅시다. MemCache의 특징들은 아래와 같습니다. 처리속도가 빠르다 => 디스크를 거치지 않기 때문에 빠르다 휘발성을 가진다 => 프로세스가 죽거나 장비가 꺼지면 데이터가 사라진다 메모리를 재사용한다 => 메모리가 부족하면 LRU 알고리즘에 의해 데이터가 사라진다 그리고 MemCache와 비교되는 Redis도 위와 같은 특성을 그대로 가지게 됩니다. 하지만 조금씩 다릅니다. Redis와 MemCache의 차이점 데이터를 메모리 + 디스크 혹은 다른 서버 메모리에 저장한다. 따라서 프로세스가 죽어도 데이터가 저..
[프로그래머스] 프렌즈4블록 (Java) 카테고리 로직 짜기 나만의 카테고리 테트리스 문제 링크 https://programmers.co.kr/learn/courses/30/lessons/17679 코딩테스트 연습 - [1차] 프렌즈4블록 프렌즈4블록 블라인드 공채를 통과한 신입 사원 라이언은 신규 게임 개발 업무를 맡게 되었다. 이번에 출시할 게임 제목은 "프렌즈4블록". 같은 모양의 카카오프렌즈 블록이 2×2 형태로 4개가 붙 programmers.co.kr 요점 블락을 내려보내는 테트리스 문제는 for문을 역으로 순회해야한다. 참고 지식 String.toCharArray() 풀이 (Java) import java.util.*; class Solution { private char[][] glbBoard; public int solutio..
Design Pattern 디자인 패턴에 대해서 0. 디자인 패턴이란 소프트웨어 설계 문제에 대한 해답을 문서화하기 위해 고안된 형식 위키에서는 위와 같이 표현되어 있습니다. 조금 어렵게 들리기도 하네요. 제가 이해한 바로는 좋은 코드를 만드는 방법들이라고 이해하게 되었습니다. 좋은 코드는 각자의 스타일에 따라 다르겠지만 통상적으로는 아래의 특징들을 가진 코드를 좋은 코드라고 합니다. 좋은 코드 가독성이 좋음 간결함 확장과 수정에 용이 유지 보수가 편함 결합도가 낮음 응집도는 높음 ... 디자인 패턴은 좋은 코드를 만드는 방법이라고 했으니까 위의 특징들을 만족시키는 코드 설계 방식이겠습니다. 그리고 디자인 패턴보다 객체지향의 5대 원칙을 먼저 보는 것이 다음의 이해를 위해 좋습니다. 1. 디자인 패턴 종류 생성 패턴 (Creational Pattern..