목록Back-end (17)
장미정원

인덱스인덱스는 데이터베이스 튜플의 검색 속도 향상을 위한 자료구조입니다.인덱스는 우리 생활에서도 정말 많은 부분에서 사용됩니다. 만약 책의 원하는 부분을 찾기 위해 책의 첫 페이지부터 모든 페이지를 한 장씩 찾는다면 굉장히 오랜 시간이 소요됩니다. 하지만 책의 맨 앞에 있는 목차(인덱스)를 확인하면 원하는 부분을 쉽고 빠르게 찾을 수 있습니다. 인덱스를 사용하지 않는 컬럼으로 조회를 진행한다면 테이블 전체를 Full Scan 해야 하기 때문에 굉장히 오랜 시간이 소요됩니다. 하지만 인덱스를 사용하는 컬럼으로 조회를 한다면 테이블 전체를 Full Scan 하지 않고 인덱스라는 자료구조를 통해 조건에 맞는 데이터를 찾게 됩니다. 그 후 조건에 맞는 데이터를 찾았다면 해당 데이터의 주소값으로 바로 해당 튜플..

AOPAOP(Aspect Oriented Programming), 관점지향프로그래밍은 핵심기능과 부과기능을 구분하여 반복적으로 사용되는 기능을 모듈화하여 공통 관심사로 분리하여 프로그래밍하는 것입니다. AOP를 구현하면 공통 기능이 추가되었을 대 핵심기능에 코드를 수정하지 않으면서 공통기능에 대한 구현을 추가하는 것입니다. 위와 같이 주문 관련 기능이 있다고 가정해보겠습니다. 여기서 각각의 핵심 기능인 주문받기, 주문정보조회 전, 후에 로그를 남겨야 한다면 각각의 핵심 기능 코드에 직접 로그를 출력하는 코드를 작성해야합니다. 이렇게 된다면 중복되는 코드가 많아지고 직접 핵심 기능의 코드를 수정해야하기 때문에 유지보수가 힘들어집니다. 여기서 AOP의 개념을 적용시킨다면, 핵심기능과 부과기능의 관점을 분..

GC란?GC(Garbage Collector)는 주기적으로 힙 메모리의 사용하지 않는 객체를 검사하여 청소해줍니다. C, C++과 같은 언어들은 Unmanaged Language로 생성한 객체에 대한 메모리 헤제를 직접 해야합니다. 하지만 이렇게 매번 객체를 생성하고 그 객체를 직접 해제하는 작업은 매우 번거롭고 휴먼에러가 발생할 가능성이 커집니다. (이중해제, 해제된 메모리 접근, 메모리 누수) 자바에서는 이런 메모리 해제 작업을 GC가 대신 해줍니다. 사용하지 않는 객체의 메모리가 해제되지 않는다면 메모리 누수로 이어지고 OOM에러가 발생해 애플리케이션이 다운될 수도 있습니다. 메모리는 한정된 자원이기 때문에 사용하지 않는 부분은 해제를 해주어야합니다. JVM Heap JVM의 메모리는 크게 Meth..

스프링누구나 쉽고 빠르게 자바 프로그래밍을 할 수 있도록 돕는 대중적인 자바 프레임워크입니다. 스프링은 기존 애플리케이션 개발의 복잡성을 줄이고 편하게 개발할 수 있는 솔루션을 제공합니다. 특정 기술에 의존적이거나 복잡한 부가작업에 대해 신경쓰지 않고 비즈니스 로직 자체에 집중할 수 있도록 도와주어 개발 생산성을 높힙니다. 스프링은 자바 언어 기반의 프레임워크이고 자바 언어는 객체 지향 언어입니다. 스프링의 진짜 핵심은 객체 지향 언어가 가진 특징을 살려 좋은 객체 지향 애플리케이션을 개발할 수 있도록 돕는 프레임워크입니다. 스프링? 스프링 부트?스프링과 스프링 부트, 언뜻 보면 둘의 차이를 헷갈릴 수 있습니다. 간단하게 스프링부트는 스프링 프레임워크를 더 쉽게 사용할 수 있도록 도와주는 프레임워크입니..

JDBC - Java Database ConnectivityJDBC는 자바에서 데이터베이스에 접속할 수 있도록 하는 API입니다. JDBC는 데이터베이스에서 데이터를 쿼리하거나 업데이트하는 방법들을 추상화하여 인터페이스로 제공합니다. 애플리케이션을 개발할 때 데이터들은 대부분 데이터베이스에 저장하여 사용합니다. 이런 애플리케이션은 데이터베이스에 접근하여 데이터를 가져오거나 업데이트 하는 작업을 필요로 합니다. 애플리케이션에서 데이터베이스에 접근하여 데이터를 다루는 과정은 크게 3가지 단계로 나눌 수 있습니다. 커넥션 연결: TCP/IP 커넥션을 통해 데이터베이스에 대한 커넥션을 얻습니다.SQL 질의: 연결된 커넥션을 통해 DB에 SQL을 전달합니다.결과 응답: 전달된 SQL을 실행하고 그 결과를 반환합..

배경설명 교내에서 진행한 GSM GOGO라는 프로젝트를 운영하는 도중 발생한 이슈를 해결해 나가는 과정에 대한 글입니다. GSM GOGO는 교내 체육대회 관리 서비스이며 체육대회에 관련된 여러 편의기능과 경기에 포인트를 배팅하여 얻거나 잃을 수 있는 서비스입니다. 해당 프로젝트를 운영 중 주요 기능인 "배팅" 기능에서 큰 문제들이 발생했습니다. 문제: 배팅이 두번 되는 현상 발생 (race condition) 2차 릴리즈를 적용한 후 배팅이라는 기능을 출시하게 되었습니다. 해당 기능에 대해 간단하게 소개하자면 체육대회 경기에 승리팀을 예측하여 포인트를 배팅할 수 있는 기능입니다.배팅은 한 경기에 한 번만 배팅이 가능하며 보유 포인트보다 많은 포인트를 배팅할 수 없습니다. 위의 코드는 실제 배팅 로직을..

배경설명 교내에서 진행한 GSM GOGO라는 프로젝트에서 적용한 조회성능 향상에 대한 내용입니다.GSM GOGO는 교내 체육대회 관리 서비스이며 체육대회에 관련된 여러 편의기능과 경기에 포인트를 배팅하여 얻거나 잃을 수 있는 서비스입니다. 1차 릴리즈 기간이 종료된 후 해당 릴리즈에 필요한 요구사항들을 배포하였습니다. 그 중 문제가 발생한 부분은 팀 조회 기능이였습니다. 팀 조회 기능은 팀 리스트 조회 페이지에서 헤더를 통해 종목(축구, 배구, ..)별 팀을 조회할 수 있습니다.또한 상세조회를 원하는 팀을 클릭시 팀 상세 조회 페이지로 이동되어 해당 팀에 참가하는 선수들을 표시해줍니다. 문제상황: 요청마다 발생하는 OPTIONS 요청 팀 리스트 조회 페이지에서 헤더를 통해 종목을 이동하거나 다른 페이..

JVM자바를 실행하기 가상 환경을 만들어주는 소프트웨어입니다. (Java Virtual Machine) 일반적인 컴파일C나 C++같은 언어로 코드 작성 후 컴파일을 하면 컴파일된 결과물을 다른 OS에서 실행하려하면 동작하지 않습니다. 동일한 OS에서 컴파일과 실행을 한다면 프로그램은 문제 없이 동작하지만, 컴파일 후 다른 OS에서 해당 프로그램을 실행하려하면 동작하지 않습니다. 이렇게 일반적인 컴파일 과정은 OS에 종속적이기 때문에 다른 OS에서 동작하는 프로그램을 컴파일 하려면 원하는 OS마다 크로스 컴파일이라는 추가 작업을 해야합니다.JVMJava 바이트 코드는 OS에 상관없이 JVM 안에서 컴파일되고 동작합니다. 그렇게 때문에 자바 언어는 OS에 종속적이지 않은 언어입니다.이렇게 자바 어플리케이션은..