[DB] Redis란? 개념부터 자료 구조까지 한 번에 정리!
·
DB
현재 나는 AI를 활용하여 여행 일정을 자동으로 생성하는 기능을 개발 중이다. 테스트를 진행하는 과정에서, 새로운 장소를 추천할 때 이전에 추천된 장소가 중복 포함되는 문제를 발견했다.이 문제를 해결하기 위해 여러 방법을 고민하던 중, Redis의 캐싱 기능을 알게 되었다. Redis를 활용하면 기존에 추천된 여행 일정의 장소를 저장하고, 새로운 추천 요청 시 중복된 장소가 다시 추천되지 않도록 필터링하는 방식을 적용할 수 있었다.[Python] Redis를 활용한 중복 추천 방지 캐싱 서비스 개발 이 과정에서 Redis의 개념과 특징, 그리고 장점에 대해 깊이 이해하게 되었고, 이를 정리해보고자 한다. Redis란?Remote Dictionary Server의 약자로, 오픈 소스 인메모리(In-Memo..
[Python] print와 logging, 디버깅할 때 무엇을 쓸까?
·
Python
개발을 하면서 버그를 잡아야 할 때 가장 먼저 떠오르는 방법이 있다. 바로 print()를 사용하는 것이다. 나는 자바에서도 주로 print()를 사용했기 때문에 파이썬에서도 자연스럽게 print()만 활용하게 되었다. 하지만 점점 코드가 복잡해지고 유지보수가 필요한 프로젝트에서는 logging이 더 유용한 경우가 많다는 것을 알게 되었다. 오늘은 print와 logging의 개념, 장단점, 그리고 실제 사용 예시를 다뤄보려고 한다. print()의 개념과 특징print()는 파이썬에서 콘솔에 값을 출력하는 가장 기본적인 함수다. 간단한 코드에서 디버깅을 할 때 자주 사용한다. 사용 방법이 쉽고 직관적이라 개발 초반에 많이 활용된다.장점간단하고 빠르다 - 별도의 설정 없이 즉시 출력 가능하다.모든 타입을..
[AI] CrewAI 에이전트를 활용한 키워드 기반 맛집 검색 개선
·
AI
처음에는 사용자가 원하는 지역을 입력하면 Google Maps API를 통해 주변 맛집을 찾아주고, 필터링을 거쳐 최적의 식당을 추천하면 될 줄 알았다. 하지만 직접 테스트해보니, 생각만큼 좋은 결과가 나오지 않았다. 단순히 지역을 기반으로 검색하는 방식만으로는 사용자의 구체적인 요구사항이 반영되지 않았고, 원하는 스타일의 맛집을 추천하기 어려웠다.  1. 기존 방식의 문제점기존에는 사용자가 입력한 여행 일정에서 지역(location) 정보만 추출하여 맛집을 검색하는 방식이었다. 하지만 이렇게 하면 단순히 지역 내 식당 목록만 가져올 뿐, 사용자가 원하는 조건(가족과 함께 갈 수 있는 곳, 반려견 동반 가능 등)이 반영되지 않는 문제가 발생했다.문제점 정리사용자 요구가 반영되지 않음지역 기반으로만 검색하..
[SpringBoot] Spring Boot + React를 활용한 OAuth 2.0 로그인 구현 (카카오 기준)
·
SpringBoot
프로젝트를 진행하면서 자연스럽게 소셜 로그인 구현을 맡게 되었다. 처음에는 프론트엔드에서는 소셜 로그인이 비교적 간단하다는 말을 들었지만, 직접 구현해 보니 생각보다 복잡한 과정이 많았다. 특히 OAuth 2.0을 기반으로 한 로그인 프로세스를 처음부터 이해하고, 카카오, 네이버, 구글 등 서로 다른 방식의 API를 다뤄야 한다는 점에서 혼란이 있었다. 처음에는 카카오 로그인이 가장 쉬운 것 같아 이를 먼저 구현하기로 했다. 하지만 카카오 개발자 문서를 읽어보면서도 프론트엔드와 백엔드의 역할이 명확하게 잡히지 않아, 다른 사람들의 블로그와 공식 문서를 참고하며 하나씩 개념을 정리해 나갔다.특히, 소셜 로그인은 인가 코드, 액세스 토큰, 사용자 정보 조회 등의 과정이 단계적으로 이루어지기 때문에 처음에는 ..
[DB] MongoDB Atlas 설정 및 삭제 방법 총정리
·
DB
프로젝트에서 MongoDB Atlas를 사용하며 설정하는 과정을 정리하려고 한다. 처음부터 차근차근 진행한 내용을 공유하여, 같은 설정을 하는 분들에게 도움이 될 수 있도록 작성하였다. MogoDB Atlas 설정 방법1. 무료로 시작하기 선택MongoDB Atlas 사이트에서 무료로 시작하기(Free) 버튼을 클릭한다.2. 계정 생성이메일, 비밀번호를 입력하여 새 계정을 만들거나, Google 계정으로 간편 가입이 가능하다. 3. 프로젝트 생성프로젝트 이름을 입력하고 프로젝트 생성(Create Project)을 클릭한다.Tags는 선택 사항이므로 입력하지 않아도 된다. 4. 멤버 추가 및 권한 설정필요하다면 팀원을 추가하고, 역할(Role)을 설정할 수 있다.단독 사용이라면 그대로 넘어가도 무방하다. ..
[DB] ORM(Object-Relational Mapping)이란?
·
DB
개발을 하다 보면 데이터베이스와 객체를 매핑하는 작업이 꽤 번거롭다는 걸 느끼게 된다. SQL을 직접 다루면 코드가 복잡해지고 유지보수가 어려워지는 경우가 많다. 그래서 ORM(Object-Relational Mapping)이라는 개념이 등장했다. 쉽게 말하면 객체와 데이터베이스 테이블을 매핑해서 객체 지향적으로 데이터 조작을 가능하게 해주는 기술이다.  Java 데이터베이스 접근 방식: JPA vs MyBatis 비교1. JPA (Java Persistence API, Hibernate)JPA는 자바에서 대표적인 ORM 기술로, SQL을 직접 작성하지 않고도 객체를 통해 데이터베이스 조작이 가능하다.JPA 사용 예제import jakarta.persistence.*;import java.util.Lis..
[AI] 네이버 웹 검색 API × CrewAI 식당 검색, 동기 방식에서 비동기로 업그레이드
·
AI
최근 프로젝트에서 네이버 검색 API를 사용해 식당 정보를 가져오는 작업을 진행했는데, 식당 리스트가 많을 경우 순차적으로 요청을 보내면 응답 대기 시간이 크게 늘어나는 문제가 있었다. 이를 해결하기 위해 비동기(Async) 방식으로 코드를 변경했고, 이 포스팅에서는 동기 코드에서 비동기 코드로 어떻게 전환했는지, 그리고 그 과정에서 어떤 이점이 있었는지 공유하려고 한다.기존 코드: 동기(Sync) 방식우선, 동기 방식(requests 라이브러리 사용)으로 작성된 코드다.간단히 말해, 한 번에 하나의 요청만 보낸다. 응답이 돌아올 때까지 대기하고, 그다음 요청을 보내는 식으로 되어있다.1. Toolclass NaverWebSearchTool(BaseTool): name: str = "NaverWeb..
[SpringBoot] jsp 만들기
·
SpringBoot
jsp 개발 환경 설정SpringBoot에서는 jsp 사용을 권장하고 있지 않다. (보통 Thymeleaf 많이 사용)jsp를 사용하려며 수동으로 tool 설치 및 설정을 해줘야 한다. 1. 폴더 만들기 2. jsp 만들기앞에서도 말했지만 기본 기능이 아니라서 수동설치 및 설정이 필요하다.① Eclipse Enterprise Java and Web Developer Tools 설치  ② Eclipse Enterprise Java and Web Developer Tools 설치 3. 편접기, 한글 인코딩 설정 4. jasper 의존성 패키지 추가jsp를 servlet으로 변환해준다.starter가 제공되지 않기 때문에 직접 pom.xml에 등록 해야한다. org.apache.tomcat.embed ..
[SpringBoot] SpringBoot 설치부터 프로젝트 생성, 의존성 추가까지
·
SpringBoot
1. 프로젝트 설치하기1. STS 다운받기https://spring.io/tools 에서 자신의 운영체제에 맞는 STS를 다운받는다 2. 스프링부트 STS4 설치(압축 풀기) ① jar형식으로 압축 풀릴때 ② 압축이 바로 풀리지 않을 경우 (알집 설치된 경우) ③ 공통 2. 프로젝트 만들기1. 프로젝트에 대해서 설정하기 2. 프로젝트 생성된 후 모습 3. 기본 의존성(dependency) 확인 pom.xml org.springframework.boot spring-boot-starter-test test org.apache.tomcat.embed tomcat-embed-jasper provided jakarta.servlet jakarta.servlet-api provide..
[React] React에서 Drag & Drop 구현 – react-beautiful-dnd 사용
·
React
여행 일정 수정 시 사용자가 더 편리하게 순서를 변경할 수 있도록 드래그 앤 드롭 기능을 추가했다.  기존에는 체크박스를 이용해 개별 선택하거나 전체 선택 후 삭제하는 방식으로 일정 순서를 조정해야 했다.그러나 삭제 후 다시 추가하는 방식은 번거로웠고, 보다 직관적인 조작을 위해 드래그 앤 드롭과 함께 휴지통 아이콘을 활용한 즉시 삭제 기능을 추가했다. 검색을 통해 react-beautiful-dnd를 알게 되었고, 이를 사용하면 Drag & Drop을 위한 기본 구조를 제공해 복잡한 로직을 간단하게 해결할 수 있었다.드래그 앤 드롭 기능을 직접 구현하려면 마우스 이벤트를 감지하고, 요소를 이동시키며, 데이터 순서를 조정하는 복잡한 로직을 작성해야 한다.이러한 복잡성을 줄이기 위해 react-beauti..