기본 콘텐츠로 건너뛰기

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로 찾을 때 이 속성으로 찾게 된다   ...

오류 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 ...

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 ...

오류 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를...

명령 프롬프트

포트 확인법 #사용 중인 모드 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);      },      erro...

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에 세부 날짜 저장 INS...

웹개발

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 저장소의 기록   ...