CSV 파일 한글 깨짐 현상 해결

CSV파일로 작업해야할 일이 있었는데 열어보니 한글이 다 깨져있었다. 물론 파일이 1개라면 인코딩만 변경해 저장하면 깔끔하게 끝나겠지만 10개만 넘어가도 헬파티가 열리기 때문에 그 헬파티의 주인공이 되기 싫어 간단하게 스크립트를 작성했다. (파일이 100개 였음..;;)

인터넷 검색을 해보니 iconv 명령어를 쓰면 해결된다고 해서 마침 git-bash도 설치되어 있겠다 아래 처럼 코드를 작성하고 실행시키니 변경이 잘된다.

핵심은 iconv

#!/bin/sh
 
for entry in `find . -name "*.csv"`; do
 
echo $entry
`iconv.exe -t cp949 $entry > ./test/$entry`
   
done















AOP란?

- Aspect : 공통 기능

- Advice : Aspect의 기능 자체

- Jointpoint : Advice를 적용해야 되는 부분(ex. 필드, 메소드) ( 스프링에서는 메소드만 해당)

- Pointcut : Jointpoint의 부분으로 실제로 Advice가 적용된 부분

- Weaving : Advice를 핵심 기능에 적용하는 행위


스프링에서 AOP구현 방법

호출부  -------> Proxy -------> Target


스프링에서 AOP 구현 방식

- XML 스키마 기반의 AOP 구현

- @Aspect 어노테이션 기반의 AOP 구현


소스

pom.xml

pom.xml 내 dependency 추가

<!-- AOP -->
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.7.4</version>
</dependency>
































Properties 파일을 이용한 설정






소스









JAVA를 이용한 DI 설정방법

Configuration 어노테이션과 Bean 어노테이션을 이용하여 새로운 빈 객체를 제공

@Bean
public Student student1(){
        
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("수영");
        hobbys.add("요리");
        
        Student student = new Student("홍길동"20, hobbys);
        student.setHeight(180);
        student.setWeight(80);
        
        return student;
    }   


아래 XML과 동일한 설정이다.

<bean id="student1" class="com.javalec.ex.Student">
        <constructor-arg value="홍길동" />
        <constructor-arg value="20" />
        <constructor-arg>
            <list>
                <value>수영</value>
                <value>요리</value>
            </list>
        </constructor-arg>
        
        <property name="height">
            <value>180</value>
        </property>
        
        <property name="weight" value="80" />
    </bean>




소스

ApplicationConfig.java

@Configuration '이 클래스는 스프링 설정에 사용되는 클래스입니다.' 라고 명시해 주는 어노테이션

@Bean - 객체 생성을 담당하는 IoC용 메소드라는 표시

package com.javalec.ex;
 
import java.util.ArrayList;
 
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
 
@Configuration
public class ApplicationConfig {
 
    @Bean
    public Student student1(){
        
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("수영");
        hobbys.add("요리");
        
        Student student = new Student("홍길동"20, hobbys);
        student.setHeight(180);
        student.setWeight(80);
        
        return student;
    }
    
    @Bean
    public Student student2(){
        
        ArrayList<String> hobbys = new ArrayList<String>();
        hobbys.add("독서");
        hobbys.add("음악감상");
        
        Student student = new Student("홍길순"18, hobbys);
        student.setHeight(170);
        student.setWeight(55);
        
        return student;
    }
    
}
 






XML을 이용하는 애플리케이션 컨텍스트

GenericXmlApplicationContext의 생성자 파라미터로 XML파일의 클래스패스를 지정해준다. 


xml설정정보를 담은 applicationCTX.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
 
<bean id="calculator" class="com.javalec.ex.Calculator" />
 
<bean id="myCalculator" class="com.javalec.ex.MyCalculator">
<property name="calculator">
<ref bean="calculator"/>
</property>
<property name="firstNum" value="10" />
<property name="secondNum" value="2"></property>
</bean>
 
</beans>
 






소스

Mainclass.java

package com.javalec.ex;
 
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.GenericXmlApplicationContext;
 
public class MainClass {
 
public static void main(String[] args) {
 
/*
MyCalculator myCalculator = new MyCalculator();
myCalculator.setCalculator(new Calculator());
myCalculator.setFirstNum(10);
myCalculator.setSecondNum(2);
myCalculator.add();
myCalculator.sub();
myCalculator.mul();
myCalculator.div();
*/
 
String configLocation = "classpath:applicationCTX.xml";
AbstractApplicationContext ctx = new GenericXmlApplicationContext(configLocation);
MyCalculator myCalculator = ctx.getBean("myCalculator", MyCalculator.class);
 
myCalculator.add();
myCalculator.sub();
myCalculator.mul();
myCalculator.div();
 
}
 
}
 


MyCalculator.java

package com.javalec.ex;
 
public class MyCalculator {
 
Calculator calculator;
private int firstNum;
private int secondNum;
 
public MyCalculator() {
 
}
 
public void add() {
calculator.addition(firstNum, secondNum);
}
 
public void sub() {
calculator.subtraction(firstNum, secondNum);
}
 
public void mul() {
calculator.multiplication(firstNum, secondNum);
}
 
public void div() {
calculator.division(firstNum, secondNum);
}
 
public void setCalculator(Calculator calculator) {
this.calculator = calculator;
}
 
public void setFirstNum(int firstNum) {
this.firstNum = firstNum;
}
 
public void setSecondNum(int secondNum) {
this.secondNum = secondNum;
}


Calculator.java

package com.javalec.ex;
 
public class Calculator {
 
public void addition(int f, int s) {
System.out.println("addition()");
int result = f + s;
System.out.println(f + " + " + s + " = " + result);
}
 
public void subtraction(int f, int s) {
System.out.println("subtraction()");
int result = f - s;
System.out.println(f + " - " + s + " = " + result);
}
 
public void multiplication(int f, int s) {
System.out.println("multiplication()");
int result = f * s;
System.out.println(f + " * " + s + " = " + result);
}
 
public void division(int f, int s) {
System.out.println("division()");
int result = f / s;
System.out.println(f + " / " + s + " = " + result);
}
 
}
 







import urllib.request
import urllib.parse
 
post_data  = urllib.parse.urlencode({'id':'XXXXXXX''srpla':'XXXXXX'}).encode('UTF-8')
url = urllib.request.Request("https://www.xxx.net/xxxx.do",post_data)
url.add_header("User-Agent","Mozilla/5.0 (Windows NT 6.1; Win64; x64")
url.add_header("Cookie","webid=x; AGEN=x-tkS8rMRo; SLEVEL=1; TIARA=x-x-5u4SHVdUte-x; webid_sync=x")
 
resp= urllib.request.urlopen(url).read().decode('UTF-8')
 
print (resp)



https://jenkins.io/ 에서Jenkins를 다운로드한다.


다운로드한 Jenkins를 실행한다. 


127.0.0.1:8080으로 접속하면 Jenkins를 페이지를 확인할 수 있으며 새 작업을 만든다.


Maven Project를 선택한 뒤 OK버튼을 클릭한다.


소스 코드 관리를 확인하면 Git이 없기 때문에 Git 플러그인을 설치해서 활성화 시킨다.


메인 페이지의 jenkins 관리 메뉴로 이동한다.


플러그인 관리 메뉴로 이동해 플러그인 설치를 진행한다.


GitHub Plugin을 선택한 뒤 설치한다.


정상적으로 설치될 경우 Git이 생성되며 Repositry URL을 등록한다.


빌드 전에 시스템 설정을 한다. Jenkins 관리 > 시스템 설정으로 이동한다.


JDK 경로를 등록한다.


Maven에서도 maven 경로를 등록한다.


mvc 프로젝트로 이동하여 빌드를 진행하자.


Build Now 메뉴를 클릭 해 빌드를 진행한다.


빌드의 실패할 경우 빨간색 원으로 표시된다.


Console Output메뉴로 로그를 확인한결과 POM.xml 파일의 경로에서 오류가 난 것을 알 수 있다.


프로젝트 > 구성으로 이동하여 Build 탭을 확인하면 아래와 같이 pom.xml을 찾을 수 없다는 에러 메시지를 확인할 수 있다.


pom.xml경로를 등록해주고 war파일을 생성하기 위해 package명령어를 등록한다.


다시 Build Now한 결과 아래 그림처럼 파란색 원을 통해 성공적으로 빌드됨을 확인할 수 있다.


빌드한 결과물(war)을 웹 서버에 자동으로 업로드 하기 위해 Publish Over SSH 플러그인을 설치한다.


Jenkins관리 > 시스템 설정으로 이동하면 맨 하단에 Publish over SSH메뉴가 생성됨을 알 수 있다. 필요한 정보를 등록한다.


Test Configuration 메뉴를 통해 정상적으로 접속되는지 확인할 수 있다.


프로젝트 > 구성으로 이동해 빌드 후 조치에서 Send Build artifacts over SSH를 선택한다.



'Coding > Web' 카테고리의 다른 글

Web@Spring# Github & Maven  (0) 2018.02.03
Web@Spring# 서블릿을 이용한 웹 페이지 실행  (0) 2018.02.03
Web@Spring# Spring 환경 설정  (0) 2018.02.03

Git Client 설치

https://git-scm.com/downloads에서 사용자 OS에 맞는 Git Clients를 다운로드 한다.


Git Clients를 설치한 뒤 환경변수에 설치 경로를 등록한다.

다음으로 http://spring.io/guides 페이지에서 Spring 가이드를 제공하며 우리는 Building Java Projects with Maven 가이드를 따라 해보자.


https://maven.apache.org/download.cgi 경로에서 maven을 다운로드할 수 있다.


apache-maven-3.5.2-bin.zip 다운로드하고 환경변수에 등록한다.


git-bash에서 mvn -v를 입력하며 아래 그림처럼 Maven 버전 및 기타 버전을 확인할 수 있다.



'Coding > Web' 카테고리의 다른 글

Web@Sprng# Jenkins 연동  (0) 2018.02.04
Web@Spring# 서블릿을 이용한 웹 페이지 실행  (0) 2018.02.03
Web@Spring# Spring 환경 설정  (0) 2018.02.03

+ Recent posts