20211221 복습 & 관리자 페이지

DUUUPPAAN·2021년 12월 21일
0

Spring_Framework

목록 보기
12/19

·복습

-어제 답글에 대한 코딩 수업을 했었고, 교수님이 수업을 진행하시기는 하셨지만, 팀별 회의를 진행하기 위해서 설명이 조금 부족한 상태로 수업이 끝났다. 아무래도 이번주까지 db를 완전히 픽스시키고 팀별 프로젝트를 진행하기 위해서 서두르신 것 같다. 그래서 어제의 답글에 대한 설명을 쭉 해주셨다. 그리고 오전 동안은 답변등록 버튼을 눌렀을 때에 대한 처리를 스스로 복습해보라고 하셨다. 물론, 어제 저녁에 늦게까지 복습을 했지만, 굳이 그 시간을 허비하고 싶지 않았기 때문에 정말 처음부터 끝까지 안보고 하나하나 해보려고 노력했다. 물론, 완전히 안보고는 할 수 없었다. 그래도 굉장히 흠 없이 구현을 했다.(물론, 다 코딩하고 오류가 계속 나서 팀원분들께 같이 오류를 찾아달라고 해서 겨우겨우 찾은 것은 안비밀.... '이거 하나 때문에 오류라니...)

-사실 어제 줌으로 늦게까지 팀별 회의를 하느라 복습이 충분하지 않았는데, 그렇게나마 복습을 한 것이 굉장히 감사했다. 교수님은 어찌 내 마음을 이렇게 잘 알아주시는지 정말 감사하고 감사할 따름이다.

·오후, 관리자 페이지를 위한 설정

-우선 기존에는 hiboard.icia.co.kr:8088로 접속을 했지만, 관리자 페이지의 경우 다른 스프링 프로젝트를 따로 만들어서 진행한다고 하셨다. 나중에도 이렇게 나눠야 하는지 의문이긴 했지만, 그래도 우선은 따라서 진행했다. 전에 해봤던 세팅들인데 상당히 까다로운 부분이 많았다.

-호스트 파일을 열어서 새로 admin.icia.co.kr을 등록하고 톰캣에서 server.xml에 포트번호를 8088로, host를 하나 더 생성해서 해당 url을 치면 appBase로 가는데 해당 부분이 비어있어서 CATALINA 폴더로 가서 해당 url이름의 폴더의 root.xml의 docBase의 경로를 기본 폴더로 바라보도록 해주고 그 외의 톰캣 설정, 메이븐 인스톨 등등의 처리를 전부 해주었다. 공통 모듈도 전부 다운받아서 넣어주었다. 그리고 로그인 페이지에서 로그인 처리가 가능하도록 테이블부터 만들어줬다

--관리자용 테이블 생성
CREATE TABLE TBL_ADMIN
(
    ADM_ID VARCHAR(20) NOT NULL,
    ADM_PWD VARCHAR(20) NULL,
    ADM_NAME VARCHAR(30) NULL,
    STATUS CHAR(1) NULL,
    REG_DATE DATE NULL
);

COMMENT ON COLUMN TBL_ADMIN.ADM_ID IS '관리자 아이디';
COMMENT ON COLUMN TBL_ADMIN.ADM_PWD IS '관리자 비밀번호';
COMMENT ON COLUMN TBL_ADMIN.ADM_NAME IS '관리자 이름';
COMMENT ON COLUMN TBL_ADMIN.STATUS IS '사용여부(Y:사용, N:정지)';
COMMENT ON COLUMN TBL_ADMIN.REG_DATE IS '등록일';

CREATE UNIQUE INDEX XPK_ADMIN ON TBL_ADMIN(ADM_ID ASC);

INSERT INTO TBL_ADMIN (
    ADM_ID,
    ADM_PWD,
    ADM_NAME,
    STATUS,
    REG_DATE
) VALUES (
    'admin',
    '1234',
    '관리자',
    'Y',
    SYSDATE
);

COMMIT;

-관리자 회원가입은 따로 만들지 않으려 하고 관리자 계정을 직접 넣어주었다. 이제 로그인에 대한 처리를 해주기 위해서 script부분을 작성해주었다.

function fn_loginCheck()
{
	if(icia.common.isEmpty($("#admId").val()))
	{
		alert("아이디를 입력하세요.");
		$("#admId").focus();
		return;
	}
	
	if(icia.common.isEmpty($("#admPwd").val()))
	{
		alert("비밀번호를 입력하세요.");
		$("#admPwd").focus();
		return;
	}
	
	icia.ajax.post({
        type: "POST",
        url: "/loginProc",
        data: {admId: $("#admId").val(), admPwd: $("#admPwd").val()},
        success: function (res) 
        {
        	if(res.code == 0)
        	{
        		// 성공
        		location.href = "/user/list";
        	}
        	else if(res.code == -1)
        	{
        		alert("비밀번호가 일치하지 않습니다.");	
        		$("#admPwd").focus();
        	}
        	else if(res.code == 400)
        	{
        		alert("관리자 정보가 없습니다.");
        		$("#admId").focus();
        	}
        	else if(res.code == 404)
        	{
        		alert("파라미터가 올바르지 않습니다.");
        		$("#admId").focus();
        	}
        },
        error: function (error) 
        {
        	alert("오류가 발생하였습니다.");
        	icia.common.error(error); // 에러
        }
    });
}

-이 처리를 해주기 위해선 셀렉트 문을 먼저 작성해야 하는데, 우선 테이블과 매칭되는 .java가 필요하기 때문에 Admin.java를 만들어주었다.

package com.icia.manager.model;

import java.io.Serializable;

public class Admin implements Serializable{


	private static final long serialVersionUID = 1L;

	//관리자 아이디
	private String admId;
	
	//관리자 비밀번호
	private String admPwd;
	
	//관리자 이름
	private String admName;
	
	//사용여부(Y:정상 , N:정지)
	private String status;
	
	//등록일
	private String regDate;
	
	//시작 rownum
	private int startRow;
	
	//끝 rownum
	private int endRow;
	
	public Admin() 
	{
		admId = "";
		admPwd = "";
		admName = "";
		status = "";
		regDate = "";
		startRow = 0;
		endRow = 0;
	}

	public String getAdmId() {
		return admId;
	}

	public void setAdmId(String admId) {
		this.admId = admId;
	}

	public String getAdmPwd() {
		return admPwd;
	}

	public void setAdmPwd(String admPwd) {
		this.admPwd = admPwd;
	}

	public String getAdmName() {
		return admName;
	}

	public void setAdmName(String admName) {
		this.admName = admName;
	}

	public String getStatus() {
		return status;
	}

	public void setStatus(String status) {
		this.status = status;
	}

	public String getRegDate() {
		return regDate;
	}

	public void setRegDate(String regDate) {
		this.regDate = regDate;
	}

	public int getStartRow() {
		return startRow;
	}

	public void setStartRow(int startRow) {
		this.startRow = startRow;
	}

	public int getEndRow() {
		return endRow;
	}

	public void setEndRow(int endRow) {
		this.endRow = endRow;
	}
	
	
}

-테이블과 매칭되는 자바파일을 만들 때는 항상 테이블을 직접 보고 작성하는 것이 중요한 것 같다.

이제 xml파일에 해당 쿼리를 사용할 수 있도록 Admin객체와 테이블을 맵핑해주는 resultMap과 쿼리문을 작성해주었다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.icia.manager.dao.AdminDao">

<resultMap type="com.icia.manager.model.Admin" id="adminResultMap">
	<id column="ADM_ID" property="admId" />
	<result column="ADM_PWD" property="admPwd" />
	<result column="ADM_NAME" property="admName" />
	<result column="STATUS" property="status" />
	<result column="REG_DATE" property="regDate" />
</resultMap>


<select id="adminSelect" parameterType="string" resultMap="adminResultMap">
SELECT
    ADM_ID,
    NVL(ADM_PWD, '') AS ADM_PWD,
    NVL(ADM_NAME,'') AS ADM_NAME,
    NVL(STATUS, 'N') AS STATUS,
    NVL(TO_CHAR(REG_DATE, 'YYYY.MM.DD HH24:MI:SS'), '') AS REG_DATE
FROM
    TBL_ADMIN
WHERE 
    ADM_ID = #{value}
</select>

</mapper>

-이제 서비스에서 해당 메소드를 호출하기 위해선 id와 같은 이름의 추상 메소드가 있어야 하기 때문에(실질적으로 오버라이딩 되는 것이라고 보면 된다.) 인터페이스를 하나 만들어준다.

package com.icia.manager.dao;

import org.springframework.stereotype.Repository;

import com.icia.manager.model.Admin;

@Repository("adminDao")
public interface AdminDao {
	
	public Admin adminSelect(String admId);
}

·오후 수업

-오후엔 환경 설정 및 오류 때문에 수업을 굉장히 조금밖에 나가지 못했다. 그래서 내일 서비스부터 컨트롤러까지 작성할 예정이고, 애초에 관리자 페이지에서는 회원상태를 N으로 바꾸거나(정지 아이디로 만드는 것)하는 간단한 기능만 구현할 것이기 때문에 많이 다른 것이 있을 것 같지는 않다. 그래도 오늘 환경설정하는 것을 잘 적어놨기 때문에 따라하면 우리 프로젝트도 그렇게 설정하는 것이 어렵지 않을 것 같다. 내일은 db의 erd까지 전부 작성 완료하는 것이 목표이다. 그래서 하루종일 팀원들과 굉장히 많은 소통을 했다. 내일 ERD가 잘 그려져서 훌륭한 시작이 되었으면 한다. 내일도 파이팅!
아! 자기 전에 우리팀이 만든 테이블을 다른 오라클 계정과 접속으로 미리만들어서 erd를 한번 볼 생각이다. 지금이 11시인데 1시까지는 할 수 있을지 모르겠다.

profile
비전공자란 이름으로 새로운 길을 가려 하는 신입

0개의 댓글