이론 정리 153

Fat JAR / Thin JAR 간략정리

Spring Boot 관련 회의를 하는데 Fat JAR이라는 이야기가 나왔다.근데 이거 처음 들어봐서... 한번 찾아봤다.간단하게 말하자면 애플리케이션 실행에 필요한 모든 의존성 및 코드를 하나의 JAR파일로 패키징한 것 이라는 것이다.이를 통해 단일 JAR파일로 애플리케이션을 실행할 수 있다는것.Spring boot에서는 기본적으로 Fat JAR를 생성하며 이렇게 생성되는 덕분에 애플리케이션이 쉽게 배포되는 것이었다!!!대충 정리해 보면Fat JAR의존성을 포함실행에 필요한 모든 파일 포함Spring Boot는 기본적으로 Fat JAR 사용Thin HAR애플리케이션 코드만 포함의존성은 별도 경로에서 로드의존성을 별도로 참조하는 Spring이 이와 비슷한 빌드이다.애플리케이션 -> Thin JAR의존성 ..

모던 자바 인 액션 4장 간략정리

정리스트림과 컬렉션의 차이가 뭘까?사실 회사에서 스트림을 쓰고 있는데 사용하면서도 이게 컬렉션보다 보기 편하고 쓰기 편하군ㅇㅇ 이정도 감상이었는데 이번에 확실히 감이 잡히더라스트림 시작여기서 제일 인상깊었고, 컬렉션과의 차이에 대해 쉽게 접근할 수 있었던게, 컬렉션의 주제는 데이터고 스트림의 주제는 계산 이라는 점이었다. 말하자면 컬렉션은 요소 저장 및 접근, 스트림은 그걸 가지고 계산하는 것이 주가 된다는 것이다.그리고 스트림이 가진 두가지 중요 특징이파이프라이닝대부분의 스트림 연산은 스트림 연산끼리 연결해서 커다란 파이프라인을 구성할 수 있도록 스트림 자신을 반환함lazy(결과값이 필요할 때에 계산하도록... 그니까 알아서 스트림의 중간/최종 연산을 통해 안쓸거는 안쓰게 하는 최적화 같은 느낌이다)이..

이론 정리/java 2024.11.26

모던 자바 인 액션 3장 간략정리

람다 표현식람다 표현식이란?메서드로 전달할 수 있는 익명 함수를 단순화한 것람다 표현식은 일단 간결하게 코드를 전달하는데에 쓰인다. -> 말하자면 사실 이전에 못하던 기능을 람다를 통해 할 수 있다기 보다는, 그냥 코드가 깔끔해지고 알아보기 쉬운 것이다.저기 위의 설명에서 그 이유를 대충 짐작할 수 있는데익명이름이 따로 없다. 이름을 만들 필요가 없으니 구현이 간단해진다.함수메서드와 다르게 특정 클래스에 종속되지 않는다.파라미터 리스트, 바디, 반환 형식, 예외 리스트는 포함된다.전달람다 표현식을 메서드 인수로 전달하거나 변수로 저장할 수 있다.간결성익명 클래스처럼 코드를 막 구현할 필요는 없다.람다에 대해서(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.ge..

이론 정리/java 2024.11.25

모던 자바 인 액션 2장 간략정리

동적 파라미터화여러 요구사항에 효과적으로 대응 가능한 방법. 아직은 어떤 식으로 동작할지가 결정되지 않은 코드 블록이고, 나중에 프로그램에서 실행된다.문제 상황1. 녹색 사과 필터링enum Color { RED, GREEN }빨강, 초록 사과가 있다.여기서 만약에 녹색 사과를 필터링하려 하면if(GREEN.equals(apple.getColor())) { result.add(apple);}요렇게 쓸 것이다.단점만약 빨간사과, 노란사과, 검은사과 등등... 필터링 개수가 많아진다면? 저 if문이 계속해서 늘어나거나 또 빼짐에 따라 줄어들 수 있을 것이다.2. 색의 파라미터화위의 1에서의 단점을 해결하기 위함이다.public static List filterApples(List inventory, Co..

이론 정리/java 2024.11.24

데이터 중심 애플리케이션 설계 5장 정리

복제네트워크로 연결된 여러 장비에 데이터의 복사본을 유지한다는 의미이게 필요한 이유는 여러개가 있는데지연시간이 줄어듬(사용자와 가까운 곳에 데이터 유지)시스템 고가용성(하나 죽어도 다른게 잘 됨)읽기 처리량 늘림(여러곳에서 부하 분산)근데 데이터를 어떻게 똑같이 유지할 것인가그냥 저장만 하는거면 복제하면 된다.그러면 변경해야 한다면?단일리더, 다중리더, 리더없는 복제 3가지 알고리즘이 있다.거의 대부분이 이 3가지중 하나를 쓴다.복제는 많은 트레이드오프가 있다.동기식/비동기식 복제 중 어떤것을 써야할지잘못된 복제를 어떻게 처리할지리더와 팔로워DB복사본을 저장하는 각 노드를 복제서버(replica)라고 한다.이 복제 서버에 모든 데이터가 잘 있는지를 어떻게 보장할 수 있을까리더 기반 복제(능동/수동, 마스..

이론 정리 2024.11.22

데이터 중심 애플리케이션 설계 4장 정리

4장 애플리케이션은 시간이 지남에 따라 변한다. 대부분의 경우 애플리케이션 기능을 변경하려면 저장하는 데이터도 변경해야 한다. 근데 보통 바로 적용이 안된다(서버/클라쪽에서 바로 적용이 힘들기 때문) 이를 위해 하위호환/상위호환성을 유지해야 한다. 여기서는 JSON, XML, 프로토콜 버퍼 등등.. 데이터 부호화를 위한 다양한 형식을 살펴본다.데이터 부호화 형식프로그램은 보통 (최소한) 두 가지 형태로 표현된 데이터를 사용해 동작한다.메모리에 객체, 구조체, 리스트, 해시 등등...으로 데이터가 유지되고, 이런 데이터 구조는 CPU에서 효율적으로 접근하고 조작할 수 있게 최적화된다.데이터를 파일에 쓰거나 네트워크를 통해 전송하려면 스스로를 포함한 일련의 바이트열(예를 들어 JSON)형태로 부호화..

이론 정리 2024.11.20

데이터 중심 애플리케이션 설계 2장 정리

정리이거는 다른사람도 꼭 알아야 한다.(아주 중요)데이터 베이스 질의는 명령형(절차 기술)이 아닌 선언(패턴 지정)형!디비 엔진의 상세 구현이 숨겨져있어서(선언형 질의의 장점) 질의를 변경하지 않고도 성능을 향상시킬 수 있는 이유.. 명령형이 쓰였을 때 안좋은 케이스: css 한줄의 코드를 DOM api 로 작성했을때 여러가지 (예상치 못한 삭제, 태그 변경 등) 상황에 따라 코드를 재 작성 해야 함선언형 방식은 순서보장이 되지 않는 등 디테일한 조작은 불가능하지만, 그래서 최적화가 가능한 것 —> sql 이 기능적으로 더 제한적이라는 사실은 .. 최적화할 수 있는 여지를 더 많이 준다는 의미이거는 알면 좋을 것 같다.(빨간거 다음으로 중요관계형 데이터 베이스와 문서 데이터베이스는 시간이 지남에 따라 점..

이론 정리 2024.11.18

확장성과 성능에 관한 간단한 정리

확장성리스템의 리소스를 늘릴 때 추가된 리소스에 비례해 성능이 향상됨이게 중요한 이유는 확장성은 나중에 생각할 수 없기 때문이다.예를 들어 실제로 확장을 해도 시스템 성능에 부정적인 영향을 주지 않도록 설계되어야 한다.그리고 확장을 했을 때에 시스템이 이질성을 수용할 수 있어야 한다.예를 들면 보통 확장성을 통해 시스템의 리소스는 다양성이 증가하는데, 균일성에 의존하는 알고리즘 증에서 작동하지 않거나 새로운 리소스를 제대로 활용하지 못할 수 있다.Ex) 샤딩 등에서 알고리즘을 어떻게 할 수 있을지 등!!이게 잘 되지 않으면 단일 사용자는 모르겠지만 부하가 높을 때에 느려지게 된다.성능이게 잘 안되면 단일 사용자에 대한 시스템 속도가 느려진다.

이론 정리 2024.11.10

java Integer에서 == 비교를 한다면?

Java 에서 Integer 타입을 쓰는 경우가 은근 많다.사실 실제로 업무를 할 때에는 nullable 하지 않은 경우는 int를 사용하라고 하지만(Primitive type) 아마 null safe를 위해 이걸 쓰는 경우도 있을 것이다.근데 요거 == 비교를 하면 골때릴때가 있다.public class Main { public static void main(String[] args) { Integer a = 1; Integer b = 1; System.out.println("compare 1 : " + (a == b)); a = 127; b = 127; System.out.println("compare 127 : " + (a == b)); ..

이론 정리/java 2024.11.03

부분 인덱스

부분 인덱스그냥 간단하게 말하자면 인덱스 기준을 전체가 아니라 일부분에만 거는 것이다.이게 뭐임말 그대로 부분적인 인덱스개발할 때에 MySQL 에서 VARCHAR(255) 이런 식으로 좀 큰 데이터를 사용하는 경우가 있는데, 이런 큰 값에 대해 인덱스를 걸어주는건 힘들다.근데 이거 뒤에까지 다 쓰지는 않지만 앞부분에 대한 검색이 종종 일어날 수는 있다.장점인덱스 크기 설정 가능일부분에 대해서만 인덱스를 생성하기 때문에저장 공간이 절약된다.인덱스 조회 속도가 향상된다.인덱스 생성할 때에 시간소요가 줄어든다.말하자면, 그냥 작은 인덱스를 만들기 때문에 전체를 다 만드는 것 보다 확실히 공간이나 속도 면에서 장점이 있다는 것이다.단점?인덱스 크기를 설정해서 발생일부분에 대해서만 인덱스가 생성되기 때문에유니크 ..