자바

[프로그래머스, 실무역량과제] API 서버 개발

류창 2023. 4. 12. 17:35
반응형

https://school.programmers.co.kr/skill_check_assignments/430

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

 

API 서버 개발을 입문하기 딱 좋은 문제들을 묻습니다.

 

 

필자는,  Gradle 환경에서 테스트 했습니다.

 

 

1번 문제

 

 

문제는 다음을 묻습니다.  

 

클라이언트가  "/" , "content-type, json " 요청을 보낼때 

API 서버를 하나 5678포트로 생성해서

json 형태로  "message" : "server check" 를 담아주세요.

 

 

즉, 제일먼저 해야하는것은  서버를 구축하는 코드다. 

 

보통.. @RestController로 그냥 프로젝트를 할땐 8080포트로 "/api" 경로를 타서 제공을 하는데, 

5678포트를 따로 만들어달라는 요청이다.

 

 

서버 구축은 다음과같다. 

 

HttpServer . create(new InetSocketAddress(port)),0);  로 생성을한다.

 

createContext로  "/"  경로를 설정해주고,  뒤에 함수로는 실행할 로직을 적는다.

createContext "/sum"은 2번 문제이니 추후에 설명을하겠다.

 

기본 실행자를 세팅한후,

server.start()를 실행하면  5678포트로 API서버 구축 완료다.

 

 

 

1번문제의 로직이다!

 

 

response는 json 형태로 담아줬다.  문자열 리터럴 """  """ 를 사용하여 쉽게 담았다. 

 

http의 응답헤더에  지시문대로   json타입을 설정하고 (대문자 철자 하나하나 제대로써야한다..)

Response Code : 200 번도 설정하고,  길이는  response의 길이만큼 설정한다.

=> 일종의 응답코드 세팅

 

그 후, ResponseBody에   OutputStream으로  response문을 써주고 닫으면 완료다.

=> 응답 코드 작성

 

 

2번 문제.

 

1번문제를 해결하고,  2번문제는 다음 기술이 추가로 필요하다.

 

이미 있는  JSON 파일  파싱하기 !!

 

Json 파싱을 하기위해선 라이브러리를 쓰는걸 매우 추천한다. 

https://mvnrepository.com/artifact/org.json/json

 

여기서  Gradle, Maven 환경을 택한뒤 설치하자.

 

 

 

전, Intellij 환경에서 구현을 했습니다.

실제 테스트 환경에서 주어진 json파일을 복사해서 말이죠.

 

주어진 json파일 위치는 다음과 같습니다.

 

 

Json 파일을 보면,   [ ]  형태로 배열로 감싸져있습니다.

 

그리고,  요소가  user_id, username , post_count가 있습니다.

 

우린 이제부터  ObjectMapper json 라이브러리로  1대 1 매칭을 할겁니다.

 

User 클래스

 

 

여러개의 User를 배열로 표현했으니, 다음과 같은 코드를 작성하면됩니다.

 

User[] users = objectMapper.readValue(new File(filePath),User[].class);

filePath에 있는 Json코드와  User[] 배열을 매칭시키는겁니다

 

for(User user: users){
    System.out.println(user.getPost_count());
    sum+=user.getPost_count();
}

 

이후,  User[] 를 순차탐색해서,  뽑고싶엇던 Post_count()를 담습니다.

 

 

String response = """
        {
            "sum" : "%d"
        }
        """.formatted(sum);
t.getResponseHeaders().add("Content-Type", "application/json"); // 응답 헤더 설정
t.sendResponseHeaders(200, response.getBytes().length); // 응답 코드와 길이 설정
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();

그 후 , 코드는 1번 과 같습니다.

 

문자열 리터럴에 변수를 넣고싶다면   % , formatted()를 사용하여 집어넣을수 있습니다.

 

 

 

 

----------------------------------------------------------------------------------------------------------

 

테스트 화면 

 

 

 

API 서버 구축 완료!

반응형