목록코딩 (241)
보라코딩

https://www.youtube.com/watch?v=L7Q6vruRiI0&ab_channel=TTABAE-LEARN 결론 :: 과금...ㅎ.ㅎ프리티어는 다 무료인줄 알았는데탄력적 ip와 NAT gateway 덕분에 과금되었다... 모르면 이렇게 됩니당 ㅠㅠ공부해야지...
좋은 예외(Exception) 처리좋은 예외 처리는 견고한 프로그램을 만들고, 좋은 사용자 경험을 줄 수 있다. 예외 처리를 통해 애플리케이션이 예기치 않게 종료되는 것을 방지하고, 갑작스런 종료 대신 사용자는 무엇이 잘jojoldu.tistory.com 일급 컬렉션 (First Class Collection)의 소개와 써야할 이유최근 클린코드 & TDD 강의의 리뷰어로 참가하면서 많은 분들이 공통적으로 어려워 하는 개념 한가지를 발견하게 되었습니다. 바로 일급 컬렉션인데요. 왜 객체지향적으로, 리팩토링하기 쉬운 코jojoldu.tistory.com HTTP API 디자인 - URI편마틴 파울러의 블로그를 가보면 Leonard Richardson이 제안한 HTTP API 성숙도 모델 (Richards..
*** MySQL 성능 최적화 *** - MySQL 기본이 지연로딩. 필요할 때까지 데이터를 로드하지 않아 초기 로딩 시간 줄이고 성능 향상 - 조인 쿼리에서 성능을 최적화하려면 작은 테이블을 Driving Table로 사용하는 것이 좋습니다. 작은 테이블을 사용하면 검색 범위가 줄어들어 전체 쿼리의 성능이 향상 - WHERE 절에 정규식을 사용하면 테이블 풀 스캔이 발생하여 성능이 저하됩니다. 따라서 피하는 것이 좋음 - 백만건 이상 데이터부터 성능 최적화 필요 - 문제: LIKE 연산자에서 '%abc' 패턴을 사용하면 인덱스를 사용할 수 없어서 풀 스캔이 발생 ㄴ 해결책: 'abc%' 패턴을 사용하면 인덱스를 활용할 수 있음 ㄴ 추가 팁: LIKE 연산자를 사용하기 전에 WHERE 절이나 ..
try-with-resources 자바에서 자원을 관리하는 효율적인 방법 중 하나이 구문을 사용하면 파일이나 네트워크 연결과 같은 자원을 자동으로 닫아주기 때문자바 7부터 도입된 이 기능은 자원을 사용한 후에 명시적으로 닫아줘야 하는 번거로움을 줄여줌try-with-resources는 AutoCloseable 인터페이스를 구현한 모든 객체에 사용할 수 있습니다. 왜냐하면 AutoCloseable 인터페이스에는 close() 메소드가 정의되어 있으며, try-with-resources 구문이 종료될 때 자동으로 이 메소드가 호출되기 때문입니다. 이 구문의 사용은 매우 간단합니다. try 괄호 안에 자원을 선언하면, 해당 블록의 실행이 끝나면 자동으로 자원이 닫힙니다. 왜냐하면 자바 런타임이 자동으로 cl..
드라이빙 테이블 드라이빙 테이블(Driving Table)은 SQL 조인(query join)에서 쿼리 최적화를 위해 중요한 개념입니다. 드라이빙 테이블은 조인에서 가장 먼저 읽히는 테이블을 의미하며, 이를 기반으로 다른 테이블들과의 조인이 이루어집니다. 드라이빙 테이블을 잘 선택하면 쿼리 성능을 크게 향상시킬 수 있습니다. MySQL에서 드라이빙 테이블 선택하기MySQL의 쿼리 최적화는 주로 쿼리 옵티마이저(Query Optimizer)에 의해 자동으로 수행됩니다. 하지만 때로는 쿼리 힌트를 사용하여 드라이빙 테이블을 명시적으로 지정할 수 있습니다. 성능 최적화 예시예를 들어, 두 개의 테이블 orders와 customers가 있다고 가정해봅시다. orders 테이블이 크고, customers 테이블이..
Lazy 로딩을 사용할 때 N+1 문제가 발생하지 않는 이유 Lazy Loading (지연 로딩) 동작 원리지연 로딩 설정: JPA에서는 연관 관계를 지연 로딩으로 설정할 수 있습니다. 이는 연관된 엔티티를 실제로 사용할 때까지 데이터베이스에서 가져오지 않고, 필요할 때 로딩하는 방식입니다.Proxy 객체 생성: Lazy 로딩이 설정된 연관 관계는 실제 엔티티 대신 프록시(proxy) 객체를 반환합니다. 프록시 객체는 실제 엔티티를 대신하여 필요한 시점에 데이터베이스에서 엔티티를 로딩하는 역할을 합니다.첫 번째 쿼리 실행: 예를 들어, 부모 엔티티를 조회할 때 연관된 자식 엔티티는 초기에 로딩되지 않고, 대신에 해당 자식 엔티티들에 대한 데이터베이스 쿼리가 발생하지 않습니다. 대신, 부모 엔티티의 필드..
AOP (Aspect-Oriented Programming)는 프로그래밍에서 코드를 재사용하기 쉽게 만드는 기법입니다. 특히, 여러 곳에서 반복되는 관심 사항(예: 로깅, 보안, 트랜잭션 관리 등)을 한 곳에서 관리할 수 있도록 도와줍니다. AOP를 사용하면 코드의 중복을 줄이고 유지보수성을 높일 수 있습니다. 1. 프록시 객체의 역할프록시 객체는 스프링 AOP에서 중요한 역할을 합니다. 주로 다음과 같은 상황에서 사용됩니다:트랜잭션 관리: @Transactional 어노테이션이 붙은 메소드의 경우, 스프링은 해당 메소드를 호출할 때 프록시 객체를 생성하여 메소드 실행을 감싸고 트랜잭션 관리를 수행합니다.보안 제어: 특정 사용자가 접근할 수 있는 메소드를 제어하기 위해 프록시 객체를 사용하여 접근 권한..
SPA(Single Page Application)는 하나의 웹 페이지로 구성된 웹 애플리케이션을 말합니다. 기존의 다중 페이지 웹 애플리케이션과는 달리, SPA는 단 하나의 HTML 페이지를 사용하고, JavaScript를 이용해 동적으로 내용을 갱신합니다. 이는 웹 애플리케이션을 보다 빠르고 사용자 친화적으로 만들어줍니다. 다음은 SPA의 주요 특징과 장점, 그리고 몇 가지 대표적인 프레임워크에 대한 설명입니다.주요 특징단일 HTML 파일: 초기 로딩 시에 하나의 HTML 파일을 서버로부터 가져옵니다. 이후 페이지 이동은 JavaScript를 통해 이루어집니다.클라이언트 사이드 라우팅: 페이지 이동 시 전체 페이지를 다시 로딩하는 것이 아니라, JavaScript를 통해 필요한 부분만 갱신합니다.빠른..
PostgreSQL을 사용하는 이유1. 데이터 관리 방식의 차이MySQL: 주로 테이블 단위로 데이터를 관리하며, 트랜잭션 처리 시 테이블 레벨의 잠금을 사용합니다.PostgreSQL: 레코드 단위로 데이터를 관리하며, 다중 버전 동시성 제어(MVCC)를 통해 레코드 레벨의 잠금을 사용하여 동시성을 높입니다.2. 성능 최적화 (버퍼와 언두 로그)MySQL: 많은 양의 데이터를 처리할 때, 예를 들어 만 건의 레코드를 한 번에 디스크로 옮기는 방식으로 작업을 처리합니다. 이는 대량의 데이터를 처리하는 데 유리할 수 있지만, 작업량이 많아질수록 성능 저하가 발생할 수 있습니다.PostgreSQL: 트랜잭션 처리 시, 데이터 변경 사항을 하나씩 차례로 디스크로 옮기는 방식을 사용합니다. 이러한 방식은 변경 사..