프로그래밍(Basic)/이론

    [바미] On-premises와 Off-premises

    안녕하세요. 오늘은 온-프레미스와 오프-프레미스에 대해 알아보겠습니다. IT 인프라 및 서비스의 배치 및 관리 위치에 관한 용어이면서 데이터, 애플리케이션, 서비스 등을 호스팅하는 방법을 어떻게 선택할 것인가?를 의미합니다. Premises? Premises는 특정한 물리적 장소나 부지를 의미합니다. IT 관점에서 보았을 때 On-premises는 조직의 내부 네트워크 및 물리적 공간 내에서 인프라와 서비스가 관리되고 실행되는 것을 말하고, Off-premises는 외부에 위치한 인프라(대개 클라우드 서비스 제공자의 데이터 센터)에서 관리되고 실행되는 것을 의미합니다. 이제 이 두개에 대해 자세히 살펴보겠습니다. On-premises 조직이 자체 데이터 센터에 서버와 인프라를 두고 직접 관리하는 방식을 ..

    [바미] SSR과 CSR

    브라우저 렌더링 먼저 브라우저 랜더링이란 브라우저가 서버로부터 요청해 받은 내용을 브라우저 화면에 표시해주는 작업을 말합니다. 브라우저가 서버로부터 HTML, CSS, JS 문서를 전달받아 브라우저 엔진이 각 문서를 해석해 브라우저 화면을 그려주는 것이죠. 예를 들어, 아무 브라우저에 접속해서 주소창에 https://www.naver.com/ 을 입력한다면 브라우저는 네이버 서버로부터 네이버 웹사이트에 대한 정보를 받아 브라우저 화면에 네이버 홈페이지를 그려 주게 되는 것이죠. 그리고 이러한 브라우저 렌더링은 크게 ' 서버 사이드 렌더링'과 ' 클라이언트 사이드 렌더링' 방식으로 나누어 지죠. 서버 사이드 렌더링 서버 사이드 렌더링은 클라이언트(브라우저)가 서버에 매번 데이터를 요청하여 서버에서 처리하는..

    [바미] WebSocket과 Socket.io차이는 무엇일까?

    들어가기전에.. Socket.io와 WebSocket 모두 실시간 양방향 통신을 가능하게 하는 기술인데요. 지금 다니는 회사에서는 Socket.io를 주로 사용하고 있어요. 처음 Socket.io를 공부할 때 WebSocket에 대해 먼저 공부했고, 그 당시에는 Socket.io를 사용하기 위해 공부할 때는 단순히 'room'의 개념 여부로만 알고 있었어요. 하지만 그 외에도 차이가 존재하는 것을 발견하여 리마인드 할 겸 정리해보려해요. 프로토콜의 차이점 Websocket은 TCP 소켓을 사용한 HTTP와 독립적인 프로토콜로, 양방향 통신을 제공해요. 브라우저에서 WebSocket을 지원하는 경우, 서버와의 연결을 유지한 상태로 언제든지 데이터를 주고받을 수 있죠. 반면에 Socket.io는 WebSoc..

    [바미] 다수의 요청에 의해서 데이터를 CRUD 원활하게 관리하기.

    안녕하세요. 오늘은 다수의 요청에 의해서 데이터를 CRUD하는 경우 어떻게 원활하게 관리하면 좋을 지 몇 가지 방법을 가지고 다뤄보도록 하겠습니다. 추가적으로 다른 방법도 댓글로 알려주시면 감사하겠습니다 ^_^ 데이터베이스 스케일링 데이터베이스 스케일링: 대용량의 요청에 대응하기 위해 데이터베이스를 스케일링 하는 방법 [바미] 데이터 베이스 스케일링 데이터베이스 스케일링은 데이터베이스 용량을 증가하거나 그로 인한 성능 향상을 위한 기법입니다. 데이터베이스 스케일링은 일반적으로 수직 스케일링 (Vertical Scaling), 수평 스케일링 (Horizonta codesk.tistory.com 데이터베이스 분산: 대용량의 요청에 대응하기 위해 데이터베이스를 분산하는 방법 [바미] 데이터 베이스 분산 방법 ..

    [바미] IPC

    IPC? 프로세스 간에 통신하여 프로세스 간에 데이터를 주고받는 방식을 말합니다. 프로세스끼리 직접적으로 '대화'하는 방법은 없습니다. 왜 그렇냐면 프로세스들이 서로 공간을 쉽게 접근하면 프로세스의 데이터나 코드가 다른 프로세스에 의해 쉽게 바뀔 수 있기 때문인데 제가 만든 작고 소중한 코드가 나쁜 해커놈들이 만든 프로그램으로 인해 조작되서 중요한 데이터를 뺏기면 마음도 아프고 그렇겠죠? 이를 막기 위해 프로세스는 통신을 직접적으로 할 수가 없고, 서로의 공간을 접근할 수가 없어요. 그래도 프로세스 간의 커뮤니케이션은 필요하기 때문에 나온 기법이라 할 수 있죠. 통신(커뮤니케이션)이 필요하다는데, 왜죠? 성능을 높이기 위해 존재해요. 어떤 로직을 하나의 프로세스로만 수행하는 대신, 여러 프로세스가 수행해..

    [바미] 코드 리펙토링(Code Refactoring)에 대해서

    소프트웨어 공학에서 리팩토링(refactoring)은 '결과의 변경 없이 코드의 구조를 재조정함'을 뜻합니다. 더 정확히 얘기하면 주로 가독성을 높이고 유지보수를 편하게 하는 것. 버그를 없애거나 새로운 기능을 추가하는 행위는 아님. 사용자가 보는 외부 화면은 그대로 두면서 내부 논리나 구조를 개선하는 유지보수 행위. 로 얘기 할 수 있습니다. 쉽게 얘기하면 현재 코드의 동작은 그대로 유지하면서 더 이해하기 쉽고, 생각하기 쉽고, 확장하기 쉽게끔 재구성하는 것을 말하는 것이죠. Refactoring 목적 리팩토링의 목적은, 소프트웨어를 더 이해하기 쉽고 수정하기 쉽게 만드는 것에 있습니다. 리팩토링은 성능을 최적화시키는 것이 아닌 코드를 신속하게 개발할 수 있게 만들어주고, 코드 품질을 좋게 만들어주는 ..

    [바미] Object, Class, Instance.

    개발을 하다 보면 정말 자주 듣고 보고 말하고 쓰게 될 말이 위 3개 입니다. 간혹 물어보면 정확히 답변 못하는 경우가 많은데 오늘은 객체, 클래스, 인스턴스에 대해 알아보도록 하겠습니다. An object is a class instance or an array. 제임스 고슬링이 작성한 자바 언어 설명서 (The java Language Specification)에는 객체(object)란 클래스의 인스턴스나 배열을 말한다고 정의되어 있습니다. 컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미합니다. 객체지향 프로그래밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인..

    [바미] 쿠키, 세션이란?

    웹의 기초중 하나인 쿠키와 세션에 대해 알아봅니다. 쿠키와 세션에 대해 알아보기전, HTTP의 특징을 알아보고 쿠키와 세션이 필요한 이유를 알아봅시다. HTTP의 특징 HTTP 통신의 특징은 Connectionless와 Stateless라고 할 수 있습니다. Connectionless(비 연결지향) 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성이 있습니다. (HTTP1.1에서 Connection 헤더에 keep-alive라고 설정하면 컨넥션을 유지할 수 있습니다) Stateless(상태 정보 유지 안함) HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없습니다. 이를 Stateless하다고 합니다. 만약 로그인을 하고 그 상태를 유..

    [바미] Java - Garbage Collection

    들어가기전에.. 안녕하세요. 하루 최소 600만건의 데이터를 처리해주는 서버를 Java(Maven)으로 개발하여 운영하고 있습니다. 서버 메모리가 점진적으로 0.1%씩 올라가는 것을 목격하게 되었고, 이를 해결하기 위해 Java 안에서 데이터들을 처리할 때 새롭게 생성하는 인스턴스를 null로 초기화를 해주었지만 여전히 메모리가 누수되는 현상이 발생되어 이 문제가 가비지 컬렉션과 관련이 있을 것 같아 찾아보던 것을 포스팅 해봅니다. Garbage Collection? 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 됩니다. C언어의 경우 free()라는 함수를 통해 직접 메모리를 해제해주어야 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 JVM의 가비지 컬렉..