기본 콘텐츠로 건너뛰기

2022의 게시물 표시

오류 Cannot invoke "jakarta.servlet.http.HttpSession.getServletContext()" because "session" is null

오류 java.lang.NullPointerException: Cannot invoke "jakarta.servlet.http.HttpSession.getServletContext()" because "session" is null at com.ezen.demo.ws.HttpSessionConfig.modifyHandshake(HttpSessionConfig.java:17) ~[classes/:na] at org.apache.tomcat.websocket.server.UpgradeUtil.doUpgrade(UpgradeUtil.java:227) ~[tomcat-embed-websocket-10.1.4.jar:10.1.4] at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:78) ~[tomcat-embed-websocket-10.1.4.jar:10.1.4] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) ~[tomcat-embed-core-10.1.4.jar:10.1.4] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) ~[tomcat-embed-core-10.1.4.jar:10.1.4] at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.0.3.jar:6.0.3] at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:1

WebSocket

WebSocket을 사용한 채팅 프로그램 만들기 - Spring boot 기반 고수준 - 웹사이트 접속자 전체를 대상으로 한 채팅 - 특정 이용자 그룹/개인을 대상으로 한 채팅 - http 프로토콜은 접속요청 후 접속되면 응답을 전송하고 접속 해제 - 웹서버 상에 서버소켓을 두고 웹브라우저가 서버소켓에 접속요청 ServerSocket : 네트워크(TCP/IP) 서버, 무한히 클라이언트를 대기 Socket : 서버에 접속요청, 통신가능 특정 이용자간의 통신(채팅) 로그인한 후 이용자의 아이디 활용(HttpSession) WebSocket 클래스에서 메시지 송수신 부분에서 특정 아이디를 가진 이용자의 소켓에 메시지를 전송해야 한다 메세지 구성(JSON) - 송신자, 수신자, 컨텐츠 서버측에서는 메시지를 가로채서 수신자가 누군지 확인/해당 이용자에게만 전송 서버측에서 JSON을 다루기 위해서 json-simple 사용(dependency 추가) 모든 채팅 접속자 리스트 구하기 - 채팅에 접속하는 모든 이용자의 리스트 작성 - 한 이용자가 모든 이용자의 아이디를 구하려면... - 누구나 접근할 수 있는 영역에 접속자 목록을 유지 - 접속자가 이용자 목록을 요청할 때 컨트롤러에서 그 영역에 접속 - 접속자 목록을 JSON 배열 형식으로 응답 - application 영역(Scope)에 모든 접속자의 ID를 기록한다 - ServletContext sc = request.getServletContext(); - sc.setAttribute("userSet",userSet); // list, set, map Controller / WebSocket - Configurator : WebSocket에서 HttpSession을 사용할 수 있도록 설정 pom.xml <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-websocket --> <dep

Thymeleaf

html + Spring EL을 쓴다 Natural Templating : DB, Front End application.perperties # Thymeleaf spring.thymeleaf.cache=false # 기본 경로 spring.thymeleaf.prefix=classpath:/templates/ # .html을 쓴다 spring.thymeleaf.suffix=.html # thymeleaf/ 안에 있는 모든것 spring.thymeleaf.view-names=thymeleaf/* pom.xml <!-- Thymeleaf --> <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> 문법 <div th:text="${greeting}"></div> // div 영역에 텍스트를 넣는다 <a th:href="@{'/' + ${url}}">index.html</a> <div th:if="${gender=='M'}">남자</div> <div th:unless="${gender=='M'}">여자</div> <div th:if="${#strings.equals(param2, 'A')">A</div> <div th:switch="${gender}">     <span th:case="M">Male</span>     <span th:case="F">Femal

Spring JPA(Java Persistence API)

application.properties # JPA # spring.jpa.hibernate.ddl-auto=create는 table을 새로 생성한다 #spring.jpa.hibernate.ddl-auto=create spring.jpa.hibernate.ddl-auto=none spring.jpa.generate-ddl=false spring.jpa.show-sql=true spring.jpa.database=oracle logging.level.org.hibernate=info spring.jpa.database-platform=org.hibernate.dialect.OracleDialect pom.xml <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa --> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-data-jpa</artifactId>     <version>3.0.0</version> </dependency> Entity(객체, 속성들의 집합) -> 테이블 생성 Emp.java : Entity 클래스  - 사번, 이름, 부서, 급여, 입사일 <- 컬럼명 인터페이스(JpaRepository 상속)  - 단순한 입출력 기능은 미리 준비되어 있음 @Data @AllArgsConstructor @NoArgsConstructor @Entity @Table(name = "emp4") public class Emp {     @Id // PRIMARY KEY가 된다, id로 찾을 때 이 속성으로 찾게 된다     @SequenceGenerator(sequenceName = "EMP4_

오류 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardController': Unsatisfied dependency expressed through field 'svc': Error creating bean with name 'boardService': Lookup method resolution failed

오류 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'boardController': Unsatisfied dependency expressed through field 'svc': Error creating bean with name 'boardService': Lookup method resolution failed 내용 public PageInfo<Board> getPage() {      PageInfo<Board> page = new PageInfo<>(getList());      log.info(page.toString());      return page; } 해결 public PageInfo<Board> getPage() {      PageHelper.startPage(3,5); // 추가     PageInfo<Board> page = new PageInfo<>(getList());     log.info(page.toString());     return page; }

PageHelper

PageHelper를 이용한 고수준 Pagination 구현 application.properties #mybatis pageHelper pagehelper.helper-dialect=oracle pagehelper.reasonable=true pom.xml <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter --> <dependency>      <groupId>com.github.pagehelper</groupId>      <artifactId>pagehelper-spring-boot-starter</artifactId>      <version>1.4.6</version> </dependency> Oracle MySQL Java // SQL 문장을 바꿔서, 5개의 행으로 이루어진 페이지의 3페이지를 가져온다 PageHelper.startPage(3,5); // PageHelper.startPage(pageNum=3, pageSize=5); // mapper에서 가져온 List<Board>를 PageInfo 객체로 받는다 PageInfo<Map<String,Object>> pageInfo = new PageInfo<>(mapper.getList()); log.info(pageInfo); model.addAttribute("pageInfo",pageInfo.getList()); return "board/pageForlist"; // 한 개의 글에 딸린 첨부파일의 정보는 한개의 문자열로 결합 SELECT LISTAGG(fname,',') WITHIN GROUP (ORDER BY num) fnames FROM attach GROUP BY bnum;

XCode

Xcode 사용자설정 단축키 만들기 '/Applications/Xcode.app/Contents/Frameworks/IDEKit.framework/Resources/IDETextKeyBindingSet.plist'로 가서 밑에 글을 추가한다. <key>My Custom Actions</key> <dict>      <key>Insert Line Below</key>      <string>moveToEndOfLine:, insertNewline:</string>      <key>Insert Line Above</key>      <string>moveUp:, moveToEndOfLine:, insertNewline:</string> </dict>

(미해결)오류 cannot delete from view without exactly one key-preserved table

오류 오류 보고 - SQL 오류: ORA-01752: cannot delete from view without exactly one key-preserved table 01752. 00000 -  "cannot delete from view without exactly one key-preserved table" *Cause:    The deleted table had            - no key-preserved tables,            - more than one key-preserved table, or            - the key-preserved table was an unmerged view. *Action:   Redefine the view or delete it from the underlying base tables. 내용 해결

오류 java.lang.IllegalArgumentException: The Unicode character [사] at code point [49,324] cannot be encoded as it is outside the permitted range of 0 to 255

오류 java.lang.IllegalArgumentException: The Unicode character [사] at code point [49,324] cannot be encoded as it is outside the permitted range of 0 to 255 내용 해결 한글 이름은 8비트로 포현할 수 없으므로 오류가 난다

나만의 프로그래밍 언어

Class Class Person(String name="이름", String phone="010-0000-0000", String email="이름@naver.com") {     return "Person(" + name + ", " + phone + ", " + email + ")"; } 변수 int value(0); // value라는 int타입 변수를 선언하고 0으로 초기화 value(10); // value라는 int타입 변수에 10이라는 값을 넣는다 value(); // value변수의 값을 꺼낸다 int value(x(0),y(0))->x+y; value(); 함수 int test(int x, int y) {     return x + y; } test(x(10), y(20)) // 30 괄호 안에서도 로직을 짤 수 있다 쉼표로 문장을 구분 Optional List [] Map <> Set {} set.contains {     // 실행문 } 형변환 int('12') # 12 str(10) # '10' 반환 타입 function a (int a, int b) -> int { } 함수 선언 형식 hello() {     print("Hello, World!"); } map map = map() map.key = "value" # {"key":"value"} map.name = "smith" # {"key":"value","name":"smith"} function(인수_1: 타입_1, 인수_2:타입_2): 반환값 {     // 내용 } var // 변하는 값 const // 변하지 않는 값

오류 Error creating bean with name 'boardController': Lookup method resolution failed

오류 Error creating bean with name 'boardController': Lookup method resolution failed 내용 @PostMapping({"/add"}) public Map<String,Object> addBoard(Board b) {      Map<String,Object> map = new HashMap<>();      map.put("result", "result");      return map; } 해결 @PostMapping({"/add"}) @ResponseBody public Map<String,Object> addBoard(Board b) {     Map<String,Object> map = new HashMap<>();     map.put("result", "result");     return map; }

오류 Field dao in com.ezen.demo.controller.BoardController required a bean of type 'com.ezen.demo.mapper.BoardMapper' that could not be found.

오류 Field dao in com.ezen.demo.controller.BoardController required a bean of type 'com.ezen.demo.mapper.BoardMapper' that could not be found. 내용 <mapper namespace="com.ezen.demo.mapper.EmpMapper"> 해결 <mapper namespace="com.ezen.demo.mapper. Board Mapper">

Spring lombok

https://projectlombok.org/download @Data @ToString @EqualsAndHashCode(exclude= {"ename","deptno","sal","hiredate"}) @AllArgsConstructor @NoArgsConstructor log.info("{}","hello, World!");

application.properties

server.port = 80 #spring.mvc.view.prefix=/WEB-INF/jsp/ #spring.mvc.view.suffix=.jsp #Oracle DataSource spring.datasource.driver-class-name=oracle.jdbc.OracleDriver spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521/xe spring.datasource.username=SCOTT spring.datasource.password=TIGER ## MULTIPART (MultipartProperties) # Enable multipart uploads spring.servlet.multipart.enabled=true # Threshold after which files are written to disk. spring.servlet.multipart.file-size-threshold=2KB # Max file size. spring.servlet.multipart.max-file-size=200MB # Max Request Size spring.servlet.multipart.max-request-size=215MB #mybatis pageHelper pagehelper.helper-dialect=oracle pagehelper.reasonable=true # JPA #spring.jpa.hibernate.ddl-auto=create spring.jpa.hibernate.ddl-auto=none spring.jpa.generate-ddl=false spring.jpa.show-sql=true spring.jpa.database=oracle logging.level.org.hibernate=info spring.jpa.database-platform=org.hibernate.dialect.OracleDialect # Thymeleaf spring.thymeleaf.cache=false spr

Spring MyBatis

EmpMapper.java @Mapper EmpMapper.xml <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> xml 문법 <mapper namespace="com.ezen.demo.mapper.EmpMapper"></mapper> <select id="list" resultType="com.ezen.demo.vo.Emp">SELECT * FROM emp3</select> id="list" // mapping되어있는 메소드 이름 parameterType="java.util.Map" // 메소드의 파라미터 타입 resultType="com.ezen.demo.vo.Emp" // SQL 문장이 실행될 때 만들어지는 객체의 타입 <where></where> <if test="deptno != null and deptno != ''"></if> <foreach collection="list" item="item" separator=" "></foreach> separator="union all" // 합집합, 상하로 합친다 #{value} <![CDATA[ // <를 태그로 인식하지 않는다 ]]>

오류 Incorrect result size: expected 1, actual 0

오류 Incorrect result size: expected 1, actual 0 내용 public boolean isDeptno(int deptno) {      String sql = "SELECT * FROM dept WHERE deptno=?";      return jdbcTemplate.queryForObject(sql, (rs,i)->{           return rs.getString("deptno");      },deptno)!=null; } 해결 public boolean isDeptno(int deptno) {      String sql = "SELECT * FROM dept WHERE deptno=?";      try {           jdbcTemplate.queryForObject(sql, (rs, i) -> {                return rs.getString("deptno");           }, deptno);           return true;      } catch (Exception e) {           return false;      } }

Spring JdbcTemplate

문법 @Autowired private JdbcTemplate jdbcTemplate; query jdbcTempalte.query(sql, (rs,i)->{      Emp emp = new Emp();      emp.setEmpno(rs.getInt("EMPNO"));     emp.setEname(rs.getString("ENAME"));     ...     return emp; }, Object...); // select, RowMapper 함수형 인터페이스, ORM(Object Relational Mapping) 오라클 데이터의 한행과 자바의 한 객체와 연결한다, List<Emp>로 반환한다 update jdbcTemplate.update(sql, Object...); // insert, update, delete dao @autowired private DAO dao; Sequence(GeneratedKeyHolder) 사용법 어떤 컬럼이 PK인지 인식을 시켜줘야함 GeneratedKeyHolder kh = new GeneratedKeyHolder(); jdbcTemplate.update((conn)->{     PreparedStatement pstmt;     String sql = "INSERT INTO emp3 (empno,...) VALUES (?,...)";     pstmt = conn.prepareStatement(sql, new String[]{"empno"});     pstmt.setInt(emp.getEmpno());     ...     return pstmt; }, kh); GeneratedKeyHolder 키 값 가져오기 int insertedEmpno = kh.getKey().intValue(); return insertedEmpno;

오류 further occurrences of HTTP request parsing errors will be logged at DEBUG level.

오류 further occurrences of HTTP request parsing errors will be logged at DEBUG level. 해결 function isDeptno(deptno) { console.log(deptno); $.ajax({ url : "emp/deptno", // url : " / emp/deptno", method : "post", data : "", dataType : "json", cache : false, success : function(res) { alert(res.result); return res.result; }, error : function(xhs, status, err) { alert(err); } }); }

pom.xml

<? xml version = "1.0" encoding = "UTF-8" ?> < 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 > < parent > < groupId >org.springframework.boot</ groupId > < artifactId >spring-boot-starter-parent</ artifactId > < version >3.0.6</ version > < relativePath /> <!-- lookup parent from repository --> </ parent > < groupId >com.koreamtc</ groupId > < artifactId >MTC_Homepage</ artifactId > < version >1.1.2</ version > < name >MTC_Homepage</ name > < description >Demo project for Spring Boot</ description > < propertie

Eclipse

최대 라인 수 지정 안하고 ctrl + shift + f 하기 https://stackoverflow.com/questions/3697287/eclipse-set-maximum-line-length-for-auto-formatting

Spring

Spring Database - JDBC - JdbcTemplate - MyBatis - JPA(Java Persistence API) pom.xml <!-- Spring Web --> <dependency>      <groupId>org.springframework.boot</groupId>      <artifactId>spring-boot-starter-web</artifactId> </dependency> 컨트롤러,서비스,다오(DAO)는 반드시 내가 만든 spring 프로젝트 패키지 하위 경로에 작성해 주어야 한다 예) com.ezen.demo라는 패키지로 spring 프로젝트를 생성한 후 이 프로젝트의 컨트롤러, 서비스, 다오를 만든다고 한다면,  com.ezen.demo.controller, com.ezen.demo.service, com.ezen.demo.dao를 경로로 컨트롤러, 서비스, 다오를 만든다. @Controller // 컨트롤러 @Service // 서비스 @Repository // 저장소 @Transactional // 2개 이상의 작업이 동시에 성공일 때 성공 나머지는 실패 MultipartFile[] // 파일 받는 클래스 org.springframework.http.ResponseEntity<Resource> // 파일을 다운로드 할 수 있는 반환타입 ResourceLoader.getResource("WEB-INF/file") // WEB-INF(상대 경로)에 있는 file(리소스)를 가져옴 org.springframework.core.io.Resource jsp 오류 없애는 법 demo 우클릭 -> Build Path -> Configure Build Path -> Project Facets -> Apply -> Dynamic Web Module 2.5를 5.0으로 변경하고 Apply get 방식

명령 프롬프트

포트 확인법 #사용 중인 모드 port 확인 netstat -a #port가 사용중인지 확인 netstat -aon | findstr [port 번호] #port를 사용하고 있는 PID를 통해서 서비스 확인 tasklist | findstr [PID] #서비스 이름을 사용해서 서비스가 사용하는 port 확인 tasklist | findstr [서비스 이름] # taskkill /pid [PID] /f [출처,https://datalibrary.tistory.com/66] 경로 이동 명령 프롬프트 로컬 디스크 이동 C:

jar

압축 jar cvf 파일명.jar 압축할파일 json-simple jstl ojdbc8

JSTL

Servlet에서 사용법 https://mvnrepository.com/artifact/javax.servlet/jstl/1.2 Spring에서 사용법 pom.xml에 추가 <dependency> <groupId>org.glassfish.web</groupId> <artifactId>jakarta.servlet.jsp.jstl</artifactId> <version>2.0.0</version> </dependency>

오라클

맥북 docker login docker search oracle -xe-11g docker pull jaspeen/oracle-xe-11g docker run --name oracle -d -p 8080:8080 -p 1521:1521 jaspeen/oracle-xe-11g docker exec -it oracle sqlplus system oracle SELECT * FROM all_users; CREATE USER SCOTT IDENTIFIED BY TIGER; GRANT CONNECT, resource to SCOTT; the account is locked sqlplus /nolog ALTER USER 계정이름 ACCOUNT UNLOCK; Spring Framework <-> Oracle 1. jdbc 저수준 코드를 사용하는 방법(프로젝트에 jdbc 드라이버 등록) 2. Spring Framework 지원 jdbc 라이브러리 사용 3. 2 + ORM Framework(MyBatis) 4. JPA(Java Persistence API)

Servlet

?? ??? 오류 response.setContentType("application/x-json; charset=UTF-8"); 상대 경로로 절대 경로 구하기 ServletContext.getRealPath("/WEB-INF/files"); // 상대 경로 '/WEB-INF/files'의 절대 경로가 반환된다

수학

조화평균 예를 들어 평점 5점만점에 3.0평점 한명과 4.5평점 한명이 있다고 치자. 그러면 2평점의 평균 평점은 몇점인가? a = (1/3.0) + (1/4.5); // 두 평점의 역을 더한다. b = a/2 // 합한 평점의 역을 총 평점의 수로 나눈다. c = 1/b // 총 평점의 수로 나눈 역인 c가 조화평균이 된다. c = 3.6; // 결국 평균 평점은 3.6점이된다. 최대 공약수 어떤 수를 나눌 수 있는 최고 큰 정수

NeoVim

설치 curl -LO https://github.com/neovim/neovim/releases/download/nightly/nvim-macos.tar.gz tar xzf nvim-macos.tar.gz ./nvim-macos/bin/nvim

JSP

taglib <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@taglib prefix="f" uri="http://java.sun.com/jsp/jstl/functions"%> forEach 문 <c:forEach var="item" value="${list}">${item.value}</c:forEach> <c:forEach varStatus="i" begin="0" end="10">     ${i.index} </c:forEach> if 문 <c:if test="${조건문}"> </c:if> <c:if test="${not empty status}"> </c:if> else if 문 <c:choose>      <c:when test="${조건문}">      </c:when>      <c:otherwise>      </c:otherwise> </c:choose> 문법 == : eq, != : ne, null == : empty null != : not empty 변수 선언 <c:set var="length" value="${f:length(list)}">

JSON

형식 { "key" : "문자열" , "key2": 1 , "key3" : null, "key4" : true } 

AJAX

jQuery 문법 $.ajax({     url:"URL",     method:" get || post",     data:  {"key":"value"} ||  $("#form").serialize(),     cache:true || false,     dataType:"json" || "text",     success:function(res){          alert(res.result);     },     error:function(xhs,status,err){          alert(err);     } }); $.ajax({      url : "/board/upload",      method : "post",      enctype : "multipart/form-data",      data : new FormData($("#uploadForm")[0]),      cache : false,      dataType : "json",      processData : false,      contentType : false,      timeout : 600000,      success : function(res) {           alert(res.result);      },      error : function(xhs, status, err) {           alert(err);      } }); ? 오류 response.setContentType("application/x-json; charset=UTF-8"); $. ajax ({ /* 요청 시작 부분 */ url: url, //주소 data: formData, //전송 데이터 type: "PO

Java

현재 날짜 java.util.Date today = new java.util.Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd,hh:mm:ss"); String date = sdf.format(today); 현재 날짜 한줄로 new SimpleDateFormat("yyyy-MM-dd").format(new Date()); java.util.Date에 java.sql.date저장 java.util.date date = this.rs.getTimestamp("date"); Timestamp timestamp = new Timestamp(System.currentTimeMillis()); 직렬화 설정하기 implement Serializable 객체를 파일에 저장하기 new ObjectOutputStream(new FileOutputStream(new File("D:\document\data.ser"))).writeObject(new Object()); new ObjectOutputStream(/* 생략 */).flush(); // ObjectOutputStream, FileOutputStream은 new 할 때 파일을 생성한다. // Object 객체를 파일에서 불러오기 (Object)new ObjectInputStream(new FileInputStream(new File("D:\document\data.ser"))).readObject(); 람다 표현식 @FunctionalInterface // 함수형 인터페이스 interface Sample {     public abstract int method(int a, int b); } public static void useSample(Sample s, int a, int b) {     System.out.println(s.method(a,b)); useSamp

Java JDBC

Conn Class.forName("oracle.jdbc.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","SCOTT","TIGER"); Statement Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM table"); - executeUpdate(); // 실패일 때 0 한행 추가나 삭제, 수정은 1, 그 이상은 2이상의 숫자 반환 PreparedStatement PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM ?"); pstmt.setString(1,"table"); ResultSet rs = pstmt.excuteQuery(); ResultSet if (rs.next()) }      String s = rs.getString("*"); }

SQL

Table 생성 CREATE TABLE test (     key NUMBER NOT NULL PRIMARY KEY,     value varchar(50) NOT NULL     value2 varchar(50) NOT NULL ); Table 삭제 DROP TABLE test; Table 선택 SELECT * FROM test; Table 요소 삽입 INSERT INTO test(key, value) VALUES (1,'Hello!'); Table 요소 여러개 삽입 INSERT INTO test (key, value) SELECT t.* FROM (        SELECT 1, 'Hello,' FROM DUAL     UNION ALL     SELECT 2, 'World' FROM DUAL      UNION ALL     SELECT 3, '!' FROM DUAL )t; Table 요소 삭제 DELETE FROM test WHERE key=1; Table 요소 전체 삭제 DELETE FROM test; Table 요소 수정 UPDATE test SET value='Hello,', value2='Word!' WHERE key=1; Sequence 생성 CREATE SEQUENCE test_seq; Sequence 삭제 DROP SEQUENCE test_seq; Sequence 사용 SELECT test_seq.NEXTVAL FROM DUAL; Sequence 현재 값 SELECT test_seq.CURRVAL FROM DUAL; Sequence 조회 SELECT * FROM all_sequences WHERE sequence_name = 'test_seq'; Table에 날짜 저장 INSERT INTO test(date) VALUES (SYSDATE); Table에 세부 날짜 저장 INSERT INTO test(date) VALUES (localtimes

웹개발

MVC+S DAO(DataAccessObject) VO(ValueObject) Servlet SVC(Service) View(JSP)

기록

DB에 저장해야 할 데이터 작성자, 작성일, 제목, 내용, 파일명, 파일사이즈 - 글 작성시 첨부파일 없다면? -> 컬럼값이 비어 있게 된다 - 원자성 : 한개의 컬럼에는 한개의 값만 저장해야 한다 board(글번호, 작성자, 작성일, 제목, 내용) attach(글번호, 첨부번호, 파일명, 파일사이즈) 글 한개를 저장할 때 첨부파일이 2개 포함된 경우 board 테이블에 한 행 추가(글 번호1) attach 테이블에 2개 행 추가(글 번호1, attnum(1), attnum(2)) DB Normalization(정규화) - 무결성 확보 제 1 정규형(원자성) // 한 개의 컬럼에는 한 개의 값만 넣는다 제 2 정규형(PK가 다수개의 컬럼을 구성된 경우(복합키)에 적용)     - PK에 모든 다른 속성이 종속되어야 한다     - PK의 일부에 종속되는 경우(부분함수 종속성)가 없어야 한다 제 3 정규형     - PK 외의 속성에 다른 속성이 종속되는 경우 (이행함수 종속성)가 없어야 한다 종속성 : 어떤 속성 'A'를 알면 다른 속성 'B'의 값이 유일하게 정해지는 관계 - 주민번호를 알면 그 사람의 이름은 유일하게 정할 수 있다 - 주번, 이름, 학과, 교수명, 과목 (테이블 내에 서로에 대해 종속성이 없어야 한다) 오라클,MyBatis 패턴검색 - SELECT * FROM emp WHERE ename LIKE '%sm%' // 부분 일치 검색(패턴검색) - SELECT * FROM WHER ename='sm' // 완전 일치 검색 sql 표준 - ename LIKE '%' || #{pattern} || '%'

Javascript

형제 요소 선택 .nextSibling : 다음 형제 마디선택(텍스트 포함) .nextElementSibling : 다음 형제 요소 선택(텍스트는 제외) onload 적용 가능 태그 <body> <frame> <frameset> <iframe> <img> <input type="image"> <link> <script> <style> Date var date = new Date(); date.getFullYear(); // 현재년 date.getMonth(); // 0~11 date.getDate(); // 현재일 Object.valueAsDate = new Date(); // 현재 날짜 value값으로 주기 문자열 길이 String s = "Hello, World!"; console.log(s.length); 태그 숨기기 Object.style.visibility = "hidden"; 시간 지연 setTimeout(function() {}, 0); JSON 만들기 var json = {}; json.key = "value"; alert(JSON.stringify(json)); // 문자열로 변환해서 화면에 표시 대문자 소문자 "hello, world!".toUppserCase(); "hello, world!".toLowerCase(); 무작위 수 생성 Math.random() // 0이상 1미만의 숫자 Math.floor(Math.random()*(max+1-min))+min // min ~ max 반올림, 올림, 내림 Math.round(); // 절반 이상은 무조건 반 올림 Math.ceil(); // 소수점 올림 Math.floor(); // 소수점 버림 Timing Events - setTimeout(function, milliseconds) - se

Blogger

코드 하이라이트 사이트 http://hilite.me/ 코드 <!-- 나만의 공간 --> <style id='daru_css' type='text/css'> .code {      overflow: auto;      height: 200px;      background-color: rgb(239,239,239);      border-radius: 10px;      padding: 5px 10px; } .code::-webkit-scrollbar-thumb {      background-color: grey;      border: 1px solid transparent;      border-radius: 10px;      background-clip: padding-box;   } .code::-webkit-scrollbar {      width: 15px; } </style> <!-- 나만의 공간 -->

IDE

종류 Sublime Text, Xcode, VSCode, Eclipse, Neovim 단축키 설정 문서 서식 지정 : shift+alt+f 다시 들여쓰기 : ctrl+i 제안 항목 트리거(trigger suggest) : ctrl+space, cmd+I 다음 줄 이동 : shift+enter

터미널

포트 확인법 sudo lsof -PiTCP -sTCP:LISTEN // 현재 열려있는 포트 확인 sudo kill -9 PID // PID 번호로 열려있는 포트 닫기 sudo rm -R FILE // FILE을 강제로 삭제

CSS

선택자 자식 선택자 > 부모 선택자 < 형제 선택자 ~ 글자 가로 가운데 정렬 text-align : center; // 문자 가로 중앙 정렬 글자 세로 가운데 정렬 line-height : (부모의 높이); // 문자 세로 가운데 정렬 vertical-align:middle 요소 중앙 정렬 부모 position: relative; 자식 position: absolute; top: 50%; left: 50%; transform: translate(-50%,-50%); 요소 가운데 정렬 margin : auto; 컨텐츠에 맞게 크기 조절 width : fit-content; 왼쪽으로 띄우기 float: left width: 100%; // 부모 넓이의 100% height: 100%; // 부모 높이의 100% width: 100vw; // 현재 창 넓이의 100분의 100 height: 100vh; // 현재 창 높이의 100분의 100 문자가 박스 밖으로 못나가게 하기 word-break: break-alll; Input 박스 선택시에 outline 없애기 input:focus {      outline: none; } Input 박스 선택시 화살표 없애기 input[type="number"]::-webkit-outer-spin-button, input[type="number"]::-webkit-inner-spin-button {      -webkit-appearance:      none;      margin: 0; } border까지 포함해서 크기 고정하기 box-sizing: border-box; p.ex1 {display: none;} p.ex2 {display: inline;} p.ex3 {display: block;} p.ex4 {display: inline-block;}

HTML

  header nav aside section : main article footer // post 방식 enctype="multipart/form-data" // encoding type = text & file / form data input <form enctype="multipart/form-data"> <input type="file" multiple="multiple"> // 다수개의 파일을 올릴 수 있다 <input type="text" disable> // 수정 불가, 폼 전송 불가능 <input type="text" readonly> // 수정 불가, 폼 전송 가능 <input type="date" value=""> // date 기본 값 설정 빈칸 &nbsp; 테두리 포함해서 width, height 크기 정하기 box-sizing: border-box; // 원래는 content-box

jQuery

<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script> ready 함수 $(function(){   // 실행할 기능을 정의해주세요. }); 문법 $("tag") $(".class") $("#id") .prop() .attr() .append() var $div = $("<div></div>"); $("body").append($button); $("#btnUpload").prop("disabled",true); css 스타일 지정 $("p").css("background-color"); $("p").css("background-color","red"); 첫번째 자식 요소 $("#id").children().eq(0); $("img[src='/images/image.jpg']");

Git

git init : git 저장소 생성 git add : git 대기 영역에 변경사항을 추가     파일/경로 : git 대기 영역에 파일이나 경로의 변경사항을 추가     . : git 대기 영역에 현재 경로의 모든 변경사항을 추가     -a : git 대기 영역에 모든 모든 변경사항을 추가     -p : git 대기 영역에 변경사항을 각각 편집 git commit : git 대기 영역의 내용을 git 저장소에 저장      -m "문장" : git 대기 영역의 내용을 git 저장소에 저장하고 문장을 기록 git status : git 저장소의 내용을 확인 git remote : git 원격 저장소 연결     add 이름 주소 : git 원격 저장소의 주소로 연결하고 별칭은 이름으로 설정      -v : git 원격 저장소의 모든 이름과 주소     rename 원래이름 바꿀이름: git 원격 저장소의 원래이름을 바꿀이름으로 변경     rm 이름 : git 원격 저장소 '이름'을 삭제 git push : git 저장소에 있는 내용을 git 원격 저장소에 저장     이름 이름2: git 원격 저장소 '이름'에 분기 '이름2'를 저장 git branch : git 저장소의 분기     -d 이름 : git 저장소의 이름 분기 삭제 git checkout : git 저장소의 분기 변경     -b 이름 : 이름 분기를 생성 후 이름 분기로 이동 git put : git 원격 저장소의 내용을 git 저장소에 저장 git clone : git 원격 저장소의 내용을 저장 git merg : git 저장소의 분기 병합 git fetch : git 원격 저장소의 내용을  git log : git 저장소의 기록     -n 숫자: git 저장소의 기록을 숫자 개 보기 git grep : git 저장소의 내용 검색 git reset : git 저장소의 내용을 초기화 git stash : git 저장소에 임