상세 컨텐츠

본문 제목

프로그래머 도전기 88일차

프로그래머가 될거야!

by Choyee 2023. 12. 19. 22:08

본문

오늘은

 

중간 팀 프로젝트가 어제부로 끝이 났습니다

막판에 급급하게 어찌저찌 합쳤다 라고 생각했었는데

실제로 합쳐놓고 구현한 기능들을 이것저것 구경하다보니

생각보다는 그래도 잘 나온것 같았습니다

다른 팀들도 훌륭하게 한것 같아서 

프로젝트가 끝났다는 후련함과 동시에

이정도로는 취직하기 힘들겠지 싶은 위기감이 동시에 찾아왔습니다

다들 잘했다 라는 느낌으로 비슷비슷한데 여기서 어떻게 눈에 띄어

이런쪽은 특출나다는 말을 들을까 고민을 해보며

새롭게 배우게 될 것들을 차근차근 찾아서 공략해봐야겠습니다

 

 

 

 

 

학원 수업

 

- 좋아요, 구독 
  - 한명의 회원은 한 게시글에 1번만 좋아요 가능
  - 로그인 해야 사용 가
  - 좋아요 추가, 취소 가능

   DB 테이블 - voter
   voter - 클래스
   voterDAO - db연동
 
toggle - 상태
boolean sw = false;
sw = true -> 꽉찬 하트
sw = false -> 빈 하트

 

 

* VoterDAO

package voter;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import common.JDBCUtil;

public class VoterDAO {
	Connection conn = null;  		// DB 연결
	PreparedStatement pstmt = null; // sql 처리
	ResultSet rs = null;			// 검색한 데이터셋

	// 좋아요 추가
	public void insertVote(Voter voter) {
		try {
			conn = JDBCUtil.getConnection();
			String sql = "INSERT INTO voter (vno, bno, mid) VALUES(seq_vno.NEXTVAL, ?, ?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, voter.getBno());
			pstmt.setString(2, voter.getMid());
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, pstmt);
		}
	}

	// 좋아요 삭제
	public void deleteVote(Voter voter) {
		try {
			conn = JDBCUtil.getConnection();
			String sql = "DELETE FROM voter WHERE bno=? AND mid=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, voter.getBno());
			pstmt.setString(2, voter.getMid());
			pstmt.executeUpdate();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, pstmt);
		}
	}

	// 좋아요 저장 유무 확인
	// 로그인 시 아이디와 비밀번호가 필요한 것과 유사
	// 세션아이디, 글번호가 일치
	public int voteCheck(int bno, String id) {
		try {
			conn = JDBCUtil.getConnection();
			String sql = "SELECT COUNT(*) AS result FROM voter WHERE bno=? AND mid=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bno);
			pstmt.setString(2, id);
			// 검색
			rs = pstmt.executeQuery();
			if(rs.next()) {   // 일치하는 값이 있으면 1 반환
				return rs.getInt("result");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, pstmt);
		}
		return 0;  // 일치한 값이 없으면 0을 보내줌
	}

	// 좋아요 총개수
	public int voteCount(int bno) {
		try {
			conn = JDBCUtil.getConnection();
			String sql = "SELECT COUNT(*) AS total FROM voter WHERE bno = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, bno);
			// 검색
			rs = pstmt.executeQuery();
			if(rs.next()) {   // 카운트하는 값이 있으면 숫자 반환
				return rs.getInt("total");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			JDBCUtil.close(conn, pstmt);
		}
		return 0;  // 카운트한 값이 없으면 0을 보내줌
	}
}

 

 

* Voter_Class

package voter;

public class Voter {
	private int vno;
	private int bno;
	private String mid;
	
	public int getVno() {
		return vno;
	}
	public void setVno(int vno) {
		this.vno = vno;
	}
	public int getBno() {
		return bno;
	}
	public void setBno(int bno) {
		this.bno = bno;
	}
	public String getMid() {
		return mid;
	}
	public void setMid(String mid) {
		this.mid = mid;
	}
}

 

 

* MainController

if(command.equals("/boardview.do")) {
			// 글 제목 클릭시 요청되는 글 번호 받기
			int bno = Integer.parseInt(request.getParameter("bno"));
			// 글 상세보기 처리
			Board board = bDAO.getBoard(bno);
			// 세션 아이디 가져옴
			String id = (String)session.getAttribute("sessionId");
			// 좋아요 개수
			// 해당 게시글(bno)의 총 좋아요 수
			int voteCount = vDAO.voteCount(bno);
			System.out.println("좋아요 수: " + voteCount);
			
			// 댓글 목록 보기
			List<Reply> replyList = rDAO.getReplyList(bno);
			
			// 하트의 상태 바꾸기 (토글 방식)
			boolean sw = false;
			int result = vDAO.voteCheck(bno, id);   // 게시글번호, 세션아이디
			if(result == 0) {  // 좋아요가 안된 상태
				sw = true;
			}else {
				sw = false;
			}
			
			// 모델 생성 -> 뷰로 보내기
			request.setAttribute("board", board);
			request.setAttribute("replyList", replyList);
			request.setAttribute("voteCount", voteCount);
			request.setAttribute("sw", sw);

 

 

* 사진이 있는 게시글도 수정 가능

if(command.equals("/updateboard.do")) {
				String realFolder ="C:\\jspworks\\members\\src\\main\\webapp\\upload";
			      int maxSize = 10*1024*1024; //10MB
			      String encType = "utf-8";   //파일이름 한글 인코딩
			      DefaultFileRenamePolicy policy = new DefaultFileRenamePolicy();
			      //5가지 인자
			      MultipartRequest multi = new MultipartRequest(request, realFolder, maxSize, encType, policy);
			      int bno = Integer.parseInt(multi.getParameter("bno"));
				
				
				// 폼 데이터 닫기
				String title = multi.getParameter("title");
				String content = multi.getParameter("content");
				//file 속성
			    Enumeration<?> files = multi.getFileNames();
			    String filename = "";
			    while(files.hasMoreElements()) { //파일이름이 있는 동안 반복
			       String userFilename = (String)files.nextElement();
			       
		           //실제 저장될 이름
		           filename = multi.getFilesystemName(userFilename);
			    }
				
				// db에 저장
				Board b = new Board();
				b.setTitle(title);
				b.setContent(content);
				b.setFilename(filename);
				b.setBno(bno);
				
				if(filename != null) {   // 파일이 있는 경우
					bDAO.updateboard(b);
				}else {   // 파일이 없는 경우
					bDAO.updateboardNoFile(b);
				}

 

 

* 좋아요 처리

if (command.equals("/like.do")){
			int bno = Integer.parseInt(request.getParameter("bno"));
			String id = request.getParameter("id");
			
			// 좋아요 추가(insert)
			Voter voter = new Voter();
			voter.setBno(bno);
			voter.setMid(id);
			
			// 좋아요 유무 확인 체크
			int result = vDAO.voteCheck(bno, id);
			if(result == 0) {   // db에 없으면(저장 안됨)
				vDAO.insertVote(voter);    // 좋아요 추가
			}else {   // result == 1
				vDAO.deleteVote(voter);  // 좋아요 삭제
			}
			

		}

 

 

 

 

 



Servlet/Jsp(화면) => 메이븐(Maven(MVN)-빌드도구)
 => 스프링 프레임워크(화면: jsp)
 => 스프링부트(화면: 타임리프)

화면: 리엑트(javascript 프레임워크)

메이븐(Maven)
라이브러리 버전관리나 종속성(의존성) 관리를 쉽게 도와주는 tool이다
build 도구
pox.xml => taglib -> jar파일이 주입됨




Dynamic Web Project -> 메이븐 프로젝트로 변환
프로젝트 우클릭 > configure > convert to Maven Project
mvn repository 사이트에서 디펜던시 검색
1. jstl 예제
2. vo클래스 작성 (롬복-lombok 라이브러리) => install
   - lonbok.jar  =>  cmd 실행 -> 이클립스 적용
   - pom.xml 등록 <dependency>

3. mysql 드라이버 연동
   - pom.xml 등록 <dependency>
   - 드라이버이름, url(db주소), user, password


 

* pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>maven-test</groupId>
  <artifactId>maven-test</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <!-- 라이브러리 관리 -->
  <dependencies>
	  <!-- jstl -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>
	
	<!-- lombok -->
	<dependency>
	    <groupId>org.projectlombok</groupId>
	    <artifactId>lombok</artifactId>
	    <version>1.18.30</version>
	    <scope>provided</scope>
	</dependency>

	<!-- mysql-connector-java -->
	<dependency>
	    <groupId>com.mysql</groupId>
	    <artifactId>mysql-connector-j</artifactId>
	    <version>8.2.0</version>
	</dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
          <release>17</release>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.2.3</version>
      </plugin>
    </plugins>
  </build>
</project>

 

 

* Worker class

package model;

//import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;

//@AllArgsConstructor
@Getter
@Setter
public class Worker {
	private String name;
	private int age;
	private String email;
}

 

 

* WorkerTest class

package model;

public class WorkerTest {

	public static void main(String[] args) {
		Worker worker = new Worker();
		worker.setName("홍길동");
		System.out.println("이름: " + worker.getName());
	}
}

 

 

* 출력

 

이름: 홍길동

 

 

 


mysql 계정 만들기
1. root 계정으로 접속 (systemDB)
-- myuser 계정 만들기
-- 계정 : myuser, 비번: pwmyuser
create user 'myuser'@'localhost' identified by 'pwmyuser';
-- myuser에게 모든 권한 부여
grant all privileges on *.* to 'myuser'@'localhost';

2. 계정 접속 화면 셋업
-- Connection Name MYUSER
-- Username: myuser
-- Stroe in Vault: pwmyuser  (비번)
-- Test Connection: 성공하면 Ok

3. myuser 계정 접속 
-- 데이터베이스 만들기
-- create database myuserdb;
-- 항상 사용시에는 use myuser; 실행

 

 

 

 

 

 

 

 

 

2023. 12. 19 (화)

관련글 더보기