전체 글 350

java의 volatile

java의 volatile java변수를 Main Memory에 저장하겠다는 것이다. 이게 뭐냐...하면 말그대로 main memory에 값을 저장한다는거다. 사실 이거 이해하려면 cache에 대해서 조금 알고오면 편하다. 자바는 사실 값을 저장하거나 읽어올 때에 이거를 CPU cache를 통해 진행한다. 이렇게 되면 속도에 이득이 필요하지만... 멀티 쓰레드 환경에서 좀 문제가 있을 수 있다. 멀티 쓰레드에서의 CPU cache 문제 MultiThread에서는 보통 Task동안 Main Memory에 있는 값을 CPU에 Caching한다. 그리고 이거를 읽거나, 쓰거나 등등의 연산을 취하게 되는데 Main Memory에 특정 값이 저장되어 있다. (RyooChan = "Genius") 1번 쓰레드가 M..

이론 정리/java 2022.12.06

네트워크 입문 002

study002 tags: Tag(IT엔지니어를 위한 네트워크 입문) 인터넷이 대중화된 이후 대부분의 기술이 이더넷 - TCP/IP기반이어서 기술이 점점 단순화되고 있지만 아직도 용도와 필요한 네트워크 속도에 따라 기술 요소들이 사용되고 있다. 이번에는 네트워크 연결 방법을 구분하고 네트워크 연결에 필요한 회선과 구성 요소를 알아본다. 네트워크 연결 구분 네트워크는 규모와 관리 범위에 따라 LAN, MAN, WAN 3가지로 구분된다. LAN(Local Area Network) 사용자 내부 네트워크 MAN(Metro Area Network) 한 도시 정도를 연결하고 관리하는 네트워크 WAN(Wide Area Network) 멀리 떨어진 LAN을 연결해주는 네트워크 예전에는 이 3개가 사용하는 기술이 달랐지..

자바에서 public static void가 메인메소드로 시작하는 이유가 뭘까?

요즘 GoLang을 공부중인데 이친구는 main.go에서부터 시작한다. 근데 그러다가 자연스럽게 java는 public static void main(String[] args) 에서부터 시작하는데 그 이유가 뭘까 궁금하여 찾아보게 되었다. package ryoochan; public class RyoochanHandsome { public static void main(String[] args) { } }처음에 프로젝트를 시작하면 이렇게 초기 코드가 생성된다. 그래서 이게 뭔데....? 싶을 것이다. 내가 그랬음. 일단 하나씩 까보자 public 이거는 뭐 다들 알것이다. Spring으로 개발을 해봤으면 알텐데 접근 제어자중 하나이다 접근 제어자는 private -> protected -> public ..

이론 정리/java 2022.11.06

캐시 교체 정책에 관해서

Cache가 뭔데? 왜 하는데? 데이터나 값을 미리 저장해 두는 임시 장소이다. 굳이 이걸 미리 저장해 두는 이유는, 동일한 계산의 결과값이 필요할 때에 추가적인 결과 없이 미리 캐싱해둔 데이터들을 가져오면 더 빠르게 가져올 수 있고 어플리케이션에 부하가 덜 걸리기 때문이다. 캐시 교체 알고리즘 FIFO(First In First Out) 선입선출 - 먼저 입력된 캐시 순서대로 교체된다. LFU(Least Frequently Used) 사용 횟수가 가장 적은 캐시를 교체한다. LRU(Least Recently Used) 가장 오랫동안 사용되지 않은 캐시를 교체한다. LRU 알고리즘에 대해서 나머지는 대충 어떤 방식인지 알겠고, 딱봐도 잘 안쓰일것같다. 단점을 보면 FIFO 많이 쓰이는 데이터가 먼저 들어..

이론 정리 2022.11.06

DTO랑 VO의 차이

근데 진짜 DTO랑 VO이거 개발할때 잘 구분 안함... DTO Data Transfer Object 데이터를 전달하기 위해 사용하는 객체이다. 데이터를 주고받을 때에 사용하는 녀석이라 생각하면 편하다. 구체적으로 표현하자면 "계층 간" 데이터 전달을 위해 사용되는 것이 DTO이다. 예를 들어 Controller Service 와 같이 서로 다른 계층 간에 데이터를 전달할 때에 쓰인다. 이 DTO의 특징으로는 오직 getter/setter메서드만을 가진다. 찐으로 getter/setter만 갖는게 아니라 데이터 세팅이랑 읽는것만 가능하다는거다. setter는 어지간하면 쓰지 말자구요 걍 불변객체 가자 로직을 갖지 않는다. 왜냐면 얘는 데이터 전달만을 위한 객체이기 때문이다. VO Value Object ..

카테고리 없음 2022.11.01

값 타입과 임베디드 타입

값 타입 기본값 타입 임베디드 타입(복합 값 타입) 값 타입과 불변 객체 값 타입의 비교 값 타입 컬렉션 기본값 타입 JPA는 데이터 타입을 최상위 레벨로 볼 때 두가지로 분류한다. 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자를 통해 지속해서 추적이 가능하다. 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적이 불가능하다. 값 타입의 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(enbedded type, 복합 값 타입) 컬렉션 타입 기본값 타입 생명 주기를 엔티티에 의존한다. 즉 엔티티를 삭제하면 기본값도 삭제된다. ..

Go의 GC에 대해 (feat. java)

GC가 일단 뭔데? C/C++을 배웠던 사람은 알텐데 얘들은 메모리를 사용할 때 필요할 때에 생성하고, 필요가 다하면 해제해 주었다. 이는 메모리의 관리 측면에서 굉장히 좋지만(쓸데없이 메모리를 먹는 애들이 없으니까 퍼포먼스가 뛰어나다) 매번 이를 적절하게 할당하고 해제해야 하기 때문에 아주 귀찮다. 그래서 매번 메모리를 해제하는걸 그냥 해주는 녀석이 생겨났고, 이녀석이 Garbage Collector 즉 GC이다. STW : Stop The World GC의 동작동안 다른 쓰레드의 작업은 모두 중단된다. 즉, 가비지 컬렉터가 동작하게 되면 모든 작업이 멈추게 된다는 것이다 그리고 이 STW시간을 줄이는 것이 바로 GC튜닝이다. java에서의 GC 한국에서 웹개발을 할 때에 가장 보편적으로 사용되고, 보..

API프로토콜(REST, gRPC, GraphQL)에 대해

API는 왜 중요할까? 추상과 구체를 분리하여 지금 당장 중요하지 않은 것들에 종속되지 않으면서 기능을 사용할 수 있다. REST API 특징 리소스 중심으로 API가 구성된다. HTTP Method를 통해 Action정의 JSON, XML등을 사용한다. 장점 학습과 사용이 쉽고, 자유도가 높아 원하는 대로 사용이 가능하다. 단점 API가 자주 바뀌게 된다. -> Type, field내용 등의 변경이 잦을 수 있음. 버저닝(Versioning) 명세 찾기가 어려움 죽은 문서 개발 종속성 인터페이스 정의 언어(Interface Description Language : IDL) 소프트웨어 컴포넌트의 인터페이스를 묘사하긴 위한 명세 언어 IDL은 어느 한 언어에 국한되지 않는 언어 중립적은 방법으로 인터페이스..

OSI7계층

1계층 물리 계층(Physical Layer) 먼저 두 대의 컴퓨터가 어떻게 통신하는지부터 생각해 보면 모든 파일과 프로그램은 0과 1의 나열이고, 결국 0과 1만 주고받을 수 있으면 통신이 가능하다는 것이다. 두 대의 컴퓨터 간 통신 두 대의 컴퓨터를 전선 하나로 연결한다 생각하면 1을 보낼 때는 +5V 0을 보낼 때는 -5V 이렇게 흘려보내면 0과 1의 전송이 가능해진다. 그래서 이제 0과 1을 주고받을수 있으므로 두 컴퓨터는 모든 데이터의 통신이 가능하다. 그런데 이게 실제로는 잘 동작하지 않았다. 이렇게 X축은 시간, Y축은 전압을 갖는 Sin함수가 있다고 생각해 보았을 때 그래서 이렇게 +5, -5의 전압을 갖는 애들을 주고받을 텐데... 1초동안 몇번의 주파수가 있는지 세어보면 총 4번 진동할..

TCP/UDP

Transport Layer Endpoint간 신뢰성있는 데이터 전송을 담당하는 계층이다. 말하자면 클라이언트 - 서버 간 원하는 포트 번호에 해당하는 프로세스에 데이터를 순차적으로, 안정적으로 전달하는 것을 담당한다. 만약 이 전송 계층이 없다면 어떤 일이 발생할까? 데이터 신뢰 불가능 송신자가 요청한 데이터와 수신한 데이터가 서로 다를 수 있다. (1,2,3 요청 -> 2,3,1 수신) 흐름 문제 송/수신자 간 데이터 처리 속도의 차이 때문에 수신자가 처리할 수 있는 데이터량을 초과하게 되는 문제가 발생할 수 있다. 만약 수신자가 처리할 수 있는 데이터를 초과해서 계속 요청이 온다면 문제가 발생할 것이다. 혼잡 문제 네트워크가 혼잡하거나 뭔가 문제가 있을 때에 송신자가 보냈는데 제대로 데이터가 들어가..