괴발개발 성장기

Study/개념공부

[개념공부] controller, service, repository, dto, entity 등 무엇인가?

지니유 2022. 8. 25. 21:25
반응형

 

 

# 배경

우리 회사 서비스에 디렉토리 명들이다. 3개의 서비스가 있는데 다 다르다. A, B는 각각 다른 스타일로 만들어져 있다. C를 만들어야하는 나는 깊은 고민에 빠졌다. 뭐가 좋은걸까? 각자 기능에 대해서 조금은 알지만 자세히는 몰라서 공부를 해봤다.

기본적으로 controller, service, repository, dto, entity 있고 mapper, config, common, middlerware 등등도 있다.

controller대신 handler를 사용하기도 했다. 

 

 

# controller

  • 사용자 요청이 진입하는 곳
  • 사용자 요청을 처리하는 곳
  • 처리 후 서비스로 넘어간다

# service

  •  repository와 controller 사이 미들웨어
  •  controller에서 받은 데이터를 가공해서 DB를 보내거나 DB에서 가져온 데이터를 가공해서 사용자에게 보내준다.
  • 사용자 요구사항을 처리하는 곳 (비즈니스 로직)

# repository

  • CRUD 명령어 작성하는 곳

# dto

  •  Data Transfer Object
  • 데이터 저장 담당 클래스
  •  계층간에 데이터를 교환할 때 주로 사용한다
  •  golang에서 보통 구조체를 사용한다

# entity

  • DB에 접근하는 객체

#  Entity와 DTO를 분리하는 이유?


하나로 쓰면 변경 된 값이 DB에 들어갈 수 있다. 그래서 변경이 많은 경우에는 entity와 DTO를 변경하는 것이 좋다.



# mapper

  • DTO와 Entity를 서로 변환해주는 것
  • SQL문을 직접 적으로 작성 하지 않고 객체를 바탕으로 DB를 동작시킨다 => 유지보수 간결
  • 복잡한 쿼리문은 작성하기 어렵다는 단점이 있다.

나의 생각

 A 서비스는 처음에 조인문을 안쓰고 DB에서 가져와서 loop돌려서 데이터를 사용했다. 그래서 이때 mapper 사용한 것이다. 그런데 시니어 개발자가 바뀌면서  mapper가 빠졌다. 필요없는 정보들을 많이 가져 온다고 했다. 그래서 필요한 정보만 DB에서 가져오기로 했다.



# middleware

  • OS와 Sw의 중간에서 조정과 중개의 역할을 해주는 소프트웨어
  • HTTP 요청하기 전에 공통으로 실행을 해준다 API 콜하기전에 필요한 것들을 하나로 만들어서 공통으로 사용한다.
  • EX) JWT인증, 세션관리, 라우트, DB트랜잭션 관리

# config

  • 어플 관련 환경 설정
  • local, dev, staging, prod

# common

  • 공통으로 사용하는 함수
  •  ex) 에러메시지, 핸드폰 암호화 

# adapter

  • 서로 다른 구조체를 연결하는 할 때 사용
  •  golang에서 HandlerFunc가 어댑터 패턴으로 구현
  •  ex) 카톡메시지, aws연결, 두레이API 등 사용

 

 

# 결론

study-service 프로젝트 구조를 변경해보자!  

뭐가 좋은 방법인지는 아직 잘 모르겠지만...내가 원하는 대로!!!

 

 

 

반응형

'Study > 개념공부' 카테고리의 다른 글

[개념정리] API  (0) 2022.11.18
[개념] enum이 무엇일까?  (0) 2022.07.22
세션과 쿠키 동작원리 및 쿠키, 세션 정의  (0) 2021.12.26
배포 관련 용어  (0) 2021.01.16
클라이언트-서버 공부  (0) 2021.01.16