본문 바로가기

Programming/Java

junit 예시 (get, post, patch, delete, exchange, assert) 시작하기 전에 불친절하지만 누군가에게 도움이 될 junit 예시이다. class Something 아래와 같은 Something class를 DTO로 사용한다고 하자. public class Something { private String id; private String name; private String desc; } constructor, getter, setter 등은 생략했다. junit Test 메소드의 parameter들에 대한 설명은 다른 곳에서 볼 수 있으므로 생략한다. getForEntity @Test public void getSomethingTest() { int somethingId = 26; ResponseEntity response = restTemplate.getForEnt..
[Spring] JSON 형식으로 request, response하기 시작하기 전에 글쓴이는 현시점 Spring에 대한 깊은 지식을 갖추지 못한 상태입니다. 단지 Request, Response를 JSON 형식으로 하기 위해 삽질 하다가 성공한 코드를 공유하고자 합니다. 예시일 뿐이므로 막 쓴 코드임을 감안해 주세요 :) Response Response를 하기 위해 Response에 필요한 것들을 갖춘 Response Class를 작성합니다. getter를 빼먹으면 Response 내용에서 해당 field의 내용은 빠지므로 반드시 작성해줘야 합니다. public class Response { private int responseCode; private String msg; public Response() { this.responseCode = 0; this.msg = ""..
[Java] Hashtable VS HashMap VS ConcurrentHashMap Hashtable VS HashMap VS ConcurrentHashMap Hashtable, HashMap, ConcurrentHashMap 모두 Map 인터페이스를 implements한 AbstractMap을 상속받아 구현하고 있는 공통점은 있다. 그럼 어느 부분이 다를지 알아보자. Hashtable VS HashMap Hashtable은 모든 데이터 변경 메소드가 synchronized로 선언되어 있어서, 메소드 호출 전 스레드 간의 동기화 lock을 통해 멀티 스레드 환경에서 data의 무결성을 보장해준다. (thread-safe) 하지만 HashMap은 그런 장치가 1도 없기 때문에, 동기화 문제가 발생할 수 있다(non-thread-safe). 물론, HashMap도 synchronized로 ..
[Java] synchronized 메소드와 일반 메소드로 같은 자원에 접근하면 thread-safe할까? 면접 때 받았던 질문을 바탕으로 작성한 글입니다. synchronized가 완전히? 걱정없는? Thread-safe한 환경을 구성해줄 것이라고 믿고 있었지만 그렇지도 않았다. synchronized 메소드들만 사용 → thread-safe package test; public class synTest { private int a = 0; public static void main(String[] args) { synTest syn = new synTest(); new Thread( () -> { syn.setter(); }).start(); new Thread( () -> { for(int i = 0 ; i < 100 ; i++) System.out.println(syn.getter()); }).star..
[Java] Garbage Collection (GC) 알고리즘 GC의 기본적인 흐름 : Garbage 대상 식별 → 그 대상을 메모리에서 해제 들어가기 전에 용어 정리 stop-the-world GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 상태. 이 상태가 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다. GC는 stop-the-world 때문에 서비스가 중단된다는 점에서 굉장히 유의할 것이 되고, 대개의 GC 튜닝이 이 stop-the-world 시간을 줄이는 노력들에 대한 것이다. Root Set JVM Stack 내의 Local Variable Section과 Operand Stack에서의 참조 (Java 메서드 내에서 실행하는 지역 변수 또는 파라미터에 의한 참조) JVM Method Area의 Constant Poo..
JDK vs JRE vs JVM JVM Java Virtual Machine .class파일 (byte code) 을 플랫폼(OS)에 맞추어 돌아갈 수 있도록 필요한 처리를 해준다 수행 역할 및 구성 Class Loader Loading Linking Initialization Execution Intepreter JIT compiler Garbage Collector Runtime Data Area Class Library, Native Method Library와도 연결시켜준다. JRE Java Runtime Environment 자바 실행 환경 말 그대로 자바 프로그램을 실행할 수 있는 최소한의 환경을 구성해주는 것이다. JRE = JVM + 클래스 라이브러리(Java API) JDK Java Development Kit 자바 개..