목록전체 글 (401)
happy coding
새로 들어간 회사에서 DB 및 인프라 구축을 담당하게 되었다.일단 내가 받은 과제는 기존 서비스의 문제와 안정적인 운영을 위한 인프라 이전. 디비 스키마를 뜯어보다가 인덱스를 잊어서 한 번 실습해보았다.일단 하기 전에 docker를 활용해 테스트 DB 만들었다. 여기에다 이제 십만, 백만 데이터를 넣어서 인덱스의 중요성을 일단 파악해보자.이때 seq scan -> 인덱스 없이 전체 다 뒤졌다.근데 인덱스가 없는데 빨리 읽어야 하니 병렬로 cpu 3개써서 읽었다. 라는 의미이다. index를 추가하면, 22.129 ms에서 0.067 ms로 확연히 줄은걸 볼 수 있다.
먼저 단어를 뜯어보자Context라는 단어는 직역하면 문맥, 맥락, 상황이라는 의미이다.예를 들어 같은 코드라도어디에서 실행되는지어떤 변수들이 보이는지this가 무엇을 가리키는지가 달라지면 의미와 결과가 달라진다.함수 선언만 있을 때는 아직 실행하는 게 아니라,함수가 호출되는 순간,어떤 변수들을 쓸 수 있는지스코프는 어디까지 연결되는지this를 뭐로 둘지를 즉시 결정해야 한다는 점이, 이 Context가 Execution 시점에 생성된다는 걸 의미한다.다시 말해,Execution Context는, "코드가 실행되는 순간에 필요한 환경, 실행할 코드에 제공할 환경 정보들을 모아놓은 객체"라고 할 수 있다.실행 컨텍스트 종류에는타입설명실행 컨텍스트 종류global code전역에 존재하는 소스코드Global ..
종종 spring과 springboot를 오인하는 사람이 있어서(사실 내가), 한 번 정리해보고 싶었다.SpringJava 서버 어플리케이션을 만들기 위한 프레임워크 모음핵심 역할은객체 생성과 의존성 관리(DI / IoC)웹 요청 처리(Spring MVC)트랜잭션 관리AOP등이다.하지만 전통적인 Spring은 다음과 같은 이유로 가볍지 않다는 단점이 있었다.설정 파일이 많다(XML, Java Config)서버를 직접 설치해야 한다(Tomcat 따로)라이브러리 버전 충돌이 잦다프로젝트 시작까지 준비 시간이 길다다시 말해, 유연하지만 시작 비용이 큰 프레임워크다.SpringBootSpring을 "바로 실행 가능하게"만든 도구다.더 쉽게 쓰게 만든 레이어!Auto ConfigurationSpringBoot의 ..
ddl-auto란애플리케이션 시작/종료 시점에 JPA 구현체(Hibernate 등)가 DB스키마를 어떻게 다룰지 결정하는 옵션이다.보통 application.yml 또는 application.properties에 있다. 왜 이름이 ddl-auto냐고 하신다면 아래를 읽어보시길DDL : create/alter/drop 같은 스키마 정의 SQLauto : 그걸 Hibernate가 자동으로 해줄지 말지각 옵션을 정리해보자.none스키마에 아무 작업도 하지 않을 때 사용한다. 보통 prod에서 사용해서, JPA는 매핑(ORM역할)만, 스키마 관리는 전부 DBA나 마이그레이션 도구(수동)로 한다. 이때 validate와 다른 점은, DB가 이미 완벽하게 관리되고 있다는 전제를 갖고 앱은 DB 구조를 신뢰하는 상태..
브라우저가 화면을 그릴 때 반드시 거치는 작업인 reflow와 repaint문제가 자주 발생한다면, 렌더링 성능이 저하되고, 사용자 체감 성능이 악화된다.이야기 하기 전Reflow레이아웃을 다시 계산하는 과정 -> 구조 계산 왜 Reflow냐면flow라는 건, 요소들이 위에서 아래로, 왼쪽에서 오른쪽으로 어떤 순서와 규칙으로 흐르듯 배치되는 과정을 의미한다.다시 말해, 진짜 재배치를 의미한다. Reflow가 발생하는 조건은DOM 구조가 변경되거나요소의 크기/위치 관련된 CSS가 변경되었을 때특징은부모 -> 자식 요소까지 연쇄적으로 영향이 가고비용이 매우 큼대표적으로width, height, margin, padding, border 등이 있다.Repaint레이아웃은 그대로고, 화면의 외형만 다시 그리는 ..
들어가기 전에백엔드 서버는 데이터를 저장하고, 읽고, 수정하고, 삭제하는데 이때 이 데이터는 데이터베이스에 저장된다.이 데이터베이스와 대화하기 위해서는 SQL이라는 언어를 사용한다.하지만 Java로 서버를 만드는데 매번 문자열로 SQL을 직접 쓴다는 점은,테이블과 객체 사이의 변환이 귀찮고컬럼이 바뀌면 코드를 다 수정해야 한다.타입에 대한 안정성이 없고실수가 많아질 수 있다.그래서 이 문제를 해결하려고 나온 개념이 ORM이다. ORM(Object-Relational Mapping)이란객체와 테이블을 자동으로 연결해주는 기술이다. 다시말해, DB의 row 하나가 Java 객체 하나이다.DBJavatableclassrowobjectcolumnfield JPA(Java Persistence API)란라이브러리..
클로저(Closure)란 무엇일까사실 잘 몰라서 구글링해봤다.클로저는 함수가 만들어질 때의 스코프를 기억해서, 그 함수가 나중에 실행돼도 그 스코프에 접근할 수 있는 것이다. 라고 하지만 사실 크게 와닿지 않는다. 그래서 gpt에게 물어봤다.클로저는 '왜 JavaScript에서만 필요한 개념인지' 와 '왜 사용하는지'에 대해 질문을 개념 정의하다보니 알게 되었다.다시 생각을 정리해보면,JavaScript의 상황상 "함수는 값"인데, 변수를 담아도 되고, 이걸 나중에 실행해도 되는 등 "함수가 실행되는 시점"과 "함수가 만들어진 시점"이 다를 수 있다. 이때 Closure는 "함수가 실행되는 시점"이 아닌 "함수가 만들어진 시점을 꺼내도록"하는 거였다.“어떤 함수가 외부 변수를 참조하고 있으면, 그 변수는..
문제 설명연속된 세 개의 정수를 더해 12가 되는 경우는 3, 4, 5입니다. 두 정수 num과 total이 주어집니다. 연속된 수 num개를 더한 값이 total이 될 때, 정수 배열을 오름차순으로 담아 return하도록 solution함수를 완성해보세요.제한사항1 ≤ num ≤ 1000 ≤ total ≤ 1000num개의 연속된 수를 더하여 total이 될 수 없는 테스트 케이스는 없습니다.내 풀이등차수열 해서 3n을 사용하려고 힘내다가 죽도밥도 안된 케이스def solution(num, total): ans = [] # 연속된 수 중 가운데 n = total // num a = num // 2 for i in range(-a, num-a): ..