일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- computer science
- 컨테이너
- CS
- 웹 서버
- 데이터베이스
- ORM
- 스프링 부트
- Container
- mysql
- spring cloud
- spring boot
- 스프링
- Java
- virtualization
- CI/CD
- 스프링 시큐리티
- 배포
- 자바
- JPA
- Spring
- 스프링 배치
- vm
- 백엔드
- 영속성 컨텍스트
- web server
- 도커
- spring batch
- HTTP
- 가상화
- Spring Security
- Today
- Total
목록Java (14)
개발 일기

→https://ai-back-end.tistory.com/119 [Java] JVM 메모리 구조(Method-Static, Heap, Stack)그전에 JVM에 대해 다시 떠올려보자. JVM 이란 Java Virtual Machine의 약자이며, 자바 가상 머신이라고 한다.자바 애플리케이션을 실행하기 위한 가상 환경자바 바이트코드(.class 파일)를 특정 운ai-back-end.tistory.com이전에 작성했던 블로그에서 단순히 JVM안에만 갇혀서 생각했다가 타 프로그램이 실행됐을때와 뭔가 다르다는걸 알게됐다.프로그램이 실행될 때 소스 코드나 실행 파일이 가상 메모리를 거쳐 RAM에 로드되고, 그 과정에서 변수들이 메모리 영역(Code, Heap, Data, Stack)에 로드된다고 했는데 Java..
Array 배열에서의 정렬 - 단일 기준// 오름차순 정렬int arr[] = {5,3,2,4,1};Arrays.sort(arr); // [1,2,3,4,5]// 내림차순 정렬Integer arr[] = {5,3,2,4,1};Arrays.sort(arr, Collections.reverseOrder()); // [5,4,3,2,1]그러나 위 코드에서도 알 수 있듯이 내림차순 정렬의 Collections.reverseOrder()는 객체 형태에게만 가능하기 때문에 기본형인 int가 아닌 참조형 변수 즉, 객체 타입인 Integer배열로 선언한 것을 알 수 있다. 그래서 아래와 같이 처리할 수 있긴한데 그래도 코드가 길고 번거로워진다.int arr[] = {5,3,2,4,1};Integer[] temp = ..

스택(Stack)Stack은 LIFO(Last In First Out) 구조로 되어 있으며, 쉽게 해석하면 "후입 선출" 입니다. 즉, 마지막(최근)에 넣은 것을 먼저 뺀다는 말이다.그렇다면 어떠한 자료구조를 통해서 스택을 다룰 수 있을까? 스택은 순차적으로 데이터를 추가하고 삭제하기 때문에 ArrayList와 같은 배열기반의 컬렉션 클래스가 적합하다.java.util에서 Stack.class를 제공하고 있다. 아래는 Stack class의 관련 메소드들이다.메서드설명boolean empty()Stack이 비어있는지 알려준다.Object peek()Stack의 맨 위에 저장된 객체를 반환.pop()과는 달리 Stack에서 객체를 꺼내지는 않는다.( 비었다면 EmptyStackException발생 )Obj..

자료구조(Data Structure)란?컴퓨터 프로그램에서 데이터를 효율적으로 저장하고 관리하기 위해 설계된 구조로 Array, List, Map 등이 대표적이다.배열(Array)배열은 인덱스와 값을 일대일 대응해 관리하는 자료구조데이터를 저장할 수 있는 모든 공간은 인덱스와 일대일 대응하므로 어떤 위치에 있는 데이터든 한 번에 접근할 수 있다.일반적으로 배열은 선언할때 크기가 고정특정 인덱스에 있는 데이터를 읽거나 변경하는 데 O(1)의 시간 복잡도데이터를 순차적으로만 접근할 수 있어 위치를 모르는 경우 효율이 떨어짐.배열에 들어가는 데이터는 모두 동일한 자료형 이어야 함.배열 중간에 값을 추가하려면 기존 데이터를 모두 이동시켜야 함.// 1차원 배열int[] arr = {0, 0, 0, 0, 0, 0..

알고리즘 문제를 풀어보면 제한 시간이 있는 것을 확인할 수 있다. 시간 복잡도 (Time Complexity)알고리즘에서 시간 복잡도는 주어진 문제를 해결하기 위한 '연산 횟수'로 잡는다. 즉, 소요되는 기본 연산 수에 의거하여 시간복잡도가 계산되는데 여기서 주요 기본 연산으로는 데이터의 비교, 덧셈, 곱셈, 나눗셈 등이 있다.일반적으로 수행 시간은 1억번의 연산을 1초로 잡는다.알고리즘의 성능을 나타내는 지표로, 입력 크기에 대한 연산 횟수의 상한을 의미합니다. 시간 복잡도는 낮으면 낮을 수록 좋다.그런데 이러한 생각이 들었다. '예를들어 1차원 배열의 경우 탐색하고자하는 배열마다 만약 찾고자하는 값이 index 0에 있냐 아님 배열의 가장 마지막 Index에 위치하냐에 따라 연산 횟수가 달라지지 않나..

코테에서 터미널에서 입력받는 로직을 처리해야하는 경우가 있다. 크게 Scanner 클래스와 BufferedReader 클래스를 통해 처리할 수 있을텐데 이 두개를 중심으로 정리해보고자 한다.ScannerScanner란 사용자로 부터 입력을 받을 수 있도록 도와주는 것으로 콘솔창에서 입력이 필요할때 사용java.util.Scanner 패키지에 포함상대적으로 BufferedReader에 비해서 사용하기 용이한 메서드들을 클래스에서 많이 제공데이터를 파싱하기 위해서 내부적으로 정규 표현식 등을 사용하여 BufferedReader에 비해 내부적으로 복잡한 과정을 거쳐 처리 시간이 더 오래 걸린다. ➜ "작은 접시를 가지고 계속 오가며 음식을 조금씩 담아요"라고 타 블로그에서 설명했다.입력량이 고정되어 있고, ..

정리하게된 계기스프링 부트를 쓰게되면서 접근 제어자를 고민할때가 정말 많다. 그러나 사실 정확히 알지 못하고 그냥 때려맞추거나 Best Practice를 무작정 매번 따라 가려고한다. 근데 정확히 왜 이게 주로 이렇게 접근 제어자를 설정하는지 이해하면서 개발을 진행하고 싶고 그러기 위해서는 접근 제어자에 대해서 잘 알고 있어야한다는 판단이 섰다. 그래서 정리해보게 됐다.접근 제어자(Access Modifier)란?자바에서 접근 제어자는 클래스와 클래스의 멤버인 필드, 메소드, 생성자를 생성할 때 외부에서 접근할 수 있는 범위를 제한해주는 장치이다.크게 클래스의 접근 제어자와 클래스 멤버의 접근 제어자 이렇게 두가지로 나누어서 고려해볼 수 있다. 클래스의 접근 제어자클래스를 정의할 때 지정 가능한 접근 ..

프록시 프록시를 이해하고 아래의 즉시로딩 지연로딩에 대해서 이해할 수 있다. 우선 왜 프록시가 쓰이는가? Member를 조회할 때 Team도 함께 조회해야 하는가? // 1. 회원과 팀 함께 출력 public void printUserAndTeam(String memberId) { Member member = em.find(Member.class, memberId); Team team = member.getTeam(); System.out.println("회원 이름: " + member.getUsername()); System.out.println("소속팀: " + team.getName()); } // 2. 회원만 출력 public void printUserAndTeam(String memberId) ..