반응형
반응형

📝노드

정보를 송수신할 수 있는 네트워크내에 있는 물리적장치나 데이터 지점을 의미한다

→ 모뎀 스위치 허브 서버 프린터 컴퓨터 등...

 

📝ECM (기업 콘텐츠 관리)

기업 콘텐츠 관리로 조직 내의 처리 업무에 관한 콘텐츠나 문서를 보관, 전달, 관리한다

 

📝ERP (기업 자원 관리)

실시간 회사 정보 공유함으로 빠르고 정확하고 투명하게 업무처리 가능해주는 프로그램

→ 돈의 흐름과 재고 사항 등 최적을 파악 할 수 있다

 

📝HRM (인사 관리 시스템)

기업 소속직원에 대한 관리와 새 인재를 채용하는 업무

 

📝DW (데이터 웨어하우스)

사용자의 의사 결정에 도움을 주기 위하여 기간시스템의 데이터베이스에 축적된 데이터를 공통의 형식으로 변환해서

관리하는 데이터베이스 즉, 축적된 데이터들의 통계로 어떤 식으로 운영해야할지 정보를 준다.

 

📝CRM (고객 관계 관리)

소비자들을 자신의 고객으로 만들고 이를 장기간 유지하고자 하는 경영방식이며 기업들이 고객과의 관계를 관리, 고객 확보, 그리고 고객, 판매인, 협력자와 내부 정보를 분석

 

📝MIS (경영 정보 시스템)

기업의 전반적인 정보 시스템을 통칭하는 용어로 ERP, HRM, DW, CRM과 같은 것들을 포괄하는 말

반응형
반응형

📝API 생성 팁

  • 에러 발생시 어떤 식으로 데이터를 내려줄 지 미리 설계를 해야한다
  • CRUD에 맞는 HTTP 통신 방식을 설정해야한다 (POST, GET, DELETE, PUT)
반응형
반응형

 

📝로그 찍을 때 필요한 내용 팁

  1. Running Time (예) HTTP 통신시 통신 전 후의 Loose Time
  2. 시각 (처리된 시각)
  3. 내가 만든 API를 호출하는 API의 URI
  4. 중간 중요 내용(내용이 너무 길면 필요한 포인트만 출력)
  5. 에러 메세지 ( HTTP 통신 실패 코드 등... 예외 처리 중요)

 

// 로그 시각
Date today = new Date();
SimpleDateFormat todayDate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String getMembmerQuery = "select * from member where id='1'"

"["+ todayDate + "] " + "get_member_query : " + getMemberQuery
예시) [2022-07-17 12:43:22] get_member_query : select * from member where id='1'
반응형
반응형

📝Tomcat web.xml vs Project web.xml

Tomcat web.xml은 프로젝트의 web.xml보다 좀더 상위로서 Tomcat의 web.xml이 먼저 적용 되고 프로젝트의 web.xml이 추후에 적용된다

 

📝콜백 지옥

$.get('url', function(response) {
	parseValue(response, function(id) {
		auth(id, function(result) {
			display(result, function(text) {
				console.log(text);
			});
		});
	});
});

웹 서비스를 개발하다 보면 서버에서 데이터를 받아와 화면에 표시하기까지 인코딩, 사용자 인증 등을 처리해야 하는 경우가 많다 만약 이 모든 과정을 비동기로 처리해야 한다고 하면 위와 같이 콜백 안에 콜백을 계속 무는 형식으로 코딩을 하게 되는데.. 이러한 코드 구조는 가독성도 떨어지고 로직을 변경하기도 어렵다!! 

 

function parseValueDone(id) {
	auth(id, authDone);
}
function authDone(result) {
	display(result, displayDone);
}
function displayDone(text) {
	console.log(text);
}
$.get('url', function(response) {
	parseValue(response, parseValueDone);
});

이런식으로 변경하면 콜백 지옥을 해결할 수 있다.

 

  1. ajax 통신으로 받은 데이터를 이용해 parseValue() 메서드를 실행
  2. response가 id가 전달되고 auth() 메서드가 실행
  3. auth() 메서드로 인증을 거치고 나면 콜백 함수 authDone()이 실행
  4. 인증 결과 값인 result로 display()를 호출하면 마지막으로 displayDone() 메서드가 수행되면서 text가 콘솔에 출력

 

🔗 참고 및 출처

https://dkwjdi.tistory.com/143

 

CallBack 함수란?

우선 간단하게 설명해보자면 전자레인지에 핫바를 돌린다고 해보자. 대부분은 전자레인지에 핫바를 넣어넣고 다른일을 하다가 전자레인지가 시간이 다되면 띵 하는 소리를 듣고 핫바를 꺼낼것

dkwjdi.tistory.com

 

반응형
반응형

📝Block

다른 곳에 작업이 끝날때까지 기다린다 제어권 없음

 

📝Non-block

다른 곳에 작업을 신경 안 쓰고 작업한다 제어권 존재

 

📝Sync

결과가 중요하다 그래서 나온 결과를 통해 작업을 처리한다 → A 함수에서 B 함수를 호출 시 B 함수 결과를 A 함수가 처리하는 것

 

📝Async

결과는 안 중요하다 결과를 통해 처리할 수도 안 할 수도 있다A 함수에서 B 함수를 호출 시 B 함수 결과를 A 함수가 처리하는 것

 

📝Sync Blocking 

결과가 중요하며 제어권이 없기 때문에 결과를 받을 때까지 기다리는 상태이다 → I

nput으로 입력 받을 때 기다린다

 

📝Sync Non Blocking

결과가 중요한데 다른 곳 작업은 신경 안 쓰고 자기 작업을 한다

→ 게임에서 맵을 이동할 때  프로그레스바로 상태를 보여주고 결과를 계속 체크해 결과가 나온 경우 맵을 보여준다

 

📝Async Blocking

결과에 관심 없는데 계속 기다린다쓰잘데기 없는 짓

 

📝Async Non Blocking

결과가 나올 때까지 다른 일을 할 수 있다 자바스크립트 Ajax API 요청

 

 

🔗 참고 및 출처

https://jh-7.tistory.com/25

 

Blocking, Non-blocking, Sync, Async 의 차이

들어가며 전 회사에서 한 선배님이 질문을 했다. Blocking 과 Non-blocking, Sync 와 Async 의 차이를 설명할 수 있냐고. 어 음... 하는 사이 선배님이 다시 말을 했다. 그 둘을 설마 같은거라고 이해하고 계

jh-7.tistory.com

 

반응형
반응형

📝콜백 = 콜백 함수

다른 함수의 인자로써 이용되는 함수

function printANumber(int number, function callbackFunction) {
    print("The number you provided is: " + number);
}
출처: https://satisfactoryplace.tistory.com/18 [만족:티스토리]

 

📝리스너 = 핸들러

리스너 또는 핸들러는 특정 이벤트가 발생했을 때 실행되는 함수

 

📝이벤트

이벤트는 시스템 내에서 발생하는 사건 또는 상황을 나타냅니다

사용자의 입력, 네트워크 활동, 타이머 등 다양한 상황이 이벤트로 간주될 수 있습니다

 

📝이벤트 리스너 = 이벤트 핸들러

특정 이벤트가 발생했을 때 해당 이벤트를 감지하고 설정된 콜백 함수나 핸들러를 호출하는 역할

 

<!-- HTML -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <script>
      const getCandy = () => {
        console.log("borrow candy...");
        return "four candy";
      };
    </script>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=self-desktop, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>HTML + CSS</title>
    <link rel="stylesheet" href="styles.css" />
  </head>
  <body>
    <input type="checkbox" onChange="getCandy()" />
  </body>
</html>

위는 HTML 이벤트에 직접 함수를 할당하는 방식으로 onChange와 같은 이벤트를 넣는 곳에는 "함수()" 이런식으로 사용해야합니다

 

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="src/style.css">
  </head>
  <script>
    function say () {
      console.log("hello");  
    }
    
    // document.addEventListener('DOMContentLoaded', function() {
    //   document.querySelector('button').addEventListener('click', say);
    // });

    document.querySelector('button').addEventListener('click', (event) => {
      console.log(event);
      say();
    });
  </script>
  <body>
      <button >Click me</button>   
  </body>
</html>

위는 eventListener를 사용하는 방식으로 참조값을 넣거나 익명함수를 만들어서 사용할 수 있습니다 

 

결론적으로 HTML태그에서 사용하는 경우는 직접 함수를 실행시키도록 "함수()" 이렇게 사용해야하며 eventListener를 이용하는 경우 함수에 대한 정의가 들어가야하는 참조값이나 익명함수를 넣어야합니다

 

참고로 React의 경우 동작방식이 HTML하고 사용방식이 좀 다릅니다

 

반응형
반응형

 

 

📝 Controller

package com.lsj.spring_study;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;

/**
 * Handles requests for the application home page.
 */
@Controller
public class PdfController {
	
	/**
	 * @why : 자바로 pdf 파일 생성
	 */
	@RequestMapping(value = "pdf", method = RequestMethod.PUT)
	public void makePdfFile() throws DocumentException, IOException {
		

		String filePath = "C://test.pdf";
		String contents = "자바로 pdf 파일 생성";
		
	    Document document = new Document();
	    PdfWriter.getInstance(document, new FileOutputStream(filePath));

	    document.open();
	    
	    /** 표 그리기 **/ 
//	     PdfPTable table = new PdfPTable(4); 
//	     for(int i = 0; i < 16; i++){
//	      	table.addCell("cellNumber:" + i); 
//	    }

	    /** 글자 넣기 (WEB-INF/classes/font에 폰트를 넣어주세요 (참고 : 한글이 안 나오는 글씨체도 있음) **/ 
	    // C:\Windows\Fonts\휴먼매직체 보통(HMKMMAG.TFF 파일 사용)
	    BaseFont bfKorean = BaseFont.createFont("font/HMKMMAG.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
	    
	    Font FontKorean = new Font(bfKorean, 10, Font.NORMAL);
	    document.add(new Paragraph(contents, FontKorean));
	    document.close();
		
	}
	
	/**
	 * @why : pdf 파일 다운로드
	 */
    @RequestMapping(value = "/download/pdf", method = RequestMethod.GET)
    public void downloadPdf(HttpServletResponse response) throws IOException {
    	
    	FileInputStream fis = null;
    	BufferedOutputStream bos = null;
    	
    	String pdfFileName = "C:/test.pdf";
    	
    	try {

    		/** Pdf Open **/
	    	File pdfFile = new File(pdfFileName);
	    	fis = new FileInputStream(pdfFile);

	    	/** Header 설정 (Download) **/
	    	response.addHeader("Content-Disposition", "attachment; filename=" + pdfFile.getName() + ".pdf");
	    	
	    	/** Pdf 내용을 Read [버퍼에 담기] **/
	    	int size = fis.available(); 
	    	byte[] buf = new byte[size]; 
	    	int readCount = fis.read(buf);
	    	
	    	/** 버퍼에 담은 내용 웹에 출력 **/
	    	response.flushBuffer();

	    	bos = new BufferedOutputStream(response.getOutputStream());
	    	bos.write(buf, 0, readCount);
	    	bos.flush();
	
    	} catch(Exception e) {

    		e.printStackTrace();

    	} finally {

	    	if (fis != null) fis.close();
	    	if (bos != null) bos.close();

    	}
    }


	/**
	 * @why : pdf 파일 웹에 띄우기
	 */
    @RequestMapping(value = "pdf", method = RequestMethod.GET)
    public void readPdf(HttpServletResponse response) throws IOException {
    	
    	FileInputStream fis = null;
    	BufferedOutputStream bos = null;
    	
    	String pdfFileName = "C:/test.pdf";
    	
    	try {

    		/** Pdf Open **/
	    	File pdfFile = new File(pdfFileName);
	    	fis = new FileInputStream(pdfFile);

	    	/** Content Type 설정 **/
	    	response.setContentType("application/pdf");

	    	/** Pdf 내용을 Read [버퍼에 담기] **/
	    	int size = fis.available(); 
	    	byte[] buf = new byte[size]; 
	    	int readCount = fis.read(buf);
	    	
	    	/** 버퍼에 담은 내용 웹에 출력 **/
	    	response.flushBuffer();

	    	bos = new BufferedOutputStream(response.getOutputStream());
	    	bos.write(buf, 0, readCount);
	    	bos.flush();
	
    	} catch(Exception e) {

    		e.printStackTrace();

    	} finally {

	    	if (fis != null) fis.close();
	    	if (bos != null) bos.close();

    	}
    }
    
    
	/**
	 * @why : pdf 파일 웹에 띄우기
	 */
    @RequestMapping(value = "board", method = RequestMethod.GET)
    public String pdf() {
    	
    	return "board";
    }
}

 

 

📝 Maven

<!-- make pdf lib -->
<dependencies>
    <dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.4.2</version>
    </dependency>
    <dependency>
        <groupId>com.itextpdf.tool</groupId>
        <artifactId>xmlworker</artifactId>
        <version>5.5.7</version>
</dependency>

 

📝 View

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>

<body>
<h1> 웹화면에 PDF 출력해보기 </h1>
<embed src="/pdf" type="application/pdf" width=1500px height=1500px/>
</body>
</html>

 

 

📝 출력 화면

 

🔗 참고 및 출처

https://blog.naver.com/onandme/220529022550

https://lee-mandu.tistory.com/87

반응형
반응형
    File file = new File("D:\\contents.txt");
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

    String line = null;

    while (true) {
        if ((line = br.readLine()) != null) content += line + "\n";
        else break;
    }

    br.close();

파일 읽기

 

OutputStream output = new FileOutputStream("D://filePathList.txt");
byte[] contentByte = allPath.getBytes();
output.write(contentByte);

output.close();

파일 쓰기

 

 

반응형
반응형

-- 뷰 테이블 생성
CREATE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건

-- 뷰 테이블 삭제
DROP VIEW [table name]

-- 뷰 테이블 생성 및 수정
CREATE OR REPLACE VIEW 뷰이름 AS
SELECT 필드이름1, 필드이름2, ...
FROM 테이블이름
WHERE 조건

 

반응형