5주차 - 화 (2022.11.22)

우롱차·2022년 11월 24일
0

나의 인턴일지

목록 보기
22/33

프로젝트 코드를 살펴보다가 이 프로젝트에서는 Service가 없고 Controller에서 DAO를 바로 호출하고 있는 패턴이라는 것을 알게 되었다.
그래서 Service와 DAO의 역할을 다시 찾아보았다.

Controller, Service, DAO, Mapper의 역할

  • Controller
    • 사용자의 Request를 전달받아 요청의 처리를 담당하는 Service를 호출
  • Service
    • Controller에 의해 호출되어 실제 비즈니스 로직과 트랜잭션을 처리
    • dao를 호출하여 DB CRUD를 처리 후 Controller로 반환
  • DAO
    • Service에 의해 호출되어 DB CRUD를 담당
    • MyBatis 3.0부터 mapper 인터페이스로 대체 가능
  • mapper.xml
    • dao에서 요청하는 실제 쿼리문이 위치하는 곳

      🔍 참고

      • Service는 사용자가 요청한 작업을 처리하는 과정을 하나의 작업으로 묶은 것이고 dao는 CRUD작업을 하나씩 분할해 놓은 것이므로, 단순하게 페이지를 불러오고 DB정보를 한 번에 불러오는 간단한 프로젝트의 경우 Service와 dao의 차이가 거의 없을 수 있다.
      • 한 번에 하나의 DB CRUD 작업이 필요한 경우(ex. 한 번의 요청으로 단순히 페이지 이동이 필요한 경우), select와 같은 하나의 dao만 동작하기 때문에 Service와 dao를 나눌 필요가 없는 것처럼 보이지만,
      • 한 번에 여러 DB CRUD 작업이 필요하다면(ex. 사용자가 글을 작성하거나 수정하는 것과 동시에 페이지가 이동하는 경우), update, select 등이 함께 동작하기 때문에 여러 dao를 Service안에 조립하는 로직을 갖게된다.
  • 📌 Reference

검색해보니 프로젝트 내에서는 요청마다 DB 동작이 하나씩만 필요하기 때문에 Service를 사용하지 않고 Controller에서 DAO를 바로 호출하는 것 같았다.
이번을 계기로 각 역할을 더 정확히 알게 되었다!

그리고 소장님과 함께 DB를 살펴보면서 인덱스에 대해 배웠다.

인덱스(Index)

  • 데이터베이스 테이블에 대한 검색 속도향상시켜 주는 자료구조
  • 책의 목차에 비유된다.
    • 인덱스가 없으면 전체 데이터 중에서 일치하는 데이터를 검색해야 한다.
  • 특정 컬럼에 인덱스를 생성하면 해당 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다.
  • 인덱스를 구성하는 컬럼들의 순서가 중요하다.
    • 컬럼의 순서를 잘못 배열하면 인덱스의 발동 확률이 매우 낮아질 수 있다.
    • 인덱스 컬럼의 순서대로 데이터들이 정렬되어 있기 때문이다.

      🔍 참고

      • primary key들로 구성된 인덱스 테이블과 create_date로만 이루어진 인덱스 테이블이 따로 존재한다.
      • 프로젝트 코드 내의 sql문을 보면, create_date로만 데이터를 검색하여 select하는 쿼리문이 많기 때문이다.
      • 인덱스가 4개 존재할 때 1 / 1, 2 / 1, 2, 3 / 1, 2, 3, 4 순서대로 데이터를 검색하는 것은 인덱스를 잘 활용하여 효율적이지만, 3번만 사용하거나 1, 3번을 사용하는 등 인덱스의 순서를 지키지 않고 검색하는 경우에는 효율적이지 않다.
  • 📌Reference

데이터베이스를 살펴볼 때 엔티티 관계도, Columns 정도만 파악했는데, Indexes를 열어본 건 처음이었다.
내가 데이터베이스를 정말 모르고 있다는 것을 느꼈다.
시야가 한 단계 더 넓어졌다.
소장님이 인덱스가 무엇인지와 인덱스의 순서에 따라 검색하는 것의 중요성에 대해 알려주셔서 우선 이 내용들을 집중적으로 정리했지만, 다음에 전체적으로 다시 정리해봐야겠다.

실무에서 자주 쓰이는 리눅스 명령어들도 교육해주셨는데, 필기한 내용을 체계적으로 다시 정리하기가 어려운 것 같다😅
리눅스 명령어는 다음에 마음 먹고 정리해봐야겠다.

필기한 내용들 맛보기😏

정리해서 설명하는 건 아직 어렵지만, 실제로 명령어를 사용하는 모습을 보고 나니 리눅스에 대해 조금 익숙해진 느낌이 든다.
'서버 개발자들은 리눅스를 많이 사용하는구나' 하는 생각이 와닿았다.

인턴 생활을 하면서 이전에 느꼈던 벽들이 허물어지는 느낌이다.
스프링과 리눅스, 도커, 쿠버네티스, AWS 등등을 전보다 익숙하게 느낄 수 있게 되어 정말 감사하다.

profile
아직 따끈따끈합니다🍵

0개의 댓글