Spring에서 API를 호출할 때 질문좀요..

조회수 782회

A서버랑 B서버가 있고, 서로 네트워크 망이 다르고 보안이슈 때문에 디비링크를 연결하지 못합니다.

그래서 데이터를 가지고 있는 A서버에서 API를 통해 데이터를 가져와야는데요, A서버는 API 제공자니까 CRUD(생성, 읽기, 수정, 삭제) 4개의 매소를 만들어서 제공을 해주는게 맞잖아요?? (읽기(R)는 get으로, 나머지 생성,수정,삭제(CUD)는 post로)

그런데 해당 API를 호출하는 B서버도 4개를 만들어서 관리를 해야 하나요?

저는 지금 get으로 호출하는것 하나, post로 호출하는것 하나 해서 두가지를 공통 클래스 안에 만들어놓고 각 컨트롤러에서 필요에 따라서 호출(get or post)을 하는데

@Controller
@RequestMapping("/user")
public class UserController {

CaController caController = new CaController();

...
//데이터 가져올 때
@RequestMapping(value="getUserInfo.do")
public ModelAndView getUserInfo(HttpServletRequest request, HttpServletResponse response, HttpSession session, @RequestParam Map<String, Object> data) throws Exception {
...
//get방식
String result = caController.getMethod(data);
...
}

...
//데이터 삭제(생성, 수정, 삭제 동일.. deleteUserInfo, updateUserInfo, createUserInfo)
@RequestMapping(value="deleteUserInfo.do")
public ModelAndView deleteUserInfo(HttpServletRequest request, HttpServletResponse response, HttpSession session, @RequestParam Map<String, Object> data) throws Exception {
...
//post방식
String result = caController.postMethod(data);
...
}

이 방법으로 해도 맞는건지 궁금합니다.

1) get 방식으로 사용하는 함수(데이터를 가져올 때)

public String getMethod(@RequestParam Map<String, Object> data) throws Exception {
    URL url = new URL(data.url);
    BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),"UTF-8"));
    StringBuffer sb = new StringBuffer();
    String tempStr = null;

    while(true) {
        tempStr = br.readLine();
        if(tempStr == null) break;
        sb.append(tempStr); 
    }
    br.close();
    return sb.toString();
}

2) post 방식으로 사용하는 함수(데이터 생성, 수정, 삭제)

public String postMethod(@RequestParam Map<String, Object> data) throws Exception {
    String iStr = null;
    StringBuffer outBuf = new StringBuffer();
    String param = getJsonStringForMap(data);

    URL url = new URL(apiUrl);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    try {
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Accept-Charset", "UTF-8");

        OutputStream os = conn.getOutputStream();
        os.write(param.getBytes("UTF-8"));
        os.flush();

        BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
        while((iStr = in.readLine()) != null) {
            outBuf.append(iStr);
        }
    } catch(Exception e) {
        e.printStackTrace();
    } finally {
        conn.disconnect();
    }

   return outBuf.toString();
}

아니면 다른 방법으로 하는게 맞는지 궁금합니다..

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • 질문의 요지는 "4개를 만드는게 맞냐?"인 것 같은데요. 근데 그 4개가 뭘 말하는건지... 메서드 4개 만드는게 맞냐는건가요? 편집요청빌런 2020.4.1 09:19
  • 네,, 맞습니다.. 호출하는쪽에서 crud에 맞춰서 4개를 만들어야 하는지, 아니면 본문의 내용처럼 두개만 만들어서 사용을 해도 되는지.. 궁금합니다. 알 수 없는 사용자 2020.4.1 11:08

1 답변

  • 제공하는 API가 4개라고 해서 사용하는 측도 반드시 그 개수에 맞출 필요는 없습니다. API가 요구하는 요청 형식에 맞기만 하면 나머지는 전적으로 클라이언트에 달렸습니다.

    본문의 내용을 예로 들면, B서버는 조회 메서드 하나, 생성과 수정 메서드 하나, 삭제 메서드 하나 이렇게 3개만 있어도 된다는거죠. 물론 질문처럼 2개만 있어도 됩니다.

    그런것보다는 B서버가 실제로 어떻게 쓰이느냐를 고려해서 설계하면 됩니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)