Java 언어 특징JVM 학습Write Once, Run Anywhere : Java 언어는 여러 플랫폼에서 수행할 수 있는 개발 언어를 목표로 개발 되었다. 바이트코드를 기계 코드로 변환하는 작업을 JTI 컴파일러에서 한다.자바는 여러 플랫폼에서 수행할 수 있는 개발
Java.lang 패키지코드 까보기java.lang 패키지는 자바 언어의 핵심 기능을 제공한다.java.lang 패키지 자바 언어의 토대가 되는 기능을 제공한다. 그래서 import 하지 않아도 사용할 수 있다.java 문서에서는 java.lang 패키지의 핵심 클래스
제네릭실습 코드제네릭으로 타입 형변환 과정에서 발생할 수 있는 오류를 컴파일 타임에서 점검할 수 있다.예시를 통해 이해해보자.setter 메서드 매개변수 타입이 Object 로 자동 형변환 덕분에 setter 를 호출할 때 매개변수로 어떤 타입이든 넘겨줄 수 있다. 다
자바 컬렉션Collection 인터페이스 확장 인터페이스는 List, Queue, Set 있다.List 는 데이터를 담을 때 순서를 보장하는 자료구조다. 대표적 구현 클래스는 ArrayList 가 있는데 내부적으로 배열을 사용해 데이터를 추가한다. 배열이 다 차면 동적
SetQueueHashSet 은 내부적으로 HashMap 으로 구현한다.순서 상관 없이, 어떤 데이터가 존재하는지 확인하기 위한 용도로 많이 사용한다요소의 중복 허용 안한다.null 은 1개 까지만 허용한다add, equals, hashCode 에 추가 규정을 명시함a
MapHashMap 의 버킷의 자료구조는 LinkedList 와 BST 를 혼합해서 사용한다.HashMap 와 HashTable 의 차이는 HashMap 은 동기화를 지원하지 않고 해시 보조 함수를 사용한다.load-factor 는 버킷의 적재율을 나타나는데 적재율에
SerializableNIO직렬화가 필요한 이유는 메모리상 존재하는 객체를 String 이나 byte 형태로 드라이브 또는 통신 회선이 전달 가능한 형태로 변환하는 작업이 필요하다. NIO 는 스트림 대신 channel 과 buffer 로 데이터를 처리한다. IO 보다
네트워크 프로그래밍네크워크란 컴퓨터끼리 데이터를 주고 받는 시스템이다.Host : 네트워크에 연결된 컴퓨터Switch : Host가 네트워크 자체면 Switch 라 한다. 무엇을 스위칭 하는지가 중요하다스위칭이란 경로찾기 또는 인터페이스 선택 과정을 말한다.예시 : 라
프로젝트 기획 1회차핵심 기능 선정, 도메인 선정함아이돌 콘서트 전용 티켓팅 API 개발하기.아이톨 콘서트로 특정한 이유는 피켓팅 특성상 다량의 트래픽에도 견고한 티켓팅 서버를 개발할 것이다.프로젝트 명도 아이돌과 팬간 소통 플랫폼으로 유명한 '위버스' 사명을 차용함W
공유자원 A 을 사용하는 두 스레드가 있을 때, A 의 값은 CPU 의 캐시영역과 RAM 영역에 모두 존재할 수 있다. Thread1 의 A 에 대한 연산 결과가 CPU 캐시 메모리 존재할 시점에 Thread2 는 Thread1 의 쓰기 결과 값을 RAM 메모리에서 볼
오늘 프로젝트 회의에서는 협업 관련된 컨벤션들을 정했다. 회원 도메인은 페어프로그래밍한다.나머지 도메인은 각자 개발 후 approve 먼저받은 pr을 머지한다.저희는 gitlab-flow에 저희가 추가로 설정한 dev 브랜치 종류(feat, refactor)를 추가하였
프로그램 : 파일 시스템에 실행파일 형태로 존재하는 것프로세스 : 프로그램이 운영체제로 부터 자원을 할당받고 실행중인 프로그램이다.프로세스는 운영체제로 부터 독립적 공간인 Virtual Memory 를 할당 받는데, 0번째 주소부터 시작한다.Virtual Memory
MySQL timestamp & datetime 비교timestamp 는 숫자로 datetime 은 문자형으로 저장된다.timestamp 의 표현 크기는 4바이트라서 날짜 표현 범위가 '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:
객체지향 SOLID 원칙객체 지향의 특성을 올바르게 사용하기 위한 원칙들이다.객체 지향 4대 특성을 발판으로 하고 디자인 패턴의 뼈대이며 스프링 프레임워크의 근간이기도 하다.어떤 클래스를 변경해야 하는 이유는 오직 하나뿐이어야 한다. -로버트 C.마틴-쉽게 말해 하나
프로그래밍 언어의 발전 어셈블리어 > *어셈블리어(영어: assembly language) 또는 어셈블러 언어(assembler language)[1]는 기계어와 일대일 대응이 되는 컴퓨터 프로그래밍의 [저급 언어](https://ko.
모든 의사 결정은 근거를 갖고 하기 -> 문서화 연습으로 훈련하기의사 결정을 위해 후보군 선정, 장단점 조사, 결정까지 생각보다 고려할게 많았다. Status: 확정Deciders: 쌍문데브킴, 구의데브리Date: 2023-07-17Technical Story: \[G
암호화 알고리즘 조사종류별 특징패스워드 암호화에 적합한 것비밀번호는 복호화할 수 없게 단방향 암호화를 해야한다.비밀번호 암호화에는 해시 함수를 사용하는데 원문을 알아내지 못하도록 salting 이나 key stretching 으로 다이제스트 생성 로직을 강화한다.메세
객체지향 4개 특징 - 도구객체지향 원칙 SOLID - 도구 사용 방법디자인 패턴 - 레시피 / 객체 지향 특성과 설계 원칙을 기반으로 구현돼 있다. 스프링 프레임워크 - 객체 지향의 특성과 설계 원칙을 극한까지 적용한 OOP 프레임워크Adapter 란 변환기를 뜻한다
Adapter 란 변환기를 뜻한다.어댑터는 하나의 인터페이스를 다른 인터페이스로 변환하는 역할
스프링에서 순환참조
참고 : 재사용성과 다이나믹 디스패치, 더블 디스패치(토비님 강의) https://www.youtube.com/watch?v=s-tXAHub6vg Dependency 의존 관계 Supplier의 변화가 Client에 영향을 주는 경우 의존 관계 발생 Supp
...
자기 자신을 호출하는 함수점화식이 존재하는 문제는 재귀 함수로 접근하는 방법이 더 쉽다.재귀 함수를 사용하면 상태 변화시키는 데 변수를 사용할 일이 줄어 사이드 이펙트를 줄일 수 있다.단점은 재귀의 최대 범위와 한계점파이썬은 1000개꼬리 재귀(tail recursio
반복문 내에서 호출한 재귀함수는 호출스택에 어떤 순서로 쌓이는지 이해하지 못했다. 아래 처럼 변수가 들어온 값을 찍어보고나서 순서가 이해되었음.. 아래 왼쪽 사진은 회색은 기저조건에 의해 함수가 종료되는 입력값이다. UntitledUntitledstep 변수를
다른 것에 의지하여 존재함.어떤 프로그램이나 실체의 정의와 기능이 전적으로 특정한 하드웨어와 소프트웨어 또는 앞서 진행된 이벤트나 상황에 의존하거나 종속적인 상태.의존성은 굉장히 포괄적인 단어다. 프로그래밍에 적용해 봐도 라이브러리 간 의존성, 객체 간 의존성, 패키지
10만 이하에서 여러 숫자 비교할 경우 → 에라토스테네스 체 방식 에라토스테네스 체 : 주어진 숫자 범위에서 2의 배수, 3의 배수, 5의 배수, 7의 배수를 제거하고 남는 수가 소수다 단순히 주어진 숫자가 소수인지 판별하거가 숫자가 제법 큰 경우 → 주어진 숫자의
AOP의 필연적 등장배경스프링이 도입한 이유장점단위 테스트를 할 때는 테스트할 객체를 고립된 환경으로 만들어줘야 한다. 연관관계에 있는 객체가 외부 리소스에 의존하고 있는 상태라면 대역 객체로 대체해주면 된다.단위 테스트의 번거로운 점은 이 대역을 만드는 일이다. 그래
원하는 작업을 하기 위해 기준을 정하여 데이터를 정렬하려는 목적으로 사용한다.현재 자신과, 그 다음을 비교하여 다음 숫자가 더 작다면 서로의 위치를 바꾸는 작업을 정렬이 모두 끝날 때까지 반복하는 방법가장 작아 보이는 숫자를 계속해서 앞으로 밀어주는 방식현재 위치에서
장점명시적인 네이밍이 가능하다.객체 캐싱생성자에 있는 로직을 정적 팩토리 메서드로 캡슐화할 수 있다. 생성자에 위치한 일련의 작업들을 정적 팩토리 메서드로 캡슐화 하는 것이다. Proxy 의 newProxyInstance() 메소드를 통해서만 생성이 가능한 다이나
정렬의 조건을 변경한다는 것은 핵심으로 보는 데이터가 무엇인지를 재정의한다는 사실functools.cmp_to_key(func)Transform an old-style comparison function to a key function. Used with tools t
ACID : 원자성, 일관성, 격리성, 지속성원자성원자성이란 더이상 나눌 수 없는 논리적 작업 단위를 뜻하는 것으로서 여러 작업이 하나의 원자적인 트랜잭션으로 묶여있다면 전체가 커밋되거나 롤백되어야 한다.트랜잭션이 성공하면 커밋하거나 중간에 실패하면 이전 완료된 작업
코드에 의한 트랜잭션 경계설정선언적 트랜잭션 경꼐 설정기존 코드에 영향을 주지 않으면서 간단한 설정으로 트랜잭션 경계를 설정할 수 있다. 트랜잭션 전파란 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법을 결정하는 속성이다. 선언적 트랜잭션의 장점은 여러 트랜잭션을
쿼리 결과를 List<TicketGrade> 로 맵핑하려고 했다. 그러나 결과는 리스트에 널이 담겨졌다.
피드백이렇게 생성자 내부에서 ticketSerialNumber를 생성해주도록 설정한 이유가 있을까요?ticketSerialNumber에는 별도의 비즈니스 로직은 넣지 않을 예정인가요? (추적이 편하도록 날짜\_공연장\_ID 형식으로 생성하기도 합니다)ticketSeri
Weaving
트랜잭션 매니저에게 트랜잭션 오브젝트 요청비즈니스 로직 시작런타임 예외 발생시 롤백커밋PlatformTransactionManager 의 기본 기능getTransactioncommitrollbackAbstractPlatformTransactionManager.getTr
어플리케이션을 구성하는 오브젝트들은 유사한 성격을 띤 그룹으로 나눌 수 있다.성격이 다른 것은 아키텍처 레벨에서 분리해주는 게 좋다.분리의 장점독자적 개발, 테스트가 가능하다.변경시 계층간 서로 영향을 주지 않고 변경될 수 있을 만큼 유연하다.책임과 성격이 다른 것을
switch-case 문에서 String 을 비교하는 방법 String hashCode 를 생성해 int 를 비교한다. 숫자들이 정렬되어 있다.switch-case 문의 case 가 많을 경우 작은 숫자부터 큰 숫자를 비교하는 게 가장 빠르다.for 문 내부에서 주의
애플리케이션 로직 빈애플리케이션 인프라스트럭처 빈빈 구성 정보에 의해 컨테이너에 등록되는 빈이지만 애플리케이션의 로직이 아니라 애플리케이션이 동작하는데 꼭 필요한 기술 기반을 제공하는 빈이다.컨테이너 인프라스트럭처 빈스프링 컨테이너 자신이거나 스프링 컨테이너의 기능을
클래스 로더가 JVM 으로 .class 파일을 로딩할 때 lazy-loading 을 한다. 프로세스가 동작중에 필요한 클래스가 있으면 그때 그때 로딩을 한다. 그러므로 최초 자바 프로세스가 떴을때 최초 호출되는 클래스는 로딩 시간이 필요하다. JVM 은 프로그램 목적
생성 후 그 상태를 바꿀 수 없는 객체java.lang 패키지의 Integer, Boolean 등등 래퍼클래스GC 성능 높일 수 있다. 불변 객체의 필드는 불변객체의 생명 주기와 함께한다. GC 스캔 대상에서 제외되기 때문에 GC 시 효율적으로 제거된다. 반재로 가변
전체 구조 커넥션 핸들러스토리지 엔진에 쓰기 또는 읽기를 요청할 때 사용하는 API 를 핸들러 API 라 한다.SQL 인터페이스SQL 파서SQL 옵티마이저캐시 & 버퍼InnoDB 엔진성능 향상 위해 InnoDB 버퍼 풀 내장MyISAM 스토리지 엔진성능 향상 위해
JVM 은 OS 를 이용해 동적으로 메모리 관리를 하지 않고, JVM 에 할당된 연속된 단일 메모리 풀을 관리한다.JVM 은 메모리를 GC 라는 알고리즘으로 관리한다.GC 가 어플리케이션의 성능에 영향을 미칠때GC 발생GC 발생시 각 영역에서 다른 영역으로 이동할 때
MySQL
Real My SQL 4장에 등장한 CS 용어 정리
Collector 종류 parallel collector, 병렬 수집기 concurrent collector G1
@ConfigurationProperties
스토리지 엔진 레벨MySQL 엔진 레벨MySQL 엔진 레벨의 잠금은 스토리지 엔진에 영향을 미치지만 스토리지 레벨 엔진은 MySQL 엔진에 영향을 미치지 않는다. 테이블 락테이블 데이터 동기화를 위한 락메타데이터 락테이블 구조 잠금 락획득 : Flush Table Wi
Throughput, 처리량 : 애플리케이션 런타임 시간과 메모리 할당 및 가비지 수집에 소요된 총 시간의 비율ex) 처리량이 95%라면 애플리케이션 코드가 95%의 시간 동안 실행되고 가비지 수집이 5%의 시간 동안 실행된다는 의미Latency : 가비지 수집 일시
MySQL 잠금, 트랜잭션컴퓨터 구조
가상 면접 사례로 배우는 대규모 시스템 설계 기초MySQL 락, 트랜잭션 under the hood
MYSQL
메모리에서 읽어 들일 명령어의 주소를 저장해석할 명령어를 저장하는 레지스터.제어장치가 명령어 레지스터의 명령어를 받아 이를 해석하고 제어 신호를 내보낸다. 메모리의 주소를 저장하는 레지스터메모리와 주고받을 값을 저장하는 레지스터다양하고 일반적인 상황에서 자유롭게 사용할
no hang up : 끊지마리눅스, 유닉스에서 쉘스크립트파일 (\*.sh)을 데몬형태로 실행시키는 프로그램터미널 세션이 끊겨도 실행을 멈추지 않고 동작하도록 함세션과 연결을 종료해도 nohup 으로 돌린 프로세스는 데몬 형태로 실행되게 되어 종료되지 않고 계속 실행된
MySQL 복습 : MVCC, REDO, UNDOMySQL 인덱 공부컴퓨터 구조 공부
B-TreeB-Tree 란정렬 방법데이터 조회 과정장점&단전
어제 학습 부족했던 B-tree 인덱스 다시 정리
AWS EC2 인바운드 규칙에서 처음에 사용자 지정 TCP 에 인바운드를 허용할 포트를 지정했는데 네트워크 통신이 안되었다. 결과적으로 원인은 Http 프로토콜의 port 인 80 을 열어주지 않아서 그랬던 것.port는 데이터가 들어오고 나가기 위한 출입구와 같다.
아래 내용 출처 : https://www.youtube.com/watch?v=sIPU_VkrguI프로그래머가 작성한 소스코드를 기계어로 변환하는 과정소스코드 파일을 컴퓨터에서 실행할 수 있는 소프트웨어 산출물로 만드는 과정빌드의 결과물을 사용자가 접근할 수 있
Java Archive file format 으로 스프링 부트를 구성하는 파일들을 하나의 파일로 패키징 한 것JAR 파일에는 class 파일과 어플리케이션 실행을 위한 관련 파일들이 담기게 된다.보안 : JAR 파일 내용에 서명해서 권한 체크를 할 수 있음다운로드 시간
원본 글 있는 링크 : https://guui-dev-lee.tistory.com/7Intro맥락원인 분석해결 방법Intro환경Spring Boot 3.1.1spring-boot-starter-jdbc 3.1.1스프링 부트에서 @ConfigurationProp
https://stackoverflow.com/questions/10379956/parsing-sql-like-syntax-design-patternhttps://stackoverflow.com/questions/10379956/parsing-sql-
질문 답변하기도커는 독립적으로 HW와 OS를 사용하는 가상머신이 아닌 프로세스기 때문에 도커로 프로세스를 띄워도 성능적으로 큰 문제는 없습니다. 도커는 프로세스처럼 똑같이 메모리의 유저 영역에 띄워지며 컴퓨터의 OS, H/W 의 자원 요청을 대리해주는 Docker En
도커를 띄우는 서버가 리눅스계열 OS가 아닐경우 성능상 안좋은 영향 >
상호간에 코드 리뷰를 수행함으로써 미래에 발생할 사이트 이펙트를 예측하거나 구조적으로 문제가 있는 부분을 찾아서 이를 개선소스코드 내에 존재하는 중복 코드를 제거하여, 추후 발생할 수 있는 유지보수 상의 문제점을 방지합니다. 만약 중복 코드가 존재하고 코드에 대한 수
패키지란 연관된 클래스끼리 그룹핑하는 것입니다. 파일 디렉토리로 치자면 폴더와 비슷합니다. 클래스 그룹핑의 기준은 레이어와 도메인으로 나눌 수 있습니다. 레이어는 어플리케이션을 계층으로 나누고 같은 계층에 속하는 클래스끼리 한 패키지에 놓을 수 있습니다. 3-tier
Inner Class란?
어노테이션이란 코드를 실행하기 위해 필요한 메타 정보를 제공하는 기술입니다. 어노테이션 자체는 아무런 기능도 하지 않으며, JVM 이 어노테이션이 제공하는 메타 정보를 참고하여 필요한 로직을 수행합니다.
오버라이딩된 메서드를 실행하면 런타임 시에 호출해야 될 구체 클래스의 메서드가 결정됩니다. 이것을 다이나믹 메서드 디스패치라고 합니다. 참조변수.메서드() 를 만나면 참조되는 실제 객체의 타입에 따라 오버라이드된 메서드 버전을 결정해 호출합니다.다이나믹 메서드 디스패치
상속 관계는 분류도라고 볼 수 있습니다. 슈퍼 클래스는 서브 클래스를 포괄하는 개념으로서 서브 클래스는 슈퍼 클래스를 확장 또는 세분화하는 것이 상속입니다.추상화는 여러 객체들을 하나의 관심사로 바라봤을 때 공통의 상태나 행위를 추출하는 것을 추상화라하며 이는 모델링
서버 3개월 운영 비용 계산하여 적당한 스펙의 서버 구매했음Ncp 는 server 가 클래식, vcp 버전으로 나뉘어져 있었슴..삽질 : 호기롭게 구매부터 했는데 잘못 사서 반납했다.. Ncloud 문서를 가볍게 스키밍하고 했었으면 만원 안날렸다...AWS 보안 그룹
객체지향 원칙 SOLID 는단일 책임 원칙리스코프 치환 원칙개방-폐쇄 원칙인터페이스 분리 원칙의존 역전 원칙이 있습니다. 이 원칙들을 알아야 하는 이유는 객체지향을 베스트 프랙티스로 사용하기 위한 노하우들이 정의된 것이므로 이 원칙들을 적절하게 준수한다면 잘못된 객체지