본문 바로가기

전체 글

(76)
[JAVA]java Serializable 직렬화란? (1) 데이터 구조나 오브젝트 상태를 동일하거나 다른 컴퓨터 환경에 저장(이를테면 파일이나 메모리 버퍼에서, 또는 네트워크 연결 링크간 전송) 하고 나중에 재구성 할 수 있는 포맷으로 변환하는 과정이다. 오브젝트를 직렬화 하는 과정의 반대로, 일련의 바이트로부터 데이터 구조를 추출하는 일은 역직렬화라고 한다. 위키 백과 - https://ko.wikipedia.org/wiki/%EC%A7%81%EB%A0%AC%ED%99%94 (2) 시스템적으로 이야기 하자면 JVM(Java Virtual Machin 이하 JVM) 의 메모리 상주(힙 또는 스택)되어 있는 객체 데이터를 바이트 형태로 변환하는 기술과 직렬화된 바이트 형태의 데이터를 객체로 변환해서 JVM 으로 상주 시키는 형태를 같이 이야기 한..
JPA 기본 개념 - 우리가 JPA 를 사용하는 이유 JPA를 왜 사용할까? JPA 의 사용 목적을 알아보기 전에 자바에서 데이터 베이스를 어떻게 사용할까? 보통 자바로 작성한 애플리케이션은 JDBC API 를 사용해서 SQL 을 데이터 베이스에 전달하고 받는다. 이 API 를 사용하기 위해 우리는 JDBC 라이브러리를 항상 자바 애플리케이션에 추가한다. SQL 문을 코드에 작성하고 API로 데이터 베이스에 전달하는데 보통 이 경우에는 아래 그림처럼 애플리케이션과 데이터 베이스 사이에 JDBC API 를 두고 개발한다고 볼 수 있다. JDBC 사용 과정 예시) 1. 회원 조회용 SQL 을 작성한다. String sql = SELECT MEMBER_ID, NAME FROM MEMBER M WHERE MEMBER_ID = ? 2. JDBC API 를 사용해서 ..
[JAVA] 자바의 정석 - Stream 스트림(Stream)이란? - List 를 정렬할 때는 Collections.sort(), 배열을 정렬할 때는 Arrays.sort() 를 사용해야한다. 이는 메서드의 기능 중복과 데이터 소스마다 다른 방식으로 다뤄야 한다는 점에서 재사용성과 중복성의 불편함이 있다. 이러한 문제를 다루기 위해 만든것이 '스트림(Stream)' - 스트림(Stream) 은 데이터 소스를 추상화 하고 데이터를 다루는데 자주 사용되는 메서드를을 정의해 놓았다. - 데이터 소스를 추상화 해 놓았다는 것은, 데이터가 무엇이던 간에 같은 방식으로 다룰수 있게 되었다는 것이다. 두 데이터 소스 (String[], List)를 기반으로 하는 스트림 생성 방법은 다음과 같다 String[] strArr = { "aaa", "ddd" ,..
[JAVA] JVM 에 대하여 ( + Garbage Collection) https://howtodoinjava.com/java/basics/jdk-jre-jvm/ 사이트와 책 'JVM Performance Optimizing 및 성능 분석 사례'를 함께 보았다. 1. 왜 Java Virtual Machine 일까? 2. 자바 프로그래밍의 실행(Execution of a Java Program) With JVM 개략적으로 살펴보면, 작성한 .java 파일을 .class 파일로 컴파일 하여 얻은 바이트 코드가 JVM 에서 실행된다. 그래서 바이트 코드로 올라온 것부터 JVM의 영역이라고 할 수 있을 것 같다. 헷갈리지 말아야 할 점은 JVM은 바이트 코드가 런타임 환경에서 실행될수 있는 정보를 제공하는 명세일뿐이다. 다양한 벤더들은 이 명세의 구현 방법들을 제공하고 있는데 아래..
[JAVA] 자바의 정석 - Execption 정리 1. 예외처리(exception handling) 1.1 프로그램 오류 자바는 실행 시점에 따라 3가지로 에러 타입을 나눈다. 1) 컴파일 에러 컴파일시 발생하는 에러. 클래스 파일(*.class) 이 생성되기 전에 오타나 잘못된 구문, 자료형 체크등의 기본적인 검사를 컴파일러가 수행한다. 2) 논리적 에러 실행은 되나 의도와는 다르게 동작하는 것 3) 런타임 에러 실행시 발생하는 에러 실행시 발생 하는 프로그램 오류를 '에러(Error)' 와 예외(exception) 두가지로 구분한다. 1) 에러(Error) : 프로그램 코드에 의해서 수습될 수 없는 심각한 오류 2) 예외(Exception) : 프로그램 코드에 의해서 수습될 수 있는 다소 미약한 오류 1.2 예외 클래스의 계층 구조 자바에서는 실행 ..
Quartz Tutorials 정리(중) 1. Quartz Main Component and Example Scheduler - the main API for interacting with the scheduler Job - 스케줄러에 의해 실행되는 컴포넌트들을 구현한 인터페이스 JobDetail - Job 의 인스턴스를 생성 Trigger - 잡의 실행(스케줄링)에 관해 정의 JobBuilder - job 인스턴스를 생성하는 JobDetail 의 인스턴스를 생성 정의 TriggerBuilder - 트리거를 생성 정의 - Scheduler는 SchedulerFactory 에 의해서 생성된다. - 생성된 Scheduler에 의해서 Job 과 트리거가 추가 되고 삭제 될 수 있다. SchedulerFactory schedulerFactory = n..
[Vue] Vue.js 기본 원리 1. Vue.js ? 자바 스크립트 프레임 워크이며 데이터와 뷰를 연결해 주는 역할을 한다. MVVM(Model-View-ViewModel)이라는 방식을 기본으로 Vue 가 만들어져 있다. 2. 기본 MVVM 구조 "Model(Vue 안에 준비된 데이터)" 데이터는 무엇인가? + "View(HTML 에서 표시되는 요소)" 표시되는 요소는 무엇인가? + "ViewModel(View 와 Model을 어떻게 연결할까)" 어떤 식으로 연결되는가? 3. Vue.js 의 관점에서 더 자세히 보는 MVVM 구조 MVVM 구조를 Vue의 관점에서 생각해 보았을 때는 아래처럼 확인 할 수있다. 1. 데이터는 무엇인가 (Model) 필요한 데이터를 생각하고 넣어 둘것 (웹 페이지'html' 에서 바뀌는 부분(데이터가 들어..
[Book] 월든 - "뉴스가 도대체 무엇인가?" - 나는 신문에서도 기억해둘 만한 뉴스를 읽은 적이 없다. 어떤 사람이 강도를 당했다든가, 살해를 당했다든가, 사고로 죽었다든가, 어떤 집이 불에 타고, 어떤 배가 침몰하고, 어떤 증기선이 폭팔했다든가 , 어떤 소가 서부 철도 노선에서 기차에 치이고, 어떤 미친개가 죽임을 당했다든가, 겨울에 메뚜기 떼가 나타났다든가 하는 신문에 실린소식은 두번 읽을 필요가 없다. 한번이면 충분하다. 원칙만 알면 되지 무수한 실례와 응용을 구태여 들을필요가 무엇인가? 철학자에게 소위 뉴스라는 것은 모두 가십에 지나지 않으며 그것을 편집하거나 읽는 사람은 차나 마시고 있는 늙은 부인네인 것이다. 그런데 이 가십에 걸신들린 사람이 적지 않게 있는 것 같다 - 영국에 관해 이야기하자면, 그 나라에서 발생한 중요 뉴스 가운데 가..
[Spring Batch] 잡 관리 컴포넌트 - 1. JobExplorer JobExplorer - org.springframework.batch.core.explore.JobExplorer https://docs.spring.io/spring-batch/docs/current/api/org/springframework/batch/core/explore/JobExplorer.html JobExplorer (Spring Batch 4.3.3 API) All Known Implementing Classes: SimpleJobExplorer public interface JobExplorer Entry point for browsing executions of running or historical jobs and steps. Since the data may be re-hydrat..
[JAVA] Concurrent Collections - ConcurrentHashMap() ConcurrentHashMap을 알기전에 Thred Safty 알아보기! Thread safty 하다? Thread safty (스레드 안전) 은 멀테 스레드 프로그래밍에서 일반적으로 어떤 함수나 변수, 혹은 객체가 여러 스레드로부터 동시에 접근이 이루어져도 프로그램의 실행에 문제가 없음을 뜻한다. 보다 엄밀하게는 하나의 함수가 한 스레드로부터 호출되어 실행 중일때, 다른 스레드가 그 함수를 호출하여 동시에 함께 실행되더라도 각 스레드에서 함수의 수행결과가 올바르게 나오는 것으로 정의한다. thread safty 하게 스레드를 구현하는 방법은 아래와 같다. 1. Re-entrancy : 어떤 함수가 한 스레드에 의해 호출되어 실행 중일때, 다른 스레드가 그 함수를 호출하더라도 그 결과가 각각에게 올바르..
[JAVA] Map 정리(HashMap , TreeMap , Red-Black Tree ) 컬렉션 프레임웍의 구성요소 Map 인터페이스에서 HashMap 의 내부코드를 간단히 살펴 보고 HashMap과 TreeMap의 성능 차이 TreeMap 의 Red-Black Tree를 알아보자. Map 인터페이스 HashMap HashMap 과 TreeMap TreeMap의 Red-Black Tree Map 인터페이스 - 컬렉션 프레임웍의 멤버이다. - 키(Key)와 값(value)의 쌍(pair)으로 이루어진 데이터의 집합 - key는 문자열, 정수형, Object 객체형 등의 다른 데이터 형이 될 수 있고, Key 값을 사용자가 직접 입력한다. - 순서는 유지되지 않으며, 키는 중복을 허용하지 않고, 값은 중복을 허용한다. 예) 우편번호, 지역번호(전화번호) - 구현 클래스 : HashMap, Has..
Wrapper Class Wrapper 클래스는 기본형 값을 객체로 Wrapping 하는 것이다. 자바에서는 8개의 기본형을 객체로 다루지 않은데 이것이 바로 자바가 완전한 객체지향 언어가 아니라는 얘기를 듣는 이유이다. 대신 기본형을 사용함 으로써 더 높은 성능을 얻을 수 있었다. * 실제 기본형 타입과 double 과 객체형 타입인 Double을 각각의 배열에 만들어 넣는 성능 테스트를 돌렸을때 아래와 같은 결과를 얻을 수 있었다. 그렇다면 Wrapper class 를 언제 사용하고 왜 기본형을 감싸는가? 자바는 객체지향 언어이다 보니 매개 변수로 객체를 요구할 때, 기본형 값이 아닌 객체로 저장할때, 객체간의 비교가 필요할때 등등의 기본형이 아닌 데이터를 객체로서의 형태로 경우가 많다. 이 경우에 기본형 값들을 객체로 변환..
[Log] 우아한 스프링 배치 by 우아한 형제들 이동욱님 요즘 회사에서 배치를 작업하고 있기때문에 영상 내용 정리하기. 출처는, https://www.youtube.com/watch?v=_nkJkWVH-mo 우아한 스프링 배치 목차 기본편(전반부) - 활용편을 위한 기본 개념 & 오해 풀기 활용편(후반부) - 실제 업무에서의 스프링 배치 [기본편] 배치 애플리케이션? 배치 처리는 컴퓨터에서 사람과 상호 작용 없이 이어지는 프로그램(작업) 들의 실행이다. - wikipia - 사용자와의 상호 작용이 주력인 웹 애플리케이션과는 지향점이 다르다. Web vs Batch Web - 실시간 처리/ 상대적인 속도/ QA 용이성 Batch - 후속 처리/ 절대적인 속도/ QA 복잡성 상대적으로 Test Code가 더 중요한 곳은 Batch 이다. 상세한 기능까지 통합 QA..
SOLID(객체지향설계) - 코드 예제, 리팩토링 SOLID 원칙에 대한 개념을 그림과 코드 예제를 통해 알아보고 SOLID 원칙을 적용 할 수 있는 리팩터링을 다시 확인 합니다. 모든 내용에는 출처가 있습니다 목차 1. SOLID 원칙이란? 1) SRP 단일 책임 원칙 2) OCP 개방-폐쇄 원칙 3) LSP 리스코프 치환 원칙 4) ISP 인터페이스 분리 원칙 5) DIP 의존성 역전 원칙 2. 코드로 보는 SOLID 원칙 예제 3. 함수 리팩터링 1. SOLID 원칙이란? 러버트 마틴이 2000년대 초반 명명한 객체 지향 프로그래밍 및 설계의 다섯가지 기본 원칙을 마이클 페더스가 두(머리)문자어 기억술로 소개 한것이다. 프로그래머가 시간이 지나도 유지보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용 할 수 있다. SOLID 원칙들..
[Book] 랩걸 - 호프자런 - 1 - 그동안 우리는 학위를 세 개 땄고, 직장을 여섯 번 옮겼으며, 4개국에서 살았고, 16개국을 여행하고, 병원에 입원하기를 다섯 번, 중고차 여덞 대를 갈아 치우고, 적어도 4만 킬로미터를 운전했고, 개 한마리가 영면하는 것을 지켜봤고, 약 6만 5000개에 달하는 탄소 안정적 등위원소를 측정해냈다. 특히 등위원소 측정은 우리의 커리어를 내내 관통하는 목표이기도 했다. 우리가 그런 측정을 하기 전에는 신과 악마만이 그 측정값을 알고있었고, 어차피 그 둘 다 관심도 없는 문제 였을 것이다. 이제는 도서관 카드만 있으면 누구나 이 측정값을 찾아 볼 수 있다. 그 측정값들을 실은 논문을 70여 편 써서 40여개의 저널에 발표 했기 때문이다. 우리는 그것이 진보라고 생각한다. 새로운 정보를 완전히 날조..
[JAVA] AtomicInteger, 쓰레드 동기화(synchronization) , Atomic, CAS 알고리즘 이해하기 AtomicInteger 을 자세히 이해하기 위한 흐름을 정리해 보았습니다. 모든 내용은 출처가 있습니다. [목차] AtomicInteger 란? 0. 쓰레드란? 1. 쓰레드의 동기화 1) 기본 synchronized 를 이용한 동기화 2. Atomic 에 대해서 1) CAS Algorithm 2) ABA Problem 3. Atomic class 에 대해서 4. AtomicInteger 상세 확인하기 AtomicInteger 란? AtomicInteger 란 원자성을 보장하는 Interger를 의미한다. 멀티 쓰레드 환경에서 동기화 문제를 별도의 synchronized 키워드 없이 해결하기 위해서 고안된 방법이다. (일반적으로 동기화 문제는 synchronized, Atomic, volatile 세가지..
[Book] 소크라테스 익스프레스 - 음악을 감상하는 법 [소크라테스 익스프레스] 너무 재밌다! 다만 지하철 통근시간에서만 읽을 수 있어 늘 아쉽다. 빨리 읽고 싶기도 하고 오래 들고 다니니 책 표지가 흐물흐물해져 간다. 북커버를 사야하나 잠깐 고민했다. 7호선에서 읽으니 20분정도 될까? 영국인들은 일생동안 버스를 기다리는 시간으로 6개월을 사용한다고 했다. 결코 짧은시간이 아니라는 것이다. 몰입만 할 필요가 있다. - "전부 어려운 질문이네" 존이 이렇게 쓰고는 전혀 어렵지 않다는 듯 바로 대답하기 시작한다. 존은 음악에 대한 지식이 즐거움을 배가시켜준다고 말한다. "지식이 없었다면 얻지 못했을 어떤 깨달음을 줄 수도 있고, 음의 아름다움에만 사로잡혀서 음악을 심미적 경험으로만 바라보지 않도록 도와줄 수도 있어." 음악에는 하나의 집만 있는 것이 아니다. ..
출근길 비가 왔다 - 문득 회사가는길에 보았던 장면 비가 거의 그쳤을때쯤 어떤 사람들은 아무런 의심없이 우산을 폈고 반정도의 다른 이들은 우산 없이 길을 걸어갔다. 솔직히 전자는 비가 오지 않는다는것에 의심도 관심도 없어보였다. 그렇게 생각하다 또 문득 어제의 저녁은 각자 다를테니까 어제의 일에 빠져있을 수도 있고 지금 이순간이 다르게 느껴질수도 있고
[JAVA] - 변수(Variable) 이 내용은 남궁성 자바의 정석을 토대로 작성 되었습니다. 1. 변수란? 1.2 변수의 명명 규칙 2. 변수의 타입과 자료형(primitive , reference) 3. 변수의 타입과 자료형에 따른 stream API 제약 (primitive type 의 박싱, 언박싱) 1. 변수란? "변수란, 단 하나의 값을저장할 수 있는 메모리 공간" 하나의 변수에 단 하나의 값만 저장 할 수 있으므로, 새로운 값을 저장하면 기존의 값은 사라진다. 변수를 선언하면, 메모리의 빈 공간에 "변수 타입" 에 알맞은 크기의 저장 공간이 확보 되고 앞으로 이 저장 공간은 "변수 이름" 을 통해 사용할 수 있게 된다. 변수의 초기화 변수를 선언한 이후 부터는 변수를 사용할 수 있으나, 그 전에 반드시 변수를 초기화(Initia..
[JAVA] 객체 메모리 할당 - Stack, Heap, GC "여기서 리스트라는 객체가 stack에서 names 라는 변수가 참조를 하고 있고 또 이 객체(List) 가 각 String 객체를 참조 하고 있는 경우가 있고 이 던(String) 은 참조를 받고 있지 않기 때문에 이 객체는 Unrechable Object 이고 던 영역이 Garbage Collector 를 통해서 해제되게 됩니다." 이 부분 헷갈렸다. 객체의 메모리 할당이 어떻게 되는지 위주로 이어서 정리한다. 아래 내용은 모두 인용(아래 출처에서)된 것이다. 1. Stack 과 Heap 의 차이 1) Stack - 원시 타입의 데이터가 값과 저장 ( int, boolan, double 등의 실제 값이 스택에 할당) - Heap 영역에 생성된 Object 타입의 데이터 참조값이 저장 - 함수가 호출될..
[JAVA]Garbage Collection 실행 과정 * Garbage collection 을 이해하기 위해 학습한 내용을 정리 하였습니다. 내용 순서 1. GC란? 2. GC를 동작 하게 하는 JVM 이란? 3. GC의 동작 순서 (Mark-and-Sweep) 4. GC 는 언제 일어날까? 1. GC (Garbage Collection) 란? JVM의 Heap 영역에서 사용하지 않는 객체를 삭제하는 프로세스를 말합니다. 가비지 컬렉션은 기본적으로 메모리 누수를 제거 하는것을 목적으로 두고 있습니다. Unreachable-but-not-deleted Object in memory. 2. GC를 동작 하게 하는 JVM 이란? - 자바 가상 머신으로 자바 바이트 코드(.class 파일)을 OS 에 특화된 코드로 변환(인터프리터와 JIT컴파일러) 하여 실행합니다..
[Book] 소크라테스 익스프레스 - 꼭 짱이 돼야지 장애물은 상대적인 것이다 어떤 사람에겐 지저분한 책상이 흉포한 침략일 수 있다. 어쩌면 가장 큰 장애물은 타인이다. "타인은 지옥이다" 라는 유명한 말을 남긴 프랑스 철학자 장 폴 사르트르만큼은 아니었지만 마르쿠스도 얼추 비슷했다. "아침에 잠에서 깨면 스스로에게 이렇게 말할것. 오늘 네가 만날 사람들은 주제넘고 배은망덕하고 오만하고 시샘이 많고 무례할 것이다." 지금도 마르쿠스가 살던시기와 별반 다를 게 없다. 마르쿠스는 골치 아픈 사람에게서 영향력을 빼앗으라고 제안한다. 나의 삶에 영향을 미칠 자격을 빼앗는것. 다른 사람은 나를 해칠 수 없다. "다른 사람의 머릿속에 있는 것은 나를 해칠 수 없기 때문이다." 옳은 말씀이다. 왜 나는 다른 사람의 생각을 신경쓰는 걸까? 생각은 당연히 내 머리가 아니라..
[JUnit] Spring MVC의 테스트 코드 예제를 포함한 깃헙 Spring mvc의 다양한 테스트 코드를 쇼케이스로 정리해 모아둔 깃헙이 있다. 현재 JUnit4 를 사용하는데 2년전이 마지막 업데이트이다. Spring MVC 를 구현한 예제와 테스트 코드 예제도 같이 들어있어 유용하다. https://github.com/spring-projects/spring-mvc-showcase GitHub - spring-projects/spring-mvc-showcase: Demonstrates the features of the Spring MVC web framework Demonstrates the features of the Spring MVC web framework - GitHub - spring-projects/spring-mvc-showcase: Demons..
[Junit5] 테스트 코드 작성할때 헷갈리는 점 - 대역 기준 잡기 역시 책은 두번 봐야한다. * 세번째 볼때는 또 다를 수 있음 주의 * 첫번째 볼때는 대역을 만드는건 알겠는데 언제 어떤 기준을 잡고 대역을 만들어야 하는가에 대한 의문을 가지고 있었다. 그 기준을 아래 내용을 통해 정리해 보았다. 일단 대역은 왜 사용하는가? 테스트를 작성하다보면 외부 요인이 필요한 시점이있다. - 테스트 대상에서 파일 시스템을 사용 - 테스트 대상에서 DB로 부터 데이터를 조회하거나 데이터를 추가 - 테스트 대상에서 외부의 HTTP 서버와 통신 이러한 외부 요인으로 테스트 결과가 다르게 나온다면? 그 테스트 코드는 100% 신뢰할수 없다. 외부 API 를 사용할때 오늘 카드번호가 한달뒤에 만료된다면? 카드 유효성 로직에서는 결과가 정 반대로 나왔을것 이다. 이것또한 외부 요인으로 테스..