[바미] HTTP status code
·
Networking
HTTP에서 클라이언트 요청에 대한 서버의 응답 코드에 관한 포스팅 입니다. HTTP 상태 코드란? 클라이언트가 보낸 HTTP 요청에 대한 서버의 응답 코드로, 상태 코드에 따라 요청의 성공/실패 여부를 판단합니다. HTTP 상태 코드 분류 상태 코드의 첫 번째 숫자에 따라 크게 5가지로 분류 됩니다. 1xx (Informational) : 조건부 응답 2xx (Successful) : 성공 3xx (Redirection) : 리다이렉션 완료 4xx (Client Error) : 요청 오류 5xx (Server Error) : 서버 오류 HTTP 상태 코드 상세 자주 사용되는 HTTP 상태 코드 위주로 정리하였습니다. 모든 HTTP 상태 코드를 알고 싶다면, MDN이나 위키백과를 참고해 주세요. 1xx ..
[바미] 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)란 클래스의 인스턴스나 배열을 말한다고 정의되어 있습니다. 컴퓨터 공학에서 객체는 변수, 자료 구조, 함수, 메서드, 식별자에 의해 참조된 메모리 상의 값 등을 의미합니다. 객체지향 프로그래밍에서 객체는 변수, 함수, 자료 구조의 조합이 될 수 있는데, 특히 객체지향 프로그래밍에서 클래스를 기반으로 한 변수를 클래스의 인..
[바미] 쿠키, 세션이란?
·
Networking
웹의 기초중 하나인 쿠키와 세션에 대해 알아봅니다.쿠키와 세션에 대해 알아보기전, HTTP의 특징을 알아보고 쿠키와 세션이 필요한 이유를 알아봅시다.HTTP의 특징 HTTP 통신의 특징은 Connectionless와 Stateless라고 할 수 있습니다.Connectionless(비 연결지향) 클라이언트에서 서버에 요청을 보내면 서버는 클라이언트에 응답을 하고 접속을 끊는 특성이 있습니다. (HTTP1.1에서 Connection 헤더에 keep-alive라고 설정하면 컨넥션을 유지할 수 있습니다)Stateless(상태 정보 유지 안함) HTTP 통신은 요청을 응답하고 접속을 끊기 때문에 클라이언트의 상태정보를 알 수 없습니다. 이를 Stateless하다고 합니다.만약 로그인을 하고 그 상태를 유지한 채로..
[바미] Join 시 on과 where의 차이
·
MySQL(DB)
요약 on : join 전에 조건을 필터링 where : join 후에 조건을 필터링 INNER JOIN 에서의 ON vs WHERE INNER JOIN + ON 조건절 + ON 조건절 SELECT * FROM a INNER JOIN b ON a.key = b.key AND a.key2 = b.key2 EQUI JOIN + WHERE 조건절 SELECT * FROM a AS a , b AS b WHERE a.key = b.key AND a.key2 = b.key2 INNER JOIN + ON 조건절 + WHERE 조건절 SELECT * FROM a INNER JOIN b ON a.key = b.key WHERE a.key2 = b.key2 위 세 쿼리는 모두 같은 결과, 같은 퍼포먼스가 나오게 됨. 즉,..
[바미] Java Milliseconds to Seconds 에피소드.
·
프로그래밍(Web)/업무관련
안녕하세요. 요번에 MiliSeconds to Seconds 처리하다 생긴 실수를 오답노트 삼아 글을 적어보려 합니다. 데이터의 time중에 Milliseconds형태로 들어오는 값이 있었습니다. 들어온 데이터를 들어온 데이터의 time값과 현재 시간을 비교하여 현재보다 과거인 경우 pass시키고, 현재보다 미래인 경우 처리합니다. 이게 무슨 말이냐면 현재 시간은 지금은 12시 24분 13초라고 가정했을 때 초 단위를 00초로 변경한 값을 말합니다. 즉 현재가 12시 24분 24초 일 때, 12시 24분 00초(현재시간)인 타임스탬프 값과 보다 미래인 값인 12시 24분 01초, 12시 24분 10초로 비교하는 것이죠. 00초로로 변경한 현재 시간 값은 seconds단위로 떨어지는 timestamp였고,..
[바미] Java 스케줄러 삽질기.
·
프로그래밍(Web)/업무관련
안녕하세요. 간만에 또 찾아왔습니다. 한 동안 스케줄러 때문에 삽질 아닌 삽질을 해서 스케줄러와 관련된 부분들을 나누고자 글을 올립니다. 제가 경험한 스케줄러의 형태는 2종류였습니다. 만약 매일 지정된 시간의 10분에 한 번 실행되는 스케줄러라 가정했을 때 서버 시작으로부터 10분에 실행되는 스케줄러. 지정된 시간의 10분에 실행되는 스케줄러. 였습니다. 저의 경우 매일 지정된 시간에 해야 했기 때문에 당연히 후자의 스케줄러를 추가적으로 만들어야 했습니다. 그 후엔 기존 코드에 작성되어 있는 형태대로 하루에 돌도록 만들었습니다. 그런데 매일 하루에 돌도록 설계되어 있는 스케줄러가 매일 지정된 시간에 돌지 않는 것이 였습니다. 몇 칠을 삽질하며 알게 된 것이 현재 설계되어 있는 스케줄러의 형태는 후자쪽이 ..
[바미] Java - Garbage Collection
·
프로그래밍(Basic)/이론
들어가기전에.. 안녕하세요. 하루 최소 600만건의 데이터를 처리해주는 서버를 Java(Maven)으로 개발하여 운영하고 있습니다. 서버 메모리가 점진적으로 0.1%씩 올라가는 것을 목격하게 되었고, 이를 해결하기 위해 Java 안에서 데이터들을 처리할 때 새롭게 생성하는 인스턴스를 null로 초기화를 해주었지만 여전히 메모리가 누수되는 현상이 발생되어 이 문제가 가비지 컬렉션과 관련이 있을 것 같아 찾아보던 것을 포스팅 해봅니다. Garbage Collection? 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 됩니다. C언어의 경우 free()라는 함수를 통해 직접 메모리를 해제해주어야 하지만 Java나 Kotlin을 이용해 개발을 하다 보면 JVM의 가비지 컬렉..
Bami
기록하며 성장하기