프로그라피 9기 서버 사전과제 후기

김진형·2024년 3월 11일
1

1. Why?

나는 다양한 사람들과 함께 공부나 프로젝트를 진행하는 것을 좋아한다. 왜냐? 혼자서 공부하면 늘어지기 마련이고, 팀을 꾸려서 프로젝트를 진행하면 책임감과 기간 마감이라는 압박감? 덕분에 나 자신을 더 채찍질하게 돼서 좋아한다. 그래서 심심할 때마다 IT 동아리를 찾아보곤 한다.

때마침 프로그라피를 발견하였고, 고민 없이 당장 신청했다. 스프링 공부를 막 시작한 터라 사전과제하면서 많이 힘들었지만, 깨달은 점이 너무 많아 기록하려고 작성한다.
(아쉽게도 사전과제에서 탈락했지만🥲 이를 발판 삼아 다른 동아리에도 도전해 보겠다)
사전과제를 하면서 모르는 것들을 싹~~ 다 적어놓고 관련 블로그와 간단한 정리를 적어놨다.

2. 사전과제

과제는 5~6일 동안 총 10개의 API들을 구현하는 것이다. 간단히 말하자면 조회, 생성 API와 로직이 은근 까다로운 API도 있었다.
(자세한 내용은 혹시 모르니 생략, 혹시라도 문제가 된다면 삭제하겠습니다..!)

언어는 Java, 프레임워크는 Spring Boot, Spring JPA, 데이터베이스는 H2 Database를 사용해야 한다. 문서화, 가독성, 테스트 코드 등은 가산점이 부여되기도 한다.

3. 새롭게 알게된 점

3-1. 헬스 체크

참고한 사이트(설명이 너무 좋다)
나는 헬스 체크라는 걸 이번에 처음 알았다. 이걸 왜 해야 하는데?? 의문이 들었다. 그래서 Why?에 초점을 맞춰 찾아봤다.

여러 이유로 서버의 이중화를 하고, 앞에다가 어떤 서버로 요청을 보낼지 라우팅 역할을 하는 로드 밸런서를 둔다. 요청을 보낼 때 서버가 서비스 가능한 상태인지 점검을 하는데, 이 점검이 바로 헬스 체크이다. 나는 늘 서버를 1대만 사용하여 인프라를 간단하게 구성했기 때문에 이런 고민을 해본 적이 없었다.

나는 그냥 GET 요청으로 간단한 API를 짰지만, Spring Boot Actuator를 이용할 수도 있다고 하더라. 대체 왜??

그 이유는 서버의 다양한 상태 정보(ex: 디스크 공간, DB 연결 등등)를 얻을 수 있기 때문이다. 사실 Spring Boot Actuator를 써야할 필요성은 못느꼈었다. 단지 서버가 서비스 가능 상태인지만 점검하면 되는데 굳이 상태 정보를 알아야 하나?? 라는 생각이 지배적이었다.

추후 Blue/Green을 이용한 무중단 배포를 알아보면서(참고 영상) Spring Boot Actuator를 써봐도 좋겠다고 느꼈다. 나중에 무중단 배포를 공부하면서 자세히 알아봐야겠다.

3-2. 초기화 API (+ Faker API)

DB의 모든 데이터를 초기화하고, API 안에서 또 다른 API를 호출하여 정보를 저장하는 API였다. 이 API(초기화 API) 안에서 호출한 API가 바로 Faker API라는 것이었다.

가장 감명깊었던 건
1. API 안에서 외부 API를 호출할 수 있다는 것 >> 그냥 처음 알아서 신기했다..!
2. DB의 모든 데이터 초기화와 동시에 Faker API를 통해 더미데이터를 추가한다는 것 >> 개발할 때 너무너무 편할 것 같다. 난 늘 DB에 데이터를 직접 넣었다가 삭제했다가.. 이런 귀찮은 짓을 해왔는데 앞으로는 이 방식을 사용할 것이다. (신세계다..!)

일단 Faker API란? 더미데이터를 나의 입맛에 맞게 JSON 형식으로 가져올 수 있는 API이다. 무려 무료로 제공해주고 있다. 이를 사용한다면 개발 과정에서 더미데이터 생성을 매우 간편하게 할 수 있을 것이다..!

위처럼 api 불러오니까

{
    "status": "OK",
    "code": 200,
    "total": 10,
    "data": [
        {
            "id": 1,
            "uuid": "c81f4430-3ee4-3b6c-ba7a-29ac9cc9aefa",
            "firstname": "영일",
            "lastname": "제",
            "username": "mijung.bae",
            "password": "+]/!f(dU3i:C9djwa>21",
            "email": "iheo@nam.net",
            "ip": "7.178.78.240",
            "macAddress": "2B:F3:74:8C:8B:67",
            "website": "http://kwak.kr",
            "image": "http://placeimg.com/640/480/people"
        },
        {
            "id": 2,
            "uuid": "3e603c7a-a005-3cd8-8041-1459a23dfe52",
            "firstname": "서영",
            "lastname": "변",
            "username": "hcheon",
            "password": ";OR:r6'oj1h`i=0No2",
            "email": "yuri.ko@yahoo.com",
            "ip": "15.204.198.172",
            "macAddress": "BF:50:1D:DE:20:D4",
            "website": "http://oh.biz",
            "image": "http://placeimg.com/640/480/people"
        },
				...
		]
}

위처럼 더미데이터를 가져올 수 있다..!

Faker API에 대해서는 알겠는데... 그럼 API 안에서 다른 API를 대체 어떻게 호출을 하지??
가장 많이 나오는 방식이 'RestTemplate'과 'WebClient'이다. 솔직히 이 부분은 구글링,GPT,Bard에게 물어보고 구현만 급하게 하느라 깊은 이해는 못했다. 추후 새 프로젝트에 도입하면서 깊게 공부해보겠다...

4. 느낀점

일단 망설임 없이 동아리에 신청해서 도전해 본 나를 칭찬해 주고 싶다. 특히 일주일 동안 밥 먹는 시간, 자는 시간 제외하고 사전과제에 몰입했던 경험 덕분에 많은 성장을 한 것 같다. 어떤 성장을 했는지 한번 읊어보자!

  1. 스프링 부트로 API를 개발하는 감을 익히게 됨. (물론 내부적인 부분의 이해는 많이 부족하다)
  2. 서비스의 고가용성을 위해 로드 밸런서와 다수의 서버로 인프라를 구성할 수 있다는 걸 알게 됨. 이 과정에서 헬스 체크가 필요한 것
  3. 개발의 편의성을 위해 초기화 API로 DB 초기화와 함께 더미데이터를 넣어줄 수 있다는 걸 알게 됨.
  4. 짧은 시간 동안 몰입해서 코드를 짜는 능력을 기르게 됨.

아무튼 너무 값진 경험이었다. 비록 프로그라피는 탈락했지만, 다른 동아리에 붙을 때까지 전부 다 지원해볼 것이다!!!

0개의 댓글