상세 컨텐츠

본문 제목

프로그래머 도전기 79일차

프로그래머가 될거야!

by Choyee 2023. 12. 4. 22:14

본문

오늘은

 

오늘부터 드디어 본격적인 팀 프로젝트 기간이 시작되었습니다

그런데... 생각보다 가이드가 아무것도 없었습니다

그저 여태 배웠던것들을 활용하여 프로젝트를 진행하라는 말 정도..?

학원 선생님이 보통 팀 깃 허브 사용법이나 

형식적으로 진행하는 방법 등을 설명해줄줄 알았는데

별 말씀이 없으셔서 질문을 했습니다만...

그런 질문을 처음 받아본다고 하셔서 오히려 당황해 하셨습니다

 

친구들 말이나 주변 학우들의 지인들의 말이나

이런 경우가 오히려 처음이라고 하는데...

이 난관을 어떻게 극복해 나가야 할지 막막한 기분입니다

 

하지만 그나마 제가 진행하던 쇼핑몰 페이지를 템플릿으로 제공하고

회의를 거치면서 어느정도 진행을 하고 있는 상황이기 때문에

스스로 알아서 찾아서 해야될 것 같습니다

 

 

 

 

커뮤니티 프로젝트

 

Main 페이지 - 데이터 처리
1. 인덱스 요청 - /main.do (->/main.jsp)
2. 최신 게시글 3개 출력

if(command.equals("/main.do")) {
    // 메인 페이지에 게시글 보내기
    List<Board> boardList = bDAO.getBoardList();
    out.println(boardList.size() + "개");
    request.setAttribute("boardList", boardList);

    if(boardList.size() >= 3) {
        Board[] newBoards = {boardList.get(0), boardList.get(1), boardList.get(2)};
        request.setAttribute("boardList", newBoards);
    }
    nextPage = "/main.jsp";
}



유효성 검사 - 입력 정확하게 -> DB에 정확하게 저장
= 밸리데이션(validation) -> 구현(자바스크립트 알림창)
                               -> 정규 표현식
1. 아이디 - 4~15자 이내 입력 (아이디 중복: Ajax - 제이쿼리)
2. 비밀번호 - 8자 이상, 영문자, 숫자, 특수문자 포함
3. 비밀번호 확인 - 비밀번호를 동일하게 입력
4. 이름 - 한글로 입력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 가입 폼</title>
<link rel="stylesheet" href="resources/css/style.css">
<script>
	function checkmember(){
		/* alert("test..."); */
		/* input의 name속성을 변수에 할당 */
		let form = document.member; // 폼 이름 
		let id = form.id.value;
		let pw1 = form.passwd.value;
		let pw2 = form.passwd2.value;
		let name = form.name.value;
		
		// 정규 표현식
		// 비밀번호
	 	let regexPw1 = /[0-9]+/;     // 숫자
		let regexPw2 = /[a-zA-Z]+/;  // 영문자
		let regexPw3 = /[~!@#$%^&*()]+/;  // 영문자
		 
		// 이름
		let regexName = /^[가-힣]+$/;
		
		
		if(id.length < 4 || id.length > 15){
			alert("아이디는 4 ~ 15자 이내로 작성해주세요");
			id.select();
			return false;
		}else if(pw1.length < 8 || !regexPw1.test(pw1)
				                || !regexPw2.test(pw1)
				                || !regexPw3.test(pw1)){
			alert("비밀번호는 영문자, 숫자, 특수문자(~!@#$%^&*()만 가능)를 포함하여 8자 이상으로 작성해주세요");
			pw1.select();
			return false;
		}else if(pw1 != pw2){  // pw1 과 pw2 문자열이 일치하지 않을 때
			alert("비밀번호를 동일하게 입력해주세요");
			pw2.select();
			return false;
		}else if(!regexName.test(name)){
			alert("이름은 한글로 입력해주세요")
			name.select();
			return false;
		}else {
			form.submit();  // 오류가 없으면 폼을 메인 컨트롤러로 전송
		}
	}

</script>
</head>
<body>
	<jsp:include page="../header.jsp"/>
	<div id="container">
		<section id="join">
			<h2>회원 가입</h2>
			<form action="insertmember.do" method="post" name="member">
				<fieldset>
					<ul>
						<li>
							<label for="id">아이디</label>
							<input type="text" id="id" name="id" placeholder="4~15자 이내">
						</li>
						<li>
							<label for="passwd">비밀번호</label>
							<input type="password" id="passwd" name="passwd" placeholder="영문자, 숫자, 특수문자 포함 8자 이상">
						</li>		
						<li>
							<label for="passwd2">비밀번호 확인</label>
							<input type="password" id="passwd2" name="passwd2" placeholder="비밀번호를 동일하게 입력하세요">
						</li>	
						<li>
							<label for="name">이름</label>
							<input type="text" id="name" name="name" placeholder="한글로 입력해주세요">
						</li>
						<li>
							<label for="email">이메일</label>
							<input type="email" id="email" name="email">
						</li>		
						<li>
							<label for="gender">성별</label>
							<input type="radio" id="gender" name="gender" value="남" checked>남
							<input type="radio" id="gender" name="gender" value="여">여
						</li>			
					</ul>
				</fieldset>
				<div>
					<button type="button" onclick="checkmember()">가입</button>
					<button type="reset">취소</button>
				</div>

			</form>
		</section>
	</div>
	<jsp:include page="../footer.jsp"/>
</body>
</html>

 

 

 

 

쇼핑몰 페이지 만들기

 

<div id="mid">
    <h3>Notice / Event</h3>
    <div class="Board">
        <table id="board_tb">
            <thead>
                <tr>
                    <th class="board_no">no</th>
                    <th class="board_title">title</th>
                    <th class="board_writer">writer</th>
                    <th class="board_date">date</th>
                    <th class="board_hit">hit</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>notice</td>
                    <td>Notice 1 첫번째 공지사항입니다</td>
                    <td>Notice team</td>
                    <td>2023-11-01</td>
                    <td>12</td>
                </tr>
                <tr>
                    <td>notice</td>
                    <td>Notice2 두번째 공지사항입니다</td>
                    <td>Notice team</td>
                    <td>2023-11-23</td>
                    <td>9</td>
                </tr>
                <tr>
                    <td>3</td>
                    <td>Event3 리뷰 작성 이벤트!! 리뷰 작성 횟수에 따라 포인트 획득!!</td>
                    <td>Event team</td>
                    <td>2023-11-30</td>
                    <td>21</td>
                </tr>
                <tr>
                    <td>2</td>
                    <td>Event2 첫 구매고객 이벤트!! 첫 구매시라면~</td>
                    <td>Event team</td>
                    <td>2023-11-16</td>
                    <td>26</td>
                </tr>
                <tr>
                    <td>1</td>
                    <td>Event1 회원가입 이벤트!!</td>
                    <td>Event team</td>
                    <td>2023-11-02</td>
                    <td>32</td>
                </tr>
            </tbody>

        </table>
    </div>
    <div id="page">
        <a href=""><button class="arrow"><</button></a>
        <a href=""><button>1</button></a>
        <a href=""><button>2</button></a>
        <a href=""><button>3</button></a>
        <a href=""><button>4</button></a>
        <a href=""><button class="arrow">></button></a>
    </div>
</div>

 

/* #mid */
#mid {
    background-color: #fff;
    margin: 30px;
    margin-bottom: 0;
    padding-bottom: 100px;
}

#mid h3 {
    padding: 50px;
    text-align: center;
    background-color: #ffa;    
}

#board_tb {
    width: 90%;
    margin: 40px auto;
    padding: 0 5px 20px 5px;
    line-height: 2.5;
    border-top: 2px solid #ccc;
    border-bottom: 2px solid #ccc;
    border-collapse: collapse;
    text-align: center;
}

#board_tb tbody td:nth-child(2) {
    text-align: left;
}

#board_tb thead {
    background: #ffe;
    border-bottom: 2px solid #ccc;
    line-height: 3;
    font-size: 0.8rem;
}

.board_no {
    width: 10%;
}

.board_title {
    width: 50%;
}

.board_writer {
    width: 15%;
}

.board_date {
    width: 20%;
}

.board_hit {
    width: 5%;
}

#board_tb tr, td {
    border-top: 1px dotted #ccc;
    border-bottom: 1px dotted #ccc;
}

#page {
    text-align: center;
    margin: 20px;
}

#page button {
    width: 30px;
    height: 30px;
    margin: 0 5px;
    border: 1px solid #aa1;
    border-radius: 50%;
    background: #ffe;
}

#page .arrow {
    width: 25px;
    height: 25px;
}

 

 

 

 

 

2023. 12. 04 (월)

관련글 더보기