본문 바로가기

잡다한 개발잡담

(22)
운영체제의 주소 바인딩 알아보기 운영체제 - 주소 바인딩 Goal 프로그램이 물리적 메모리에 어떻게 올라가서 주소를 할당받는지 이해하기 메모리의 주소 집마다 고유의 주소가 있는 것처럼 메모리 역시 주소를 통해 접근할 수 있는 저장장치입니다. 주소 바인딩 프로그램이 실행을 위해 메모리에 적재된다면 그 프로세스를 위한 독자적인 주소 공간이 생성됩니다. 우리는 이 주소를 논리적인 주소(logical address) 또는 가상 주소(vritual addres)라고 칭합니다. 이와 같은 논리적 주소는 각 프로세스마다 독립적으로 할당되며 0번지부터 시작되고, CPU는 이와 같은 논리적 주소에 근거해 명령을 실행합니다. 그리고 물리적 주소(physical adderss)는 물리적 메모리에 실제로 올라가는 위치를 말합니다. 보통 물리적 메모리의 낮은..
Apache Maven 이해하고 사용하자 저는 아직까지 SpringBoot의 빌드 도구로 gradle보다 maven을 많이 사용하고 있습니다. 인텔리제이 또는 STS와 같은 ide 덕분에 빌드 도구를 이해하지 않고 손쉽게 사용해 왔지만 간단한 이해만 하고 사용하다 보니 금일 발생한 이슈가 메이븐과 관련된 것인지 바로 파악하지 못했습니다. 원인을 찾고 해결하는데 많은 시간을 소모해서 정확하게 이해하고자 글을 포스팅하게 되었습니다. 먼저 maven은 무엇일까요?? 아파치 메이븐(Apache Maven)은 자바용 프로젝트 관리 도구이다. 아파치 앤트의 대안으로 만들어졌다. 아파치 라이선스로 배포되는 오픈 소스 소프트웨어이다. 위키백과에는 메이븐을 자바용 프로젝트 관리 도구로 설명하고 있습니다. maven이전에는 앤트라는 것을 사용했나보네요. 지금은 ..
프로세스와 스레드의 차이를 알아보자 프로세스와 스레드 프로세스는 실행중인 프로그램을 의미하고, 스레드는 프로세스의 실행단위이다. 그러므로 스레드는 한 프로세스 내에서 동작되는 여러 실행흐름이라고 말할 수 있다. 또 신기한 것은 프로세스 간의 통신보다 스레드 간의 통신의 속도가 더 빠르다고 한다. 아래의 사진이 프로세스와 스레드의 차이를 정말 적절하게 보여주는 것 같다. 왜 스레드간의 통신 속도가 더 빠른거야? 위의 사진을 보니까 왜 스레드간의 통신 속도가 더 빠른지 알것만 같다..사진상으로 가까이 있으니까..? 비슷한것 같다. 정확히 설명하자면 위의 사진에서 스레드들은 한 프로세스 안에서 존재한다. 그렇다면 이렇게 생각해 볼 수 있다. 저 프로세스 내에서 어떤 데이터 영역을 프로세스끼리 공유하고 있다면 컨텍스트 스위칭의 비용이 줄어들지 않..
HTTP를 이해하자(1) 인터넷에서 자료를 전송받으려면 서로 간의 통신이 필요하다. 이러한 통신은 어떻게 이루어지는지 알아보려고 한다. 마침 HTTP 프로토콜을 이해할 필요가 있다고 생각을 하고 있는 와중에 김영한 님의 강의를 들으며 나의 약간의 생각을 양념해서 정리해보았다. 강의는 크게 8개의 섹션으로 분리되어 있으며 하나씩 알아보려고 한다. 인터넷 네트워크 인터넷에서 A와 B가 통신을 하기 위해서는 프로토콜이란 약속이 필요할 것이다. 이러한 약속에는 많은 것들이 있을 텐데, 가장 중요한 것은 어디로 보내야 하냐? 즉, 주소일 것이다. 데이터를 어디로 전송하는 게 가장 중요한 부분이니까 말이다. 그래서 우리는 IP 주소라는 것을 부여하여 통신을 이루어질 수 있게 했다. IP 프로토콜의 역할 지정한 IP 주소에 데이터 전달 패킷..
Java의 개념 원리를 파악하자 1. 자바는 왜 플랫폼 독립적인 언어라고 불릴까? 자바는 JVM 위에서 동작하기 때문이다. 위의 답을 알기 위해 우리는 자바의 실행 원리를 이해할 필요가 있다. 우리는 자바 언어를 활용해서 코딩을 하게 되는데 이런 프로그래밍 언어는 컴퓨터가 이해하지 못한다. 그래서 이러한 프로그래밍 언어를 javac라는 명령어를 통해 컴파일 하는 것이 필요하다. 컴파일을 하게 되면 .class라는 바이트코드가 생성된다. 이러한 .class 파일은 java라는 명령어를 통해 실행할 수 있다. 실행하게 되면 Java virtual Machine(JVM)이 클래스 파일을 읽어 프로그램을 실행하게 된다. 이 때, JVM의 특징은 os에 종속적이라는 것이다. 즉 윈도우의 jvm과 리눅스의 jvm은 다르므로 각각 os에 알맞은 j..
[Network] 네트워크 기초 지식 네트워크란? 무언가와 무언가가 무언가에 의해 연결되어 있는 상태를 말한다. 컴퓨터 네트워크는 컴퓨터와 컴퓨터가 통신 매체로 연결되어 있는 상태라고 말할 수 있습니다. 그리고 통신 매체에 의해 데이터가 운반되어지게 됩니다. 그렇다면 컴퓨터 네트워크의 장점은? 리소스를 공유할 수 있다. 아... 리소스를 공유할 수 있는건 알겠는데? 리소스를 공유할 수 있다는 것이 무슨 효율성을 가져다줄까요? 프린트 공유, 이메일, 인터넷 페이지 등 우리가 실생활에서 편리하게 사용하는 서비스들을 이용 가능하게 해 줍니다. 또한 통신을 위한 주고받는 데이터는 컴퓨터에서 비트라는 단위로 표현되며, A에서 전송한 정보를 B에서 정확하게 이해하기 위해서는 통신 규칙이 필요하겠죠? 이런 통신 규칙을 프로토콜이라고 부릅니다. 그리고 이..
디자인 패턴 - 싱글톤 패턴(Singleton Pattern) - 2 싱글톤을 구현할 때 중요하게 생각해야 하는 것은 Thread-safe의 보장입니다. 멀티 스레드 환경에서 thread-safe를 보장하지 못한다면 제대로 된 동작을 수행하지 못합니다. 싱글톤 패턴의 공통 구현 특성 private 생성자와 static method를 사용한다는 것 Eager Initialization(이른 초기화, thread-safe) 이른 초기화 방식은 클래스 로더가 초기화하는 시점에서 정적 바인딩을 통해 해당 인스턴스를 메모리에 등록하여 사용하는 것입니다.(static의 특징을 활용) 클래스 로더에 의해 클래스가 처음 로딩되는 시점에 메모리에 로드하기 때문에 Thread-safe를 보장하게 됩니다. Lazy Initialization with synchronized (게으른 초기화 w..
디자인 패턴 - 싱글톤 패턴(Singleton Pattern) - 1 싱글톤 패턴이란? 최소 1개에서 최대 N개로 객체 생성을 제한하는 패턴 왜 사용하는가? 무분별한 객체 생성은 컴퓨터의 자원을 낭비하게 되고, 프로그램의 전체 효율이 낮아지는 결과가 초래된다. 그러므로 개발자는 객체의 최대 개수를 제한할 필요성을 느끼게 되었다. 주의할 점 객체의 생성을 요청하는 쪽에서 생성되는 객체의 최대 개수를 제한하는 일에 신경 쓰지 않도록 구현해야 한다. 사용 예 위의 예제 코드를 보면 생성자를 private으로 선언하여 new를 통한 객체 생성이 불가능하고, getInstance 메서드를 통해서만 해당 인스턴스를 얻을 수 있기 때문에 싱글톤 패턴이라고 할 수 있다. 만약 생성자를 public으로 변경하게 된다면 생성자를 통한 객체 생성이 가능하기 때문에 private으로 꼭 변경해..