웹소켓 연결 테스트 소스

1. pom.xml 에 웹소캣 관련 라이브러리 추가

<!--  웹소캣 관련 내용 -->
		<!-- Spring WebSocket 의존성 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-websocket</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>
		
		<!-- Spring Messaging 의존성 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-messaging</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>
		
		<!-- (선택 사항) STOMP 프로토콜 지원을 위한 의존성 -->
		<dependency>
		    <groupId>org.springframework</groupId>
		    <artifactId>spring-messaging</artifactId>
		    <version>${org.springframework-version}</version>
		</dependency>

2. servlet-context.xml 관련내용 추가 

<beans:beans xmlns="http://www.springframework.org/schema/mvc"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:task="http://www.springframework.org/schema/task"
	xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:websocket="http://www.springframework.org/schema/websocket"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/websocket http://www.springframework.org/schema/websocket/spring-websocket.xsd"
	>


<context:component-scan base-package="com.soft.websocket" />
	
	<websocket:handlers>
        <websocket:mapping path="/testwebsockethandler01" handler="WebSocketHandler01"/>
    </websocket:handlers>
    
    <!-- WebSocket 핸들러 Bean 등록 -->
    <beans:bean id="WebSocketHandler01" class="com.soft.websocket.Test_webSocketHandler"/>
	<!-- 스케쥴러파일이 존재하는 패키지 설정 -->

xmlns:websocket="http://www.springframework.org/schema/websocket" 웹소캣 관련 추가 잊지 말 것

3. 자바파일 추가하기 

package com.soft.websocket;

import org.springframework.web.socket.handler.TextWebSocketHandler;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketSession;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class Test_webSocketHandler extends TextWebSocketHandler {

    private final List<WebSocketSession> sessions = new ArrayList<>();
    private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
    private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public Test_webSocketHandler() {
        startMessageSender();
    }

    private void startMessageSender() {
        scheduler.scheduleAtFixedRate(() -> {
            String currentTime = LocalDateTime.now().format(formatter);
            String message = "서버 시간: " + currentTime;

            synchronized (sessions) {
                for (WebSocketSession session : sessions) {
                    if (session.isOpen()) {
                        try {
                            session.sendMessage(new TextMessage("서버에서 보내는 10초마다의 메시지: " + message));
                        } catch (Exception e) {
                            System.err.println("메시지 전송 오류: " + e.getMessage());
                        }
                    }
                }
            }
        }, 0, 3, TimeUnit.SECONDS);
    }

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        synchronized (sessions) {
            sessions.add(session);
        }
        System.out.println("새로운 WebSocket 연결: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        String payload = message.getPayload();
        System.out.println("수신된 메시지: " + payload);
        /*
        synchronized (sessions) {
            for (WebSocketSession webSocketSession : sessions) {
                if (webSocketSession.isOpen()) {
                    webSocketSession.sendMessage(new TextMessage("서버로부터의 응답: " + payload));
                }
            }
        }
        */
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        synchronized (sessions) {
            sessions.remove(session);
        }
        System.out.println("WebSocket 연결 종료: " + session.getId());
    }

    @Override
    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
        System.err.println("WebSocket 오류: " + exception.getMessage());
    }

    public void destroy() {
        scheduler.shutdown();
        try {
            if (!scheduler.awaitTermination(5, TimeUnit.SECONDS)) {
                scheduler.shutdownNow();
            }
        } catch (InterruptedException e) {
            scheduler.shutdownNow();
        }
    }
}

4. JSP파일에서 자바스크립트로 호출해서 연결 잘되었는지 확인하기 

<script>
	const host = window.location.host;  // 현재 웹 페이지의 호스트 정보 가져오기
	const protocol = window.location.protocol === 'https:' ? 'wss://' : 'ws://'; // 현재 페이지가 HTTPS라면 wss 사용, 아니면 ws 사용
	const socket = new WebSocket(`${protocol}${host}/testwebsockethandler01`);
	//const socket = new WebSocket('ws://localhost:8080/jspculturedepot/testwebsockethandler01');
	const browserInfo = navigator.userAgent;
	socket.onopen = function() {
	    console.log('웹소켓 연결이 열렸습니다.');
	    socket.send('안녕하세요 서버!');
	    socket.send('나의정보 브라우저정보 : '+browserInfo);
	};
	
	socket.onmessage = function(event) {
	    console.log('서버로부터 메시지:', event.data);
	    //alert('서버로부터 받은 메시지: ' + event.data); // 메시지를 alert 창으로 띄우기
	    socket.send('잘받은 브라우저정보 : '+browserInfo);
	};
	
	socket.onclose = function() {
	    console.log('웹소켓 연결이 닫혔습니다.');
	};
	
	socket.onerror = function(error) {
	    console.error('웹소켓 오류:', error);
};
</script>

호출 주소를 보면 알겠지만 XML에 추가한 

<websocket:handlers>
        <websocket:mapping path="/testwebsockethandler01" handler="WebSocketHandler01"/>
    </websocket:handlers>

이 부분이 PATH로 호출합니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

HWP파일로 데이터를 다운로드 받고 싶어 하는 고객분이 계셔서

인터넷으로 관련 자료를 검색해보니 누군가 오픈소스로 공개해 놓았다. 

hwplib

https://github.com/neolord0/hwplib

 

GitHub - neolord0/hwplib: hwp library for java

hwp library for java. Contribute to neolord0/hwplib development by creating an account on GitHub.

github.com

인데 이것을 활용해서 테스트로만 만들어 본다. 

		<dependency>
		    <groupId>kr.dogfoot</groupId>
		    <artifactId>hwplib</artifactId>
		    <version>1.1.6</version>
		</dependency>

메이븐을 추가한다.

컨트롤러 소스 부분은 아래와 같다. 

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import kr.dogfoot.hwplib.object.HWPFile;
import kr.dogfoot.hwplib.object.bodytext.Section;
import kr.dogfoot.hwplib.object.bodytext.paragraph.Paragraph;
import kr.dogfoot.hwplib.tool.blankfilemaker.BlankFileMaker;
import kr.dogfoot.hwplib.writer.HWPWriter;
/**
 * Handles requests for the application home page.
 */
@Controller
@RequestMapping("/hwp")
public class Hwp_Controller {

	 
		@RequestMapping(value = { "/", "/download" }, method = { RequestMethod.GET, RequestMethod.POST})
	    public ResponseEntity<InputStreamResource> downloadHwpFile() {
	        try {
	            //HWPFile hwpFile = new HWPFile();
	            HWPFile hwpFile = BlankFileMaker.make( );


	            Section s = hwpFile.getBodyText( ).getSectionList( ).get( 0 );
				Paragraph firstParagraph = s.getParagraph( 0 );
				firstParagraph.getText( ).addString( "안녕하세요." );

	            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
	            HWPWriter.toStream(hwpFile, byteArrayOutputStream);
	            byte[] hwpBytes = byteArrayOutputStream.toByteArray();

	            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(hwpBytes);
	            InputStreamResource inputStreamResource = new InputStreamResource(byteArrayInputStream);

	            HttpHeaders headers = new HttpHeaders();
	            headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=hwpFile.hwp");

	            return ResponseEntity.ok()
	                    .headers(headers)
	                    .contentLength(hwpBytes.length)
	                    .contentType(MediaType.APPLICATION_OCTET_STREAM)
	                    .body(inputStreamResource);
	        } catch (Exception e) {
	            e.printStackTrace();
	            return ResponseEntity.status(500).build();
	        }
	    }
	
}

HWP파일이 생성되어 다운로드 되는것을 확인할수 있다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

찐 내 돈내산리뷰 순수발효효소 유니다효소

미미 멜팅 엔자임 효소

며칠 전 속이 더부룩하고 소화가 안돼서 힘들었는데
와이프가 먹어봐라고 1포를 줘서 먹게되었어요. 

먹어보니 이거 물건이더라구요.. 

와이프는 평소 유산균을 챙겨먹어도 변비끼가 있어서 먹게 되었는데 변비도 해결되고 소화효소가 있어 평소 있던 속 쓰림 같은 것도 없고 너무 좋다고 하네요.

 저도 더부룩한 게 없어지고 속이 많이 편안해져서 자꾸 챙겨 먹게 되네요. 

역가수치가 높은 데다가 간편 섭취를 할 수 있어 시간이 없는 바쁜 맞벌이부부에게 딱인 것 같아요
맛도 부드러우면서 새콤달콤 맛있고 물 없이도 먹기 좋았어요 지인들한테도 추천해주고 있습니다^^

보관방법 및 소비기한
알맹이
효소 포장
간단한 효소 소개

 

효소 붙는 모습

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

전자정부프레임워크 멀티 DB 문자 관련 2개 DB사용하기

전자 정부 프레임워크에 DB를 추가해서 특정 게시판에 특정 시설선택으로 글 작성 시 담당자에게 문자 발송요청건이 생겼네요. 

메인 db를 티베로를 사용하고 있는데 문자 발송은 mysql이라 부랴부랴 하게 되었어요. 

일단 전자정부프레임워크 db2개 관련으로 검색을 하였는데요.

https://www.egovframe.go.kr/home/sub.do?menuNo=37#

 

실행환경 - 예제 다운로드 | 표준프레임워크 포털 eGovFrame

처리중입니다. 잠시만 기다려주십시오.

www.egovframe.go.kr

여기를 안내해주고 예제 소스도 보여주었어요. 

db설정을 3개의 파일로 나누어서 설정을 해주는 소스였는데 저는 2곳으로 나누어서 설정을 하였네요. 

context-datasource.xml,context-mybatis.xml,context-transaction.xml중에서
context-datasource.xml,context-transaction.xml 에만 설정을 했어요.
 
기전전자정부프레임워크는 /src/main/resources/egovframework/egovProps/globals.properties 여기에 db정보를 저장해놓고 사용하던데 그렇게 하지 않고 따로 추가했어요. 

context-datasource.xml에 추가한 내용은 

	<!-- SMS DB 설정  -->
	<beans>   	
	<bean id="dataSource2" class="org.apache.commons.dbcp2.BasicDataSource">	
		<property name="driverClassName" value="net.sf.log4jdbc.DriverSpy"></property>
		<property name="url" value="주소"></property>
		<property name="username" value="아디"></property>
		<property name="password" value="비번"></property>
		<property name="initialSize" value="10" />
        <property name="maxTotal" value="100" />
        <property name="maxIdle" value="100" />
        <property name="minIdle" value="10" />
        <property name="maxWaitMillis" value="5000" />
	</bean>
	
	<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">		
		<property name="dataSource" ref="dataSource2" />
		<property name="configLocation" value="classpath:/egovframework/mapper/config/mapper-config.xml" />		
		<property name="mapperLocations" value="classpath:/egovframework/mapper/first/**/*Mapper.xml"></property>
		                                                                   				
	</bean>

	<bean id="transactionManager2"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource" ref="dataSource2"></property>
	</bean>	
	<bean id="sqlSession2" class="org.mybatis.spring.SqlSessionTemplate"
		destroy-method="clearCache">
		<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory2"></constructor-arg>
	</bean>
	
	</beans>

간단히 db를 추가해주었구요.. aop관련설정으로 

context-transaction.xml  아래와 같이 수정해 주었어요. 

	<tx:annotation-driven transaction-manager="transactionManager2"/>

이렇게 하고 나니 별문제 없이 프로젝트가 실행이 되었어요.  이제 서비스를 만들어 볼게요. 

일단 commondata클래스를 만들고요.

import java.util.LinkedHashMap;

public class CommonData extends LinkedHashMap {
	public void put(String key, Object value){
		super.put(key, value);
	}

	public String get(String key) {
		if(super.get(key)!=null)
		{
			return super.get(key).toString();
		}
		else
		{
			return null;
		}		
	}
	
	public Object getObj(String key) {
		return super.get(key);
	}
}

이걸 기반으로 하는 commonDAO

import java.util.List;
import java.util.Map;

import 삭제.CommonData;


public interface commonDAO {  
  public List<Map<String, Object>> selectlist(CommonData in_data , String sql_id) throws Exception;
  public CommonData select(CommonData in_data , String sql_id) throws Exception;
  public int listSearchCount(CommonData in_data , String sql_id) throws Exception;
  public int insert(CommonData in_data , String sql_id) throws Exception ;
  public int update(CommonData in_data , String sql_id) throws Exception;
  public int delete(CommonData in_data , String sql_id) throws Exception; 
  public CommonData selectone(CommonData in_data , String sql_id) throws Exception;
  public String selectstr(CommonData in_data , String sql_id) throws Exception;
  public Long selectLong(CommonData in_data , String sql_id) throws Exception;
  
}

 

 crssms_commonDAOImpl 내용인데요. 

import java.util.List;
import java.util.Map;

import javax.annotation.Resource;
import javax.inject.Inject;

import org.apache.ibatis.session.SqlSession;
import org.springframework.stereotype.Repository;

import 삭제.CommonData;


@Repository
public class crssms_commonDAOImpl  implements commonDAO
{
	@Inject
	@Resource(name="sqlSession2")
	private SqlSession session;
	private String namespace = "";
	@Override
	public int insert(CommonData in_data , String sql_id) throws Exception {
	    return session.insert(namespace + sql_id, in_data);
	}
	@Override
	public int update(CommonData in_data , String sql_id) throws Exception {
		return session.update(namespace + sql_id, in_data);
	}
	@Override
	public int delete(CommonData in_data , String sql_id) throws Exception {
		return session.update(namespace + sql_id, in_data);
	}
	@Override
	public int listSearchCount(CommonData in_data, String sql_id) throws Exception {
		// TODO Auto-generated method stub
	    return session.selectOne(namespace + sql_id, in_data);
	}
	@Override
	public CommonData selectone(CommonData in_data, String sql_id) throws Exception {
		// TODO Auto-generated method stub
		return session.selectOne(namespace + sql_id, in_data);
	}
	@Override
	public String selectstr(CommonData in_data, String sql_id) throws Exception {
		// TODO Auto-generated method stub
		return session.selectOne(namespace + sql_id, in_data);
	}
	@Override
	public List<Map<String, Object>> selectlist(CommonData in_data, String sql_id) throws Exception {
		return session.selectList(namespace + sql_id, in_data);
	}
	@Override
	public CommonData select(CommonData in_data, String sql_id) throws Exception {
		// TODO Auto-generated method stub
		return (CommonData) session.selectList(namespace + sql_id, in_data);
	}
	@Override
	public Long selectLong(CommonData in_data, String sql_id) throws Exception {
		// TODO Auto-generated method stub
	    return session.selectOne(namespace + sql_id, in_data);
	}
	
}

common_Service 내용인데요.

import java.util.List;
import java.util.Map;

import 삭제.CommonData;





public interface common_Service {
	  public List<Map<String, Object>> selectlist(CommonData in_data , String sql_id) throws Exception;
	  public CommonData select(CommonData in_data , String sql_id) throws Exception;
	  public int listSearchCount(CommonData in_data , String sql_id) throws Exception;
	  public int insert(CommonData in_data , String sql_id) throws Exception ;
	  public int update(CommonData in_data , String sql_id) throws Exception;
	  public int delete(CommonData in_data , String sql_id) throws Exception; 
	  public CommonData selectone(CommonData in_data , String sql_id) throws Exception;
	  public String selectstr(CommonData in_data , String sql_id) throws Exception;
	  public Long selectLong(CommonData in_data, String sql_id) throws Exception;	
}

Crssms_ServiceImpl 내용인데요

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import 삭제.CommonData;
import 삭제.persistence.crssms_commonDAOImpl;





@Service
public class Crssms_ServiceImpl implements common_Service {
	
	@Autowired 
	private crssms_commonDAOImpl dao;	
	
	@Override
	public List<Map<String, Object>> selectlist(CommonData in_data, String sql_id) throws Exception {
	
		return dao.selectlist(in_data, sql_id);
	}

	@Override
	public CommonData select(CommonData in_data, String sql_id) throws Exception {
	
		return dao.select(in_data, sql_id);
	}

	@Override
	public int listSearchCount(CommonData in_data, String sql_id) throws Exception {
	
		return dao.listSearchCount(in_data, sql_id);
	}
	@Override
	public int insert(CommonData in_data, String sql_id) throws Exception {
	
		return dao.insert(in_data, sql_id);		
	}

	@Override
	public int update(CommonData in_data, String sql_id) throws Exception {
	
		return dao.update(in_data, sql_id);
	}

	@Override
	public int delete(CommonData in_data, String sql_id) throws Exception {
	
		return dao.delete(in_data, sql_id);
	}

	@Override
	public CommonData selectone(CommonData in_data, String sql_id) throws Exception {
	
		return dao.selectone(in_data, sql_id);
	}

	@Override
	public String selectstr(CommonData in_data, String sql_id) throws Exception {
	
		return dao.selectstr(in_data, sql_id);
	}
	@Override
	public Long selectLong(CommonData in_data, String sql_id) throws Exception {
	
		return dao.selectLong(in_data, sql_id);
	}

}

이렇고 추가한 mybatis파일은 

<?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="Common_Mapper">
   
	
	<!-- 문자발송 관련 공통 쿼리 처리 기존 쿼리 및 경로 모두 수정할것!! -->
	<insert id="SDK_SMS_SEND">
				INSERT INTO SDK_SMS_SEND (USER_ID, SCHEDULE_TYPE, SUBJECT, SMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_COUNT, DEST_INFO) VALUES (
						                  '_crs' , 0      , '비밀',#{sMsg}, date_format(now(), '%Y%m%d%H%i%S'),date_format(now(), '%Y%m%d%H%i%S'),#{sMEM_Mobile},'1',
						                  CONCAT('name^',#{sMobile}))
	</insert>
	<insert id="SDK_MMS_SEND_INSERT">
				INSERT INTO SDK_MMS_SEND (USER_ID, SCHEDULE_TYPE, SUBJECT, MMS_MSG, NOW_DATE, SEND_DATE, CALLBACK, DEST_COUNT, DEST_INFO) VALUES (
						                  '_crs' , 0      , '비밀',#{sMsg}, date_format(now(), '%Y%m%d%H%i%S'),date_format(now(), '%Y%m%d%H%i%S'),#{sMEM_Mobile},'1',
						                  CONCAT('name^',#{sMobile}))
						                  
						                  
	</insert>	
</mapper>

context-datasource.xml  설정한곳을 봐서 알겠지만  파일위치는 

/src/main/resources/egovframework/mapper/first/Common_Mapper.xml

이렇습니다.  사용할 땐 이런 식으로 선언해서 사용합니다. 

import 삭제.dto.CommonData;
import 삭제.service.Crssms_ServiceImpl;

@Autowired
private Crssms_ServiceImpl sms_service;



중략 ...
				String sMEM_Mobile = "보내는 번호";
				String sMobile="받는번호";
		    	String sMsg = "메세지";
		    	String sName = "담당자";
                CommonData dto = new CommonData();
                 			dto.put("sMobile", sMobile);
							dto.put("sMEM_Mobile", sMEM_Mobile);
							dto.put("sMsg", sMsg);
                            sms_service.insert(dto, "Common_Mapper.SDK_SMS_SEND");

이렇게 해서 db를 하나 추가해서 문자 발송까지 정리해 보았습니다. 

수고하세요.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

스프링 부트 자바 8버전 지원 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>2.6.2</version>
	</parent>
	<groupId>com.iwillsoft</groupId>
	<artifactId>ex001</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>
	<name>ex001</name>
	<description>TEST</description>
	<properties>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web-services</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>3.0.3</version>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>com.microsoft.sqlserver</groupId>
			<artifactId>mssql-jdbc</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>com.mysql</groupId>
			<artifactId>mysql-connector-j</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>com.oracle.database.jdbc</groupId>
			<artifactId>ojdbc11</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.mariadb.jdbc</groupId>
			<artifactId>mariadb-java-client</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.postgresql</groupId>
			<artifactId>postgresql</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter-test</artifactId>
			<version>3.0.3</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

 

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>me.meseoul10</groupId>
	<artifactId>Standard_erp</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>Standard_erp</name>
	<description>micro_erp</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.4.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-jdbc</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.mybatis.spring.boot</groupId>
			<artifactId>mybatis-spring-boot-starter</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-oauth2</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
		    <groupId>org.apache.tomcat.embed</groupId>
		    <artifactId>tomcat-embed-jasper</artifactId>
		</dependency>
		<dependency>
		    <groupId>javax.servlet</groupId>
		    <artifactId>jstl</artifactId>
		</dependency>
		
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-security</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.security</groupId>
			<artifactId>spring-security-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
		    <groupId>org.springframework.security</groupId>
		    <artifactId>spring-security-taglibs</artifactId>
		    <version>5.0.7.RELEASE</version>
		</dependency>
		<!-- webflux -->
		<dependency>
		  <groupId>org.springframework.boot</groupId>
		  <artifactId>spring-boot-starter-webflux</artifactId>
		</dependency>
		
	  
		
		<!-- log4jdbc -->
		<dependency>
		    <groupId>org.bgee.log4jdbc-log4j2</groupId>
		    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
		    <version>1.16</version>
		</dependency>
		
		<!-- 파일업로드 다운로드. -->
		<!-- 아파치.. -->
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi</artifactId>
		    <version>3.13</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.poi</groupId>
		    <artifactId>poi-ooxml</artifactId>
		    <version>3.13</version>
		</dependency>
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-collections4</artifactId>
		    <version>4.0</version>
		</dependency>
		<!-- Apache Commons IO -->
		<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
		<dependency>
		    <groupId>commons-io</groupId>
		    <artifactId>commons-io</artifactId>
		    <version>2.6</version>
		</dependency>
		<dependency>
			<groupId>org.imgscalr</groupId>
			<artifactId>imgscalr-lib</artifactId>
			<version>4.2</version>
		</dependency>
		
		<dependency>
			<groupId>com.googlecode.json-simple</groupId>
			<artifactId>json-simple</artifactId>
			<version>1.1</version>
		</dependency>
		<!-- 압축파일 -->
		<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-compress</artifactId>
		    <version>1.15</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/commons-codec/commons-codec -->
		<dependency>
		    <groupId>commons-codec</groupId>
		    <artifactId>commons-codec</artifactId>
		    <version>1.11</version>
		</dependency>
		
		
				


		<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.2</version>
		</dependency>
		
		<dependency>
	    	<groupId>org.aspectj</groupId>
	    	<artifactId>aspectjweaver</artifactId>
	    	<version>1.6.1</version>
		</dependency>
		
		<dependency>
		    <groupId>org.apache.commons</groupId>
		    <artifactId>commons-lang3</artifactId>
		    <version>3.4</version>
		</dependency> 
		
		<!-- https://mvnrepository.com/artifact/org.apache.tika/tika-core -->
		<dependency>
		    <groupId>org.apache.tika</groupId>
		    <artifactId>tika-core</artifactId>
		    <version>1.20</version>
		</dependency>
				
		
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>Finchley.SR1</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
</project>

 

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

테이블스페이스 및 계정 생성

테이블스페이스 생성전 경로와 파일을 확인하자!!

SELECT a.tablespace_name "테이블스페이스명" ,
       a.file_name "파일경로",
       (a.bytes - b.free) "사용공간",
       b.free "여유 공간",
       a.bytes "총크기",
       To_char( (b.free / a.bytes * 100) , '999.99')
              ||'%' "여유공간"
FROM  (
                SELECT   file_id,
                         tablespace_name,
                         file_name,
                         Substr(file_name,1,200) file_nm,
                         SUM(bytes)              bytes
                FROM     dba_data_files
                GROUP BY file_id,
                         tablespace_name,
                         file_name,
                         Substr(file_name,1,200))a,
       (
                SELECT   tablespace_name,
                         file_id,
                         SUM(Nvl(bytes,0)) free
                FROM     dba_free_space
                GROUP BY tablespace_name,
                         file_id)b where a.tablespace_name=b.tablespace_name and a.file_id = b.file_id;

조회 후 경로 및 이름을 정한 다음 스페이스를 생성합니다.

설명)
create tablespace 테이블스페이스명
datafile '/경로/테이블스페이스파일명.dbf'
size 초기용량(100m,1g 등) reuse
autoextend on next 자동증가 용량
maxsize unlimited;

명령어
create tablespace crs001
datafile '/usr/local/dbspace/crs001.file'
size 1000m reuse
autoextend on next 1024k
maxsize unlimited;

계정을 생성하면서 테이블스페이스를 지정합니다. 

설명)
create user 유저명 identified by 패스워드 default tablespace 테이블스페이스명;

예제)
create user nonono identified by kor19450815 default tablespace crs001;

생성한 유저에 권한을 줍니다.

grant connect, resource, dba to NONONO;

'Oracle' 카테고리의 다른 글

PLSQL 동적 쿼리 만들어 실행하기.  (0) 2016.02.03
실행계획 비용검사  (0) 2014.12.12
제약조건 오라클  (0) 2014.12.11
오라클 연습용 데이타.  (0) 2014.12.09
ORACLE SYSTEM TABLE  (0) 2014.12.09
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

자바스크립트로 공공 API활용하여 XML 일출시간 일몰시간 가져오기

일단 소스는 이렇다. 

<script>
var getLCRiseSetInfocnt=0;
function getLCRiseSetInfo()
{
	getLCRiseSetInfocnt++;
	var today = new Date();
	var year = today.getFullYear();
	var month = today.getMonth() + 1; // 월은 0부터 시작하므로 1을 더해줍니다.
	var day = today.getDate();
	// 월과 일이 한 자리 숫자인 경우 앞에 0을 추가합니다.
	month = month < 10 ? '0' + month : month;
	day = day < 10 ? '0' + day : day;
	var formattedDate = year + '' + month + '' + day;
	console.log('오늘의 날짜: ' + formattedDate);
	var encodedServiceKey = encodeURIComponent('서비스키값');
	$.ajax({
	    url: 'http://apis.data.go.kr/B090041/openapi/service/RiseSetInfoService/getLCRiseSetInfo',
	    type: 'GET',
	    data: {
	        serviceKey: encodedServiceKey,
	        locdate: formattedDate,
	        longitude: '위도',
	        latitude: '경도',
	        dnYn: 'Y'
	    },
	    dataType: 'xml',
	    success: function(responseXml) {
	        console.log('Success:', responseXml);
	     // 서버 응답 성공 시 처리
	        var $xml = $(responseXml);
	
	        // 필요한 정보 추출
	        var sunrise = $xml.find('sunrise').text();
	        var sunset = $xml.find('sunset').text();
	        //var moonrise = $xml.find('moonrise').text();
	        //var moonset = $xml.find('moonset').text();
			//실행n번째 결과
	        console.log('n번째 결과 :',  getLCRiseSetInfocnt);
	        // 추출한 정보 출력 또는 다른 작업 수행
	        console.log('일출 : Sunrise:', sunrise);
	        console.log('일몰 : Sunset:', sunset);
	        //console.log('Moonrise:', moonrise);
	        //console.log('Moonset:', moonset);
	         
	        //결과값을 받아왔으면 멈춘다.
	        if(sunrise!='')
	        {
	        	checkAndStopInterval();
	        	var Sunrise =  formatTime(sunrise);
	        	var Sunset = formatTime(sunset);
	        	
	        	document.getElementById('Sunrise').innerText = Sunrise;
	            document.getElementById('Sunset').innerText = Sunset;
	            document.getElementById('mSunrise').innerText = Sunrise;
	            document.getElementById('mSunset').innerText = Sunset;
                //ID값을 찾아 innerText로 값을 변경해준다.
	        }
	    },
	    error: function(error) {
	        console.log('Error:', error);
	        getLCRiseSetInfo();
	        // 서버 응답 에러 시 처리
	    }
	});
}
//최초실행
getLCRiseSetInfo();
//3초마다 실행되게 한다.
var intervalId = setInterval(getLCRiseSetInfo, 3000);
//루프를 멈추게 한다. 
function checkAndStopInterval() {
	console.log('값을 받음');
	clearInterval(intervalId);
}
function formatTime(timeString) {
    // 앞에 0을 추가하여 4자리로 만들기
     timeString = timeString.padStart(4, '0');

    // 시간과 분으로 분리
    var hours = timeString.slice(0, 2);
    var minutes = timeString.slice(2);

    // 포맷팅된 문자열 반환
    return hours + ':' + minutes;
}
</script>
  • 일몰시간

    00:00

  • 일출시간

    00:00

주석을 충분히 달아 놓아 활용하는데 무리는 없을 것이라 봅니다. 

수고하세요.

참고사이트 : https://www.data.go.kr/data/15012688/openapi.do

 

한국천문연구원_출몰시각 정보

(천문우주정보)지역별 해달 출몰시각정보, 위치별 해달 출몰시각정보를 조회하는 서비스 입니다. 활용 시 날짜, 지역, 경도, 위도, 일출시각, 일몰시각, 일중시각, 월출시각, 월중시각, 월몰시각,

www.data.go.kr

 

이렇게 구축하니 로컬에서는 문제가 안보였는데 (왜인지 모름)

서버에 올리니 문제가 발생했네요. 

CORS (Cross-Origin Resource Sharing) 문제로 인한 오류로 브라우저에서 동일 출처 정책(Same-Origin Policy)에 위배되는 경우, 브라우저는 보안상의 이유로 외부 도메인으로의 AJAX 요청을 차단된다고 합니다.

그래서 급히 수정해봅니다. 

function getLCRiseSetInfo()
{
	getLCRiseSetInfocnt++;
	
	var today = new Date();
	var year = today.getFullYear();
	var month = today.getMonth() + 1; // 월은 0부터 시작하므로 1을 더해줍니다.
	var day = today.getDate();
	// 월과 일이 한 자리 숫자인 경우 앞에 0을 추가합니다.
	month = month < 10 ? '0' + month : month;
	day = day < 10 ? '0' + day : day;
	var formattedDate = year + '' + month + '' + day;
	
	var url = '/ajx/getLCRiseSetInfo';   		
	var sql_state_value = "GetData";
	var data = JSON.stringify({
		   sql_state : sql_state_value
		 , locdate : formattedDate
	});
	getPostData(url,data,callback_getLCRiseSetInfo);
}
function callback_getLCRiseSetInfo(result)
{
	console.log('n번째 결과 :',  getLCRiseSetInfocnt);
	console.log(result.result);
	if(result.result=='ok')
	{	
		var responseXml = result.xml;
		var $xml = $(responseXml);
		// 필요한 정보 추출
        var sunrise = $xml.find('sunrise').text();
        var sunset = $xml.find('sunset').text();
        //var moonrise = $xml.find('moonrise').text();
        //var moonset = $xml.find('moonset').text();
		//실행n번째 결과
        console.log('n번째 결과 :',  getLCRiseSetInfocnt);
        // 추출한 정보 출력 또는 다른 작업 수행
        console.log('일출 : Sunrise:', sunrise);
        console.log('일몰 : Sunset:', sunset);
        //console.log('Moonrise:', moonrise);
        //console.log('Moonset:', moonset);
         
        
        if(sunrise!='')
        {
        	checkAndStopInterval();
        	var Sunrise =  formatTime(sunrise);
        	var Sunset = formatTime(sunset);
        	
        	document.getElementById('Sunrise').innerText = Sunrise;
            document.getElementById('Sunset').innerText = Sunset;
            document.getElementById('mSunrise').innerText = Sunrise;
            document.getElementById('mSunset').innerText = Sunset;
        }
        if(getLCRiseSetInfocnt>7)
        {
        	checkAndStopInterval();
        }
	}
}
getLCRiseSetInfo();
var intervalId = setInterval(getLCRiseSetInfo, 5000);
function checkAndStopInterval() {
	console.log('값을 받음');
	clearInterval(intervalId);
}
function formatTime(timeString) {
    // 앞에 0을 추가하여 4자리로 만들기
     timeString = timeString.padStart(4, '0');

    // 시간과 분으로 분리
    var hours = timeString.slice(0, 2);
    var minutes = timeString.slice(2);

    // 포맷팅된 문자열 반환
    return hours + ':' + minutes;
}

//추가로 컨트롤러에 XML데이터를 요청하는 코드를 작성하여 XML을 받아오게 하였습니다.
					function getContextPath(){
            		    var ctxPath=$("#web_contextPath").val();
            		    return ctxPath;
            		}
            		function getPostData(inurl,indata,myfunction,in_async)  		
            		{
            			var async_value=true;
            			if(in_async==false)
            			{
            				async_value=false;
            			}
            		$.ajax({
            			type : 'post',
            			url : getContextPath()+inurl,
            			headers : {
            				"Content-Type" : "application/json",
            				"X-HTTP-Method-Override" : "POST",
            				'X-CSRF-TOKEN': $("#csrf_token").val()
            			},
            			dataType : 'text',
            			data : indata,
            			async: async_value,
            			error:function(request,status,error)
            			{
            				//alert("알림",status+error);
            				console.log("ajax error : " + status+","+error);
            			},				
            			success : function(result) {									
            				//console.log("result: " + result);
            				var obj = jQuery.parseJSON( result );	
            				if(myfunction!=null)
            				{
            					myfunction(obj);
            				}
            			}
            		});
            	}
</script>

자바 소스단은  https://www.data.go.kr/data/15012688/openapi.do 제공소스 자바부분을 참고하여 만들었습니다. 

//일출일몰 API사용하기
	@ResponseBody
	@RequestMapping(value = "/getLCRiseSetInfo", method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
	public CommonData getLCRiseSetInfo(@RequestBody CommonData dto) throws Exception {
		smsp.print_String("/ajxAgent/get_cal_month_data");
		CommonData result_map = new CommonData();
		smsp.print_CommonData(dto);
		Calendar cal = Calendar.getInstance();
		String locdate = dto.get("locdate", "20240311");		
		StringBuilder sb = new StringBuilder();
		try {
		
		StringBuilder urlBuilder = new StringBuilder("http://apis.data.go.kr/B090041/openapi/service/RiseSetInfoService/getLCRiseSetInfo"); /*URL*/
	    urlBuilder.append("?" + URLEncoder.encode("serviceKey","UTF-8") + "서비스 키"); /*Service Key*/
        urlBuilder.append("&" + URLEncoder.encode("locdate","UTF-8") + "=" + URLEncoder.encode(locdate, "UTF-8")); /*날짜*/
        urlBuilder.append("&" + URLEncoder.encode("longitude","UTF-8") + "=" + URLEncoder.encode("XXX.3673", "UTF-8")); /*위도*/
        urlBuilder.append("&" + URLEncoder.encode("latitude","UTF-8") + "=" + URLEncoder.encode("XXX.50363", "UTF-8")); /*경도*/
        urlBuilder.append("&" + URLEncoder.encode("dnYn","UTF-8") + "=" + URLEncoder.encode("Y", "UTF-8")); /**/
        
        URL url = new URL(urlBuilder.toString());
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Content-type", "application/json");
        //System.out.println("Response code: " + conn.getResponseCode());
        BufferedReader rd;
        if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) {
            rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
        } else {
            rd = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
        }
        
        String line;
        while ((line = rd.readLine()) != null) {
            sb.append(line);
        }
        rd.close();
        conn.disconnect();
        result_map.put("result", "ok"); 
        result_map.put("xml", sb.toString()); 
		} catch (Exception e) {
			// TODO: handle exception
			result_map.put("result", "fail");
		}
		return result_map;
	}

이상입니다. 수고하세요.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

자바 음력 날짜를 양력 날짜로 변환

public class LunarConverter {
    public static String lun2sol(String yyyymmdd) {
        int getYear = Integer.parseInt(yyyymmdd.substring(0, 4));
        int getMonth = Integer.parseInt(yyyymmdd.substring(4, 6));
        int getDay = Integer.parseInt(yyyymmdd.substring(6, 8));

        // 필요한 배열과 데이터를 Java 형식에 맞게 선언

        if (getYear <= 1881 || getYear >= 2050) {
            return "false"; // 년도 범위가 벗어남
        }
        if (getMonth > 12) {
            return "false"; // 달수 범위가 벗어남
        }
        int m1 = getYear - 1881;
        int YunMonthFlag;
        if (arrayDATA[m1].charAt(12) == '0') {
            YunMonthFlag = 0;
        } else {
            if (arrayDATA[m1].charAt(getMonth - 1) > '2') {
                YunMonthFlag = 1;
            } else {
                YunMonthFlag = 0;
            }
        }

        // 나머지 알고리즘 부분을 Java로 변환하여 작성

        return (smonth + "|" + sday + "|" + sweek);
    }

    public static void main(String[] args) {
        // 테스트를 위한 호출과 출력
        String result = lun2sol("20231218"); // 양력 날짜 입력
        System.out.println("음력 날짜: " + result);
    }
}
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

특정일 기준으로 작동하기 

JavaScript를 사용한 날짜 비교 함수 작성하기

날짜와 시간을 다루는 JavaScript의 기능을 활용하여 특정 날짜와 현재 날짜를 비교하는 함수를 만들어 보겠습니다. 이 함수는 웹 애플리케이션에서 유용하게 사용될 수 있으며, 예를 들어 특정 이벤트나 기한이 마감되었는지 확인하는 데 도움이 됩니다.

코드 예제:

function checkDate3() {
    // 목표 날짜 설정 (여기에서는 2023년 10월 31일 00:00:00)
    var targetDate = new Date("2023-10-31T00:00:00");
    var currentDate = new Date();

    // 현재 날짜와 목표 날짜를 비교
    if (currentDate > targetDate) {
        alert("마감되었습니다.");
    } else {
        window.location.href = "${pageContext.request.contextPath}/1234/1111.do"; // 페이지 이동할 URL을 입력하세요.
    }
}

코드 설명:

targetDate 변수에는 목표 날짜 및 시간이 설정됩니다. 이 날짜는 "YYYY-MM-DDTHH:MM:SS" 형식으로 지정됩니다. 이 코드에서는 2023년 10월 31일 00:00:00을 목표 날짜로 설정했습니다.

currentDate 변수에는 현재 날짜와 시간이 저장됩니다.

if 문을 사용하여 현재 날짜와 목표 날짜를 비교합니다. 현재 날짜가 목표 날짜보다 크면 "마감되었습니다."라는 경고 메시지가 표시됩니다.

그렇지 않은 경우, 특정 페이지로 이동하도록 지정된 URL로 리디렉션됩니다.

이 함수는 현재 날짜와 목표 날짜를 비교하여 원하는 작업을 수행하는 데 사용할 수 있으며, 웹 애플리케이션에서 기한을 추적하거나 이벤트를 관리하는 데 유용합니다. JavaScript를 사용하여 날짜 및 시간을 처리하는 방법을 익혔으므로 이를 다양한 상황에 적용할 수 있을 것입니다.

이제 이 함수를 웹 애플리케이션 프로젝트에 통합하여 날짜 기반 작업을 자동화하실 수 있습니다.

블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,

PHP 접속 아이피 확인하기

운영중인 PHP서버를 수정할일이 있는데 로그를 찍어봐야 하는데 운영중이어서 나만 보고 싶을때 사용하던 방법이다. 

	<?php
			function get_client_ip() {
				$ipaddress = '';
				if (getenv('HTTP_CLIENT_IP'))
					$ipaddress = getenv('HTTP_CLIENT_IP');
				else if(getenv('HTTP_X_FORWARDED_FOR'))
					$ipaddress = getenv('HTTP_X_FORWARDED_FOR');
				else if(getenv('HTTP_X_FORWARDED'))
					$ipaddress = getenv('HTTP_X_FORWARDED');
				else if(getenv('HTTP_FORWARDED_FOR'))
					$ipaddress = getenv('HTTP_FORWARDED_FOR');
				else if(getenv('HTTP_FORWARDED'))
					$ipaddress = getenv('HTTP_FORWARDED');
				else if(getenv('REMOTE_ADDR'))
					$ipaddress = getenv('REMOTE_ADDR');
				else
					$ipaddress = 'UNKNOWN';
				return $ipaddress;
			}
			if(get_client_ip()=="255.193.269.158" )
			{
				echo "sql : ".$sql."<br>";
			}
			?>

보통 SQL문을 확인하는데 사용했다..

PHP개발자는 대단한듯... sql문을 더하기로 다 만들다니 -_-

'PHP' 카테고리의 다른 글

PHP AJAX POST JQUERY 통신 관련  (0) 2016.06.30
php 날짜 제한 걸때.  (0) 2014.09.18
php 자기자신 파일명 위치 알아오기  (0) 2014.09.16
PHP 날짜 계산  (0) 2014.08.18
session 섹션 php섹션 섹션 pnp session 뭐 등등  (0) 2014.08.05
블로그 이미지

은호아빠

여행, 맛집, 일상, 프로그래밍, 개발자, 윈도우, 웹, jsp, spring, db, mysql, oracle, c#

,