HTML 기본 태그

개발 및 관리/HTML, CSS, Javascript, DOM 2022. 2. 7. 23:34 posted by HighLighter
반응형

웹 개발시 사용하는 HTML 기본 태그를 정리해보았습니다.

1. 텍스트 관련 태그

종류 설명
<hn> 제목. <h1>~<h6>까지 사용할 수 있으며 숫자가 커질수록 글자 크기는 작아집니다.
<p> 텍스트 단락. 내용이 길면 웹 브라우저 창의 너비에 맞게 자동으로 줄 바뀝니다.
<br> 줄 바꿈. 텍스트 단락 중 원하는 위치에서 줄 바뀝니다.
<blockquote> 내용 인용. 다른 내용보다 들여 쓰고 단락으로 표시합니다.
<strong> 중요한 텍스트를 굵게 표시, 화면 낭독기에서 강조해서 읽어 줍니다.
<b> 중요하지는 않지만 굵게 표시합니다.
<em> 중요한 텍스트를 기울게 표시(문장), 화면 낭독기에서 강조해서 읽어 줍니다.
<i> 중요하지는 않지만 기울게 표시(마음속의 생각이나 용어) 합니다.
<ins> 내용을 편집할 때 추가한 내용을 표시합니다.
<del> 내용을 편집할 때 삭제한 내용을 표시합니다.
<sup> 위 첨자입니다.
<sub> 아래 첨자입니다.

 

2. 목록 관련 태그

종류 설명
<ol> 순서 있는 목록의 시작과 끝을 나타냅니다.
<ul> 순서 없는 목록의 시작과 끝을 나타냅니다.
<li> 순서 있는 목록이나 순서 없는 목록의 각 항목을 나타냅니다.
<dl> 설명 목록의 시작과 끝을 나타냅니다.
<dt> 설명 목록의 이름(제목)을 나타냅니다.
<dd> 설명 목록의 값(설명)을 나타냅니다.

 

3. 표 관련 태그

종류 설명
<table> 표를 나타냅니다.
<caption> 표의 제목을 넣습니다.
<tr> 표의 행을 만듭니다.
<td> 표의 셀을 만듭니다.
<th> 제목 셀을 만듭니다.
<thead> 표 구조에서 제목 부분을 나타냅니다.
<tbody> 표 구조에서 본문 부분을 나타냅니다.
<tfoot> 표 구조에서 요약이나 정리 부분을 나타냅니다.
<col> 표에서 열의 스타일을 지정합니다.
<colgroup> 표에서 여러 열을 함께 묶어서 스타일을 지정합니다.

 

4. 멀티미디어 관련 태그

종류 설명
<object> 멀티미디어, PDF 파일 등 다양한 형식의 파일을 삽입합니다.
<embed> <audio>, <video> 태그와 <object> 태그도 지원하지 않을 경우 멀티미디어 파일을 삽입합니다.
<img> 이미지 파일을 삽입합니다.
<audio> 오디오 파일을 삽입합니다.
<video> 비디오 파일을 삽입합니다.

 

5. <form> 태그의 속성 : <form [속성=“속성값”]>여러 폼 요소</form>

종류 설명
method 사용자가 입력한 내용을 서버 쪽 프로그램으로 어떻게 넘겨줄 것인지 지정합니다. method에서 사용할 수 있는 속성값은 getpost입니다.
get: 데이터를 256~4,096byte까지만 서버로 넘길 수 있습니다. 주소 표시줄에 사용자가 입력한 내용이 그대로 드러나는 단점이 있습니다.
post: 입력한 내용의 길이에 제한받지 않고 사용자가 입력한 내용도 드러나지 않습니다.
name 자바스크립트로 폼을 제어할 때 사용할 폼의 이름을 지정합니다.
action <form> 태그 안의 내용을 처리해 줄 서버 프로그램을 지정합니다.
target action 속성에서 지정한 스크립트 파일을 현재 창이 아닌 다른 위치에서 열도록 합니다.

 

6. <input> 태그의 type속성

종류 설명
text 한 줄짜리 텍스트를 입력할 수 있는 텍스트 박스를 넣습니다
password 비밀번호를 입력할 수 있는 필드를 넣습니다.
search 검색할 때 입력하는 필드를 넣습니다.
url URL 주소를 입력할 수 있는 필드를 넣습니다.
email 이메일 주소를 입력할 수 있는 필드를 넣습니다.
tel 전화번호를 입력할 수 있는 필드를 넣습니다.
checkbox 주어진 여러 항목에서 2개 이상 선택할 수 있는 체크 박스를 넣습니다.
radio 주어진 여러 항목에서 1개만 선택할 수 있는 라디오 버튼을 넣습니다.
number 숫자를 조절할 수 있는 스핀 박스를 넣습니다.
range 숫자를 조절할 수 있는 슬라이드 박스를 넣습니다.
date 사용자 지역을 기준으로 날짜(, , )을 넣습니다.
month 사용자 지역을 기준으로 날짜(, )을 넣습니다.
week 사용자 지역을 기준으로 날짜(, )을 넣습니다.
time 사용자 지역을 기준으로 시간(, , , 분할 초)을 넣습니다.
datetime 국제 표준시(UTC)로 설정된 날짜와 시간(, , , , , , 분할 초)를 넣습니다.
datetime-local 사용자가 있는 지역을 기준으로 날짜와 시간(, , , , , , 분할 초)을 넣습니다.
submit 전송 버튼을 넣습니다.
reset 리셋 버튼을 넣습니다.
image submit 버튼 대신 사용할 이미지를 넣습니다.
button 일반 버튼을 넣습니다.
file 파일을 첨부할 수 있는 버튼을 넣습니다.
hidden 사용자에게는 보이지 않지만 서버로 넘겨주는 값이 있는 필드를 만듭니다.

 

7. 텍스트와 비밀번호를 나타내는 type=“text”type=“password”

<input type=“text”>

<input type=“password”>

종류 설명
size 텍스트와 비밀번호 필드의 길이를 지정합니다. , 화면에 몇 글자가 보이도록 할 것인지를 지정합니다. 예를 들어 최대로 입력할 수 있는 글자 수가 10개인데 size속성값을 5로 지정하면 필드크기는 5개 글자크기에 맞추고 나머지 5개 글자는 화면에 보이지 않습니다.
value 텍스트 필드 요소가 화면에 표시될 때 텍스트 필드 부분에 보여 주는 내용입니다. 이 속성을 사용하지 않으면 빈 텍스트 필드가 표시됩니다. 비밀번호 필드에서 사용하지 않는 속성입니다.
maxlength 텍스트 필드와 비밀번호 필드에 입력할 수 있는 최대 문자 수를 지정합니다.

 

7. 체크 박스와 라디오 버튼을 나타내는 type=“checkbox”type=“radio”

<input type=“checkbox”>

<input type=“radio”>

<체크 박스, 라디오 버튼에서 사용하는 속성>

종류 설명
value 선택한 체크 박스나 라디오 버튼을 서버에게 알려 줄 때 넘겨줄 값을 지정합니다.
이 값은 영문이거나 숫자여야 하며 필수 속성입니다.
checked 체크 박스나 라디오 버튼의 항목은 처음에 아무것도 선택되지 않은 상태로 화면에 표시되는데, 여러 항목 중에서 기본으로 선택해 놓고 싶은 항목에 사용합니다. 속성값은 따로 없습니다.

 

8. 숫자 입력 필드를 나타내는 type=“number”type=“range”

<input type=“number”>

<input type=“range”>

속성 설명
min 필드에 입력할 수 있는 최솟값을 지정합니다. 기본 최소값은 0입니다.
max 필드에 입력할 수 있는 최댓값을 지정합니다. 기본 최대값은 100입니다.
step 숫자 간격을 지정할 수 있습니다. 기본값은 1입니다.
value 필드에 표시할 초깃값입니다.

 

 

9. 전송, 리셋 버튼을 나타내는 type=“submit”type=“reset”

<input type=“submit | reset” value=“버튼에 표시할 내용”>

*전송 버튼을 나타내는 submit은 폼에 입력한 정보를 서버로 전송합니다. submit 버튼으로 전송된 정보는 <form>태그의 action 속성에서 지정한 폼 처리 프로그램에 넘겨집니다.

*반면에 reset버튼은 <input> 요소에 입력된 모든 정보를 재설정해서 사용자가 입력한 내용을 모두 지우는 역할을 합니다.

 

10. 기본 버튼을 나타내는 type=“button”

type=“button”submit이나 reset 버튼과 같은 기능이 없고 오직 버튼 형태만 삽입합니다. 주로 버튼을 클릭해서 자바스크립트를 실행할 때 사용합니다. 다음과 같이 value속성을 사용해 버튼에 표시할 내용을 지정합니다.

<input type=“button” value=“버튼에 표시할 내용”>

 

11. 파일을 첨부할 대 사용하는 type=“file”

type=“file”로 지정하면 폼에 파일을 첨부할 수 있습니다. 다만, 첨부한 파일을 서버로 보내려면 자바스크립트 등 웹프로그래밍 언어를 사용해야 합니다. 실제 첨부 버튼에 표시되는 내용은 웹 브라우저마다 조금씩 다릅니다.

<input type=“file”>

 

12. 히든 필드 만들 때 사용하는 type=“hidden”

화면의 폼에는 보이지 않지만 사용자가 입력을 마치면 폼과 함께 서버로 전송되는 요소. 사용자에게 굳이 보여 줄 필요 없지만 관리자가 알아야 하는 정보는 히든 필드로 입력.

웹 브라우저에는 히든 필드가 보이지 않으므로 사용자는 그 정보를 알 수 없다. 그러나 로그인버튼을 클릭하면 입력한 정보화 함께 히든 필드의 내용이 서버로 함께 전송 가능.

<input type=“hidden” name=“이름” value=“서버로 넘길 값”>

 

13. input 태그의 주요 속성

- HTML5에 와서 폼 태그는 더욱 강력해졌다. 입력란에 커서나 힌트를 표시할 수도 있고, 꼭 입력해야 하는 필드도 지정할 수 있다.(예전에는 자바스크립트로 실행한 것을 <input> 태그의 속성만으로도 처리할 수 있다.

1) 자동으로 입력 커서를 갖다 놓는 autofocus 속성

      <label for ="user-name">이름 </label >

      <input type ="text"id ="user-name"autofocus required >

 

2) 힌트를 표시해 주는 placeholder 속성

      <label for ="phone">연락처 </label >

      <input type ="tel"id ="phone"placeholder ="하이픈 빼고 입력해 주세요.(01012345678)"required >

 

3) 읽기 전용 필드를 만들어 주는 readonly 속성

- readonly 속성은 readonly, readonly=“readonly”, readonly=“true” 로 지정

<input type=“텍스트 입력 필드” readonly>

 

      <label for ="prod">주문 상품 </label >

      <input type ="text"id ="prod"value ="상품용 3KG"readonly >

 

4) 필수 입력 필드를 지정하는 require 속성

- required=“required”, required 로 지정

      <label for ="addr">배송 주소 </label >

      <input type ="text"id ="addr"required >

 

14. 여러 줄을 입력하는 텍스트 영역 <textarea> 태그

- <textarea> 태그는 게시판에서 글을 입력하거나 회원 가입 양식에서 사용자 약관을 표시할 때 자주 사용한다.

<textarea>내용</textarea>

 

<textarea> 태그의 속성

종류 설명
cols 텍스트 영역의 가로 너비를 문자 단위로 지정합니다.
rows 텍스트 영역의 세로 길이를 줄 단위로 지정합니다. 지정한 숫자보다 줄 개수가 많아지면 스크롤 막대가 생깁니다.

 

       <label for ="memo">메모 </label >

       <textarea id ="memo"cols ="40"rows ="4"></textarea >

 

15. 드롭다운 목록을 만들어 주는 <select>, <option> 태그

<select> 태그로 드롭다운 목록의 시작과 끝을 표시하고, 그 안에 <option> 태그를 사용해 원하는 항목을 추가한다. <option> 태그에는 value속성을 이용해 서버로 넘겨주는 값을 지정한다.

 

<select>

<option value=“1”>내용1</option>

<option value=“2”>내용2</option>

.....

</select>

 

<select>태그의 속성

종류 설명
size 화면에 표시할 드롭다운 항목의 개수를 지정한다.
multiple 드롭다운 목록에서 둘 이상의 항목을 선택할 때 사용한다.

 

<option>태그의 속성

종류 설명
value 해당 항목을 선택할 때 서버로 넘겨줄 값을 지정
selectec 드롭다운 메뉴를 삽입할 때 기본적으로 선택해서 보여 줄 항목을 지정

 

16. 버튼을 만들어 주는 <button> 태그

10번과 비슷하게 보이지만 다릅니다. <button> 태그를 이용하여 폼을 전송하거나 리셋하는 버튼을 삽입할 수 있다. <button> 태그의 type속성은 버튼이 활성화되었을 때 어떤 동작을 할지 지정한다. submit, reset, button 중에서 선택할 수 있고, 만약 지정하지 않으면 submit을 선택한 것으로 간주된다. <button>태그에는 콘텐츠를 포함할 수 있어서 아이콘을 추가하거나 CSS를 이용해 원하는 형태로 꾸밀 수도 있다.

<button type=“submit”>내용</button>

<button type=“reset”>내용</button>

<button type=“button”>내용</button>

<button>태그의 type 속성

종류 설명
submit 폼을 서버로 전송합니다. <input type=“submit”> 과 같은 기능을 한다.
reset 폼에 입력한 내용을 초기화합니다. <input type=“reset”>과 같은 기능을 한다.
button 버튼 형태만 만들 뿐 자체 기능은 없다. <input type=“button”> 과 같은 기능을 한다.

 

17. 폼에서 사용하는 태그

종류 설명
<form> 폼의 시작과 끝을 만든다.
<fieldset> 폼 요소를 그룹으로 묶는다.
<legend> 필드셋에 제목을 붙인다.
<input> 사용자가 내용을 입력할 필드 삽입한다.(‘<input> 태그의 유형참고)
<select>, <option> 드롭다운 목록을 삽입
<textarea> 텍스트를 여러 줄 입력할 수 있는 텍스트 영역을 삽입
<datalist> 데이터 목록을 삽입

 

18. <input> 태그의 유형(type)

종류 설명
text 한 줄짜리 텍스트를 입력할 수 있는 텍스트 상자를 넣는다.
password 비밀번호를 입력할 수 있는 필드를 넣는다.
search 검색할 때 입력하는 필드를 넣는다.
url URL 주소를 입력할 수 있는 필드를 넣는다.
email 이메일 주소를 입력할 수 있는 필드를 넣는다.
tel 전화번호를 입력할 수 있는 필드를 넣는다.
checkbox 주어진 여러 항목에서 2개 이상 선택할 수 있는 체크 박스를 넣는다.
radio 주어진 여러 항목에서 1개만 선택할 수 있는 라디오 버튼을 넣는다.
number 숫자를 조절할 수 있는 스핀 박스를 넣는다.
range 숫자를 조절할 수 있는 슬라이드 막대를 넣는다.
date 사용자 지역을 기준으로 날짜(, , )를 넣는다.
month 사용자 지역을 기준으로 날짜(, )를 넣는다.
week 사용자 지역을 기준으로 날짜(, )를 넣는다.
time 사용자 지역을 기준으로 시간(, , , 분할 초)를 넣는다.
datetime 국제 표준시(UTC)로 설정된 날짜와 시간(, , , , , , 분할 초)을 넣는다.
datetime-local 사용자가 있는 지역을 기준으로 날짜와 시간(, , , , , 분할 초)을 넣는다.
submit 전송 버튼을 넣는다.
reset 리셋 버튼을 넣는다.
image submit 버튼 대신 사용할 이미지를 넣는다.
button 일반 버튼을 넣는다.
file 파일을 첨부할 수 있는 버튼을 넣는다.
hidden 사용자에게는 보이지 않지만 서버로 넘겨주는 값이 있는 필드를 만든다.

 

19. <input> 태그의 속성

종류 설명
autofocus 웹 문서가 열리면 입력 필드 안에 마우스 포인터를 표시한다.
placeholder 텍스트 필드에 힌트를 표시한다.
readonly 입력 필드를 읽기 전용으로 지정한다.
required 필수 입력 필드를 지정한다.
max 숫자 입력 필드에서 최대값을 지정한다.
min 숫자 입력 필드에서 최소값을 지정한다.
step 숫자 입력 필드에서 증감할 간격을 지정한다.
maxlength 텍스트 관련 필드에서 입력할 수 있는 최대 길이를 지정한다.
minlength 텍스트 관련 필드에서 입력할 수 있는 최소 길이를 지정한다.
size 텍스트 관련 필드에서 화면에 표시할 크기를 지정한다.
list 연결할 데이터 목록을 지정한다.

 

반응형

spring Oracle과 mybatis 연동 실습

개발 및 관리/Java 2022. 1. 28. 16:55 posted by HighLighter
반응형


********************************
https://youtu.be/bmLFtrZVnRQ
https://youtu.be/aIAUFDaXAbE
https://youtu.be/y-AHuYVkt6E
https://youtu.be/bepiioZDUN8
https://youtu.be/aIAUFDaXAbE
https://youtu.be/IHdjBXlvNRY
https://youtu.be/Jc9UTY_lcrY
https://youtu.be/joL360SrrtI
https://youtu.be/WdgDWbLCOUg
https://youtu.be/eMuFWW6-8i0
https://youtu.be/c3tQnaNiOAQ
https://youtu.be/WYjVmIplNyI
https://youtu.be/k5g2kK1WQ34
https://youtu.be/lMWwaysjIkI
https://youtu.be/YYlXmkpjRrU
https://youtu.be/J8SEJ9lCDI8
https://youtu.be/3-pszozdXAM
https://youtu.be/K6T6tx9-qI4
https://youtu.be/CCqVKz6RRLs

Programming School

spring Oralce과 mybatis
spring Oracle과 mybatis 연동 실습(회원 목록,등록,수정,삭제)
oracle+mybatis
spring boot oracle mybatis

********************************



********************************
*회원관리의 전체적인 구조
********************************

Controller
 MemberController.java


Service
 MemberService.java 인터페이스
 MemberServiceImpl.java 구현클래스

Model
 MemberDAO.java 인터페이스
 MemberDAOImpl.java 구현클래스
 MemberDTO.java
 memberMapper.xml sql매퍼

View
 member_list.jsp
 write.jsp
 view.jsp

----------------------------------------------------------------------------------------

create table member(
userid varchar2(50) not null primary key,
passwd varchar2(50) not null,
name varchar2(50) not null,
email varchar2(50),
join_date date default sysdate);

insert into member(userid, passwd, name, email) values
('kim','1234','김철수','kim@gmail.com');

select * from member;
commit;

----------------------------------------------------------------------------------------

**********************************
*모델
*model.dt.MemberDTO.java
**********************************

import java.util.Date;

public class MemberDTO{
private String userid;
private String passwd;
private String name;
private String email;
private Date join_date;
}



**********************************
*DAO
*model.dao.MemberDAO.java
**********************************

package com.example.spring01.model.dao;

import java.util.List;

import com.example.spring01.model.dto.MemberDTO;

public interface MemberDAO{
public List<MemberDTO> memberList();
public void insertMember(MemberDTO vo);
public MemberDTO viewMember(String userid);
public void deleteMember(String userid);
public void updateMember(MemberDTO vo);

//비밀번호 체크
public boolean checkPw(String userid, String passwd);
}

----------------------------------------------------------------------------------------


**********************************
*MemberDAO
**********************************

package com.example.spring01.model.dao;

import java.util.List;

@Repository //서버가 startup될 때 이 클래스가 메모리에 자동으로 등록됨
public class MemberDAOImpl implements MemberDAO{
 //로깅 처리를 위한 객체 선언
 private static final Logger loggger = LoggerFactory.getLogger(MemberDAOImpl.class);

 //SqlSession 객체를 개발자가 직접 생겅하지 않고 스프링에서 연결시켜 줌 
 @Inject //의존관계 주입
 SqlSession sqlSession;

 @Override
 public List<MemberDTO> memberList() {
logger.info("memberList called");
// sql mapper에 작성된 sql 코드가 실행됨 (auto commit & close)
return sqlSession.selectList("member.memberList");
 }

 @Override
 public MemberDTO viewMember(String userid) {
  // MemberDTo dto = sqlSession.selectOne("member.viewMember", userid);
  // return dto;
  return sqlSession.selectOne("member.viewMember", userid);
 }

 @Override
 public void deleteMember(String userid) {
sqlSession.delete("member.deleteMember", userid);
 }

 @Override
 public void updateMember(MemberDTO vo) {
sqlSession.update("member.updateMember", vo);
 }


 @Override
 public boolean checkPw(String userid, String passwd) {
boolean result = false;
// mapper에 넘길 값이 2개 이상인 경우 map으로 묶오서 전달
Map<String, String> map = new HashMap<>();
map.put("userid", userid);
map.put("passwd", passwd);
int count = sqlSession.selectOne("member.checkPw", map);
// 리턴값이 1이면 true, 0이면 false
if(count==1) result = true;
return result;
 }



*****************************************************************************************************************************
*****************************************************************************************************************************


**********************************
*service.MemberService.java
*MemberService
**********************************

package com.example.spring01.services;

import java.util.List;

import com.example.spring01.model.dto.MemberDTO;

public interface MemberService{
public List<MemberDTO> memberList();
public void insertMember(MembmerDTO dto);
public MemberDTO viewMember(String userid);
public void deleteMember(String userid);
public void updateMember(MemberDTO dto);

// 비밀번호 체그
public boolean checkPw(String userid, String passwd);
}

----------------------------------------------------------------------------------------

package com.example.spring01.service;

import java.util.List;

@Service
public class MemberServiceImpl implements MemberService{

// MemberDAO memberDao = new MemberDAOImpl();
@Inject // 스프링 컨테이너가 만든 dao 객체가 연결됨 (의존관계 주입)
MemberDAO memberDao;

@Override
public MemberDTO viewMember(String userid) {
 return memberDao.viewMember(userid);
}

@Override
public boolean checkPw(String userid, String passwd) {
 return memberDao.checkPw(userid, passwd);
}

@Override
public void updateMember(MemberDTO dto) {
 memberDao.updateMember(dto);
}
}




----------------------------------------------------------------------------------------

*****************************************************************************************************************************
*****************************************************************************************************************************


컨트롤러 -> 서비스 -> DAO -> mybatis(mapper호출) -> jsp

**********************************
*MemberController
**********************************

package com.example.spring01.controller;

@Controller // 현재 클래스를 Controller Bean으로 등록함
public class MemberController{
private static final Logger logger = LoggerFactory.getLogger(MemberController.class);

@Inject // MemberService 객체가 주입됨
MemberService memberService;
// MemberService memberService = new MemberServiceImpl();

@RequestMapping("member/list.do") // 사용자가 요청하는 주소
public String memberList(Model model) { 
 List<MemberDTO> list = memberService.memberList();
logger.info("회원 목록:" + list);
model.addAttribute("list", list); // 모델에 저장
return "member/member_list"; // 출력 페이지로 포워딩
}

@RequestMapping("member/write.do")
public String write() {  
 return "member/write";
}

// 폼에 입력한 데이터가 MemberDTO dto 변수에 저장됨
// request.getParameter 생략
@RequestMapping("member/insert.do")
public String insert(@ModelAttribute MemberDTO dto) {
            // public String insert(MemberDTO dto, HttpServletRequest request) {
 // String name = request.getParameter("name");
 memberService.insertMember(dto);  
 return "redirect:/member/list.do"; // 목록 갱신
}

// view.do?userid=kim 이라면
// @RequestParam String userid 변수에 kim이 저장됨
@RequestMapping("member/view.do")
public String view(@RequestParam String userid, Model model) {
 // System.out.println("클릭한 아이디:" + userid);
 // info, debug, warn, error
 // logger.info("클릭한 아이디:" + userid);

// 회원정보를 모델에 저장
model.addAttribute("dto", memberService.viewMember(userid));
// view.jsp로 포워딩
 return "member/view"; // view.jsp로 포워딩
}

@RequestMapping("member/update.do")
pblic String update(@ModelAttribute MemberDTO dto, Model model) {
 boolean result = memberService.checkPw(
dto.getUserid(), dto.getPasswd());
 logger.info("비밀번호 확인:"  + result);

if(result) { // 비밀번호가 맞으면
 memberService.updateMember(dto): // 레코드 수정
 return "redirect:/member/list.do"; // 목록으로 이동
} else { // 비밀번호가 틀리면
 MemberDTO dto2 = memberService.viewMember(dto.getUserid));
 dto2.setJoin_date(dto2.getJoin_date()); // 날짜가 지워지지 않도록
 model.addAttribute("dto", dto);
 model.addAttribute("message", "비밀번호가 일치하지 않습니다.");
 return "member/view"; // 수정 페이지로 되돌아감
}

@RequestMapping("member/delete.do")
public String delete(@RequestParam String userid, 
            @RequestParam String passwd, Model mode) {
 boolean result = memberService.checkPw(userid, passwd);
 if(resutl) {
memberService.deleteMember(userid);
return "redirect:/member/list.do";
} else {
 model.addAttribute("message", "비밀번호가 일치하지 않습니다.");
 model.addAttribute("dto", memberService.viewMember(userid));
 return "member/view"; }
      }




*redirect를 하지 않으면 forward가 됩니다. 주소가 안바뀝니다.

*변수명 일치해야 함
테이블필드명 = DTO = FORM

***********************************************
*설명내용
- @ModelAttribute : 폼의 전체 데이터, dto
- @RequestParam : 폼의 개별값
***********************************************


memberService.updateMember 
F3 -> 인터페이스, 바로 소스보기
F4 -> 계층구조보기 -> MemberServiceImpl 선택 -> updateMember 선택


*****************************************************************************************************************************
*****************************************************************************************************************************
























반응형
반응형

아래의 명령어를 통해 Oracle DB Alert log확인이 가능합니다.

Oracle DBMS의 이상징후 혹은 특이점 확인이 가능합니다.

su - oracle

sqlplus / as sysdba

SELECT * FROM V$DIAG_INFO WHERE NAME='Diag Trace';

tail -100f /app/oracle/diag/rdbms/ORCLDB1/trace/alert_ORCLDB1.log

SELECT * FROM V$DIAG_INFO WHERE NAME='Diag Alert';

tail -100f /app/oracle/diag/rdbms/ORCLDB1/alert/log.xml

반응형
반응형

유닉스에서 아래와 같이 명령어 실행하여 해결하였습니다.

(1번만 실행하여 해결하였습니다.)

1. [oracle] DB명이 ORCLDB이고 인스턴스명이 ORCLDB1 기동

srvctl start instance -d ORCLDB -i ORCLDB1

2. [oracle] 리스너 start

srvctl start listener -l listener -n orcldb1

3. [root] RAC 상태 확인

crsctl stat res -t

crsctl status resource -t

4. [root] CRS stop, start

crsctl stop crs

crsctl start crs

5. CRS start = (CRS start) + (Instance start) + (Listener start)

6. crs관련 상태확인 명령어

crsctl check cluster -all : 모든 노드 체크 수행

crsctl check crs : 로컬서버의 Oracle High Availiability Services와 클러스터웨어 status 확인

crsctl config crs : Oracle High Availiability Services의 자동시작 설정확인

*crs서비스는 crsd데몬으로 구현되며, crsd는 root로 실행되고 문제발생 시 자동으로 재시작됨

반응형
반응형

대용량 테이블이고 DML(INSERT, UPDATE, DELETE 등)가 계속 일어나는 테이블에 신규 인덱스 생성을 하려면

Lock이 걸려서 서비스가 원활하지 않을 수 있습니다.

그럴 경우에 아래와 같이 ONLINE, NOLOGGING 옵션을 사용하면 좋습니다.

ONLINE은 서비스 중에 Lock이 걸리지 않고 인덱스 생성하는 옵션입니다.

NOLOGGING은 UNDO, REDO를 최소하면서 인덱스 생성할 수 있게 도와주는 옵션입니다.

1. 테이블 EMPLOYEE 에 기 생성된 인덱스 확인

SELECT IDX.OWNER, IDX.INDEX_NAME, IDX.TABLE_OWNER,
IDX.TABLE_NAME, IDX.TABLESPACE_NAME, IDX_COL.COLUMN_NAME
FROM DBA_INDEXES IDX, DBA_IND_COLUMNS IDX_COL
WHRE IDX.TABLE_NAME = 'EMPLOYEE'
AND IDX.INDEX_NAME=IDX_COL.INDEX_NAME
ORDER BY INDEX_NAME;

2. 아래의 구문을 사용한 인덱스 생성

CREATE INDEX EMP.IX_EMPLOYEE01 ON EMP.IX_EMPLOYEE(IDX01, IDX02, IDX03, IDX04)
NOLOGGING TABLESPACE TS_IDX_EMP LOCAL ONLINE;

3. 생성된 인덱스 10% 샘플링 통계수집

BEGIN
  SYS.DBMS_STATS.GATHER_INDEX_STATS (
     OwnName           => 'EMP'
    ,IndName           => 'IX_EMPLOYEE01'
    ,Estimate_Percent  => 10
    ,Degree            => 4
    ,No_Invalidate  => FALSE);
END;
/

감사합니다.

반응형
반응형

Single Oracle DB일 때 리스너 설정을 2가지 방법으로 합니다.

1번째는 NETCA(NET Configuration Assistant)로 리스너 설정하는 방법

 - RAC환경에서는 반드시 NETCA를 통한 리스너 설정을 추천드립니다.

2번째는 listener.ora 파일을 수정하여 기동하는 방법이 있습니다.

2번째 방법을 공부해보겠습니다

oracle@testdb:~/app/oracle/product/12.2.0/db/network/admin$ cat listener.ora
LISTENER=
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = testdb)(PORT = 1521))
      )
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = TESTDB)
      (SID_NAME = TESTDB)
      (ORACLE_HOME = /oracle/app/oracle/product/12.2.0/db)
    )
  )

LISTENER1=
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = testdb)(PORT = 1522))
      )
    )
  )

SID_LIST_LISTENER1 =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = TESTDB)
      (SID_NAME = TESTDB)
      (ORACLE_HOME = /oracle/app/oracle/product/12.2.0/db)
    )
  )

LISTENER2=
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = testdb)(PORT = 1523))
      )
    )
  )

SID_LIST_LISTENER2 =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = TESTDB)
      (SID_NAME = TESTDB)
      (ORACLE_HOME = /oracle/app/oracle/product/12.2.0/db)
    )
  )

SID_LIST_EXTPROC =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /oracle/app/oracle/product/12.2.0/db)
      (PROGRAM = extproc)
      (ENVS="EXTPROC_DLLS=ANY")
    )
  )
EXTPROC = 
  (DESCRIPTION_LIST =
    (DESCRIPTION = 
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

#security weakness
ADMIN_RESTRICTIONS_LISTENER = ON
oracle@testdb:~/app/oracle/product/12.2.0/db/network/admin$ 

위의 빨간색으로 표시된 부분에 주의해서 아래와 같이 기동을 해봅니다.

1. 리스너 기동

lsnrctl start LISTENER

lsnrctl start LISTENER1

lsnrctl start LISTENER2

2. 리스너 상태 확인

lsnrctl status LISTENER

lsnrctl status LISTENER1

lsnrctl status LISTENER2

3. 리스너 상태 중지

lsnrctl stop LISTENER

lsnrctl stop LISTENER1

lsnrctl stop LISTENER2

 

반응형
반응형

 

1. 실행중인 SQL 지연시간 체크 및 세션 체크

SELECT A.MESSAGE
, A.START_TIME
, A.LAST_UPDATE_TIME
, A.TIME_REMAINING
, ROUND((SOFAR/TOTALWORK)*100,0)||'%' AS PROGESS
, B.SQL_TEXT
FROM V$SESSION_LONGOPS A
, V$SQL B
WHERE A.SQL_ADDRESS=B.ADDRESS
AND ROWNUM<=10
AND A.TIME_REMAINING>0;

SELECT ROWNUM NO
, PARSING_SCHEMA_NAME
, to_char(ELAPSED_TIME/(1000000 * decode(executions,null,1,0,1,executions)),999999.99 ) 평균실행시간
, executions 실행횟수
, SQL_TEXT 쿼리
, SQL_FULLTEXT
FROM V$SQL
WHERE  LAST_ACTIVE_TIME > SYSDATE-(1/24*2)
AND ELAPSED_TIME >= 1 * 1000000 * decode(executions,null,1,0,1,executions)
ORDER BY 평균실행시간 DESC, 실행횟수 DESC;

2. Oracle sessions & process  limit와 현재 사용수치 찾는 쿼리

 select resource_name, current_utilization, max_utilization, limit_value
    from v$resource_limit
    where resource_name in ('sessions', 'processes');
    select
       substr(a.spid,1,9) pid,
       substr(b.sid,1,5) sid,
       substr(b.serial#,1,5) ser#,
       substr(b.machine,1,6) box,
       substr(b.username,1,10) username,
       substr(b.osuser,1,8) os_user,  -- 접속자의 OS 사용자 정보
       substr(b.program,1,30) program,  -- 접속 프로그램
from v$session b, v$process a
where
b.paddr = a.addr
and type='USER'order by spid;

3. 현재 활성화된 SQL및 Process ID찾기

SELECT
  a.sid,       -- SID
  a.serial#,   -- 시리얼번호
  a.status,    -- 상태정보
  a.process,   -- 프로세스정보
  a.username,  -- 유저
  a.osuser,    -- 접속자의 OS 사용자 정보
  b.sql_text,  -- sql
  c.program    -- 접속 프로그램
FROM
  v$session a,
  v$sqlarea b,
  v$process c
WHERE
  a.sql_hash_value=b.hash_value  AND a.sql_address=b.address  AND a.paddr=c.addr  AND a.status='ACTIVE';

4. 현재 시간 기점으로 총 세션과 Active 세션 찾기

   select to_char(sysdate, 'YYYY/MM/DD hh24:mi:ss') "Time",
           count(*) "Total Sessions",
           count(decode(status, 'ACTIVE', 1) ) "Active Sessions"
    from   v$session;;

반응형
반응형

Oracle Unix, Solaris에서 파일 관리하는 명령어 아래와 같이 정리를 해보았습니다.

1. 파일 개수 확인 명령어

[root@testdb1:/grid/app/12.2.0/grid/rdbms/audit:#] ls | wc -l
24253

2. 수정된지 2일 지난 파일 압축

/usr/bin/find /grid/app/12.2.0/grid/rdbms/audit -mtime +2 ! -name "*.gz" -exec /usr/contrib/bin/gzip {} \;

3. 수정된지 30일 지난 파일 삭제

/usr/bin/find /grid/app/12.2.0/grid/rdbms/audit -type f -mtime +30 -exec rm -f {} \;

4. 수정된지 15일 지나고 이름이 testdb1_ 로 시작하는 파일 압축

/usr/bin/find /appl/oracle/admin/TESTDB/bdump -type f -mtime +15 ! -name "*.gz" -name "testdb1_*" -exec

/bin/gzip {} \;

5. 아카이브파일 삭제 crontab 설정

0 1 * * * /usr/bin/find /oracle/app/oracle/product/12.2.0/db/dbs -type f -name '*.dbf*' -exec rm -f {} \;

반응형
반응형

weblogic admin console 에서 아래와 같이 timeout 설정이 가능합니다.

SID가 ORCL인 DB에 EMP 계정으로 접속하는 상태에서 TIMEOUT을 설정합니다.

속성 창에 아래와 같이 입력을 해줍니다.

user=EMP
oracle.jdbc.ReadTimeout=1800000
oracle.net.CONNECT_TIMEOUT=10000

https://blueyikim.tistory.com/1614

https://docs.oracle.com/en/database/oracle/oracle-database/21/jajdb/oracle/jdbc/OracleConnection.html

반응형

input 태그 hidden

개발 및 관리/HTML, CSS, Javascript, DOM 2022. 1. 19. 16:57 posted by HighLighter
반응형


http://tcpschool.com/

http://tcpschool.com/html-input-types/hidden

<input> 태그의 type 속성값

*<input type=“hidden”>

정의 및 특징
<input type=“hidden”>은 사용자에게는 보이지 않는 숨겨진 입력 필드를 정의합니다.

숨겨진 입력 필드는 렌더링이 끝난 웹 페이지에서는 전혀 보이지 않으며, 페이지 콘텐츠 내에서 그것을 볼 수 있게 만드는 방법도 없습니다.

따라서 숨겨진 입력 필드는 폼 제출 시 사용자가 변경해서는 안 되는 데이터를 함께 보낼 때 유용하게 사용됩니다.

이러한 입력 필드는 업데이트 되어야 하는 데이터베이스의 레코드를 저장하거나, 고유한 보안 토큰 등을 서버로 보낼 때 주로 사용됩니다.

반응형