https://school.programmers.co.kr/skill_check_assignments/430
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 서버 구축 완료!
'자바' 카테고리의 다른 글
구글 푸시알림 기능 구현하기 (FCM, Java, Vue ) (2) | 2024.11.19 |
---|---|
자주 쓰는 디자인 패턴 (행위 패턴) (0) | 2023.03.23 |
자주 쓰는 디자인 패턴 [구조 패턴] (0) | 2023.03.22 |
자주쓰는 디자인 패턴 총정리 (생성 패턴 편) (1) | 2023.03.21 |
정규표현식(REGEX) 문법 정리 (1) | 2022.12.24 |