최근 AI 기술이 점점 더 발전하면서, 이미지나 사진을 쉽게 변환하는 것이 가능해졌습니다. 그 중 하나가 바로 GPT-4 모델을 이용한 이미지 변환입니다. AI를 활용하여 원본 이미지를 픽사 스타일의 액션 피규어로 변환하고, 그 피규어를 플라스틱 포장재에 담아낸다면 어떨까요?

이번 블로그에서는 GPT-4를 통해 사진 속 아이를 픽사 스타일의 액션 피규어로 변환한 후, 플라스틱 포장재까지 추가한 작업을 소개합니다. AI로 어떻게 이런 변환이 가능해졌는지, 그리고 그 결과물은 어떠한지 함께 살펴보겠습니다!

1. 원본 사진

먼저 원본 사진을 확인해보세요. 이 사진은 아이가 즐겁게 웃고 있는 모습으로, 자연스러운 배경 속에서 촬영되었습니다. 하지만 우리가 할 일은 바로 이 모습을 픽사 스타일의 액션 피규어로 바꾸는 것입니다.

2. GPT-4로 변환하기

AI를 활용하여 원본 사진을 픽사 스타일의 액션 피규어로 변환하는 과정은 매우 흥미롭습니다. GPT-4는 이미지의 스타일을 분석하고, 그에 맞는 요소를 만들어냅니다. 그 결과, 원본 사진의 아이는 미소를 띤 액션 피규어로 변환되어, 마치 영화 속 캐릭터처럼 보이게 되었습니다.

변환 후, 아이의 의상, 표정, 포즈 등은 그대로 유지되면서도, 픽사 특유의 귀여운 느낌을 잘 살리고 있습니다.

3. 플라스틱 포장재 추가

그다음 단계는 플라스틱 포장재에 액션 피규어를 담는 작업이었습니다. 기존에 우리가 볼 수 있는 액션 피규어 포장처럼, 상단에는 "s00741"라는 문구가 적혀 있습니다.

이런 디테일들이 더해져, 마치 실제 상품처럼 보이는 액션 피규어가 완성되었습니다. 파란색 배경명판은 캐릭터를 더욱 돋보이게 만들어줍니다.

 

gpt 액션피규어

4. 최종 결과물

변환된 픽사 스타일 액션 피규어는 실제로 상점에서 판매되는 제품처럼 보입니다. 그 모습은 매우 귀엽고, 아이의 미소와 표정이 살아있어, 보는 사람도 미소를 짓게 만듭니다. 실제로 포장재 속에 담긴 피규어를 상상하면서, 이 AI 기술이 가져올 미래의 가능성에 대해 더욱 기대가 됩니다.

5. 결론

AI를 활용한 이미지 변환은 이제 단순한 이미지 편집을 넘어서, 창의적인 작업을 가능하게 만들고 있습니다. GPT-4를 사용한 픽사 스타일의 액션 피규어 제작은 그 한 예입니다. 앞으로도 이런 창의적인 방식으로 더 많은 작업들이 가능할 것이라고 기대됩니다.

이번 블로그 글을 통해 AI의 놀라운 변환 능력을 직접 확인해보세요. 여러분도 이미지나 사진을 AI로 변환해 보며 재미있고 창의적인 작품을 만들어보세요!

 

CHATGPT 글쓰기 도움으로 블로그가작성되었습니다.

블로그 이미지

은호아빠

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

,

🎨 CHATGPT에게 부탁했더니 지브리 스타일이 뚝딱!?

한 번쯤은 궁금했어요.  
"내가 지브리 영화 속 주인공이 된다면 어떤 모습일까?"  
그냥 상상이 아니라, 이번엔 진짜로!  
**CHATGPT에게 직접 부탁해서 내 사진을 지브리, 심슨, 도라에몽 스타일로 바꿔봤어요!** 😍

📌 목차  
1. CHATGPT로 이미지 스타일 변환하기  
2. 지브리 감성으로 바뀐 나의 일상  
3. 노란 피부의 심슨 스타일 도전기  
4. 도라에몽 세계로 떠난 디지털 여행  
5. AI 변환 결과물 200% 즐기기  
6. CHATGPT에게 요청하는 방법  
7. 나만의 캐릭터 만들기의 즐거움

## CHATGPT로 이미지 스타일 변환하기

요즘 AI 기술이 눈부시게 발전하고 있잖아요?  
근데 전 그냥 AI 툴을 쓴 게 아니라,  
**“챗GPT야, 이 사진 지브리 스타일로 바꿔줘!”** 하고 직접 대화로 부탁했어요 🥹  
대답도 너무 자연스럽고, 결과물도 기대 이상이라 진짜 놀랐어요!

## 지브리 감성으로 바뀐 나의 일상

지브리 특유의 따뜻한 채색감과 그림 같은 분위기!  
제 평범한 일상 사진이 어느새 *센과 치히로*나 *이웃집 토토로*에 나올 법한 장면이 되어 있었어요.  
가만히 보고 있으면, 그림 속 인물이 진짜 나라는 게 믿기지가 않더라구요 🎨



## 노란 피부의 심슨 스타일 도전기

"심슨처럼 바꿔줘!" 라고 했더니  
진짜 저를 **심슨 마을**로 보내버린 챗GPT ㅋㅋ  
캐릭터 특징은 그대로 살리면서도,  
익살스럽고 친근한 분위기를 만들어줘서 보는 내내 웃음이 멈추질 않았어요 😆



## 도라에몽 세계로 떠난 디지털 여행

도라에몽 필터는 진짜 아기자기하고 귀여움 끝판왕이에요 💙  
동글동글한 라인에, 동화책 같은 색감이 어우러져서  
제 사진이 마치 어린이 만화의 한 장면처럼 변신했답니다.  
어릴 때 도라에몽 보면서 상상하던 그 세계에 들어간 느낌!


## AI 변환 결과물 200% 즐기기

✅ 카카오톡 프로필 바꾸기  
✅ 가족 사진 스타일링해서 액자 만들기  
✅ 인스타 릴스나 리디자인 콘텐츠로 활용  
✅ 친구 생일에 "너도 심슨 세계로 보내줄게!" 선물하기


결과물은 단순히 저장만 하지 말고,  
이렇게 활용하면 훨씬 즐겁고 특별한 디지털 추억이 돼요 ✨

## CHATGPT에게 요청하는 방법

1. 챗GPT에게 친절하게 부탁해요  
   예: “이 사진을 지브리 스타일로 바꿔줘!”
2. 원하는 스타일을 구체적으로 말하면 더 정확해요  
   예: “지브리처럼 따뜻한 색감, 옛날 감성 느낌으로 변환해줘!”
3. 챗GPT가 제시한 이미지나 스타일을 확인해요  
4. 마음에 드는 버전은 저장하고, 더 바꾸고 싶으면 다시 부탁하면 끝!

## 나만의 캐릭터 만들기의 즐거움

이건 단순한 필터놀이가 아니라  
**나와 AI가 협업해서 만든 디지털 아트**라는 점에서 훨씬 의미 있어요.  
그림 실력 없어도, 포토샵 몰라도,  
이제 누구나 애니메이션 주인공이 될 수 있답니다 😊

### 궁금해하실 질문들

#### 챗GPT가 진짜 사진을 바꿔줘요?  
네! 이미지 업로드 기능이 있으면, 스타일 변환도 가능합니다! (특정 프롬프트와 조건 필요)

#### 어떤 스타일이 제일 반응이 좋았나요?  
지브리 스타일이 가장 감성적이고, 심슨은 유쾌하고 반응 좋아요!

#### 다른 스타일도 가능한가요?  
픽사, 디즈니, 웹툰 스타일 등도 가능합니다. 챗GPT에게 직접 물어보세요!

#### 화질이 떨어지진 않나요?  
변환 후에도 퀄리티가 꽤 좋아요. 고화질 업로드를 추천드려요!

#### 상업적으로 써도 되나요?  
개인적 사용은 괜찮지만, 상업적 사용은 저작권 이슈를 꼭 확인해야 해요!

✨ 여러분도 한 번 해보세요!  
"지브리 스타일로 바꿔줘!"라고 챗GPT에게 부탁만 하면 끝이에요 😎  
어떤 스타일이 제일 마음에 드셨는지 댓글로 알려주세요!

저는 다음에 "디즈니+스타일 변환기"로 다시 찾아올게요!

본 블로그 포스팅은 CHATGPT의 도움으로 작성되었습니다. 

블로그 이미지

은호아빠

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

,

웹소켓 연결 테스트 소스

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#

,