layout: post title: [git]Git Ignore를 알아보자 description: “Just about everything you’ll need to style in the theme: headings, paragraphs, blockquotes, tables, code blocks, and more.” modified: 2016-12-11 tags: [sample post]


[git]gitignore를 알아보자


git 을 쓰다보면 버전관리가 필요없는 파일들을 빼내고 싶을 떄가 있다.

예를 들어 빌드될때 잠깐 만들어지는 react의 bundle.js 라든가. 자바에선 컴파일될때 생기는 .class파일들.. 같은 것들, npm에서 package.json으로 관리되어지는 내부 node-modules 등은 버전관리에 등록할 필요가 없을 것이다.

이런 불필요한것들 트랙킹되지않도록 막는것을 바로 .ignore에서 하게 된다.

1.gitignore 파일 생성2.

첫째로 git이 관리되는 root폴더에서 .gitignore파일을 생성한다.

이는 숨김파일로관리됨으로 숨김파일 해제를 하고 사용하길 바란다.

  1. 파일 작성

.gitignore 파일에 제외될 설정을 적어준다.

아래를 설명을 참고하자.


# => 주석을 의미한다.
test.txt => 모든 test.txt파일을 제외한다.
*.txt => 모든 txt확장자를 가지는 파일을 제외한다.
/*.txt => root에서의 *.txt파일만을 제외한다.(하위는 유지)
/test => test폴더만 제외한다.
test/ => test하위의 모든 파일을 제외한다.
*/test => test라는 이름을 가진 모든 폴더를 제외한다.

!test.txt => test.txt의 이름을 가지는 파일을 포함한다. !!! 미명령어는 다른 명령어보다 우선적이다.

위와같은 설정을 ignore에서 해주면 그의 맞게 파일들이 제외된다.

3.적용

실제 프로젝트에서 해당 ignore를 적용하기위해선 꼭 수정된사항을 commit해주어야 그 설정이 먹게된다.

git add
git commit -m ' add ignore'

그런데

이렇게해도 먹지 않는 경우가 있다. 기존에 이미 tracking된 파일은 ignore가 바로 먹지 않는다.

그럴경우엔 깃에서 해당 파일을 제거해줘야한다.

이말은 기존 tracking된 파일을 untracking시킨다는 말이되고, 최초 버전관리에서 제거 한다는 의미이다

깃에서 제거하기위해 rm 명령어를 사용한다. 예를들어 test폴더(하위포함)를 ignore하고싶다면

git rm test/

와 같이 제거해준다.

이후 git add 등을 통해 test폴더를 확인해보면 ignore된것을 확인할 수 있다.

CORS-크로스 도메인 이슈에 관하여 ====

 그동안 API서버를 짜고 ajax요청을 하면 종종 크로스도메인 에러가 발생했었다. 그럴때마다 매번 어떻게 고쳐서 해결했었던거 같은데 이번에도 나고야 말았다. 그래서 이번엔 확실하게 짚고 넘어가기위해 포스트 하기로 했다.

  1. CORS란?

      cross-origin resource sharing의 약자이다
      최근 웹 브라우저들은 보안상의 이유로 javascript나 ajax로 외부host로 접속하는것을 막기 시작했다고 한다.
      그래서 javascript는 Same Origin Policy(동일 출처 정책)라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안문제로 간주하고 이를 차단하는데,  즉 Javascript는 자신이 속한 동일 도메인 내에서만 서버 요청을 허용하고 처리해 주겠다는 의미이다.

  예를들어 www.goyaaaaaaaa.xyz 도메인에서 호출된 ajax는 www.goyaaaaaaaa.xyz도메인 내에 있는 URL만 호출할 수 있다는 것이다.
  그러면 www.goyaaaaaaaa.xyz에 있는 ajax에서는 www.ssoma.xyz의 URL을 ajax 호출할 수 없다는 것이다.

  이것을 다른 말로는 Sandbox라고 한다고 한다. 샌드박스는 보호영역 안에서만 프로그램을 동작시키며 외부의 영향을 받지 않도록 하는 모델이라고한다. 이것은 어린이들이 모래박스 안에서 다치지않고 놀수있게 한것에서 유래했다고 한다.

  1. CORS문제 해결법

      그래서 외부 도메인의 접근을 가능하게 하려면 Response header에 필드를 추가하여 허용 범위를 지정할 수 있다.
      헤더필드에 Access-Control-Allow-Origin을 추가해준다.
      1) 특정 host접근 허용
         Access-Control-Allow-Origin : http://www.goyaaaaaaaa.xyz
      2) 모든 접근 허용
       Access-Control-Allow-Origin : *

  2. spring에서 해결법

      처음엔 web.xml파일에 filter를 추가하고 url-pattern으로 특정 url 요청이 들어오면 filter클래스에서 처리해주려 했다.

web.xml

<filter>
    <filter-name>cors</filter-name>
    <filter-class>com.company.project.util.domain.SimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>cors</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

SimpleCORSFilter.java

@Component
public class SimpleCORSFilter implements Filter {
 
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,ServletException {
        HttpServletResponse response = (HttpServletResponse) res;

        response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "3600");
        response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
        response.setHeader("Access-Control-Allow-Origin", "*");
        chain.doFilter(req, res);
    }
    public void init(FilterConfig filterConfig) {}
    public void destroy() {}
}

  근데 이렇게 하니까 잘 안먹히길래 그냥 java config 클래스 파일을 만들어서 했더니 오히려 잘 작동하였다.

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
        public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**")
	    .allowedOrigins("http://domain2.com")
            .allowedMethods("PUT", "DELETE")
	    .allowedHeaders("header1", "header2", "header3")
	    .exposedHeaders("header1", "header2")
	    .allowCredentials(false).maxAge(3600);
    }
}

  무튼 해결은 이런식으로 했지만 아직도 어렵다.

참고 http://ooz.co.kr/232

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/cors.html