전체 글

개발이 즐거운 개발자 석이입니다~
JAVA

JVM(Java Virtual Machine)이란?

JVM(Java Virtual Machine)이란? Java Virtual Machine, 즉 자바 가상 머신은 자바 바이트코드를 실행하고자 하는 모든 하드웨어에 WORA(Write Once Run Anywhere)을 구현할 수 있도록 설계된 소프트웨어이다. 가상머신이란 프로그램을 실행시키기 위한 물리적인 하드웨어를 소프트웨어적으로 구현한 것을 의미한다. JVM은 자바 언어로 작성된 코드가 특정 플랫폼에 종속되지 않고 모든 플랫폼에 적용될 수 있도록 클래스 로더를 통해 읽어 들인 클래스 파일을 실행시킨다. Java 언어는 JVM 덕분에 특정 OS에 종속적이지 않지만 JVM은 특정 플랫폼에 따라 호환되는 JVM을 맞춰 주어야 하기 때문에 플랫폼 종속적인 성격을 띈다. JVM의 특징은 다음과 같다. 스택 기..

JAVA

JVM의 Garbage Collector 동작 원리

일러두기 본 글은 유튜브 우아한Tech의 [10분 테코톡] 👌던의 JVM의 Garbage Collector와 망나니개발자님의 티스토리 게시글 [Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2), YABOONG님의 자바 메모리 관리 - 가비지 컬렉션을 보고 해당 내용을 정리한 글입니다. JVM 자바 가상 머신(영어: Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다. 일반적으로 인터프리터나 JIT 컴파일 방식으로 다른 컴퓨터 위에서 바이트코드를 실행할 수 있도록 구현되나 jop 자바 프로세서처럼 하드웨어와 소프트웨어를 혼합해 구현하는 경우도 있다. (이론적으로는 100% 하드웨어 구현도 가능하나 비효율적이다) 자바 바이트..

JAVA

[Java] Array와 ArrayList의 차이점

Array Array(배열)의 특징 Array는 static한 자료구조. 즉, 자료구조의 길이가 고정되어 있다. Array를 선언할 때 초기값을 할당하지 않으면, 배열의 크기만큼 기본값이 채워진다. primitive type, reference type 둘 다 저장 가능하다. (ArrayList는 reference type만 가능) 다차원 설계가 가능하다. 메모리 공간에 연속적으로 저장된다. java.util.Arrays 클래스에 구현되어 있는 배열을 지원하는 추가 기능이 존재하기는 하지만, 순수한 배열의 경우에는 특정 원소에 대한 읽기와 쓰기, 배열의 길이에 대한 것만 지원한다. Array(배열)의 장점 인덱스 연산자를 사용할 수 있기 때문에, 특정 원소에 접근하고, 수정하는 시간복잡도가 O(1)이다...

자료구조

자료구조 : Stack과 Queue 그리고 Tree와 Heap

국비학원 수업이 거의 끝나고 본격적으로 취업전선에 뛰어들자 자료구조와 알고리즘과 같은 기초적인 Computer Science가 매우 중요하다는 사실을 절감하게 됐다. 단순히 취업을 위해서가 아니어도 더 높은 수준의 퍼포먼스를 낼 수 있는 개발자가 되기 위해서는 이런 부분에 대한 지식이 필요하다고 판단, cs 지식을 공부할 수 있는 스터디를 하게 되었다. 이 글은 이번주 스터디를 준비하며 정리한 내용. Stack (스택) stack 1.명사 (보통 깔끔하게 정돈된) 무더기[더미] (→haystack) 2.명사 비격식 특히 英 많음, 다량 3.동사 (깔끔하게 정돈하여) 쌓다[포개다]; 쌓이다, 포개지다 4.동사 (어떤 곳에 물건을 쌓아서) 채우다 사전에 stack을 검색해보면 저런 결과를 얻을 수 있다. '..

코딩 문제

[백준 1018번] 체스판 다시 칠하기 - Java

시간 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 58224 27013 21810 46.597% 문제 지민이는 자신의 저택에서 MN개의 단위 정사각형으로 나누어져 있는 M×N 크기의 보드를 찾았다. 어떤 정사각형은 검은색으로 칠해져 있고, 나머지는 흰색으로 칠해져 있다. 지민이는 이 보드를 잘라서 8×8 크기의 체스판으로 만들려고 한다. 체스판은 검은색과 흰색이 번갈아서 칠해져 있어야 한다. 구체적으로, 각 칸이 검은색과 흰색 중 하나로 색칠되어 있고, 변을 공유하는 두 개의 사각형은 다른 색으로 칠해져 있어야 한다. 따라서 이 정의를 따르면 체스판을 색칠하는 경우는 두 가지뿐이다. 하나는 맨 왼쪽 위 칸이 흰색인 경우, 하나는 검은색인 경우이다. 보드가 체스판처럼 칠해져 있다는 보장..

코딩 문제

[백준 1929번] 소수 구하기 (에라토스테네스의 체) - Java

시간 제한메모리 제출 정답 맞힌 사람 정답 비율 2 초 256 MB 144964 40637 28686 26.791% 문제 M이상 N이하의 소수를 모두 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다. 출력 한 줄에 하나씩, 증가하는 순서대로 소수를 출력한다. 예제 입력 1 3 16 예제 출력 1 3 5 7 11 13 고려해야 할 알고리즘 위 문제는 에라토스테네스의 체라는 이름의 알고리즘을 통해 구현하면 쉽게 정답을 맞출 수 있다. 에라토스테네스의 체는 대량의 소수를 빠르게 찾을 수 있는 방법으로 고대 그리스 수학자 에라토스테네스가 발견했다. 이 알고리즘은 소..

메모 & 삽질기록보관소

[메모] 배포 관련 리눅스 명령어

리눅스가 익숙치 않아서.. 프로젝트 진행시 자주 사용했던 명령어를 적어둔다. 1. 실행중인 포트 pid 죽이기 fuser -k [port]/tcp ex) 8080 포트를 사용하는 pid를 죽이고 싶어! -> fuser -k 8080/tcp 2. 경로 내 모든 파일 삭제 rm * 3. 배포 nohup java -jar /home/ec2-user/[이하 경로 - 프로젝트 위치까지]/build/libs/[빌드한 파일명].jar & nohup을 쓰면 터미널이 끊켜도 실행한 프로세서가 계속 실행된다고 한다! 뒤에 &를 붙이는 이유는 백그라운드로 실행시키기 위함이라고 함! 참고로 nohup을 실행시키면 (아마도 명령어를 실행한 위치에?? 정확하지 않음) nohup.out이라는 파일이 생성되는데, 여기에 로그가 찍힘..

메모 & 삽질기록보관소

[EC2 - 서버 배포] TemplateInputException

프로젝트를 완성해 EC2에 서버를 배포했다. 깃허브를 연동해 EC2 리눅스에 프로젝트를 내려 받고 성공적으로 JAR 파일을 빌드하는데 성공했다. (여기까지도 2-3시간 걸린듯 하다. gradle이 빌드시에 롬복을 인식하지 못하는 상황이 발생해서 build.gradle에 아래와 같이 조치를 취한 후 아래와 같은 명령어로 빌드를 수행했다.) /** 에러가 발생하는 build.gradle */ ... implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' ... /** 빌드 시에 롬복을 발견하지 못하는 에러를 해결한 build.gradle */ ... implementation 'org.springframework.boot:spring-..

메모 & 삽질기록보관소

JPA와 서브쿼리 (JPA 서브쿼리의 한계)

발단 지금까지 공부했던 자바, 스프링, 데이터베이스 등을 온전히 내 것으로 소화하고자 개인 프로젝트를 하나 진행하고 있다. 상품을 게시하고, 그 상품을 구매할 수 있는 간단한 웹사이트를 만들고 있는데 상품을 구현하는 부분에서 서브쿼리를 써야 하는 상황이 발생했다. 그와 관련된 자세한 내용은 다음과 같다. 참고로 데이터베이스는 MariaDB를, jdbc 라이브러리(맞는 표현인가..?)는 JPA 하이버네이트를 사용하고 있었다. ( + 스프링 데이터 JPA를 사용하지 않고 EntityManager를 직접 사용하여 데이터베이스 매핑 로직을 구현하고 있었다 ) 상황 상품 테이블과 리뷰 테이블이 존재했다. 상품 테이블과 리뷰 테이블은 1:N으로 묶여 있었다. Foreign Key는 리뷰 테이블에 ITEM_ID라는 ..

Spring Framework/스프링 시큐리티

[스프링 시큐리티 - 인증] 공식문서 번역하며 공부하기 - 서블릿 인증 아키텍처

일러두기 본 글은 스프링 공식 페이지의 Servlet Authentication Architecture 절을 한국어로 번역한 자료입니다. 전문적인 교육을 받은 번역가가 번역한 글이 아니기 때문에 다소의 번역 실수가 있을 수 있습니다. (아마 많을..) 해당 기능에 대해 전문적인 지식을 갖춘 엔지니어가 아니라, 스프링 시큐리티를 처음 공부하는 학생이 작성한 글이기 때문에 번역 간의 다수의 오역과 의역이 있을 가능성이 있습니다. 번역이 매끄럽지 못하다고 판단되는 부분은 파란색으로 원본 문장을 첨부하여 원본을 확인할 수 있도록 하였습니다. 원본 출처 https://docs.spring.io/spring-security/reference/servlet/authentication/architecture.html ..

석이
기록으로 채워가는 개발자 이야기