프로젝트명: 원두(WantToDo)
프로젝트 기간: 2024.12.27 ~ 2025.03.05
프로젝트 유형: 4인 팀 프로젝트
한 줄 소개:
Spring Framework와 Oracle DB 기반 웹 애플리케이션으로,
사용자의 MBTI 성향에 따라 맞춤형 상품 추천과
날씨 기반 어울리는 상품 추천으로
사용자의 구매 편의성을 제공하는 플랫폼입니다.
| 역할 | 상세 |
|---|---|
| 환경 및 기획 설계 | 프로젝트 초기 환경 구성 및 기획 의도 설계 |
| 프로젝트 병합 | 전체 프로젝트 병합 및 오류 분석/해결 |
| SQL 최적화 | Oracle SQL 인덱싱, 프로시저 최적화 |
| UI/UX | 공통 UI/UX 제작 |
| 권한 관리 | 사용자 권한 분리 및 기능 제어 |
| 예외 처리 | 에러 발생 시 예외 처리 페이지 제작 |
| 콘텐츠 제작 | MBTI 검사 결과 별 상품 추천 |
| 성능 테스트 | JMeter 성능 테스트 진행 |
| 구분 | 기술 |
|---|---|
| Backend | Java 1.6 (Spring Framework, Spring MVC) |
| WAS | Apache Tomcat v9.0 |
| Frontend | JSP, HTML/CSS, JavaScript, Bootstrap, Figma |
| Database | Oracle SQL |
| Tools | Git, Eclipse, SQL Developer |
| Collaboration | Discord, GitHub, Notion |
- 🌟 MBTI 기반 맞춤형 상품 추천
- 🔒 사용자 권한 분리 및 기능 제어 (관리자 / 사용자)
- 🎨 공통 UI/UX 제작 및 예외 처리 페이지 구현
- 📊 Oracle SQL 최적화 (인덱싱, 프로시저, 뷰 활용)
- ⚡ 성능 개선 및 테스트 (JMeter, JUnit)
- SQL 최적화
- 인덱스 추가, 뷰(View) 활용
CREATE INDEX idx_goods_category ON goods(category);
CREATE INDEX idx_recommend_mbti ON recommend(mbti_type);
CREATE OR REPLACE VIEW v_recommend_goods AS
SELECT g.goods_id, g.goods_name, g.category, r.mbti_type
FROM goods g
JOIN recommend r ON g.category = r.category;문제:
MyBatis Mapper SQL 바인딩 문제
원인 분석:
parameterType 불명확 및 JDBC 타입 미지정으로 인해 일부 파라미터가 바인딩되지 않음.
해결 방법:
MyBatis Mapper XML에 jdbcType 명시.
<select id="selectSellerGoodsList2" parameterType="String" resultMap="goodsResult">
<![CDATA[
SELECT g.*, d.fileName, ROW_NUMBER() OVER (ORDER BY g.goods_create_date DESC) AS rn
FROM c_goods g
JOIN c_image_goods d ON g.goods_id = d.goods_id
WHERE d.filetype = 'main_image'
AND g.goods_status = #{goods_status, jdbcType=VARCHAR}
AND g.goods_category IN ('원두')
AND g.mem_id = #{mem_id, jdbcType=VARCHAR}
]]>
</select>성과:
SQL 파라미터 정상 바인딩 DB 쿼리 실행 성공률 100% 향상 유지보수 과정에서 유사 문제 재발 방지
[Notion 정리 링크] https://www.notion.so/WantToDo-2796a2e81c4e8198bcf2ec43bf962d4a?source=copy_link
- 추천 알고리즘 고도화 (단순 MBTI 질문 → 질문지 및 유형 도출 알고리즘 추가 작성)
- React 기반 프론트엔드 리팩토링 및 반응형 UI 적용