본문 바로가기

전체 글86

RESTful API 에 대해서.. 나는 RESTful API가 무엇이냐! 라고 질문한다면 RESTful API는 이것이다! 라고 명쾌하게 답을 할 수 있지 않다. 하지만 어떤것이 RESTful API에 부합하는지는 얼추 알고 있다고 생각했지만 그 생각이 잘못되었다는 사실을 깨달았다. RESTful API 에 대해서 구글에 검색을 한다면 가장 먼저 반겨주는 것이 aws의 설명이다, 처음 개발에 대해서 공부할때는 이 글을 보아도 이해되지 않았지만 이젠 이해가되기 시작했다. 우연한 계기로 RESTful API에 대해서 돌아보고 한번 더 찾아보게 되었을때 REST에 대한 제약 조건을 상세히 들여다보게 되었고 눈여겨보지 않았던 제약조건을 찾아보게 되었다. aws 홈페이지에서는 한국어를 지원해주기 때문에 한국어로만 보고 판단하였지만 무언가 설명이 .. 2023. 11. 16.
NodeJS는 논블로킹 모델이지만 asnyc/await을 사용하면 블로킹이 되는 것이 아닌가요? Node.js는 기본적으로 싱글스레드 논블로킹 모델이다. 하지만 asnyc/await 함수를 사용하게되면 블로킹 처리가 되는것이 아닌가요? 라는 질문을 받았을때 멍해졌다... 무엇이 맞는건지 블로킹 처리로 봐야하는건지, Node.js는 논블로킹 모델이 맞는데... 내가 잘못알고 있는것인가? Node.js가 블로킹 모델인가? 뭐라 대답해야 하는것인지 하나도 생각이 나지 않았고 시간과 여유를 가지고 곱씹어 보아도 나는 시원하게 대답하지 못하는 질문이었기 때문에 어떤 대답을 해야 했는지 찾아보았다 async/await은 JavaScript의 비동기 처리를 위한 문법적인 편의성을 제공하는 기능이다. 이를 사용하면 비동기 작업을 동기적으로 작성할 수 있지만, async/await를 사용하는 함수는 비동기 함수이다.. 2023. 6. 29.
데이터베이스 정규화란 데이터베이스 정규화는 데이터베이스 설계 과정 중 데이터를 구조화하고 조작화하는 프로세스이다. 이를 통해 데이터베이스의 성능과 유지보수성을 향상시킬 수 있다. 정규화는 데이터 중복을 최소화하고 일관성,무결성,효율성을 보장하기 위해 데이터를 특정 규칙에 따라 분해하는 과정이다. 관계형 데이터베이스에서 주로 사용되는 정규화 기법은 제1 정규화, 제2 정규화, 제3 정규화 이다. 각각의 정규화 단계는 다음과 같은 목적을 가지고 있다 1. 제1 정규화 중복 데이터를 제거하고 각 열을 원자값(Atomic Value, 하나의 값)을 갖도록 분해한다. 이를 통해 데이터의 중복을 최소화하고 데이터베이스의 일관성을 확보한다. 2. 제2 정규화 제1 정규화를 진행한 테이블이 대해 부분 함수 종속성(Partial Functi.. 2023. 6. 8.
인덱스를 사용하는 경우와 사용하지 않는 경우 인덱스는 데이터베이스에서 데이터를 검색하고 조회하는 데에 사용되는 기술이다 인덱스는 데이터베이스 내의 특정 열(Column) 또는 여러 열(Column)의 값에 대한 정렬된 데이터 구조로서 데이터를 빠르게 찾을 수 있도록 도와준다 인덱스를 사용하는 경우 데이터베이스에서 데이터를 자주 검색하는 경우 특정 열을 기준으로 데이터를 자주 검색하거나 정렬해야 할 때 인덱스를 사용하면 검색 속도가 향상된다. 검색 쿼리의 성능을 개선하여 응답 시간을 단축 시킬 수 있다. 대량의 데이터가 있는 경우 인덱스를 사용하면 데이터베이스가 전체 데이터를 스캔하는 대신 인덱스 구조를 참조하여 원하는 결과를 더 빠르게 찾을 수 있다. 유일한 값을 가져야 하는 경우 특정 열이 유일한 값을 가져야 하는 경우에는 해당 열에 대한 고유 .. 2023. 6. 6.
동시성이란? 동시성(Concurrency)은 동시에 여러 작업을 수행할 수 있는 능력이다 동시성은 한번에 하나의 작업만 처리하는 순차적인 방식과 달리 여러 작업을 동시에 처리할 수 있도록 하는 개념이다 동시성은 실제로 동시에 실행되는 것처럼 보이도록 여러 작업을 교대로 실행하고 관리하는 방식을 의미한다 이러한 작업들은 동시성 컨텍스트 내에서 독립적으로 진행되어야 한다 이때, 동시성을 구현하는 방법은 여러가지가 있다. 1. 멀티 스레딩 스레드(Thread)를 사용하여 여러 작업을 동시에 처리하는 방식이다. 여러 스레드를 동시에 실행시키면 하나의 프로세스에서 여러 작업을 병렬로 처리할 수 있다. 2. 병렬 처리 여러개의 프로세서나 코어를 사용하여 작업을 동시에 처리하는 방식이다. 병렬 처리는 동시성을 달성하기 위한 하나.. 2023. 6. 6.
트랜잭션(Transaction) 이란? 트랜잭션(Transaction)은 데이터베이스에서 수행되는 논리적인 작업의 단위를 말한다. 트랜잭션은 데이터베이스의 일관성과 무결성을 유지하기 위해 사용된다. 일련의 데이터 조작 작업을 묶어서 하나의 작업으로 처리하고 작업이 모두 성공적으로 수행되거나 전혀 수행되지 않는 원자성(Atomicity)을 보장한다. 트랙잭션의 특징 1. 원자성(Atomicity) 트랜잭션은 작업의 단위로서 작업들은 모두 성공적으로 완료되거나 아예 수행되지 않아야 한다. 즉, 트랜잭션 중간에 어떠한 작업도 완료되지 않은 상태로 남지 않아야 한다. 2. 일관성(Consistency) 트랜잭션이 수행되기 전과 수행된 후의 데이터베이스 상태는 일관성이 유지되어야 한다. 트랜잭션이 수행되는 동안에도 데이터의 무결성 조건이 항상 만족되어.. 2023. 6. 5.
RDBMS(Relation Database Management System)과 NoSQL(Non-SQL)의 차이점이 무엇인가요? RDBMS와 NoSQL은 데이터를 저장하고 관리하기 위한 다른 종류의 데이터베이스 시스템이다. 이들은 데이터 모델, 스키마, 일관성, 확장성 등 다양한 측면에서 차이가 있다. 1. 데이터 모델 RDBMS RDBMS는 관계형 데이터 모델을 기반으로 한다. 데이터는 테이블(Table) 형태로 구성되며 각 테이블은 레코드(Recode)로 구성된다. 테이블 간에는 관계(RelationShip)를 정의하여 데이터를 관리한다. NoSQL NoSQL은 다양한 데이터 모델을 사용할 수 있다. 주로 키-값(Key-Value), 문서(Document), 열(Column), 그래프(Graph) 등의 모델을 사용합니다. 데이터는 스키마 없이 자유롭게 저장될 수 있다. 2. 스키마 RDBMS RDBMS는 정적인 스키마를 가지고.. 2023. 6. 4.
성능 개선의 수치화 - 4 (Overfetching 성능 개선) 이전 글에서 JMeter를 다루어 보니 성능의 객관화가 가능하여 성능의 좋고,나쁨을 볼 수 있어서 좋았다. 기존 프로젝트의 DB에서 불필요한 데이터를 받아오는 Overfetching 문제가 확인되었다. 현재 프로젝트에서는 불필요한 컬럼을 받아오는 이슈가 있기 때문에 불필요한 데이터를 걸러준다면 성능의 개선이 될까 궁금해졌다. 아래는 기존의 코드 이며 select하여 불필요한 데이터를 받지 않는 것으로 수정해보겠다. 수정 결과는 아래와 같다 수정 전 수정 후 27.3%의 개선이 이루어졌다. 단순 select를 하여 불필요한 데이터를 받지 않는 것 만으로도 유의미한 차이가 확인되었다. 2023. 6. 2.
성능 개선의 수치화 - 3 (JMeter 사용 트러블 슈팅) 중간 이슈 발생 및 해결 JMeter로는 대용량 트래픽 처리를 가정하고 10000만건의 요청을 10초동안 10번 보내는것으로 하고 싶었으나 JMeter가 자꾸 꺼지거나 에러가 발생하는 문제가 확인되었다. 2번째 줄의 java.lang.OutOfMemoryError를 확인해본 결과 Java Heap 메모리 부족으로 인한 현상이었다. JAVA가 32bit으로 설치되어 있으면 Heap 용량이 많이 부족하여 64bit으로 설치해야 한다는 글을 찾았고 나의 JAVA bit가 궁금해져 추가로 확인해보았다. 윈도우 cmd를 실행하여 아래의 명령을 실행한다. java -d64 -version 결과에서 다음과 같은 형식으로 나오면 64bit (단순 예시) java version "1.x.0.xx" OpenJDK Runt.. 2023. 6. 1.