인프런 커뮤니티 질문&답변
프로젝트 구조 관련 질문이 있습니다.
작성
·
14
0
안녕하세요!! 클라우드 관련 공부하다가 go에 관심이 생겨 수강하게 되었습니다.
백엔드는 이 강의와 책으로 처음 공부하는 중입니다.
현재는 강의 프로젝트 구조로 개인 프로젝트 진행해보려고 리펙터링 중 입니다.
수업과 관련은 없지만 3가지 질문이 있습니다.
1. 트랜잭션 구현을 위한 *sql.DB는 어디서 생성하고 어떻게 service에 주입해야 하나요?
reposiory는 수정해서, *sql.DB 필드 하나만 위치하도록 했습니다.
다만, 트랜잭션 구현을 하다보니, db 커넥션 풀을 repository에서 service로 가져오거나, cmd에서부터 service까지 내려보내주어야 하더라고요.
cmd에 db 커넥션 풀을 생성하도록 하면 안되는 걸까요?
orm 도입하기 이전에 내장 패키지로 기본 로직을 구현하려는 건 쓸 데 없는 일일까요?
2. 프로젝트 구조를 어째서 cmd에 전부 주입하는 식으로 작성하셨나요? 테스트는 어떻게 하시나요?
cmd를 main패키지 처럼 사용하시는 건지 궁금합니다. 제가 알고 있던 백엔드 구조(spring boot)와 많이 달라 보이네요. 또, 이 구조에서 테스트는 어떻게 진행해야 할지 잘 모르겠습니다. 대략적인 흐름이라도 알고자 여쭤봅니다.
3. 일하실 때에도 이 구조를 유지하시나요? 도메인별 패키지 분리(user, auth, member... etc)는 별로인가요?
개인적으로는 비즈니스 도메인별로 디렉터리를 나누는 것을 선호합니다. 다만, 현재 이 디렉터리 구조를 뜯어고칠 용기가 생기지는 않네요... 이 구조의 어떤 점 때문에 이렇게 사용하시는 지, 혹은 팀에서 이렇게 쓰길래 유지를 하고 계신건지 궁금합니다. 장단점이 있을까요?
궁금한걸 쌓아두면서 gpt로 해결하려다가, 쌓아둔게 터진 것처럼 장황하네요..
강의를 들으면서 해결 못한 내용이라 그런 것 같아요. 좋은 강의 잘 듣고 있습니다 🥹🙏
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. mellon님.
Golang으로 백엔드 개발을 진행하시는 중에 여러 가지 궁금증이 생기신 것 같아, 이에 대한 답변과 유사한 기존의 답변이 담긴 링크를 추천드립니다.
1. 트랜잭션 구현 및 *sql.DB 주입 관련
*sql.DB의 생성 및 주입 방법은 다양한 설계 패턴에 따라 달라질 수 있습니다. 일반적으로는 DB 연결을 main 함수에서 설정하고, 이를 필요한 서비스로 주입시켜 활용하는 방식이 많이 사용됩니다.
이와 관련된 토론과 예제를 찾기 위해, Go 언어의 DB 트랜잭션 관리 및 주입 패턴이라는 게시물이 도움될 수 있습니다. 해당 링크는 서버 구조와 패턴에 대해 다루고 있어 흐름을 이해하는데 도움이 될 것입니다.
2. 프로젝트 구조와 테스트
이 강의에서는 cmd 디렉토리를 main과 유사하게 사용하여 프로그램의 진입점을 관리합니다. 이렇게 하는 이유는 프로젝트 구조를 깔끔하게 유지하면서 여러 가지 실행 구성을 지원하기 위함입니다. 프로젝트 테스트 방법과 관련해서는, 일반적으로는 각 패키지 내에서 유닛 테스트를 작성하고, 디렉토리 구조와 상관없이 독립적 테스트가 이루어질 수 있도록 합니다.
Go 프로젝트의 구조와 테스트 패턴이라는 링크에서는 비슷한 방식으로 프로젝트를 구성하는 사례들이 다루어져 있습니다.
3. 도메인별 패키지 분리
도메인별 패키지 분리는 코드를 이해하기 쉬워지고 비즈니스 로직이 명확해지는 장점이 있습니다. 팀이나 프로젝트의 규모 등 여러 가지 요인에 따라 다른 패턴을 선택할 수 있으며, 강의에서는 기본적인 구조를 제공하지만, 필요에 따라 확장하는 것이 가능합니다. 이와 관련된 논의는 Go 프로젝트 구조의 유연한 관리 링크를 참고하시면 상세한 설명을 확인하실 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





