개발 활동11 [스위프 후기] 백엔드 개발자의 스위프 참여 후기(Spinlog) 참여 동기백엔드 개발자로의 취업을 위해 포트폴리오가 필요했다. 그러기 위해서는 단기간에 성과를 보여줄 수 있는 프로젝트를 진행할 필요성을 느꼈다. 그래서 참여하고 싶은 프로젝트를 찾아보던 중, 여러 가지 공고를 보았는데 이상하게 선뜻 참여 의지가 생기지 않았다. 이유를 생각해보면, 생판 모르는 사람들과 만나서 하나의 목표를 향해 간다는 것은 여간 힘든 일이 아니라, 실패할 확률이 높다고 생각했다. 또한, 취업을 해야하는 시기에 실패시 감당해야하는 시간적인 비용이 너무 아깝다는 생각이었다. 프로젝트에서 가장 두려운 점은 '팀원의 이탈'이라고 생각한다. 능력이 부족한 부분은 열심히 노력하고 같이 힘을 합쳐 해결할 수 있지만, 잠수를 탄다던가 팀원간 갈등으로 인해 팀에서 이탈하는 경우는 프로젝트의 존폐를 결정.. 2024. 6. 11. 외부 API 연동 - WireMock으로 테스트하기 개발을 할때 기능을 최대한 작게 만들고, 독립적으로(어느 기술에 의존하지 않고) 만들려고 노력한다. 이번 외부 API와 연동할때에도 'API와의 통신없이 실제와 같은 테스트를 할 수 있을까?'에 대해 고민하게 되었다. 일반적으로 테스트에는 의존성을 최소화하기 위해 Mockito를 사용하여 테스트를 진행하지만, 이는 완전한 해결법은 아닌 것 같았다. 외부 API를 사용할때는 http 요청과 응답, 응답값에 대한 역직렬화 과정 등이 발생하는데 Mockito는 단순히 목 객체를 주입받아서 메서드를 호출하는 방식으로 동작하기 때문이다. 목 객체를 주입받으면 실제 http 통신을 통해 받은 응답값을 확인할 수 없기 때문에 뭐랄까.. 테스트를 위한 테스트? 같은 느낌이었다. 나는 실제 통신까지 한 값을 받고 싶다고.. 2024. 5. 31. 외부 API 연동 - 외부 API에 문제가 있으면? Circuit Breaker Pattern & Resilience4j ChatGPT API를 이용하면서 외부 API에 여러가지 에러가 발생할때 대처법에 대해 공부해보았다.API를 통해 AI에게 요청을 날렸으나 응답을 받지 못하면 Timeout이 발생할때까지 요청 스레드를 계속 점유하고 있을 것이고, 응답이 지연되는 경우에는 Latency 시간만큼 요청 스레드를 점유하고 있을 것이다.이렇게 계속 스레드를 점유하고 있다면 서버의 스레드풀을 갉아먹어서 서비스 전체의 장애로 이어질 수 있다. 그렇다면, '이미 장애가 발생했을때는 더 이상 요청을 보내지 않아 자원을 사용하지 않을 수 없을까?' 라는 생각이 들었다.이를 해결하기 위해 Circuit Breaker 패턴을 적용하기로 했다. 1. Circuit Breaker Pattern?: 장애를 방지하기 위한 패턴으로 장애 발생 지점.. 2024. 5. 30. 외부 API 연동하기 - OpenFeign을 이용한 ChatGPT 연동 OpenFeign, 혹은 Feign Client를 통해 OpenAI API를 연동해 ChatGPT 기능을 구현해보았다. 이에 대한 코드 설명이다. 0. 개발 전, 필요한 작업1. OpenAI 회원가입2. 카드 등록3. API Key 발급: API 호출시에 사용할 것이고, 추후 다시 확인할 수 없으니, 잊어버리지 말고 공개하지도 않는다. 모두 OpenAI 사이트에서 할 수 있다. 1. 외부 API 연동 기술 선택 후 적용지난 글에서 각 연동 기술을 비교해보고, OpenFeign을 선택했다. 이를 적용해보겠다. 먼저, FeignClient를 사용하기 위해 인터페이스를 만든다. package com.example.spinlog.ai.service;import com.example.spinlog.ai.dto... 2024. 5. 30. 외부 API 연동하기 - 종류 프로젝트에서 필요한 기능 중 ChatGPT와의 연동을 해야하는 기능이 있었다.어떻게 구현해야할까 고민하던 중, 가장 보편적으로 사용하는 RestTemplate으로 구현해야겠다고 생각했다.(사실 내가 알던 유일한 방식이었다)구현을 하면서 테스트를 해보니 잘 작동해서 이렇게 가면 되겠다 싶었으나, 내가 생각하는 멘토이자 존경하는 개발자인 분에게 이러이러한 방식으로 구현 중이다고 하니 다른 방식을 고민해보라고 했다.잘 되는데 왜?라는 생각이 1초 정도 들었으나, 여러 가지 방법이 있다고 한번 공부해보라고 하셔서 다른 방법은 어떤게 있는지 궁금해졌다. 그래서 다른 방식에 대해 스터디한 내용을 정리해보고자 한다. 서치를 해보니 클라이언트단에서 외부 API를 호출하는 것 보다, 스프링에서 외부 API를 호출하는 이.. 2024. 5. 30. [Test] 애플리케이션 테스트 방법 스위프 프로젝트를 진행하면서 2주차에는 백엔드 팀원끼리 테스트 관련 스터디를 진행하기로 했다. 구글링을 통해 배운 개념을 정리해보겠으며, 이를 우리 서비스에 어떻게 적용할 것인지까지 생각해볼 계획이다. 테스트 종류, 이 프로젝트에서 테스트를 어떻게 해볼지에 대해 중점적으로 다뤄볼 예정이다. 1. 테스트를 왜 해야 하는가?1. 디버깅 비용 절감애플리케이션은 좋은 코드와 설계를 갖추더라도 결함이 있을 수 밖에 없다. 버그는 항상 발생할 수 있고, 그것을 해결하기 위해 개발자는 디버깅을 꾸준히 할 수 밖에 없다.디버깅을 할 때, 문제를 해결하는 시간보다 문제를 찾기 위한 시간이 더 소요된다. 어느 코드에서 어떤 케이스일때 문제가 발생했는지 파악하기 힘들기 때문이다.테스트를 작성하더라도 완벽하게 결함을 없앨 순.. 2024. 4. 29. 이전 1 2 다음