본문 바로가기

전체 글

(47)
JVM 구조 JVM(Java Virtual Machine) 이란 JVM(Java Virtual Machine)은 자바 프로그램 실행환경을 만들어 주는 소프트웨어이다. 자바 코드를 컴파일하여 .class 바이트 코드로 만든 후 실행시키면 이 코드가 JVM 환경에서 실행된다. 이렇듯 JVM이 자바와 OS 사이에서 중개자 역할을 하기 때문에 자바는 OS에 구애 받지 않는다. JVM의 구성 요소 Class loader System 클래스 로더는 컴파일 된 바이트코드(*.class)를 실행시점(RunTime)에 읽어들여서 메모리(Runtime Data Area)에 적절하게 배치한다. 작업은 로딩 -> 링크 -> 초기화 순서로 일어난다. 로딩 : 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 ..
암호화 알고리즘(MD5, SHA) 회원가입 기능을 구현할 때 사용자의 PW를 평문으로 저장한다면 보안상 큰 문제가 발생한다. 이를 막기 위해서는 사용자의 PW를 암호화해 저장해야만 한다. 오늘은 프로그램을 짤 때 필수적으로 사용되는 암호화 알고리즘에 대해 간단히 알아보고자 한다. 단방향 해시 함수 해시 함수는 입력 값을 문자와 숫자를 임의로 나열한 일정한 길이의 다이제스트(Digest)형태로 변환시킨다. 여기서 다이제스트란, 해시함수를 통해 생성된 해시 값을 의미한다. 해시 함수는 단방향 알고리즘 이므로 암호화는 가능하지만 복호화는 불가능하여 원본을 알 수 없다. 이와 같은 이유로 패스워드를 바로 데이터베이스에 저장하지 않고 단방향 암호화된 다이제스트를 저장하는 방식이 보편화되었다. 대표적인 단방향 해시 함수로는 MD5와 SHA가 있다...
POJO (Plain Old Java Object) 처음 POJO(Plain Old Java Object)라는 개념을 접했을 당시에는 ‘평이하고(아무것도 꾸며지지 않은) 오래된 자바 객체’ 라는 개념이 왜 존재해야 하는지 그 이유를 몰랐다. 하지만 시간이 지나고 스프링이라는 프레임워크에 익숙해질수록 이 POJO라는 개념이 얼마나 중요한지 점차 깨닫게 되었다. 오늘은 POJO라는 개념이 구체적으로 어떤 것을 의미하고 왜 중요한지 그 이유를 알아보고자 한다. POJO 라는 단어의 탄생 POJO는 2000년 9월에 마틴 파울러(Martin Fowler), 레베카 파슨스(Rebecca Parsons), 조쉬 맥킨지(Josh MacKenzie) 가 사용하기 시작한 용어로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 무거운 객체..
KERNEL 최근 들어 문득 커널이 운영체제의 핵심인 것은 알고 있으나 커널이 구체적으로 무엇이고 어떤 식으로 작동하는지 설명하기는 어렵다는 생각이 들었다. (물론 배우고 난 다음 시간이 지나면서 까먹은 게 가장 큰 원인이지만) 오늘은 커널의 개념과 그 작동 원리에 대해서 공부한 내용을 정리해 보고자 한다. 컴퓨터 구성 요소 컴퓨터를 구성하는 요소는 H/W와 S/W고 S/W는 다시 Kernel과 Application으로 나뉜다. 이러한 관점으로 볼 때 컴퓨터는 H/W, Kernel(S/W), Application(S/W) 로 이루어진 3층 집이라고 볼 수 있다. Kernel 이란 커널은 컴퓨터 운영체제의 핵심이 되는 프로그램으로 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리..
DB INDEX 첫 회사에 재직할 당시 은근 자주 들었던 얘기가 있다. “뭐가 문제야?”“이거 쿼리가 인덱스를 안 타는 것 같아요. 인덱스 설정이 안되어 있나?” 특정 데이터를 가져오기 위해 쿼리를 작성하는 사람들은 이 인덱스라는 것이 얼마나 중요한지 잘 알고 있을 것이다. 만약 DB 데이터가 적다면 인덱스는 반드시 필요하지 않을 수도 있다. 하지만 DB에 데이터가 어느정도 쌓이게 되면 인덱스는 더 이상 옵션이 아니라 필수가 된다. 오늘은 이러한 인덱스가 구체적으로 어떤 것이며 어떠한 방식으로 작동하는지 알아보고자 한다.  INDEX란 인덱스란 데이터베이스의 테이블에 대한 검색 속도를 향상시켜주는 자료구조이다. 테이블의 특정 컬럼(Column)에 인덱스를 생성하면, 해당 컬럼의 데이터를 정렬한 후 별도의 메모리 공간에 ..
HTTP 버전별 차이 며칠 전 평소 친하게 지내던 개발자 선배로부터 이런 얘기를 들었다. “근데 너 HTTP 버전이 3.0 까지 나온 거 알고 있어?”“예?” 내가 기억하는 HTTP는 2.0이 마지막 버전인 줄 알았는데 어느새 다음 버전이 나왔다니 다소 당혹스러웠다. 웹 서비스를 다루는 개발자로서 이런 부분을 모르고 있었다니…하지만 모르는 게 있으면 찾아서 배우고 부족한 부분을 메꿔나가면 될 일. 선배와 통화를 마친 후 부랴부랴 관련 내용을 찾아보았다.  오늘은 공부하면서 알아낸 내용을 기반으로 HTTP가 시대를 거치며 어떤 방식으로 변화했는지 알아보고자 한다.  HTTP란 HTTP란 Hypertext Transfer Protocol 의 약자로 하이퍼텍스트를 전송하는 프로토콜이다. 여기서 하이퍼텍스트란 하이퍼링크를 통해 병렬..
에러(Error)와 예외(Exception) try-catch 문에 Exception 처리 과정을 만들고 특정 메소드에서 throws Exception 처리를 하는 건 대부분의 자바 개발자 분들에게는 익숙한 광경입니다. 그런데 정작 예외 처리 방법은 알고 있으면서 에러나 예외의 개념에 대해서는 다소 두루뭉술하게 알고 있는 경우가 많습니다. 오늘은 에러와 예외의 개념을 좀 더 명확하게 짚어보고자 합니다. 에러(Error) 자바에서 에러란 자바 프로그램 밖에서 발생한 문제로 인해 응용프로그램 실행 오류가 발생하는 것을 의미합니다. OS에 문제가 발생해 응용 프로그램에 문제가 발생하는 경우가 이에 해당한다고 볼 수 있습니다. 에러는 아무리 프로그램을 견고하게 만든다 한들 개발자가 직접 대처할 수 있는 방법이 없습니다. 예외(Exception) 잘못된 사..