상세 컨텐츠

본문 제목

프로그래머 도전기 75일차

프로그래머가 될거야!

by Choyee 2023. 11. 28. 21:54

본문

오늘은

 

요즘에는 학원에서 하는 수업이든 혼자 잠깐씩 해보는 연습 코딩이든

수시로 깃허브에 커밋을 하는 습관을 들이려고 노력중에 있습니다

자주 커밋을 해줄수록 지금 하는 작업이 어떤 작업인지 세세하게 기록할 수 있고

나중에 오류가 났을 때 과거의 코드를 모두 찾아보기에 좋기 때문에

조금은 손이 바빠지고 신경을 더 써야 할지라도

습관이 될 수 있도록 노력하고 있습니다

 

 

학원 수업

 

regform.html
javascript, css, html

templete 언어(엔진) - jsp, 타임리프(Thymeleaf)

* JSP
- 스크립트릿(<% %>)
- EL(Expression Language) 언어 : 연산
  => JSTL(Jsp Standard Tag Library) = 제어문, 언어, DB

<%@ 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>
</head>
<body>
	<c:set var="dan" value="6" />
		<c:forEach var="i" begin="1" end="9">
			${dan} × ${i} = ${dan*i} <br>
		</c:forEach>
	<br>	
	<h3> 전체 구구단</h3>
	<c:forEach var="i" begin="2" end="9">
		<c:forEach var="j" begin="1" end="9">
			${i} × ${i} = ${i*j} <br>
		</c:forEach>
		<br>
	</c:forEach>
	
	<h3> 전체 구구단</h3>
	<table>
		<c:forEach var="i" begin="1" end="9">
		<tr>
			<c:forEach var="j" begin="2" end="9">
				<td width="100px">${j} × ${i} = ${i*j}</td>
			</c:forEach>
		</tr>
		</c:forEach>
	</table>		
</body>
</html>


jstl 라이브러리 - taglib download
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL 예제</title>
</head>
<body>
	<!-- 짝수/홀수 판별하는 프로그램 -->
	<%
		int num = 11;
		if(num % 2 == 0){
			out.println("짝수");
		} else {
			out.println("홀수");
		}
	%>
	<br>
	
	<!-- EL로 표현 -->
	<!-- 변수 선언 c:set var=변수 value="값"/ -->
	<!-- 출력문 c:out value="" -->
	<!-- 조건문 c:if는 else문이 없다 -->
	
	<c:set var="num" value="11"></c:set>
	<c:if test="${num % 2 == 0}">
		<c:out value="${'짝수입니다'}"></c:out>
	</c:if>
	<c:if test="${num % 2 != 0}">
		${'홀수입니다'}   <!-- c:out은 생략 가능 -->
	</c:if>
	<br>
	
	<!-- 다중 조건문 -->
	<!-- c:choose ~ c:when ~ c:otherwise -->
	<c:choose>
		<c:when test="${num % 2 == 0}">
			${'짝수입니다'}
		</c:when>
		<c:otherwise>
			${'홀수입니다'}
		</c:otherwise>
	</c:choose>

</body>
</html>

 

<%@ 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>
</head>
<body>
	<!-- 학점 점수 변수 선언 -->
	<!-- request.getParameter("score") -->
	<c:set var="score" value="${param.score}"></c:set>
	<h2>시험 점수: ${score}</h2>
	<c:choose>
		<c:when test="${score >= 90 and score <= 100}">
			<p>A학점</p>
		</c:when>
		<c:when test="${score >= 80 and score < 90}">
			<p>B학점</p>
		</c:when>
		<c:when test="${score >= 70 and score < 80}">
			<p>C학점</p>
		</c:when>
		<c:when test="${score >= 60 and score < 70}">
			<p>D학점</p>
		</c:when>
		<c:otherwise>
			<p>F학점</p>
		</c:otherwise>
	</c:choose>
</body>
</html>



oracle db, controller(서블릿)
- jdbcTest

student 테이블 생성
StudentVO 클래스
StudentDAO 클래스
StudentConteroller(서블릿) -> /insert,, /list 경로매핑

학생 등록 - studentform.jsp   ->/insert

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="../resources/css/style.css">
</head>
<body>
	<section id="content">
		<h2>학생 등록</h2>
		<hr>
		<form action="/insertstudent.do">
			<ul>
				<li>
					<label>이름</label>
					<input type="text" name="username">
				</li>
				<li>
					<label>학교</label>
					<input type="text" name="univ">
				</li>
				<li>
					<label>생일</label>
					<input type="date" name="birth" class="birth">
				</li>
				<li>
					<label>이메일</label>
					<input type="email" name="email">
				</li>
			</ul>

			<div>
				<button type="submit">등록</button>
				<button type="reset">취소</button>
			</div>
		</form>
		
	</section>

</body>
</html>

 


학생 목록 - studentlist.jsp      ->/list

<%@ 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">
</head>
<body>
	<section id="content">
		<h2>학생 목록</h2>
		<hr>
		<p><a href="/studentform.do">[학생 추가]</a></p>
		<table>
			<tr>
				<th>번호</th>
				<th>이름</th>
				<th>학교</th>
				<th>생일</th>
				<th>이메일</th>
			</tr>
			<c:forEach items="${students}" var="s" varStatus="i">
			<tr>
				<td>${i.count}</td>
				<td>${s.username}</td>
				<td>${s.univ}</td>
				<td>${s.birth}</td>
				<td>${s.email}</td>
				
			</tr>
			</c:forEach>
		</table>
	</section>

</body>
</html>



서블릿 매핑경로
사전 설정 - 톰캣서버 > modules > edit > Path('/')로 변경함
1. '/'
2. *.do
3. *.jsp

package controller;

import java.io.IOException;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import student.Student;
import student.StudentDAO;

@WebServlet("*.do")   // '/'루트 경로 아래에 do로 끝나는 확장자인 파일은 모두 올 수 있음
public class StudentController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	// 객체 생성
	StudentDAO sDAO;
       
    public StudentController() {
    	sDAO = new StudentDAO();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 한글 인코딩
		request.setCharacterEncoding("utf-8");
		// 컨텐츠 유형 응답하기
		response.setContentType("text/html; charset=utf-8");
		
		// 경로(uri) 설정 - 커맨드패턴(command)
		// http:localhost:8000/student/studentlist.jsp
		// 맨 뒤 경로 추출 - lastIndexOf('/'), subString(0)
		String uri = request.getRequestURI();
		String command = uri.substring(uri.lastIndexOf("/"));
		System.out.println(uri);
		System.out.println(uri.lastIndexOf("/"));
		System.out.println(command);
		
		// 이동할 페이지
		String nextPage = "";
		
		if(command.equals("/studentlist.do")) {
			List<Student> students = sDAO.getStudentList();
			
			// 모델 생성
			request.setAttribute("students", students);
			// 뷰 페이지로 이동
			nextPage = "/student/studentlist.jsp";
		} else if(command.equals("/studentform.do")) {
			// 폼에 입력된 데이터 받기
			nextPage = "/student/studentform.jsp";
		} else if(command.equals("/insertstudent.do")) {
			// 폼에 입력된 데이터 받기
			String username = request.getParameter("username");
			String univ = request.getParameter("univ");
			String birth = request.getParameter("birth");
			String email = request.getParameter("email");
			
			// db에 저장
			Student s = new Student();
			s.setUsername(username);
			s.setUniv(univ);
			s.setBirth(birth);
			s.setEmail(email);
			
			sDAO.insertStudent(s);
			nextPage = "/studentlist.do";
		}
			
		RequestDispatcher dispatch = request.getRequestDispatcher(nextPage);
		dispatch.forward(request, response);
		
	}
}




oracle과 mysql 차이
- mysql: insert할때 sql에서 sequence id를 뺀다
- oracle: insert할때 sql에서 sequence id를 넣는다

	public static void main(String[] args) {
		Connection conn = null;
		
		String driverClass = "com.mysql.cj.jdbc.Driver";
		String url = "jdbc:mysql://127.0.0.1:3306/jwebdb?serverTime=Asia/Seoul";
		String user = "jweb";
		String password = "pwjweb";

 

 

JavaScript 공부

 

<<JS 응용>>
Truthy & Falsy = 참 같은 값, 거짓 같은 값

자바스크립트에 조건식의 경우
불리언 값을 넣지 않아도 
참이나 거짓으로 인식이 되는 속성들이 있다
=> 자바스크립트가 자신만의 특정한 기준으로 참이나 거짓을 판별

빈문자열, undefined, null, 숫자0, NaN = False로 인식 = Falsy
문자열, 빈배열, 빈 객체 리터럴, 숫자값, 문자0, 문자열false, Infinity => True로 인식 = Truthy

spread 연산자
= 객체 프로퍼티 펼치기 -> ...변수명 으로 사용
=> 배열에도 사용 가능하다

싱글 스레드
- 동기적 처리의 단점 = 하나의 작업이 너무 오래 걸리게 될 시 모든 작업이
                             오래 걸리는 하나의 작업이 종료되기 전 까지 올 스탑 되기 때문에
                             전반적인 흐름이 느려진다

멀티 스레드
- 스레드를 여러개 사용하여 각 작업을 할당시켜 프로그램을 작동하는 방식

=> 자바스크립트는 싱글 쓰레드로 동작하기 때문에 멀티 스레드 방법은 사용이 불가능하다

=> 싱글 스레드 방식으로 동기적 작업의 단점을 극복하기 위해
     여러 개의 작업을 동시에 실행시킴
     = 비동기 작업
     = 먼저 작성된 코드의 결과를 기다리지 않고 다음 코드를 바로 실행함

비동기 함수

- setTimeout() : 설정된 시간만큼 딜레이 후 함수 실행

 

 

 

 

 

 

2023. 11. 28 (화)

관련글 더보기