목차

    불편함을 코드로 지웁니다.

    개발 공부 노트, 개발 도구와 문제를 해결한 과정, AI 프롬프트와 Obsidian 활용법을 정리합니다.

      ⏳ Time Log/TIL · 하루

      Day 21 (11/17) - SQL 기초

      this.Serena 2026. 2. 19. 00:08

      📝 오늘의 강의 요약

      핵심 키워드: MySQL 환경 설정, JSP/Servlet 파일 업로드, cos.jar, DAO/VO 패턴, 서버 실제 경로(RealPath)

      • MySQL: 8.0 버전 설치, 환경변수 설정 및 데이터베이스/테이블 제어 명령어 실습
      • JSP/Servlet: MultipartRequest를 이용한 첨부파일 처리 및 서버 저장 경로 확인
      • 프로젝트 구조: DAO(데이터 접근), VO(데이터 객체), DB, SQL 간의 유기적 관계 정립
      • 주의사항: 데이터베이스 컬럼명과 자바 필드명의 대소문자 구분 및 일치 작업 필수

      ☕ JSP & Servlet: 파일 업로드 핵심

      1. 파일 업로드 환경 구축

      • 라이브러리: cos.jar (MultipartRequest 클래스 사용을 위해 WEB-INF/lib에 추가)
      • 인코딩 설정: multipart/form-data 형식을 사용할 경우 request.setCharacterEncoding 외에 별도의 처리 필요
      • 저장 경로: 이클립스 메타데이터 내 임시 서버 경로(wtpwebapps)에 저장되므로 context.getRealPath("upload")로 확인

      2. MultipartRequest 활용 (doPost)

      • 역할: 일반 파라미터와 파일 데이터를 동시에 처리하는 객체
      • 필수 설정 요소:
        • request: 요청 객체
        • path: 서버 내 실제 저장 경로
        • sizeLimit: 최대 업로드 용량 설정 (예: 20MB = 20*1024*1024)
        • encType: 인코딩 방식 (주로 utf-8)
        • DefaultFileRenamePolicy: 중복 파일명 발생 시 자동으로 이름 변경 (예: file1, file2)

      🐬 MySQL 환경 구축 및 DB 연동

      1. 설치 및 초기 설정

      • 설치 경로: Program Files\MySQL\MySQL Server 8.0\bin을 시스템 환경변수 PATH에 등록
      • 접속 및 DB 생성:
        • mysql -u root -p: 관리자 접속
        • create database edudb;: 신규 데이터베이스 생성
        • use edudb;: 사용할 데이터베이스 선택

      2. 테이블 제어 명령어 (SQL)

      • DESC 테이블명: 테이블 구조(컬럼, 타입, PK 여부 등) 확인
      • ALTER TABLE: 기존 테이블에 새로운 컬럼 추가 (ADD 키워드 사용)
      • AUTO_INCREMENT: 데이터 삽입 시 번호가 1씩 자동으로 증가하는 속성 (오라클의 Sequence 역할)
      • Primary Key (PK): 데이터 무결성을 위한 중복 불가, NULL 불가 제약 조건

      🗂️ 핵심 개념 및 구조 정립

      1. 웹 애플리케이션 계층 구조

      • VO (Value Object): 데이터를 담는 바구니 (DB 컬럼과 매칭되는 필드 보유)
      • DAO (Data Access Object): 데이터베이스에 직접 접근하여 CRUD(생성, 조회, 수정, 삭제) 수행
      • Servlet (Controller): 사용자 요청을 받아 DAO를 호출하고 결과를 JSP로 전달
      • JSP (View): 처리된 결과를 사용자 화면에 출력

      2. 명명 규칙 주의사항

      • Case Sensitivity: DB 컬럼명(pictureurl)과 Java VO 필드명(pictureUrl)이 다를 경우 데이터 매핑 오류 발생 가능성 존재
      • Form Action: JSP 내 form 태그에 action이 없을 경우, 직전에 호출했던 서블릿 주소로 재요청이 전송됨

      🛠️ 실습 메모 및 트러블슈팅

      • 파일 경로 확인: 콘솔창에 찍히는 path를 통해 실제 파일이 업로드되는 물리적 위치 파악 가능
      • MySQL 팁: CMD 창에서 화면이 복잡할 때 \! cls 명령어로 화면 정리 가능
      • 인코딩: 한글 깨짐 방지를 위해 utf-8 설정이 서블릿과 JSP, DB 모두 일치하는지 상시 확인