--- 서론 ---
국비 끝내고 작은 서비스회사 들어온지 한 1년 되어가는데
이곳도 시니어급이라 할만한 초고수없이 맨땅에 부딪쳐가며 서비스를 만든 곳이라 코드가 옛스러움
lombok, 테스트코드, Optional, 람다 이런거 안씀
그래서 나도 이직준비차 공부도 할겸 친구랑 각잡고 사이드 프로젝트 하나 만들어보자! 해서 만드는 중인데,
이게 다른사람이 보면 별 대수롭지도 않은 내용일것같아서 질문하기가 쫌 무섭긴 한데.. 그래도 질문해볼게
--- 프로젝트 구조와 데이터 흐름 ---
일단 구조는 RestAPI로 쓸 부트 서버 하나, 그 앞단의 웹페이지를 보여줄 부트 서버 하나 이렇게 있는데
회원가입을 예로 들면
html + js에서 Controller에 요청
-> 앞단 프로젝트 Controller에서 UserDTO에 담아 Service로 전달
-> 앞단 프로젝트 Service에서 UserDTO를 gson.JsonObject로 바꿔서 API서버로 요청
-> APIController에서 데이터를 gson.JsonObject 형태로 받아 UserDTO로 바꿔서 Service로 전달
-> Service에서 Mapper를 통해 DB와 통신 후 결과값 역순으로 리턴
이런 식인데.. 각잡고 만들어보자 마음을 먹으니까 궁금한게 너무 많아졌어
--- 질문 ---
1. API와 통신을 할때, gson.JsonObject <-> XXXDTO간 전환을 어떻게 해야하는지?
아니면 전환이 필요 없는지? 없다면 gson, jackson같은 라이브러리는 어떤 용도로 쓰는지?
DTO가 1개면 모를까 유저정보를 담는 DTO가 있을 것이고, 상품정보를 담는 DTO가 있을 것이고, 결제정보를 담을 DTO도 있을 것인데
각각의 DTO가 가지고 있는 변수가 다를텐데 String형태로 바꿔서 파싱을 해야하는건지,
그것도 아니면 뭔가 설정을 해두면 그냥 XXXDTO, YYYDTO 형태를 바로 떤져도 잘 넘어가지는지..
평소에 생각없이 원래 짜여져 있던대로 HashMap<String, Object> 형식으로 죄다 던지고 받았던지라 갑자기 이런거부터 턱 막히네..
2. 만약 API가 아닌 앞단 프로젝트의 Service에서 따로 비즈니스로직을 처리할게 없고,
단지 API로 전송하는 역할만을 한다면, 그럼에도 불구하고 Controller -> Service를 거쳐 API와 통신해야 하는지,
아니면 JS단에서 바로 API를 호출해도 되는건지, 그게 비권장사항이라면 이유가 무엇인지 궁금해
3. 패키지 트리를 어떤식으로 정리하는게 좋을지?
우리회사는 기능별로, 예를들어 main, company, user, item, book.. 이런식으로 패키지를 만들고 그 하위에 controller, service, mapper 패키지를 만들거든
그런데 친구네 회사는 가장 상위 패키지가 rest, web이고,
web 밑에는 controller 패키지 하나만 두고, 꼭 서버단에서 미리 만들어서 내려줘야하는 특수한 몇몇 경우를 제외하고는 순수 html 페이지를 호출하는 컨트롤러만 거기다가 둔다고 하네?
그리고 rest 밑에다가는 controller, service를 만들어서 API와 통신하고..
어떤게 더 좋은 방식인지 잘 모르겠어서 다른사람은 어떻게 생각하는지 궁금함
4. 비즈니스 로직을 어디에서 구현하는게 좋은 방법인지?
입력받은 데이터를 토대로 무언가를 계산하고, 암호화한 다음 DB에 넣어야한다. -> 앞단프로젝트의 Service
꺼낸 데이터를 복호화해서 무언가 계산한 뒤 내려줘야하는데, 이 API를 여러군데에서 호출하고, 모든 곳에서 동일하게 적용되는 로직이다 -> API프로젝트의 Service
꺼낸 데이터를 복호화해서 무언가 계산한 뒤 내려줘야하는데, 오직 한 프로젝트에서만 필요하다 -> API는 전달만 해주고 앞단프로젝트의 Service
내 생각이 맞는지 궁금함
질문은 몇개는 그냥 알아서 하면되고 패키지짜는건 구글링하면 레퍼런스 찾을 수 있을테니 참고하면됨. 뭐라하는건 아닌데 뭔가 핀트가 잘못됐음. 프로젝트를 하는데 질문보면 지금 되게 사소한거에 꽂혀있음. 좀 더 큰 그림을 먼저 그리는거에서 질문이 생겨야할거같음. 념글에 주딱이 써놓은 글있는데 백엔드단에서 그런걸 고려하는게 좋을거 같음.
단순 모던자바 문법익히려고 하는거면 협업프로젝트보단 간단히 혼자 올려서 테스트해보는걸 추천함. 협업으로 플젝하는 거면 그래도 이직 포폴에 넣고 싶어서 일텐데 모던자바 연습하다 끝날거 같은 느낌이 강하게 든다.
문법보다는 사이드 프로젝트니까 일정제한같은것도 없으니 좀 정제된 코드로 짜보고 싶었음.. 어떤 로직을 어디에서 처리하고 어떤식으로 패키지를 관리하고 이런게 궁금해서 물어봤음 질문이 지엽적인건 나도 인지하고있음.. 근데 지금까지 코드리뷰같은 어떤 올바른 방법이라는 가이드가 없이 기능구현만 성공하면 됐다 이런식으로 넘어가다보니 사소한거 하나하나 하면서도 이게 좋은 방법인가? 다른사람은 어떤식으로 하지? 이런 의문이 자꾸 생기네
1. json은 각 dto에 맞게 가공해야지 - dc App
저렇게 API에 떤질때 DTO에서 Json객체로 만들어서 떤지고 받을때도 Json객체로 받아서 DTO로 변환해서 쓰는게 맞는건가 그럼?
ㅇㅇ - dc App
2. 앞단이 프론트서버 말하는거임?? js에 로직 넣으려 하려하면 나중에 관리 안됨 - dc App
3. 컨트롤러,서비스,매퍼 밑에 상세분류가 맞음 - dc App
4. 암복호화나 비지니스로직은 백엔드 api서버에서 다하는거야 - dc App
궁금한게 그럼 DB에서 데이터를 꺼낸 다음 복호화를 해서 앞단서버에 전달을 하면 복호화된 데이터가 네트웍망을 타는거 아님? 그래도 상관없는건가? 요샌 다 aws써서 같은 사설망 안에 구성해놓으면 상관이없나?
개인정보암호화는 db에만 돼있으믄 됨 법이라서 - dc App
비밀번호는 디비에서 역순으로 갈 일이 없고 - dc App
ㄱㅅㄱㅅ