리액트도 Spring Boot의 application-dev.properties, application-prod.properties 처럼 각각 실행 환경에서 다른 설정을 사용하고 싶을 때 하는 설정 방법이 있다. development 환경에서 http://localhost:8080을 production 환경에서 https://api.seogineer.com를 사용해서 동적으로 각 profile 마다 다른 URL을 사용하고 싶었다. 프로젝트의 root 경로에 .env.development, .env.production 파일을 생성하고 각 profile에 맞는 URL을 입력한다. 이때, 호출할 때 사용하는 이름은 접두사 REACT_APP_로 시작하여야 한다.# .env.developmentREACT_APP..
스레드(thread)란? 명령문이 순서대로 하나씩 처리되는 것. 즉, 프로그램의 실행 흐름. 멀티스레드 프로그램(multi-thread program)이란? 둘 이상의 실행 흐름을 갖는 프로그램. 멀티스레드 프로그램의 작동 방식 메인 스레드만 프로그램이 시작되면 자동으로 시작되고, 다른 스레드들은 메인 스레드에서 만들어서 시작한다. 메인 스레드가 끝나더라도 다른 스레드는 끝나지 않고 실행을 계속할 수 있다. 스레드는 동시에 실행되는 것이 아니라 자바 가상 머신이 스레드를 번갈아 실행한다. 멀티스레드 프로그램의 작성 방법 1. Thread 클래스를 이용하는 방법 class AlphabetThread extends Thread { public void run () { for (char ch = 'A'; ch
Exception 종류 RuntimeException이 checked exception과 unchecked exception을 나누는 기준으로서 RuntimeException과 서브 Exception은 모두 unchecked exception에 속하고 나머지는 모두 checked exception에 속한다. checked exception 반드시 try-catch 문으로 처리해야 하는 예외 예) IOException, FileNotFoundException unchecked exception 반드시 처리해야 할 필요가 없는 예외 예) RuntimeException, NullPointerException, ArithmeticException Exception 클래스의 메소드 getMessage() exce..
String 클래스에 대한 학습 테스트 요구사항1 "1,2"을 , 로 split 했을 때 1과 2로 잘 분리되는지 확인하는 학습 테스트를 구현한다. "1"을 , 로 split 했을 때 1만을 포함하는 배열이 반환되는지에 대한 학습 테스트를 구현한다. @Test @DisplayName("요구사항1 - 1") void test1_1(){ String target = "1,2"; String[] temp = target.split(","); assertThat(temp).contains("1", "2"); } @Test @DisplayName("요구사항1 - 2") void test1_2(){ String target = "1"; String[] temp = target.split(","); assertTha..
자료구조란? 데이터를 추가, 삭제, 검색에 있어서 효율적으로 사용할 수 있도록 구조를 만들어서 저장해 둔 것 모든 자료구조 클래스에는 래퍼런스 타입의 데이터만 저장할 수 있다. java.util 패키지에 속하는 JDK 라이브러리의 자료구조 클래스들 자료구조 클래스 이름 리스트 ArrayList, LinkedList, Vector 스택 LinkedList, Stack 큐 LinkedList 해쉬 테이블 HashMap, Hashtable 집합 HashSet List 데이터를 일렬로 늘어놓은 자료구조 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조 선언 // ArrayList 선언 // 인덱스로 데이터 항목을 찾는 일이 많은 프로그램에서 유리함 ArrayList list = new ArrayList()..
얼마전 동료한테 디버깅 요청을 받았다. 어떤 값을 받아서 크기를 비교해서 예외를 처리하는 구문이었는데 테스트를 진행하면 예상과 반대의 결과가 나왔다. 나는 1초만에 감이 왔다. 오버플로우... 바로 Long 타입으로 바꿔보라고 말했고 바로 해결할 수 있었다. 그러면 오버플로우가 발생하면 값이 어떻게 되었길래 예상과 다른 결과가 나왔을까? 분명 예전에 공부하면서 알았지만 기억나지 않아서 다시 테스트해본다. Integer란? 자바의 정수형 타입 중 하나이다. 크기 -2147483648 ~ 2147483647 테스트1 int maxValue = 2147483647; int minValue = -2147483648; System.out.println(maxValue); System.out.println(minV..
GC(Garbage Collector)란? - JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스 GC의 수거 대상 - 어떤 객체의 유효한 참조가 존재한다면 Reachable, 그렇지 않다면 Unreachable이라고 한다. GC의 동작 순서 - Mark and Sweep 알고리즘을 따른다. - Mark는 Reachable 객체와 Unreachable 객체를 식별하여 마킹한다. - Sweep은 Unreachable한 객체들을 Heap에서 제거한다. - GC 알고리즘에 따라 Compact 과정이 추가되기도 한다. Compact는 Sweep 후에 분산된 객체들을 한 곳으로 모아서 메모리 단편화를 막아준다. GC는 언제 일어날까 - Heap의 구조는 Young Generation, Old Gen..
Java Virtual Machine이란? - Java로 개발한 프로그램을 컴파일하여 만들어지는 바이트코드를 실행시키기 위한 가상머신. - JRE(Java Runtime Environment)에 포함되어 있다. - Class Loader, Runtime Data Area, Execution Engine, JNI, Native Method Library으로 이루어져 있다. Class Loader - .class 파일을 JVM의 Runtime Data Area에 배치한다. Runtime Data Area - Method 영역, Heap 영역은 모든 쓰레드가 공유하는 영역. - Stacks, PC registers, Native Method Stacks은 쓰레드 마다 하나씩 생성되는 공간. - Method 영..
int num = 92; //10 -> 2, 8, 16 String binNum = Integer.toBinaryString(num); String octNum = Integer.toOctalString(num); String hexNum = Integer.toHexString(num); System.out.println(binNum);//1011100 System.out.println(octNum);//134 System.out.println(hexNum);//5c //2, 8, 16 -> 10 int binToDec = Integer.parseInt(binNum, 2); int octToDec = Integer.parseInt(octNum, 8); int hexToDec = Integer.parseI..
문자 -> 숫자 String str_num = "1234"; //String to Int int int_num1 = Integer.parseInt(str_num); //String -> Int int int_num2 = Integer.valueOf(str_num); //String -> Int //String to Double, Float double double_num = Double.valueOf(str_num); //String -> Double float float_num = Float.valueOf(str_num); //String -> Float //String to Long, Short long long_num = Long.valueOf(str_num); //String -> Long sho..