목록전체 글 (291)
개발자로 후회없는 삶 살기
서론※ 아래 내용을 다룹니다.스프링 Rest Docs 셋팅ClassNotFound 예외 해결 본론- Rest Docs 사용 목적API 명세 작성 > 스펙 작성 > 문서 작성프론트엔드 개발자와 프로젝트를 진행할 때, API 명세를 작성하고 문서화하여 공유하는 것이 일반적이다. 이때 Rest Docs을 사용하면 개발이 완료되기 전에, 간단한 컨트롤러 테스트 코드로 API를 문서화할 수 있다. 또한 테스트가 성공해야만 문서가 만들어지므로, 테스트 코드 작성을 의무적으로 수행하기 위한 팀 규율로 사용할 수도 있다. ✅ 도메인 > 서비스 > 컨트롤러 순으로 개발을 하면 문서화 시점이 늦지 않을까?실무에서는 API 명세에 맞게 컨트롤러의 요청과 응답, 빈 검증만 간단하게 개발하여 Rest Docs로 문서화하고, 도..
서론※ 아래 내용을 다룹니다.프레젠테이션 레이어를 테스트하는 방법StubbingTest DoubleTest Fixture 클렌징 본론- 프레젠테이션 레이어의 역할외부 세계의 요청을 가장 먼저 받는 레이어로 응답 결과와 요청 필드 검증을 주로 테스트해야 한다. 🚨 어떻게 테스트해야 할까?Mocking : 가짜 객체로 대신하는 것프레젠테이션 레이어를 테스트할 땐 그에 의존되는 하위의 레이어를 모킹한다. 프레젠테이션 레이어 테스트만 집중하여 단위 테스트 느낌이 가능하도록 하는 것이다. - MockList mockList = Mock(List.class)의존 관계로 인해 테스트가 어려울 때, 잘 동작하는 것을 가정하고, 가짜 객체로 처리할 때 사용한다. Mockito 라이브러리의 Mock 인터페이스는 가짜 객..
🚨 서론 (문제 상황)필자가 운영하고 있는 AI 검색 서비스는 4대의 분산 추론 서버의 응답을 저장하고, 클라이언트에게 전시하는 동작이 가장 중요한 기능 중 하나이다.[서비스 링크] 추론 요청에 대한 응답으로는 단순 문자열 1개나 이미지가 아닌, 100개 이상의 검색 결과로 1개의 검색 결과에 5개의 필드를 가지고 있다. 이처럼 한 번의 추론에서 50KB 용량의 다수의 문자열 데이터를 응답 받기에 어떻게 클라이언트에게 전달하는 것이 효과적일지 고민이 생겼다. 또한, 클라이언트에 추론 결과를 제공하기 위해서 추론 결과가 저장되는 공간을 반복적으로 체크하도록 설계가 되어있었기 때문에 접근 시간, 조회 속도를 고려하여 저장 공간을 선택해야 했다. 필자가 최종 선택한 저장 공간은 시간 지역성을 고려한 Redi..
🚨 서론 (문제상황)@Beanpublic RedisTemplate redisTemplate( RedisConnectionFactory redisConnectionFactory, ObjectMapper objectMapper) { Jackson2JsonRedisSerializer jsonRedisSerializer = new Jackson2JsonRedisSerializer(AccessTokenSaveResponseDto.class); jsonRedisSerializer.setObjectMapper(objectMapper); // 여기 ✅Redis의 Serializer는 내부적으로 ObjectMapper를 사용하여, 객체 ↔ JSON 직렬화, 역직렬..
🚨 서론 (문제 상황)Redis는 단순 데이터 저장뿐만 아니라, 캐싱, 메세지 콜백 등 다양한 기능으로 활용도가 매우 높다. 그 중 정밀한 이벤트 핸들러를 제공하는 Redis Stream을 사용하고자 했고, 일반 (키-벨류, 해시맵) 형태가 아닌 특수한 자료구조라서, 사용하기 전에 자세히 알아보고자 한다. 본론- 자바의 직렬화 & 역직렬화직렬화 : 자바의 Object를 다른 컴퓨터의 자바 시스템에서 사용할 수 있도록 저장하는 것을 의미한다. Object를 연속된(Serial) 바이트 스트림 형태로 포맷 변환하는 기술이다.역직렬화 : 바이트 스트림을 원래대로 자바 시스템의 Object로 변환하여 로드하는 기술이다. JVM 클래스 로더 시스템을 보면 클래스 정보가 메서드 영역에 저장되고 Object가 힙,..
🚨 서론 (문제 상황)대부분의 AI 모델은 Python, C++로 작성되고 동작하도록 설계되어 있다. 특히 대용량 데이터 연산 라이브러리를 편하게 사용할 수 있는 Python은 모델을 학습하고 서빙하기에 특화 되어있다. @app.route("/img2img", methods=["POST"])def imageToimage(): image_path, prompt = extract_img2img_request_message(request) image_paths = generate_image_to_image_process(prompt, image_path) return render_template(INDEX, lora_weights = lora_weights.keys(), images = im..
서론롯데 이노베이트에서 진행한 미션을 과정을 기록합니다. 본론-> 전체 코드[깃허브] - 프로젝트 주제기존 text2img 이미지 생성 모델들은 영어 프롬프트를 기반으로 동작하므로, 한국어를 입력하면 다음과 같은 결과가 나옵니다. 프롬프트 : "여름 날씨에 수영장에서 즐겁게 놀고 있는 가족의 모습. 수영장은 맑은 물과 다양한 수영 놀이 시설이 있으며, 가족들은 물속에서 즐거운 시간을 보내고 있습니다."이는 한국어를 전혀 이해하지 못하고, 이미지 생성에 필요한 적절한 텍스트 임베딩을 하지 못하기 때문입니다. 프롬프트 : "여름 날씨에 수영장에서 즐겁게 놀고 있는 가족의 모습. 수영장은 맑은 물과 다양한 수영 놀이 시설이 있으며, 가족들은 물속에서 즐거운 시간을 보내고 있습니다."따라서, 한국어 텍스트를..