간단하게 'Hello World'만 return하는 서버를 만들어 두었습니다. Github에서 해당 서버로 자동배포하는 것까지 구성은 못해서 FTP로 일일이 옮겨넣었습니다.
var express = require('express');
var app = express();
var user = require('./routes/user');
const cors = require('cors');
app.use(cors());
app.get('/', function (req, res) { // 기본 root('/') 는 main.js에서 routing
res.send('Hello World');
});
//app.use('/user', user); // 나머지 접근은 router(/routes/user)에서 routing
app.listen(3000, function () { // 3000 포트로 서버 실행
console.log('Example App is listening on port 3000');
});
소스코드에 보시면, 다른 서버로부터의 요청이 허용되도록 app.use(cors())를 선언해줘야합니다.
[[redirects]]
from = "/api/*"
to = "http://1xx.6xx.2xx.2xx:3000/:splat"
status = 200
force = true
oracle 서버에서 cors 허용을 해놓았는데도 원래의 주소로 request를 보내면 오류가 납니다. 이유는 oracle에서는 http로 서비스를 하고 있고, netlify에서는 https로 서비스를 하고 있어서 그렇습니다. oracle에도 https서비스를 위한 인증서를 구해서 넣으면 좋지만, 위와 같이 proxy 우회 방법으로 간단히 두 서버간 통신이 가능합니다.
<?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="org.example.mapper.dbMapper">
<select id="selectAll" resultType="org.example.model.dbModel">
select emp_# as emp_no,
emp_x,
kornm_n,
hannm_n,
engnm_n,
res_#1 as res
from temp a
where a.kornm_n='김동개'
</select>
</mapper>
8. org.example.view > MainView.java 생성
package org.example.view;
import org.example.dto.dbDto;
import org.example.service.DbService;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
publicclassMainViewextendsJFrame{
DbService dbService = new DbService();
JFrame f1 =new JFrame(); // Main Frame
JMenuBar mb = new JMenuBar(); // 메뉴바
JPanel sidePanel = new JPanel(); // 사이드 패널
JPanel contentPanel = new JPanel(); // 컨텐츠 패널
JPanel footerPanel = new JPanel(); // 푸터 패널
JButton jb1 = new JButton("search"); // 버튼 초기화
JButton jb2 = new JButton("insert"); // 버튼 초기화
JButton jb3 = new JButton("delete"); // 버튼 초기화// JTable data_table = new JTable(); //테이블 생성시에는 초기값과 헤더를 넣어줘야한다. // 이 작업은 초기 화면 생성하는 함수에 넣어주기 위해, 아래와 같이 null로 우선 생성한다.
JTable data_table = null;
publicvoidset_style(Component target){
// 스타일 적용(Look & Feel)try{
UIManager.setLookAndFeel ("com.birosoft.liquid.LiquidLookAndFeel"); //Liquid
}catch(Exception e){
System.out.println(e + "오류 발생");
}
SwingUtilities.updateComponentTreeUI(target) ;
}
publicvoidcreateFrame(){
// Main Frame 세팅
f1.setSize(1024,760);//크기
f1.setDefaultCloseOperation(f1.EXIT_ON_CLOSE);
f1.setLocationRelativeTo(null);
// 스타일 적용
f1.setDefaultLookAndFeelDecorated(true);
set_style(f1);
// 아이콘 적용
Image icon = Toolkit.getDefaultToolkit().getImage("D:\\7_System_dev2\\4_Java\\01_gui\\src\\icon.png");
f1.setIconImage(icon);
// 레이아웃 적용
BorderLayout bl = new BorderLayout();
f1.setLayout(bl);
// 화면 요소 생성 및 추가
createMenu();
createSidePanel();
createContentPanel();
createFooter();
f1.add(mb, BorderLayout.NORTH);
f1.add(sidePanel, BorderLayout.WEST); // f1라는 프레임에 sidePanel추가
f1.add(contentPanel, BorderLayout.CENTER); // f1라는 프레임에 contentPanel추가
f1.add(footerPanel, BorderLayout.SOUTH); // f1라는 프레임에 FooterPanel추가
f1.setTitle("Frame Test");//제목
f1.setVisible(true);//생성
}
// 메뉴바publicvoidcreateMenu(){
JMenu fileMenu = new JMenu("File");
fileMenu.add(new JMenuItem("New"));
fileMenu.add(new JMenuItem("Open"));
fileMenu.add(new JMenuItem("Preferences"));
mb.add(fileMenu);
mb.add(new JMenu("Edit"));
mb.add(new JMenu("About"));
mb.add(new JMenu("Help"));
setJMenuBar(mb);
}
// 사이드 패널publicvoidcreateSidePanel(){
sidePanel.setPreferredSize(new Dimension(100, 300)); // 사이드패널 사이즈 조절
sidePanel.setBorder(BorderFactory.createEmptyBorder(15 , 10, 10 , 10));
// sidePanel.setLayout(new BoxLayout(sidePanel, BoxLayout.Y_AXIS));
sidePanel.add(jb1);
sidePanel.add(jb2);
sidePanel.add(jb3);
set_style(sidePanel);
jb1.addActionListener(new ActionListener() {
@OverridepublicvoidactionPerformed(ActionEvent e){
data_mapping();
// 패널 갱신
contentPanel.revalidate();
contentPanel.repaint();
}
});
}
// Contents 패널publicvoidcreateContentPanel(){
contentPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
JLabel Headline = new JLabel("Swing Table Data with Styles");
Font f = new Font("고딕", Font.BOLD,20);
Headline.setFont(f);
contentPanel.add(Headline);
// 테이블 준비
String[] header = {"EMP No", "Name"};
String[][] contents = {{"",""},{"",""},{"",""}};
data_table = new JTable(contents, header);
Font font = new Font("고딕", Font.PLAIN,12);
data_table.setFont(font);
contentPanel.add(new JScrollPane(data_table), BorderLayout.CENTER);
// JScrollPane(data_table)에 넣어주지 않으면 header가 나타나지 않는다.
set_style(contentPanel);
}
// FooterpublicvoidcreateFooter(){
footerPanel.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
footerPanel.setBackground(Color.orange);
JLabel Footer = new JLabel("Copyright by Wilkyway");
footerPanel.add(Footer);
// set_style(footerPanel);
}
publicvoiddata_mapping(){
List<dbDto> models = dbService.selectAll();
int i=0;
for (dbDto model : models) {
System.out.println("ID: " + model.emp_no() + ", Name: " + model.kornm_n());
data_table.setValueAt(model.emp_no(),i,0);
data_table.setValueAt(model.kornm_n(),i,1);
i++;
}
}
}
/**
* Implement Gatsby's Browser APIs in this file.
*
* See: https://www.gatsbyjs.com/docs/reference/config-files/gatsby-browser/
*/// You can delete this file if you're not using itimport"./src/tailwind.css";
7. PurgeCSS 설정(Optional but Recommended for Production)