전체 글 15

AI 성능 프로파일러를 하루 만에 만들기

소마 프로젝트의 핵심 기능은 음식 사진을 AI에게 보내 어떤 음식인지 판별하는 것이다. 백엔드 팀원이 이미 Gemini API로 이 기능을 구현해둔 상태였다.소마는 지원비가 넉넉해서 비용 걱정이 없었고, 마침 새로 나온 Gemini Flash 모델이 이미지 식별을 아주 잘한다는 소식도 있었다. 팀원은 자연스럽게 Gemini Flash 3.8을 골라 구현을 마쳤다.앱에서 직접 테스트해보면 잘 되는 것 같긴 했다. 그런데 3가지 질문이 자연스럽게 따라왔다.이게 정말 잘 되는 게 맞나? 정확도가 높은건지.... 낮은건지...추론에 8~10초씩 걸리는데, 더 줄일 수는 없나?나중에 지원금 없이도 이 서비스를 유지하려면 api 호출 비용을 더 절약하고 싶은데...당장 떠오른 아이디어, 또 바로 떠오른 그에 대한 ..

카테고리 없음 2026.10.29

이메일 인증 기능 구현, AI 쓰면 딸깍 아님?

모바일과 웹을 가리지 않고 대부분의 서비스에는 로그인과 회원가입 기능이 필요하다.OAuth 기반의 소셜 로그인을 사용한다면 조금 다르겠지만, 이메일&패스워드 기반 회원가입에서는 사용자가 입력한 이메일이 실제로 본인의 이메일인지 확인하는 과정이 필요하다.이번 글에서는 이메일 인증 기능을 구현하면서 겪었던 고민과 해결 과정을 공유해보고자 한다.서버가 그 이메일로 인증 코드 보내고 인증 되면 회원가입! 끝 아냐? 너무 쉽네처음 생각했던 이메일 회원가입 흐름은 단순했다.사용자가 이메일을 입력서버가 해당 이메일로 인증 코드 전송사용자가 인증 코드를 입력서버가 해당 이메일을 인증 완료 상태로 저장사용자는 이름, 성별, 생년월일 등의 정보를 입력 후 회원가입 API를 호출서버는 인증이 된 이메일인지 확인 후 회원가입..

카테고리 없음 2026.10.29

JPA N+1 문제, HibernateProxy 뜯어보기

게시글 목록 API를 만들다가 고민했던 내용을 정리해보고자 한다.상황: 게시글 목록 API미니 SNS의 게시글 목록을 만들고 있다. 게시글(Post)은 작성자(User)를 N:1로 참조한다(한 사용자가 여러 개의 게시글을 쓸 수 있으니까!!!! ) 그리고 목록 응답에는 작성자 정보 중닉네임이 함께 나가야 하는 상황이다.@Entityclass Post( @ManyToOne(fetch = FetchType.LAZY) // 지연 로딩 — author 자리에 뭐가 들어가는지는 뒤에서 확인한다 @JoinColumn(name = "author_id", nullable = false) val author: User, @Column(nullable = false, columnDefinition ..

카테고리 없음 2026.10.29

오픈소스 첫 기여로 JPEG 회전 버그를 고친 이야기

한 달 정도 전, 올린 오픈소스 PR이 머지되고 제가 기여한 내용이 지난 주에 Release까지 되는 경험을 해보며 이 과정을 한번 회고해보고자 합니다.시작 동기올해 상반기에는 피뽑탈을 경험하고, 그래도 계속 멍하니 있을 수는 없어서 정신을 좀 차릴 겸 하나에 집중해서 파고들 수 있는 일을 찾고 싶었습니다.그러던 중 예전부터 막연하게 생각만 하던 오픈소스 기여를 한번 해보고 싶다는 생각이 들었습니다.다만 단순히 README 오타를 고치거나, 번역을 조금 수정하거나, KDoc을 추가하는 식의 기여보다는 실제 앱의 핵심 로직이나 버그 이슈를 해결해보고 싶었습니다.어떤 오픈소스에 기여할까결심을 하고 NIA나 다른 오픈소스 Android 앱에서 비교적 접근 가능한 이슈를 찾아보기 시작했습니다.그러던 중 Wiki..

카테고리 없음 2026.10.29

Now in Android는 클린 아키텍처가 아니다?

당연히 구글이 권장하는 앱 아키텍처는 클린 아키텍처인 줄...클린 아키텍처를 사용해서 간단한 토이 프로젝트를 하는 과정에서, 설계를 위한 Best Practice를 찾아보다가 Google에서 앱 아키텍처 가이드라인으로 제공하는 Now in Android를 참고해 내 앱을 설계해보았습니다.그런데 공식 문서도 제대로 읽지 않고 바로 파일 구조부터 보며 따라하던 중, 의문이 있었습니다.Repository의 interface가 모두 다 Domain이 아닌 Data Layer에 있는 점이었습니다.내가 착각했던 부분다들 클린아키텍처를 여기저기서 도입하기에 Now in Android도, 구글에서 권장하는 앱 아키텍처도 당연히 클린 아키텍처인 줄 알았습니다.이번 실수로 Layered 아키텍처와 클린 아키텍처는 확실하게..

카테고리 없음 2026.10.29

Compose Styles API

Compose Styles API 살펴보기지난 Google I/O의 What's new in Android 세션에서 Styles API에 대한 발표가 인상적이었어서, 이번 글에서는 Compose Styles API에 대해 정리해보고자 합니다.!youtube[e-wlF3cmJms?si=aJBmKEFNwkOZv87Q]위 발표 영상에서도 Styles API를 잘 설명해주지만, 공식 문서에서 제게 눈에 띄었던 부분을 간단하게 소개해보고 싶습니다.참고로 Styles API는 아직 ExperimentalFoundationStyleApi가 붙어 있는 실험적 API입니다!!!우리 앱만의 Button을 만들다 보면서비스를 개발하다 보면 거의 반드시 이런 시도를 하게 됩니다.우리 앱만의 버튼 컴포넌트를 만들자. 또는 우리..

카테고리 없음 2026.10.29

GitLab, Jira을 Mattermost와 연동하자! : 개발 생산성 극대화하기

SSAFY에서 공통 프로젝트를 수행할 때 사용하는 툴인 GitLab, Jira, 그리고 Mattermost. 이 세 가지 툴을 각각 따로 사용하는 것도 좋지만, 서로 연동하면 개발 워크플로우를 개선할 수 있습니다.이번 포스트에서는 GitLab, Jira, Mattermost를 완벽하게 연동하여 이슈 추적부터 코드 리뷰, 배포 알림까지 모든 과정을 매끄럽게 연결하기 위한 사전 설정을 가이드해보고자 합니다.나중에 다시 할 일이 있을 때 삽질을 하지 않도록.....구체적으로 하고자 하는 것업무 자동화: GitLab에서 특정 브랜치에 코드를 푸시하거나 풀리퀘를 생성하면, 관련 Jira 이슈를 자동으로 업데이트하고 Mattermost 채널에 알림을 보낼 수 있습니다.커뮤니케이션 효율 증대: Jira 이슈에 대한 ..

카테고리 없음 2026.10.29

SSAFIT: 금융 카드 도메인 RAG LLM 구축

[Project] RAG 파이프라인으로 카드 추천 챗봇 만들기안녕하세요! RAG 기반 AI 카드 비교 및 추천 서비스, SSAFIT 프로젝트의 개발 회고를 시작합니다. 이 글은 '어떤 기능을 만들었다'는 결과보다는, RAG 파이프라인을 한 단계씩 구축하며 마주친 문제들과 이를 코드로 해결하며 성장한 과정을 담은 기술 회고록입니다.https://ssafit-ai-project.github.io/ssafit/#/"그래서, 무슨 카드가 제일 좋은 건데?" - 문제 정의SSAFY는 다양한 국내 금융사와 협력하여 서류 지원 및 여러 방면에서 가점을 제공하고 있습니다. 그렇기에 팀원 분 중에서도 금융권 기업 취업을 희망하시는 분들이 많으셨고 그렇기에 금융 도메인과 관련된 프로젝트를 진행하게 되었습니다.그중에서도 신..

카테고리 없음 2026.10.29

운영체제의 태동과 발전 (2)

지난 게시글에 이어 운영체제 과목에서 다룬 운영체제의 태동과 발전에 대해 정리한 게시글입니다. 목차초기 일괄처리 시스템일괄처리 시스템다중프로그래밍시분할 시스템 초기 일괄 처리 시스템이전의 방식에서 문제가 있음을 인지하고 역시 인간 더 나은 방법을 찾기 위해 노력하는데, 바로 전문가를 고용하는 것이다. operator(운영자)를 고용하여 사용자의 작업을 전문적으로 대행하였다. 사용자들이 요구하는 비슷한 작업들을 함께 묶어서 배치(batch)로 처리하였고 배치는 별도의 오프라인 테이프에 기록이 되는데 이걸 operator가 다시 주컴퓨터에 옮겨 출력된 자기테이프를 이제 위성 컴퓨터로 다시 옮겨 프린트 되는 것을 사용자가 받아가는 형식으로 진행되었다지금까지의 설명을 표현한 사진. 빨간 색으로 감싸져있는 부분을..

카테고리 없음 2023.03.13

운영체제의 태동과 발전 (1)

3학년 1학기 운영체제 과목을 수강하며 강의 내용을 정리한 게시글입니다. 목차운영체제의 필요성과 목적초기시스템 아래의 방식은 분량 관계 상 다음 게시글에서 정리하겠다.초기 일괄처리 시스템일괄처리 시스템다중프로그래밍 운영체제의 필요성과 목적운영체제의 필요성은 아래의 그림으로 표현할 수 있다. 위의 그림을 분석해보며 자바라는 카페에 현재 3명의 공룡들이 커피잔, 의자, 탁자와 같은 자원(resource)을 사용하고 있고 현재 남은 자원이 없어 문 밖에 공룡이 기다리고 있는 모습을 확인할 수 있다. 이 때 만약 카페 점주(Administor)와 같은 관리자가 없을 경우 또는 고객의 회전을 효율적으로 하기 위한 일종의 정책(규칙) 같은 것이 없다면 한정된 자원을 저기 험상굳게 생긴 티라노같은 애들이 독식하는..

카테고리 없음 2023.03.13