IntelliJ Idea Remote Development 사용시 멀티 프로젝트를 위한 모듈 설정

예전에 인텔리제이 원격개발 환경에서 프로젝트에 모듈을 지정하는 방법에 대해서 소개한 바가 있습니다.

이때는 1개의 모듈을 사용하는 경우를 소개한 것 인데요. 필요에 따라서는 하나의 프로젝트 환경에 여러개의 모듈을 사용하는 경우가 있을 수 있죠? 아래 그림처럼 말이에요~ Alt text

방법은 간단합니다. 먼저 1개의 모듈일 때 처럼, 추가하려는 모듈의 폴더에 들어가서 아래 작업을 수행해 주세요.

먼저 .idea 폴더 내에 [프로젝트명].iml 파일을 만들고 아래와 같이 기입합니다. 파이썬 프로젝트 일 때의 예제에요.

<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
  <component name="NewModuleRootManager" inherit-compiler-output="true">
    <exclude-output />
    <content url="file://$MODULE_DIR$" />
    <orderEntry type="inheritedJdk" />
    <orderEntry type="sourceFolder" forTests="false" />
  </component>
</module>

그런다음 최초에 지정되어 있던 모듈의 폴더에서 아래처럼 내용을 수정합니다.

최초에 지정된 모듈의 .idea 폴더의 modules.xml을 수정합니다.

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
위 광고를 클릭해주시면 코드가 나타납니다.
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
    <component name="ProjectModuleManager">
        <modules>
            <module fileurl="file://$PROJECT_DIR$/.idea/[프로젝트1명].iml" filepath="$PROJECT_DIR$/.idea/[프로젝트1명].iml" />
            <module fileurl="file://[프로젝트2경로]/.idea/[프로젝트2명].iml" filepath="[프로젝트2경로]/.idea/[프로젝트2명].iml" />
        </modules>
    </component>
</project>

프로젝트2경로는 절대경로로 해도되고, 프로젝트1의 경로에 맞춰서 상대경로로 해도됩니다.

AI합성으로 만든 트리 명소 사진

저희 가족이 셋이 된 이후
처음으로 맞이하는
크리스마스가 다가오고 있어요.

https://mediahub.seoul.go.kr/archives/2003482

비록 2년 전 기사이긴 하지만
올해도 어김없이 서울 곳곳에
크리스마스트리 명소들이 많을 건데요…
저희 가족은 수많은 핫스팟 중
어느 한 곳에도 가기 어려운 상황이에요

https://www.kgnews.co.kr/news/article.html?no=775310

아기가 견디기에는
너무 추운 날씨도 날씨지만

사정이 생겨서 저와 어흥이 엄마가
외출을 할 수 없게 되었어요
(코로나는 아닙니다)
그래서 AI를 이용해서 합성이라도 해봤어요
비록 발합성이지만
이걸로라도 위안을 삼아보려구요~

Alt text
Alt text
작품명
스케이트장에 간 곰돌어흥이



Alt text
Alt text
Alt text
Alt text
Alt text
작품명
성탄 분위기 도심 속 곰돌어흥이



Alt text
Alt text
Alt text
Alt text
작품명
추워 보이는 어흥이



Alt text
Alt text
Alt text
Alt text
작품명
어흥이는 크리스마스 호캉스 중

네이버 블로그를 백업해보자 - 3편

  • 오늘은 이번 네이버 블로그 백업 연재의 마지막편입니다.
  • 블로그 포스팅의 내용이 바뀌었다면 깃헙 레포지토리에도 바뀐 내용을 업데이트 해야겠죠?
    • 2편에서는 커밋을 통해 새로운 파일을 만들었다면, 이번에는 이미 파일이 있는 경우 수정하도록 해보겠습니다.
    • 방법을 간략하게 정리해 보면
      • 먼저 해당 파일이 존재하는지 확인하기 위해서 아래 페이지의 내용을 살펴봅시다.
        • 깃헙파일 정보얻기
        • 위 링크의 호출에서 파일이 존재하면 200 상태로 반응하고 Body에 sha 프로퍼티가 존재합니다.
            def get_github_sha(url, token):
                headers = {
                    "Accept": "application/vnd.github+json",
                    "Authorization": "Bearer %s" % token,
                    "X-GitHub-Api-Version": "2022-11-28"
                }
                r = requests.get(url, headers=headers)
                if r.status_code == 200:
                    return r.json().get("sha")
                return False
          
      • 위에서 얻게된 sha를 지난번까지 사용했던 PUT 호출에 함께 넣어 보내면 Create가 아니라 Update가 되는 것 입니다.
        • 깃헙파일 생성 혹은 수정하기
        • 파일이 수정되면 자동으로 푸시되게 하기 위해서 branch 프로퍼티를 추가했습니다.
            def put_github_file(url, github_owner, email, content, token):
                headers = {
                    "Accept": "application/vnd.github+json",
                    "Authorization": "Bearer %s" % token,
                    "X-GitHub-Api-Version": "2022-11-28"
                }
                sha = get_github_sha(url, token)
                if sha == False:
                    ## No sha means No File
                    data = {
                        "message": "commit",
                        "branch": "master",
                        "committer": {
                            "name": github_owner,
                            "email": email
                        },
                        "content": content
                    }
                    requests.put(url, data=json.dumps(data), headers=headers)
                else:
                    ## Update File
                    data = {
                        "message": "commit",
                        "branch": "master",
                        "sha": sha,
                        "committer": {
                            "name": github_owner,
                            "email": email
                        },
                        "content": content
                    }
                    requests.put(url, data=json.dumps(data), headers=headers)
          
      • 그렇게 되면 깃헙페이지 특성상 자동으로 깃헙액션을 수행하고, 빌드 및 배포가 진행됩니다.
  • 한편 배포된 깃헙 페이지의 URL이 구글검색에 표시될 수 있도록, 서치콘솔에 URL을 등록하는 호출도 해보겠습니다.
    • 그러기 위해서는 구글 개발자 서비스계정을 등록해야합니다.
    • 그리고 나서 인증에 사용되는 사용자를 등록한 후 JSON 파일을 받아야 합니다.
    • 마지막으로 서치콘솔 URL Indexing을 사용하겠다고 지정해야 아래의 호출을 정상적으로 수행 할 수 있습니다.
      • URL Indexing Creation API
          def update_google_search_console_url_index(url):
              SCOPES = [ "https://www.googleapis.com/auth/indexing" ]
              ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
        
              # service_account_file.json is the private key that you created for your service account.
              JSON_KEY_FILE = "file_name.json"
        
              credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)
              headers = {'Content-Type': 'application/json'}
              http = credentials.authorize(httplib2.Http())
        
              content = """{
              \"url\": \"%s\",
              \"type\": \"URL_UPDATED\"
              }""" % url
        
              response, content = http.request(ENDPOINT, method="POST", body=content, headers=headers)
        
  • 전체 코드는 아래 링크에 올려두었습니다. 지난번과 비교했을 때 달라진 내용은 아래와 같습니다.
    • 블로그 내용을 가져올 때, 링크 형태이면 MarkDown에서도 링크 형태로 보여지도록 했습니다.
    • 파일명에 표시되는 날짜도 직접 지정할 수 있게 코드를 수정했습니다.
    • 전체코드