☕️ JAVA
![[WhiteShip Java LIVE Study] 1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2FcrVsoR%2FbtqOKYTWtkd%2FAAAAAAAAAAAAAAAAAAAAAPLOxDvXUzR71LIzaF2GOr2WpZs16KMkpqHuV61oggX_%2Fimg.jpg%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1756652399%26allow_ip%3D%26allow_referer%3D%26signature%3DIPcS10OcowNeyxmk2dNiijIdIO4%253D)
[WhiteShip Java LIVE Study] 1주차 : JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가
목표 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기. 학습할 것 JVM이란 무엇인가 컴파일 하는 방법 실행하는 방법 바이트코드란 무엇인가 JIT 컴파일러란 무엇이며 어떻게 동작하는지 JVM 구성 요소 JDK와 JRE의 차이 JVM이란 무엇인가 JVM(Java Vertual Machine)은 운영 체제와 자바 바이트코드(Java Bytecode)의 사이에서 자바 바이트코드를 해석해 모든 운영 체제에서 동일하게 동작하도록 하는 가상 머신이며, OS별로 각각 제공되는 JVM이 자바 바이트코드를 기계어로 해석해 동작하도록 해줍니다. 때문에 우리가 작성하는 자바 프로그램은 OS에 상관없이 JVM만 설치되있다면 동일한 코드로 동일한 동작을 할 수 있는 것입니다. JVM의 구조 Class Loade..
BufferedReader 가 Scanner 보다 빠른 이유
애매하게 시간이 날 때 알고리즘 문제를 푸는 습관을 들여보고있다. 그렇다 또 일을 벌인거다. 입출력 문제부터 풀어보고 있는데, BufferedReader를 사용한 코드가 Scanner를 사용한 코드보다 배로 빠른 것을 보고 포스팅을 하게 되었다. 왜 BufferedReader가 Scanner보다 빠를까? Scanner A simple text scanner which can parse primitive types and strings using regular expressions. A Scanner breaks its input into tokens using a delimiter pattern, which by default matches whitespace. The resulting tokens ma..
Enum을 사용해보자
요즘 1일 1커밋을 목표로 사이드 프로젝트를 진행중입니다. 애견샵을 관리하는 사이트를 만드는 프로젝트인데, 개 품종, 결재 수단 같은 거의 반 고정적이면서 비즈니스 로직에서 활용하는 데이터가 존재해 어떻게 처리를 할 지 고민하다 Enum을 사용해 처리를 했죠. 그 과정을 아래에 정리해봤습니다. 왜 Enum 을 사용했냐면... 맨 처음 생각한 방법은 데이터별 코드 테이블을 만들어 사용하는 방법이었습니다. 현재 회사에서 같은 방식으로 구성중이라 가장 먼저 생각난 방법입니다. 그러나 같은 이유로, 단점 또한 바로바로 생각이 났죠. 데이터를 활용하기 위해서는 반드시 DB를 조회해와야 합니다. 실제 비즈니스 로직의 코드 상에는 코드 값이 사용되고있어, 이 값이 의미하는 것을 바로 이해하기 어려웠습니다. 만약 코드..
WebSocketSession에서 HttpSession를 얻는 방법
개발 환경 JDK : Oracle JDK 1.8 WS : Apache 2.4 WAS : Apache Tomcat 9 웹 소켓을 이용해 채팅 프로그램을 만들었는데, 채팅 UI에서 사용자 이름을 표현하거나 채팅 로그를 남길 때 HttpSession에 저장해둔 로그인 사용자 정보를 이용하고 싶어서 구현해보았습니다. 우선 알아두어야할 것은 아래와 같습니다. 웹 소켓 세션과 서블릿 세션은 다릅니다. 때문에, 웹 소켓 세션에서 우리가 흔히 이야기하는 세션(HttpSession)에 접근할 수가 없습니다. 00. 사전 준비 우선 Apache에 웹 소켓 통신을 위한 세팅을 해주어야합니다. 아파치 설치경로/conf/httpd.conf 파일을 열어 아래 모듈들을 로드해주세요. 아마 대부분 작성이 되어있고 주석을 해제하시면 ..
Spring AOP와 AspectJ 비교하기
Thanks to @ㅅㅈㅎ 님 덕분에 3-5 첫번째 문장의 오타를 수정했습니다. 감사합니다! (더 간편합니다다. ⇢ 더 간편합니다.) @김성수 님 덕분에 3-2. Weaving의 오타를 수정했습니다. 감사합니다! (컴파일 전 weaving ⇢ 컴파일 후 weaving) 0. 번역본에 대한 설명 오역/의역/직역 다수 존재합니다. 기술 용어 혹은 명칭, 주요 컨셉을 의미하는 용어는 번역하지 않고 영문 그대로 유지했고 파란색 글씨로 강조했습니다. 본문 내용 외 내용 이해를 위한 추가 정보는 초록색 글씨로 작성했습니다. 원문 : https://www.baeldung.com/spring-aop-vs-aspectj 1. 들어가며 요즈음 여러 AOP 라이브러리는 아래 요건을 충족해야만 합니다. 자신의 현재 혹은 새 ..
이미지를 BLOB 형태로 DB에 저장하기
이미지를 BLOB 형태로 DB에 저장하기 요즘은 잘 사용하지 않는 방식이지만, DB 컬럼에 이미지나 파일을 저장하는 경우가 있다. 아무래도 자주 사용되는 방식도 아니고, MyBatis를 이용해 데이터를 삽입하는 방법은 나도 잘 몰랐기 때문에 포스팅해본다. 주요 로직은 아래와 같다.1. 서비스단에서 주어진 파일 경로를 바탕으로 파일 객체를 만든다.2. 파일 객체로 이미지를 byte 배열 형태로 변환한다.3. MyBatis를 통해 데이터를 삽입, 수정한다. 위 로직을 보았을 때 한 가지 의문점이 생길 수도 있다. DB 컬럽 타입은 BLOB인데 왜 byte 배열로 변환하는것일까? 이유는 MyBatis의 typeHandlers에 있다. 아래 사진을 보면 알 수 있듯이, Java의 byte[]을 JDBC의 BLO..