전체 글171 [DB] 트랜잭션 격리 수준 & 부정합 이슈 부정합 이슈 Dirty Read: 다른 트랜잭션에서 처리한 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있는 현상 Non-Repeatable Read: 하나의 트랜잭션내에서 동일한 SELECT 쿼리 실행시 항상 같은 결과를 보장해야하는 Reapeatable Read 정합성에 어긋난 것 Phantom Read: 읽을 때 쓰기 잠금을 거는 경우 다른 트랜잭션에서 수행한 변경 작업에 의해 레코드가 보였다가 안보였다가 하는 현상 트랜잭션 격리 수준 Read Uncommitted 읽기 트랜잭션이 시작했을 때 다른 트랜잭션이 Update 가능 읽기 트랜잭션이 Update 중(un-commit)인 데이터를 조회할 수 있음 ⇒ 다른 트랜잭션이 중간에 롤백을 해도 읽기 트랜잭션은 롤백 전 데이터를 조회할.. TIL/TIL 2022. 10. 6. [BE]무한 스크롤(Infinite Scrolling) & 페이지네이션(Pagination) 요즘 사람들이 많이 사용하는 어플리케이션에 무한 스크롤이 없는 것을 오히려 찾아보기 힘들 정도라고 생각한다. 막상 쓸 때에는 이것을 어떻게 구현하냐? 라는 것에 대해 고민을 크게 해본적이 없었지만, 이번에 구현해보면서 했던 고민과 알게 된 점을 적고자 한다. 무한 스크롤은 말그대로 페이지 이동을 하지않고 계속 내려도 (보여줄 컨텐츠가 있다면) 컨텐츠를 무한정으로 보여주는 기능을 의미한다. 이러한 기능을 어떻게 구현할 것이냐? 라고 물으면 그냥 바로 생각나는 것은 무한대의 컨텐츠를 서버에게 요청하고 클라이언트가 받아서 줄줄이 소세지마냥 보여줍니다! 라는 생각이 났었다. 동작을 할 것이다 하지만 생각을 하면서도 너무 비효율적일 것이라는 생각을 동시에 하게 된다. 어떤 유저는 우리가 의도한대로 한 화면에서 무.. TIL/BackEnd 2022. 10. 4. 허준이 교수 서울대 졸업식 축사 감상 축사 영상 (영상으로 보길 추천한다) 축사 전문 안녕하세요, 07년도 여름에 졸업한 수학자 허준이입니다. 우리가 팔십 년을 건강하게 산다고 가정하면 약 삼만 일을 사는 셈인데, 우리 직관이 다루기엔 제법 큰 수입니다. 저는 대략 그 절반을 지나 보냈고, 여러분 대부분은 약 삼분의 일을 지나 보냈습니다. 혹시 그중 며칠을 기억하고 있는지 세어 본 적 있으신가요? 쉼 없이 들이쉬고 내쉬는 우리가 오랫동안 잡고 있을 날들은 삼만의 아주 일부입니다. 먼 옛날의 나와, 지금 여기의 나와, 먼 훗날의 나라는 세 명의 완벽히 낯선 사람들을 이런 날들이 엉성하게 이어주고 있습니다. 마무리 짓고 새롭게 시작하는 오늘 졸업식이 그런 날 중 하나일 수 있겠다는 생각이 듭니다. 그런 하루를 여러분과 공유할 수 있어서 무척 기.. 주저리주저리 2022. 10. 3. Node.js와 Express 그리고 Nest.js Node.js 란? Node.js는 서버 사이드 도구들과 어플리케이션을 JavaScript로 만들 수 있도록 해주는 런타임 환경 런타임 환경이란 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상 머신의 상태 Node.js 의 장단점 장점 싱글 스레드 기반 Non Blocking, 비동기 IO처리로 매우 빠른 고성능 서버 CPU 파워를 많이 필요로 하지 않는, 연결을 동시에 처리해야 하는 상황에서 좋음 프론트엔드와 벡엔드 기술의 통합으로 언어들 사이의 context shift를 다루는 시간을 줄일 수 있음 단점 싱글 스레드 모델이기에 하나의 작업이 오래 걸리면 전체 시스템 성능에 영향 많이 줌 ⇒ CPU 파워를 많이 필요로 하는 작업에 부적절 스크립트 언어의 특성 상 런타.. TIL/TIL 2022. 10. 3. [PostgreSQL] error: column "vendor" of relation "user" contains null values (미제) 문제 상황: 유저 테이블에서 유저가 어떤 소셜로그인으로 가입된 것인지 인지하기 위한 컬럼 vendor 를 추가하였음 vendor 는 이상한 값이 아닌 정해진 값들 중 하나가 될 것이기에 아래처럼 'kakao' | 'google' | 'apple' 으로 설정함. 그리고 nullable하지 않게 할 것 이기에, 유저를 생성할 때는 vendor 값을 꼭 넣어주게 코드를 작성하였다 하지만 위의 에러가... vendor가 null값을 갖고있는뎁쇼?? 를 계속 뱉는 상황이였다. 문제 해결 과정: 위의 vendor 값을 넣어주는 코드에서 내가 잘못 구현한 부분이 있을 것이라는 생각에 그 부분을 우선적으로 체크 => 문제 없었음 => 그래도 혹시 모르니깐 DB의 값을 직접 수정하여 null 값이 없게 만들어봄 => 동.. TIL/삽질 기록소 2022. 9. 29. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.6 (Feat.커맨드 패턴) 커맨드 패턴이란 request를 객체로 캡슐화하는 것이다. 예를 들어 형광등의 turnOff(), turnOn() 메소드가 있었다고 가정할 때, LightOffCommand, LightONCommand 같은 객체 형식으로 캡슐화하는 것이다. 이로서 이러한 request를 큐에 저장하거나 로그로 기록하거나 작업 취소 기능을 사용할 수 있습니다. 어떤 객체(A)에서 다른 객체(B)의 메서드를 실행하려면 그 객체(B)를 참조하고 있어야 하는 의존성이 발생합니다. 그러나 커맨드 패턴을 적용하면 의존성을 제거할 수 있습니다. 위의 예시에서 이어가면 리모콘 객체에서 형광등 객체의 turnOff(), turnOn() 메소드를 사용하면 리모콘 객체와 형광등 객체 사이의 의존성이 발생한다는 것이다. 또한 기능이 수정되거.. 독서 기록/디자인패턴 2022. 9. 28. [TIL] MicroServices Architecture(MSA) vs Monolithic Architecture 기본 개념 Monolithic Architecture: 한 프로젝트 안에 모든 것이 다 들어 있는 형식 MicroServices Architecture(MSA): 여러 프로젝트를 만든 뒤, 프로젝트들을 연결하여 사용 ex) 모놀리식은 네이버 웹 서비스 전체를 하나의 프로젝트를 만든 것이라 하면, MSA는 메일 프로젝트, 카페 프로젝트, 블로그 프로젝트 등등 으로 나누어 이를 연결한 형태 왜 MSA를 사용할까?... MSA의 장단점?? 반대로 네이버같은 유저 트래픽과 기능이 크고 많은 서비스를 모놀리식으로 구현했다고 가정할 때, 네이버 메일 기능을 업데이트하기 위해 서버를 내렸다가 다시 올렸는데 버그가 발생해서 몇시간 동안 서버가 먹통이 된다 라는 시나리오가 가능하다. 반면 MSA 구조라면 메일 기능은 마.. TIL/TIL 2022. 9. 26. [CS] 자료구조/알고리즘 관련(작성중...) 정렬 알고리즘 시간/공간 복잡도 Array vs LinkedList Array은 메모리상에 순서대로 데이터 저장 => 캐시의 지역성으로 인해 상대적으로 빠른 탐색 수행 인덱스로 조회할 수 있음 => 인덱스 조회 성능 높음 LinkedList는 다음 데이터의 위치에 대한 포인터를 가지고 있음 중간에 데이터를 삽입, 삭제하는 것이 용이 List vs Set List는 중복된 데이터를 저장하고 순서를 유지하는 선형 자료구조 Set은 중복되지 않은 데이터를 저장하고 순서 유지X, 선형 자료구조 Hash Function, Hash Table 해시 함수(특정 알고리즘)를 통해 key값을 해쉬 코드(작은 범위의 숫자)로 변환한다. key 값 과 해쉬 코드가 1:1 매칭이 되는 경우는 해쉬를 사용하는 의미가 없어짐, .. TIL/TIL 2022. 9. 26. [CS] 데이터베이스 관련 데이터베이스에서 인덱스를 사용하는 이유 및 장단점 검색 성능을 향상시키기 위해 사용 => 별도의 메모리 공간에 인덱스가 된 컬럼들을 기준으로 정렬하여 저장함 => 이미 정렬되어 있기 때문에 특정 조건 검색시 풀 스캔이 아닌 방법으로 더 빠르게 찾을 수 있음, 정렬 필요 없음 인덱스를 사용하는 단점으로는 인덱스를 구성하는 비용 발생 정렬 상태를 유지하기 위한 비용 발생 즉, CRUD시 인덱스를 형성하기 위한 추가적인 연산이 수행됨 인덱스를 사용하는 것이 효율적이기 위해서는 쿼리가 index를 사용하는지, Cardinality, Selectivity 같은 요소들이 고려된 인덱스가 생성되어야 함 트랜잭션(Transaction) 데이터베이스의 상태를 변화시키는 하나의 논리적인 작업 단위 1개의 트랜잭션에서 여러.. TIL/TIL 2022. 9. 25. [CS] OS 관련 프로세스 생성과정 PCB가 생성되며 OS가 실행한 프로그램의 코드를 읽어들여 프로세스에 할당된 메모리의 Text Segment에 저장한다 초기화된 전역 변수 및 static 변수를 data segment에 할당 HEAP과 Stack은 초기 메모리 주소만 초기화됨 PCB에 여러 정보가 기록되면 Ready Queue에서 CPU를 할당받기까지 대기 프로세스와 쓰레드의 차이 프로세스는 운영체제로부터 자원을 할당 받은 작업의 단위 쓰레드는 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위, CPU 입장에서 최소 작업 단위 프로세스는 운영체제의 안정성을 위해 자신에게 할당된 메모리 내의 정보에만 접근할 수 있음 => 한 프로그램 처리할 때 프로세스를 여러개 사용 불가, 프로세스 말고 여러 작업을 처리하기 위해 .. TIL/TIL 2022. 9. 25. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.2 (Feat.옵저버 패턴) public class WeatherData{ // 현재 기상 상황 갱신하는 메서드 public void measurementsChanged(){ // 최신값 불러옴 float temp = getTemperature(); float humidity = getHumidity(); float pressure = getPressure(); // 변화한 값 각 디스플레이에 갱신 display1.update(temp,humidity, pressure); display2.update(temp,humidity, pressure); display3.update(temp,humidity, pressure); } } 위의 코드에는 아래 같은 문제가 발생 인터페이스가 아닌 구체적인 구현을 바탕으로 함 새로운 디스플레이 생기.. 독서 기록/디자인패턴 2022. 9. 23. [디자인패턴] 헤드퍼스트 디자인패턴 Chap.1 상속만 사용한 경우 생길 수 있는 문제 서브 클래스에서 코드 중복 실행 시에 특징 바꾸기 어려움 모든 클래스의 동작 알기 어려움 슈퍼 클래스에서 코드 변경시 원치 않은 서브 클래스에도 영향 준다. => 인터페이스의 등장 다만 인터페이스를 사용하면 인터페이스를 상속하는 모든 서브 클래스들에서 코드를 구현해야함. ex) A,B,C,D,E,F 6개의 서브 클래스가 있을 때 x 라는 인터페이스를 만들어 동작을 구현했는데 이를 동일하게 수정하고 싶으면, A~F까지 모든 서브 클래스의 내용을 수정해야함. 즉 코드 재사용이 되지 않는 문제점이 있다는 것, 한가지 동작을 바꿀 때 마다 그 동작이 정의되어 있는 서브 클래스들을 전부 찾아서 코드를 고쳐야 하고, 그 과정에서 버그가 생길 수 있음 소프트웨어 개발 불변의 진.. 독서 기록/디자인패턴 2022. 9. 23. 이전 1 2 3 4 5 6 7 8 ··· 15 다음 반응형