본문 바로가기

ComputerScience

(72)
[Database] Join의 의미와 여러 종류의 Join SQL에서 join join은 SQL에서 두 개 이상 테이블 데이터를 함께 조회하는 것을 말한다. join은 여러 종류의 join이 존재한다. Implicit join과 Explicit join SELECT D.name FROM employee AS E, department AS D WHERE E.id = 1 and E.dept_id = D.id; 위 SQL문은 implicit join을 사용한 예시이다. implicit join은 from 절에는 table들만 나열하고 where절에 join condition을 명시하는 방식이다. implicit join은 where절에 selection condition과 join condition이 같이 있기 때문에 가독성이 떨어지며, 실수할 가능성이 높아서 exp..
[Database] 데이터베이스의 파티셔닝, 샤딩, 레플리케이션 파티셔닝(Partitioning) 파티셔닝은 테이블을 더 작은 크기의 테이블로 나누는 것으로, Vertical Partitioning과 Horizontal Partitioning으로 나눌 수 있다. Vertical Partitioning은 컬럼을 기준으로 테이블을 나누는 방식으로, 데이터 테이블을 정규화하기 위해 사용될 수도 있으며, 다른 경우에도 활용할 수 있다. Vertical Partitioning을 통해 컬럼을 나눠 서로 다른 테이블에 저장할 수도 있으며, 게시판에서 게시물의 조회수, 댓글 수 등을 별도의 테이블로 나눠 저장할 수 있다. Horizontal Partitioning은 행을 기준으로 테이블을 나누는 방식이다. Vertical Partitioning으로 컬럼 기준으로 테이블을 나누어 데..
[Database] 인스타그램의 Justin Bieber 문제 ️Justin Bieber 문제 Justin Bieber 문제는 인스타그램에서 저스틴 비버가 사진을 업로드할 때 마다 인스타그램이 다운되거나 매우 느려지는 현상을 말합니다. 이는 그 당시 인스타그램의 '좋아요' 수를 계산하는 방식 때문이었습니다. 인스타그램에서는 어떤 유저가 언제 어떤 사진에 '좋아요'를 클릭했는지 알 수 있습니다. 그래서 저스틴 비버의 팔로워들에게 그의 최신 사진을 표시할 때 해당 사진을 본 모든 사람에 대해 '좋아요' 수를 최신화된 수치로 보여주어야 했습니다. '좋아요' 수를 계산하기 위한 테이블로 다음과 같은 DB 테이블를 구성해보겠습니다. Photos id title user_id file_url 1 Photo A 2 http://example.com/photo1.jpg 2 Pho..
[Database]DB 정규화(normalization)개념과 정규화 과정(Normal form), 1NF ~ BCNF 데이터베이스 정규화와 Normal Form 테이블 정규화는 중복 데이터와 데이터 업데이트 충돌을 최소화하기 위해, 일련의 normal forms(NF)에 따라 relational DB를 구성하는 과정 Normal Form(NF)이란 정규화 과정에서 준수해야 하는 규칙들이며, 처음부터 순차적으로 진행하며 normal form을 해당 규칙을 모두 만족할 때 1NF부터 BCNF까지 적용할 수 있다. 1NF와 BCNF는 functional dependency와 key로만 정의될 수 있다. 1NF부터 BCNF까지 를 만족하면 데이터베이스가 정규화됐다고 말하기도 하며, 일반적으로 실무에서는 3NF 혹은 BCNF까지만 진행하는 경우가 많다. 5NF나 6NF 같은 경우에는 대부분의 경우 발생하지 않으며, 상당히 복잡하..
[Development] 테스트 주도 개발 (Test-Driven Development) 테스트 주도 개발 (Test-Driven Development) TDD란 Test-Driven Development의 줄임말로 '테스트 주도 개발'이라는 의미를 가지고 있습니다. 테스트 주도 개발은 반복 테스트를 이용한 소프트웨어 개발 방법론으로서 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소프트웨어 개발 방식입니다. 애자일 방법론 중 하나인 익스트림 프로그래밍(eXtream Programming)의 Test-First 개념에 기반을 둔, 개발 주기가 짧은 개발 프로세스로 단순한 설계를 중시합니다. 애자일 소프트웨어 개발 방법론(Agile Development)과 익스트림 프로그래밍(Extreme Programming) 애자일은 신속한 반복 작업을 통해 실제 작동 가..
[Java] Logback - 로깅 라이브러리 Logging Logging(로깅)이란 애플리케이션이 동작하는 동안 시스템의 상태나 동작 정보를 시간순으로 기록하는 것을 의미합니다. 로깅은 개발 영역 중 '비기능 요구사항'에 속합니다. 즉 필수적인 기능은 아니나, 로깅은 디버깅하거나 갭라 이후 발생한 문제를 해결할 때 원인을 분석하는 데 유용합니다. 자바 진영에서 가장 많이 사용되는 Logging 프레임워크는 Logback입니다. Logback Logback은 *log4j 이후에 출시된 로깅 프레임워크로서 *slf4j를 기반으로 구현됐으며, 과거에 사용되던 Log4j에 비해 월등한 성능을 자랑합니다. *log4j: Apache log4j는 Java 기반의 로깅 유틸리티로서, 로그를 파일, 콘솔, HTML, 데이터베이스 등 다양한 대상에 출력할 수 있습..
[Java] immutable(불변) 객체란? 자바에서 불변(Immutable) 객체에 대한 이해 가변 객체는 상태 정보를 변경할 수 있어 불안정하고, 작업 전후에 일일이 코드를 확인하거나 DB를 호출해야한다. 하지만 불변 객체는 한번 만들어지면 상태가 변경되지 않아 안정적인 개발이 가능하다. 불변(Immutable)객체는 생성 이후에 상태가 변하지 않는 객체이다. 불변 객체는 중복 제거의 장점을 가지며, 안전한 서비스 개발에 도움이 된다. 예를 들어 DB에서 객체 정보를 받아와 작업할 때, 의도치 않게 불변 객체의 정보를 변경하려는 경우 불변 객체를 사용하면 이를 방지할 수 있다. 또한 map, set, cache에 쓰기에 적절하다. 불변 객체를 사용하면 Thread-safe의 장점이 있다. 데이터 불일치 역시 없어, 안전하게 여러 셀에서 상태정보..
[Java] JUnit5 JUnit JUnit은 자바 언어에서 사용되는 대표적인 테스트 프레임워크로서 단위 테스트를 위한 도구를 제공합니다. 또한 단위 테스트뿐만 아니라 통합 테스트를 할 수 있는 기능도 제공합니다. JUnit의 가장 큰 특징은 어노테이션 기반의 테스트 방식을 지원한다는 것입니다. 또한 JUnit을 활용하면 assert문을 통해 테스트 케이스의 기댓값이 정상적으로 돌출됐는지 검토할 수 있다는 장점이 있습니다. JUnit의 세부 모듈 JUnit Platform JUnit Platform은 JVM에서 테스트를 시작하기 위한 뼈대 역할을 합니다. 테스트를 발견하고 테스트 계획을 생성하는 테스트 엔진(TestEngine)의 인터페이스를 가지고 있습니다. 테스트 엔진은 테스트를 발견하고 테스트를 수행하며, 그 결과를 보고..