면접질문대비7_DB

minjun kim·2025년 1월 5일

1. 웹 애플리케이션을 개발하면서 데이터를 애플리케이션 위에 저장해도 서비스가 가능할 것 같은데, 왜 데이터베이스를 사용하나요?

우리가 저장하려는 데이터가 어떤 것인가에 따라 달라질 것 같습니다. 애플리케이션의 메모리에 저장한 내용은 애플리케이션이 종료가 되면 날아가 버립니다. 애플리케이션이 설치된 서버에 파일 형태로 저장하면 문제를 해결할 수 있겠지만, 애플리케이션 간 데이터를 공유하기 어렵습니다.
물론 애플리케이션끼리 API 통신으로 데이터를 주고 받으면 가능할 수 있지만 너무 복잡할 것 같습니다.
자연스럽게 데이터베이스에 저장하면 좋겠다는 생각이 듭니다.
그러면 애플리케이션간에 데이터를 공유할 필요없이 저장할 때도 조회할 때도 DB에서 조회해 오면 간단하기 때문입니다.
DB는 이런 공유 외에도 트랜잭셔널한 처리나 캐시등 애플리케이션을 저장하고 조회하는 데 높은 성능을 제공하는 SW이므로 사용되고 있다고 생각합니다.

  • 데이터 휘발성
  • 애플리케이션 간의 데이터 공유 불가
    서비스 인프라를 구성하다보면 로드 밸런싱(부하 분산)을 위해 동일한 애플리케이션을 여러 개 띄워 서비스함
    DB를 사용하면 트랜잭션 데이터 무결성을 지킬 수 있음
  • 왜 애플리케이션 서버 간에 데이터가 공유되어야 하나요 ?
    로드밸런싱
  • 데이터베이스로도 로드 밸런싱이 가능한가요 ?

2.트랜잭션이 무엇인지 설명해 보세요.

트랜잭션은 일련의 동작들에 대해 모든 동작이 완전히 실행되거나 완전히 실행되지 않음을 보장하는 것입니다. 만약 모든 동작이 성공적으로 실행되었다면 해당 트랜잭션을 커밋하여 작업을 확정해야하고, 특정 동작에 실패하여 해당 트랜잭션이 시작되기 전 상태로 되돌리려 한다면 롤백 시켜야합니다 이러한 특성이 원자성이라는 특성이며, 이외에도 ACID라고 부르는 다른 특징들이 있습니다.

  • 다른 특성도 설명

3. DB 커넥션 풀은 왜 사용하나요 ?

DB와 통신하기 위해서는 데이터베이스와 커넥션이 필요합니다. 커넥션 풀을 사용하지 않는다면 매번 통신이 필요할 때 마다 커넥션을 생성했다가 닫는 과정이 필요할 것입니다. 이것은 DB와 통신하기 위해 발생하는 오버헤드로, 이런 오버헤드를 줄이기 위해 커넥션을 미리 만들어 두고, 해당 커넥션을 필요한 곳에 빌려줬다가 사용 후 반납하는 형태로 사용합니다. 오버헤드를 줄이면 애플리케이션의 성능도 끌어 올릴 수 있습니다.

  • 쓰레드 풀

4. mysql을 사용해 보셨다고 했습니다. 그럼 다른 데이터베이스와 Mysql의 sql문법은 다를까요 ?

데이터 베이스마다 SQL 문법이 조금씩 다르기 때문에 mysql에서 작성한 sql이 orcle에서 실행했을 때는 동작하지 않을 수도 있습니다. 이런 문제를 최소화하려면 가급적 sql을 표준 sql문법에 따라 작성하는 것이 중요합니다.
가능하다면 애플리케이션에서는 sql을 직접 사용하지 않고 개발할 수 있는 방법을 사용하면 도움이 됩니다.
애플리키에션에서 sql을 직접 사용하지 않고 데이터베이스를 사용하려면 JPA가틍ㄴ 이터페이스를 사용하면 된다고 알고 있습니다.

5. DB에 비밀번호를 application.properties에 올려 놓으면 문제가 될까요 ?

로컬에서 실행하는 데이터베이스라면 문제가 되지 않겠지만, 실제 서비스에 사용되는 데이터베이스의 비밀번호가 올라가는 것은 문제가 될 것 같습니다. 비밀번호를 application.properties에 올려 두면 그 내용은 고스란히 깃허브에서 확인이 가능하므로 application.properties를 노출하지 않는 방법이 필요합니다.
여러 방법이 있겠지만 간단하게는 jasypt 같은 라이브러리를 통해 application.properties에 있는 비밀번호를 암호화시키고, 관리해야 할 프로젝트의 수가 늘어나면 Valut같은 솔루션을 사용하는 것이 효율적일 것 같습니다.

profile
배움의 흔적을 남기고 싶습니다.

0개의 댓글