[바미] IPC
·
프로그래밍(Basic)/이론
IPC? 프로세스 간에 통신하여 프로세스 간에 데이터를 주고받는 방식을 말합니다. 프로세스끼리 직접적으로 '대화'하는 방법은 없습니다. 왜 그렇냐면 프로세스들이 서로 공간을 쉽게 접근하면 프로세스의 데이터나 코드가 다른 프로세스에 의해 쉽게 바뀔 수 있기 때문인데 제가 만든 작고 소중한 코드가 나쁜 해커놈들이 만든 프로그램으로 인해 조작되서 중요한 데이터를 뺏기면 마음도 아프고 그렇겠죠? 이를 막기 위해 프로세스는 통신을 직접적으로 할 수가 없고, 서로의 공간을 접근할 수가 없어요. 그래도 프로세스 간의 커뮤니케이션은 필요하기 때문에 나온 기법이라 할 수 있죠. 통신(커뮤니케이션)이 필요하다는데, 왜죠? 성능을 높이기 위해 존재해요. 어떤 로직을 하나의 프로세스로만 수행하는 대신, 여러 프로세스가 수행해..
[바미] 코드 리펙토링(Code Refactoring)에 대해서
·
프로그래밍(Basic)/이론
소프트웨어 공학에서 리팩토링(refactoring)은 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻합니다. 더 정확히 얘기하면 주로 가독성을 높이고 유지보수를 편하게 하는 것. 버그를 없애거나 새로운 기능을 추가하는 행위는 아님. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 개선하는 유지보수 행위. 로 얘기 할 수 있습니다. 쉽게 얘기하면 현재 코드의 동작은 그대로 유지하면서 더 이해하기 쉽고, 생각하기 쉽고, 확장하기 쉽게끔 재구성하는 것을 말하는 것이죠. Refactoring 목적 리팩토링의 목적은, 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것에 있습니다. 리팩토링은 성능을 최적화시키는 것이 아닌 코드를 신속하게 개발할 수 있게 만들어주고, 코드 품질을 좋게 만들어주는 ..
[바미] Object, Class, Instance.
·
프로그래밍(Basic)/이론
개발을 하다 보면 정말 자주 듣고 보고 말하고 쓰게 될 말이 위 3개 입니다. 간혹 물어보면 정확히 답변 못하는 경우가 많은데 오늘은 객체, 클래스, 인스턴스에 대해 알아보도록 하겠습니다. An object is a class instance or an array. 제임스 고슬링이 작성한 자바 언어 설명서 (The java Language Specification)에는 객체(object)란 클래스의 인스턴스나 배열을 말한다고 정의되어 있습니다. 컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미합니다. 객체지향 프로그래밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인..
[바미] Java - Garbage Collection
·
프로그래밍(Basic)/이론
들어가기전에.. 안녕하세요. 하루 최소 600만건의 데이터를 처리해주는 서버를 Java(Maven)으로 개발하여 운영하고 있습니다. 서버 메모리가 점진적으로 0.1%씩 올라가는 것을 목격하게 되었고, 이를 해결하기 위해 Java 안에서 데이터들을 처리할 때 새롭게 생성하는 인스턴스를 null로 초기화를 해주었지만 여전히 메모리가 누수되는 현상이 발생되어 이 문제가 가비지 컬렉션과 관련이 있을 것 같아 찾아보던 것을 포스팅 해봅니다. Garbage Collection? 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 됩니다. C언어의 경우 free()라는 함수를 통해 직접 메모리를 해제해주어야 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 JVM의 가비지 컬렉..
[바미] 선형성(Linearity)에 대해
·
프로그래밍(Basic)/이론
선형성(Linearity) 선형성이란 가산성과 동차성 성질을 동시에 만족하는 것을 말합니다. 가산성 (Additivity) 각각의 입력에 대한 결과를 합한 것과 입력을 합쳐서 넣은 결과가 동일하다. 이것이 가산성이고 superposition(중첩)이 가능하다고 한다. 다시 말해 복잡한 입력 x1 + x2에 대한 결과를 알기 어려울 때 이미 잘 알고 있거나 계산하기 쉬운 단순한 입력 x1과 x2를 이용해 각각의 결과를 얻고 단순히 합하기만 하면 되는 것을 말합니다. 동차성 (Homogeneity) 입력을 몇 배 늘리거나 줄였을 때 그 결과도 입력이 조정된 비율만큼 조정되는 성질을 말합니다. 선형성이 중요한 이유 예를 들어 어떤 선형적으로 거동하는 물체를 1N의 힘으로 눌렀을 때 1mm만큼 변형하고 2N의 ..
[바미] BROWSER-RENDERING에 대하여
·
프로그래밍(Basic)/이론
안녕하세요. 최근에 CS공부를 하고 있던 도중 후임이 HTML 파일이 어떻게 브라우저에 그려지는지 물어보았는데, 제가 그 것을 답변하는 중에 제가 브라우저 렌더링 과정을 정확하게 이해하지 못하고 있다는 걸 알게 되었습니다. 그래서 브라우저 렌더링 과정에 대해서 공부하고 정리해보려고 합니다. 브라우저 브라우저 렌더링 과정을 알아보기전에 브라우저가 무엇인지 먼저 알아보아야 합니다. 우선 브라우저는 우리가 흔히 인터넷에 접속할 때 사용하는 Chrome, Safari, Firefox, Internet Explorer 등을 말합니다. MDN에서는 브라우저에 대해 웹에서 페이지를 찾아서 보여주고, 사용자가 하이퍼링크를 통해 다른 페이지로 이동할 수 있도록 하는 프로그램이라고 설명하고 있는데 여기서 중요하다고 생각하..
[바미] REST API에 대하여
·
프로그래밍(Basic)/이론
안녕하세요. 오늘은 REST API에 대해 알아보고자 합니다. REST? 흔히 개발을 하셨던 분들이라면 'REST하다.' 라는 표현을 접해보셨을 겁니다. 개발하면서 흔히 접했지만 정확히 얘기하지 못하는 부분 중 하나가 REST-API가 아닌가 싶습니다. REST(Representational State Transfer)의 사전적인 의미들을 요약해보면 'REST라는 아키텍쳐 스타일을 따르는 API'라고 표현 할 수 있습니다. 그러니까 HTTP를 기반으로, 자원을 정의하고, 자원에 접근하는 방식을 정해 놓은 아키텍쳐인데 웹에 존재하는 모든 자원에 고유한 식별자인 URI을 부여해 활용합니다. 여기서 자원은 저장된 데이터(DBMS), 이미지, 동영상, 문서 파일, 서비스 (이메일, 메시지)를 모두 포함합니다. ..
[바미] Deadlock의 해결방안
·
프로그래밍(Basic)/이론
안녕하세요. 오늘은 Deadlock을 어떻게 해결해야 하는지에 대해 알아보도록 하겠습니다. 일단 Deadlock이 무엇인지, 어떤 원인으로 발생하는지는 아래의 글을 참고 하시면 더 좋을 것 같습니다. [바미] Go - DeadLock & channel에 대해 알아보자. 안녕하세요 오늘은 DeadLock에 대해 알아보겠습니다. 여기서 Dead는 '죽었다'의 표현이 아니라 막다른 길을 표현할 때 'Dead end'라고 표현을 하는데 그 때의 'Dead'와 같은 의미입니다. 그래서 Lock이 막 codesk.tistory.com 교착상태를 간단하게 말해보자면 프로세스들의 집합이 더 이상 진행을 못하고 영구적으로 블록(대기)되어 있는 상태를 얘기합니다. 교착상태가 발생하는 조건 교착상태가 발생하기 위해서는 우선..
[바미] 동적 계획법(Dynamic Programming).
·
프로그래밍(Basic)/이론
일반적으로 우리가 사용하는 "dynamic"이나 "programming"라는 단어가 있어 'Dynamic Programming' 과 관련이 있을 것 같지만 실제로는 아무련 관련이 없습니다. 동적 계획법은부분 문제를 통해 큰 문제를 재귀적으로 해결하려고 할 때 중복되는 부분 문제들이 많이 발생하여 불 필요하게 같은 계산이 반복될 때 사용됩니다. 이항 계수를 계산하는 공식은 아래와 같은 공식이 성립하게 되는데 bino(i, j) = bino(i-1, j-1) + bino(i, j-1) 위 식에 대해 생각해보면 알 수 있듯이 주어진 i과 j에 대해 두 문제로 나눠가면서 계산했을 때 밑으로 내려가면서 중복되는 식이 점점 더 많이 발생함을 알 수 있습니다. i과 j의 크기가 커질 수록 중복되는 계산 역시 많아지는..
Bami