Developer/Kotlin & Java

Java Memory 자바 개발자라면 꼭 알고 넘어가야 하는 기본 아닌 기본 소양 📝 JVM 처음부터 다 설명하는 것은 제가 이야기하고자 하는 포인트가 아니라서, 간략하게 중요한 것만 짚고 넘어가려고 합니다 ㅎㅎ 전체적인 JVM 의 구조는 아래와 같습니다 정확히는 JVM 의 Heap 에 대해서만 짚고 넘어가보도록 할게요 저희는 예전부터 개발을 진행해왔고, 많이들 익숙하신 그림을 하나 소개할까해요 위 그림은 Jdk 1.7 버젼 이전의 Heap 메모리 구조입니다 Eden: 새로 생성한 대부분의 객체가 위치하는 곳 S0, S1: Eden 영역에서 GC가 한번 발생한 후 살아남은 객체들이 존재하는 곳 Old Memory: Young Generation에 대한 GC가 반복되는 과정속에 살아남은 객체가 살아남는 곳..
비동기(Asynchronized)란? 안녕하세요~ ㅎㅎ 오늘은 서버 개발에 있어서 아주아주 중요한 항목인~ 비동기 처리에 대해 알아보려고 해요!! 일반적인 REST API로 서버를 만들 때 보통의 경우에는 단일 쓰레드로, Request / Response 형태를 가지고 있지만, 요청에 대한 요구사항이 크거나 동일한 속성이 여러개를 띄고 있거나 빠른 응답이 필요하다면 고려해야되는 것중의 하나가 바로 멀티쓰레드 처리 인데요.! 요번 시간에는 자바(Spring)에서 어떻게 멀티쓰레드로 처리할지 알아보도록 하겠습니다.! 먼저 동기, 비동기 처리가 어떤 것인지 알아보도록 할까요? 위 그림처럼 단일 쓰레드에서는 요청이 길어지면 길어질 수록 처리시간이 선형적으로 늘어날 수 밖에 없습니다 ㅠ 그러니까 놀고 있는 CPU..
Java8 Java에서는 java8 이전과 이후는 정말 많은 차이가 있을 정도로 바뀐점이 많은 업데이트였다 이러한 기법이 나오게 된 근본적인 배경은 사이드 Effect가 없는 병렬 처리에 대한 요구가 증가했기 때문이에요! 일반적으로 Collection 데이터를 바탕으로 데이터 연산이 진행되는데, 멀티 쓰레드 환경에서 데이터를 조작하게 된다면 java에서 비싼 연산 중 하나인 synchronized 를 사용할 수 밖에 없죠 ㅠㅠ 그래서 개발자들은 고민하게 됩니다 우리는 synchronized를 사용하지 않고, 병렬처리가 가능한 데이터 stream을 만들 수 없을까? 이러한 고민에 대한 해결책이 바로 Stream 이에요 Functional Programming을 기반으로 해서, 상태를 저장하지 않고 일련의 ..
직렬화란? 문득 개발을 하면서 갑자기 그런 생각이 들었습니다 자바 직렬화가 도대체 뭐지? Spring을 공부하면서 ObjectMapper를 쓰는데 직렬화한다는 것을 알게되고, 갑자기 궁금해져서 글을 쓰게됬어요 ㅎㅎ 그래서 직렬화란 Java 시스템 내에서 사용되는 객체를 외부의 Java 시스템에서도 사용할 수 있도록 바이트(byte) 형태로 데이터를 변환하는 기술과 바이트로 변환된 데이터를 다시 객체로 변환하는 기술을 통틀어서 이야기 합니다! 조금 더 상세하게 이야기하면..! JVM의 메모리에 상주되어 있는 데이터를 Byte형태로 변환하는 것을 의미합니다! 그럼 어떻게.? Java의 Interface중 하나인 Serializable을 상속받으면 사용이 가능합니다.! package com.huisam.spr..
DIP? DIP는 다음과 같은 정의를 가지고 있습니다 상위 모듈은 하위 모듈에 의존해서는 안된다 추상화는 세부 사항에 의존해서는 안된다 정말 아무리봐도 무슨말인지 모르겠죠? 조금 쉽게 설명하자면 DIP의 핵심은 의존 관계를 맺을 때 변화하기 쉬운 것에 의존하기보다는, 변화하지 않는 것에 의존하라는 원칙입니다! 현실 세계를 예로 들어 볼까요 내가 PayService를 개발하고 싶은 개발자라고 가정해봅시다 Pay수단에는 되게 여러가지 방법이 있겠죠? SamsungPay, KaKaoPay, NaverPay ... 기타 등등 그러면 개발자의 입장에서 위 Pay수단중에서 하나 골라서 사람들에게 Service를 제공한다고 가정합시다. 하지만 사람들의 요구사항에 의해서 다른 Pay수단들도 추가해달래요! 초기 설계때 ..
ISP Interface Segregation Principle(인터페이스 분리 원칙) : 클라이언트가 자신이 이용하지 않는 메서드에 의존하면 안된다는 원칙 역시나 이번에도 도통 무슨 말인지 모르시겠죠? ㅎㅎ 그래서 조금 쉽게 설명드리면~! 특정 객체(클래스)에 대한 책임을 덜어드리는 것이 목표에요! 다시 말해서 기능을 쪼개고 쪼개서 클래스가 단 하나의 책임(SRP)을 지니게 하는 것을 도와줍니다! 현실세계를 예로 들어볼까요? 제가 스마트폰을 개발하는 담당자 라고 가정해봅시다 지금 갤럭시1 이라는 객체(클래스)에는 전화, MP3, 인터넷 기능만 존재했어요 하지만 버젼 업그레이드를 계속 진행하면서 갤럭시2를 출시하게 됬는데, MP3 기능이 빠지고 동영상 기능이 들어가서 전화, 동영상, 인터넷 기능만 존재하..
huisam
'Developer/Kotlin & Java' 카테고리의 글 목록 (3 Page)