Skip to main content

25 posts tagged with "question"

View All Tags

· One min read
  1. Transaction 전파타입.
    • 새로운 트랜잭션을 만들 때와 기존 트랜잭션에 얹히는 것을 정할 때 기준은 ?
  2. 다중 열 인덱스에서 타겟을 찾는 원리는 ? (선행하는 컬럼을 조건으로 걸었을 때는 인덱스의 이득을 볼 수 있는 이유는 ?)

· 2 min read
  1. 데이터의 무결성과 정합성
    1. 데이터의 무결성은 데이터베이스 내의 데이터가 현실을 반영함에 있어서 정확하고 데이터의 내용이 모순없이 일관성 있게 유지되는 것. ex) 학번은 음수가 될 수 없는데, 학번 컬럼에 음수값이 들어가 있으면 데이터의 무결성이 깨진 것이다.
    2. 데이터의 정합성은 데이터가 일관성 있게 유지되는 것을 의미하며 데이터 간의 모순이나 중복없이 논리적인 구조가 일관된 것. ex) 연관관계에 있는 두 테이블에 대해서 부모 테이블에 없는 데이터의 id값이 자식 테이블에 저장되어있다면 데이터의 정합성이 깨진 것이다.
  2. 외래키를 사용하는 것과 사용하지 않는 것 장단점
    • 외래키를 사용하면 데이터의 정합성을 보장할 수 있다.

· One min read
  1. backend framework에서 의존성을 관리할 때, 프레임워크에서 재공하는 의존성 주입 기능을 이용하는 것과 이용하지 않는 것에 대해 각각에 최적의 상황이 있을까 ?
    • 의존성 주입 기능을 사용하지 않으면 일단 불편하다. 생성자로 객체 생성 시, 의존하는 객체에서 또 의존하는 객체들에 대해서 다 관리를 직접 해주어야한다.
  2. node_modules란?

· One min read
  • 클래스끼리 생성자로 의존하는 객체를 주입받아 클래스의 메소드를 호출해 사용하지 않고, 함수의 인자로 사용해야되는 객체가 있다면 넘겨 받아서 사용하는 구조로 짜면 어떨까 ?
    • 의존하는 객체를 인자로 넘겨받는 것은 바람직하지 못하다.
  • 메소드의 인자로 의존하는 객체를 넘겨받는 것의 단점은 ?

· 5 min read
  1. 자바스크립트는 싱글 스레드 언어임에도 비동기 동작이 가능한 이유는 ?
    • 자바스크립트 자체는 싱글 스레드로 동작하며 node도 마찬가지이지만, 자바스크립트가 동작할 때, 순수하게 자바스크립트만 동작시키는 상황은 많지 않으며 이벤트 루프, 콜 스택, 콜백 큐 webapi 등을 통해 동작하게 되어서 비동기적으로 처리가 될 수 있으며 이에 따라 non-blocking I/o와 단일 스레드 이벤트 루프를 통한 높은 처리 성능을 가진다.
  2. 자바는 멀티스레드 기반 언어이다. 자바에서의 비동기 처리 방법은 ?
    • Thread 클래스나 Runnable 인터페이스를 사용해서 스레드를 생성하고 실행할 수 있다.
    • Future, Callable, CompletableFuture
    • Reactive Programming.
    • 근데 기본적으로 해당 기능들을 코드단에서 실행하지 않으면 단일 스레드로 동기적으로 실행할 것이다.
  3. 코루틴이란 ?
    • 코틀린도 멀티스레드 기반 언어이며 코루틴을 통해 비동기 프로그래밍을 더욱 쉽게 할 수 있도록 한다.
  4. 비동기로 동작하는 것은 레벨에 따라 구분해서 볼 수 있을 것 같다.
    • 가령 스프링 프레임워크를 예로 들었을 때, 멀티 쓰레드 기반으로 동작하며 각각의 쓰레드가 서로 간섭없이 이벤트를 처리하므로 쓰레드 레벨에서는 비동기로 동작을 한다고 볼 수 있다.
    • 그러면 스프링프레임워크는 이미 비동기적으로 동작하고 있다고 생각되는데 spring webflux 어떤 차별화가 있는 것인가 ?
      • spring framework는 멀티쓰레드 기반이지만 블로킹 i/o를 사용하여 동작했다. webflux는 non-blocking I/O를 사용하여 동작해서 동시에 더 많은 요청을 처리할 수 있으며 리소스 관리와 빠른 응답을 제공한다.
  5. 인터프리터 언어와 컴파일 언어의 차이
  6. 인터프리터와 컴파일러
  7. 비동기 처리란
    • 비동기 처리는 말그대로 비동기적으로 동작하게 처리하는 것이다. async를 붙임으로써 간단하게 비동기 함수로 지정할 수 있다. 동작의 순서를 보장하기 위한 기능들에 대해서는 await을 사용할 수 있다.
    • 비동기 처리방식의 가장 최근 방법은 async/await이다. async는 asyncnorous(비동기)의 약어 이며 해당 키워드가 붙은 함수는 비동기 함수라는 의미를 가지며 무조건 프로미스 객체를 반환한다.
    • 비동기 함수내에서는 await 키워드를 사용해 비동기 작업이 완료될 떄까지 기다릴 수 있다. async를 함수에 붙이1지 않으면 동기적으로 동작한다.
  8. async, non-blocking을 사용하는 이유는 ?
    • 자원을 효율적으로 사용하게 됨으로써 제한된 자원에 대해 더 좋은 퍼포먼스를 보인다.

· 2 min read
  1. Mapper란?
  2. (싱글톤 객체 + 의존성 주입)으로 객체를 의존하는 것과 static 메소드로 선언하여 의존, 사용하는 것의 비교
    • static 메소드를 사용하면 프레임워크에서 지원하는 의존성 주입 기능을 사용하지 못한다.
    • static 메소드는 보통 유틸성 객체에 유용하게 사용된다.
    • 동일한 클래스에 대해서 동일한 상태값을 보장하기위한 목적으로 static을 사용할 수 있다.
    • static 메소드는 객체지향적인 기능은 아니라고 볼 수 있을 것 같다.
  3. 클래스와 인스턴스의 생성 위치와 주기. static 변수와 메소드와 인스턴스 변수, 메소드의 생성 위치와 주기 비교.
  4. 알림 내용 템플릿 데이터를 enum에 저장 or db에 저장.
    1. https://jojoldu.tistory.com/137

· One min read
  1. Specification interface in DDD and JPA
  2. JPA 동적 인스턴스 생성.

  1. fcm에서 전송하면 해당 디바이스에서 어떻게 표시되는 것이지 ? 가령 위퍼블릭 앱이 켜져있으면 앱에서 보여준다 ?

  1. lock
    • shared lock (for share)
    • exclusive lock (for update)
    • 비관적 락, 낙관적 락.
    • 락의 범위, 락 해제 시점.
  2. msa
    • 분산 트랜잭션

· One min read
  • callback, Proimse object, async/await
  • then(), catch()
  • then(), catch()는 Promise객체의 메소드로 이해하고 있는데, contractSevice 객체에서 .catch()가 안먹혔었다. 이유는 ? then이 없어서 ?
  • 콜백함수는 리턴이 필요없다 ?

  • JPA에서는 jpa transaction 안에서 도메인이 변경되면 자동으로 업데이트 해준다 ?

· 2 min read
  1. value-object pattern
    1. feature. make and return new object when member value is changed.
  2. 백엔드 언어와 프레임워크 사용 추세.
    • 한국에서는 go, kotlin(spring)으로 신규프로젝트 진행을 많이 하는 추세.
    • kotlin은 과거부터 많이 사용된 java 기반의 spring과 완벽히 호환되기 때문에 전환이 비교적 쉬우나, JVM 기반으로 동작하기 때문에 싫어하는 사람도 많은 것 같다.
      • kotlin은 멀티플랫폼언어이기 때문에 JVM을 사용하지 않고 NATIVE로 바로 컴파일되는 것의 성능이 좋아지면 또 분위기가 바뀔지도 ?
      • kotlin이 어떤 원리로 여러 것들로 컴파일될 수 있는지이해해보자, 그리고 이런 독보적인 특징으로 발전 가능성이 어느정도까지 일지 판단해보자.
      • kotlin을 사용하면 syntax sugar? 언어단에서 로직을 단순화 하고 아기자기하게 다룰 수 있다. (go는 그런 맛이 없다고 한다.)

· One min read
  • trpc, grpc
  • promise.all
  • await, async
    • async await을 남용하지말자. 비동기로 동작해도 되는 로직은 굳이 붙일 필요없다.

· One min read
  1. declaring type of typescript
    • 타입스크립트에서 함수도 타입으로 지정이 가능하다. 다른 언어도 가능한가 ? 어떤 원리인가 ?

· One min read
  1. 서비스에 알림기능이 도입된다. 알림 종류는 sms 푸쉬 알림만 있다. 알림 케이스는 20가지 정도, 알림 서버 별도로 필요할까 ?

· One min read
  1. 모듈을 global로 import받거나, 사용하지 않는 객체도 제공하는 module을 import 받았을 때 성능상 이슈는 없나 ?
    • 사용하지 않아서 인스턴스 생성이 안되니깐 ?
  2. nestjs에서 module을 효율적으로 관리할 수 있게 설계하는 방법.
    • 중복해서 import하지 않도록.
    • 사용하지 않는 객체를 import 하지 않도록.
  3. TypeError: Class extends value undefined is not a function or null
  4. repository와 service 사이에 data service 객체를 활용하는 것에 대한 best practice 혹은 관련 아키텍처가 궁금하다.

· One min read
  • DTO Naming Convention
    • request, response라는 이름과 dto를 함께 사용?
    • name + httpmethod + request,response + dto 라는 형식으로 적용해봄.
    • dto 이름이 길어지게 된다.

· One min read
  • 구현이 아닌 추상화에 의존해야하는 이유.
  • 전략 패턴 (Strategy Pattern)
  • 서브 클래스(sub class), 구성(composition)
  • 데코레이터 패턴이 객체에 추가 요소를 왜 동적으로 더하는 거지 ?
    • 인스턴스를 인자로 넣어서 데코레이팅 할 수 있으니깐 ? (인스턴스는 런타임 환경에서 생성됨.)

· 3 min read
  • 다오 가입 온체인 로직을 호출할 때, 트랜잭션 전송을 서버에서 하고, 이 때 상용되는 어드민 지갑은 기존에 하나였다. 트랜잭션 전송 주체가 되는 지갑이 하나이면 동시에 다오 가입 api를 호출 했을 때, nonce too low 이슈가 발생하게 된다. 이를 해결하기 위해 어드민 지갑을 5개로 운용하고, 해당 5개 어드민 지갑의 사용 여부 값을 메모리(레디스)의 set 데이터 스트럭쳐를 활용하여 로직을 구현하였다. 따라서 유저는 5개의 어드민 지갑 중 사용되지 않는 지갑을 메모리에서 찾아와 온체인로직을 호출하게되며, 유저가 호출하는 시점에 5개 어드민 지갑이 모두 사용되고 있으면 유저는 리트라이를 해야한다.
  • 이 때, 유저가 동시에 호출하게되면 결국 메모리에 어드민 지갑 사용여부를 조회하는 시점도 거의 동시에 이뤄지며 따라서 두 유저가 동일한 어드민 지갑을 사용하여 호출하게 되어 nonce too low이슈가 발생한다.
  • 우선은 메모리에서 사용되고 있지 않은 어드민 지갑들을 찾아서 그 중 랜덤하게 하나를 사용하도록 했지만, 결국 두 유저가 동시에 동일한 지갑으로 호출할 가능성은 존재한다.
  • 5개의 어드민 지갑을 적절히 분산해서 유저에게 할당을 어떻게 할 수 있을까?
    • 메모리에 lock ?

· One min read
  • 온체인로직 오프체인 로직 순서로 동작시킬 때, 온체인 성공, 오프체인 실패하는 케이스가 안생기게 하려면 어떻게해야할까?
    • getPast와 같은 안전장치 로직을 통해 보완할 수 있다. 다만 위퍼블릭에서는 이벤트에서 얻을 수 있는 값만으로 오프체인로직을 처리할 수 있는지 불확실하며, 불가능 하다면 메모리나 db에 오프체인 실패 시 처리를 위해 임시로 값을 저장해놓을 필요가 있다.

· One min read
  • 타입스크립트의 type 이란 ?
    • type alias로 새로운 타입을 지정할 수 있고 두개의 함수를 하나의 타입으로 지정하는 것과 같은 것이 가능하다.
    • 다른 언어에도 이런 것이 있나 ?
  • 동기와 비동기
    • 동기화된 함수들은 순서대로 처리, 비동기화된 함수들은 순차적으로 처리되지 않음.
  • 콜백 함수
  • CASCADE DELETE
    • FK에 해당 옵션을 설정하면 부모테이블의 데이터를 삭제했을 때, 자식 테이블도 함께 삭제한다.