정보

    시스템 규모 확장

    시스템 규모 확장 시스템 사용자 수에 따라 설계해야 하는 규모가 달라진다. 수백만의 이용자가 존재하는 시스템을 개발해야 한다면, 어떤 것들을 고려해야 할 지 알아보자 무상태(stateless) 웹 계층 수평적으로 확장하기 위해 필요하다. 즉, 사용자 세션 정보와 같은 상태 정보를 데이터베이스와 같은 지속 가능한 저장소에 맡기고, 웹 계층에서는 필요할 때 가져다 사용하는 방식으로 만든다. 웹 계층에서는 무상태를 유지하면서, 어떤 사용자가 http 요청을 하더라도 따로 분리한 공유 저장소에서 해당 데이터를 불러올 수 있도록 구성한다. 수평적 확장은 여러 서버를 추가하여 Scale out하는 방식으로, 이처럼 웹 계층에서 상태를 지니고 있지 않으면, 트래픽이 늘어날 때 원활하게 서버를 추가할 수 있게 된다. ..

    Github Sponsor 등록

    HTML 삽입 미리보기할 수 없는 소스 깃헙 스폰서 등록 완료!!

    [Travis CI] 프로젝트 Travis CI 연동하기

    프로젝트 Travis CI 연동하기 자동으로 테스트 및 빌드가 될 수 있는 환경을 만들어 개발에만 집중할 수 있도록 하자 CI(Continuous Integration) 코드 버전 관리를 하는 Git과 같은 시스템에 PUSH가 되면 자동으로 빌드 및 테스트가 수행되어 안정적인 배포 파일을 만드는 과정을 말한다. CD(Continuous Deployment) 빌드한 결과를 자동으로 운영 서버에 무중단 배포하는 과정을 말한다. Travis CI 웹 서비스 설정하기 Travis 사이트로 접속하여 깃허브 계정으로 로그인 후, Settings로 들어간다. Repository 활성화를 통해 CI 연결을 할 프로젝트로 이동한다. 프로젝트 설정하기 세부설정을 하려면 yml파일로 진행해야 한다. 프로젝트에서 build...

    [AWS] 스프링 부트 배포 스크립트 생성

    [AWS] 스프링 부트 배포 스크립트 생성 AWS에서 프로젝트를 배포하는 과정은 프로젝트가 수정할 때마다 똑같은 일을 반복해야한다. 프로젝트 배포 과정 git pull로 프로젝트 업데이트 gradle 프로젝트 빌드 ec2 인스턴스 서버에서 프로젝트 실행 및 배포 이를 자동화 시킬 수 있다면 편리할 것이다. 따라서 배포에 필요한 쉘 스크립트를 생성해보자. deploy.sh 파일을 ec2 상에서 생성하여 아래와 같이 작성한다. #!/bin/bash REPOSITORY=/home/ec2-user/app/{clone한 프로젝트 저장한 경로} PROJECT_NAME={프로젝트명} cd $REPOSITORY/$PROJECT_NAME/ echo "> Git Pull" git pull echo "> 프로젝트 Build..

    [AWS] EC2 인스턴스 메모리 초과 문제

    Error명 : OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000eaaa0000, 178978816, 0) failed; error='Not enough space' (errno=12) EC2 인스턴스에서 스프링 부트 gradle 프로젝트를 clone 후, /gradlew test를 진행했을 때 에러가 발생할 수 있다. OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x00007f4eb92b0000, 262144, 0) failed; error='Not enough space' (errno=12) # # There is insufficient memory for the Jav..

    [AWS] EC2 인스턴스 초기 설정

    [AWS] EC2 인스턴스 초기 설정 아마존 리눅스 인스턴스를 생성 완료했다면, ec2 접속 후 몇 가지 초기 설정을 하자 Java 8 설치 자바가 설치 되어있는지 먼저 확인해보자 java -version 자바 7이 설치되어있을 수도, 아무 설치가 안되어있을 수도 있다. 우선 둘다 상관없이 자바 8을 설치한다. sudo yum install -y java-1.8.0-openjdk-devel.x86_64 자바 설치가 안되어있었으면 완료가 되었고, 만약 자바 7이 기존에 설치되어있었다면 버전 변경 과정이 필요하다. sudo /usr/sbin/alternatives --config java 다음 명령어를 실행 시, 두 가지 버전을 선택할 수 있는 창이 뜰 것이다. 여기서 jre-1.8.0버전에 해당하는 번호를..

    [IntelliJ] JUnit Test 메소드 명 한글 깨짐 해결

    테스트를 수행하다가 메소드명이 깨져서 나오는 경우가 있다. 기본적인 인코딩 설정 (설치 폴더 경로의 .vmoptions 수정, settings의 File Encodings)을 다 완료해도 메소드명은 그대로 깨져있을 수 있다. 기본 인코딩 설정에 관련하여 설명되어있는 블로그 링크 위의 방법으로 웬만해서는 해결이 될 것이다. 하지만 아직도 한글이 깨져있다면 아래 방법을 적용하면 해결된다. 방법은 인텔리제이의 도구창에서 Help → Edit Custom VM Options에 들어간다. 위에 나온 기본 인코딩 설정에서 설치 폴더의 idea64.exe.vmoptions를 수정했지만, 현재 프로젝트 폴더 자체가 사용자\AppData\Roaming에 있는 JetBrain으로 잡혀있어 수정된 파일이 적용이 되지 않은 ..

    [Git] .gitignore이 제대로 작동하지 않는 경우

    프로젝트를 Git에 올릴 때, 불필요한 정보(.idea, .gradle, build/ 등)나 보안이 필요한 파일들은 .gitignore에 정리한다. 하지만 분명히 작성을 했는데도, git add . 후 git status를 확인했을 때 change 파일 명단에 올라가있는 경우가 있다. 이때는 캐시(cache)에 문제가 있는 것이므로, 캐시를 삭제한 뒤 다시 진행해야 한다. git rm -r --cached . git add . git commit -m "fixed project"

    Jmeter를 활용한 서버 부하 테스트

    Jmeter는 Apache에서 재공하는 웹사이트 성능 측정을 할 수 있는 오픈소스 라이브러리다. [다운로드 링크] Apache JMeter - Download Apache JMeter Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava jmeter.apache.org 만약 자바가 설치되어 있지 않다면, ..

    [Git] default 브랜치는 master에서 main으로 변경되었음

    현재 많은 Git 명령어 정보들이 'master' 브랜치를 이용하고 있다. 하지만 최근 프로젝트 생성 시 기본 브랜치가 'main'으로 변경되면서 혼동되는 경우들이 존재한다. "There isn't anything to compare. Nothing to compare, branches are entirely different commit histories" master로 push를 하면 커밋 결과가 제대로 적용되지 않고, main 브랜치와 Compare하는 창이 나온다. 기본 default 브랜치가 main이기 때문에, master로 push를 해도 아직 적용 단계가 안되었기 때문이다. 현재 많은 튜토리얼 들이 master 브랜치가 default인 기준으로 작성되어서 제대로 push가 되지 않는 상황이..

    [Git] Logon failed, use ctrl+c to cancel basic credential prompt

    git으로 push를 할 때 다음과 같은 문구가 뜨면서 로그인을 하라고 창이 뜬다. 어떤 문제인지 찾아보니, Git의 최신 업데이트가 있어서 발생한 이슈였다. bash 창에 `git update-git-for-windows`를 입력하고, 새로운 버전으로 업데이트를 시키면 해결이 가능하다.

    [VSCODE PowerShell] Execution_Policies 문제 해결

    쉘 스크립트에서 정책문제로 명령어 실행이 안되는 경우가 있다. 이 시스템에서 스크립트를 실행할 수 없으므로 ... 스크립트 실행 권한이 제한되어 있기 때문에 발생하는 문제다. 해결 Windows PowerShell을 관리자 모드로 실행 get-help Set-ExecutionPolicy 입력 ExecutionPolicy에 대한 정책을 RemoteSigned로 수정해줘야 한다. Set-ExecutionPolicy RemoteSigned 이제 정상적으로 설치가 진행된다.

    신입 개발자를 위한 웹사이트를 만들었습니다.

    취업 준비를 하면서 정리했던 컴퓨터 공학 '전공 지식'과 '기술 면접'에 관련된 학습 내용들을 편하게 볼 수 있도록 웹사이트로 만들었습니다. 기존의 Github Repository에서 md파일로 정리해오던 자료들을, Vuepress 테마를 활용하여 GitHub 블로그로 만들고 개인 커스텀 도메인을 연결 완료했습니다. 게시글을 하나하나 작성하지 않고도, 바로 docs 폴더 안에 md파일을 넣어두면 게시글에 markdown 형식이 적용되어 나오기 때문에 UI적으로도 깔끔한 구성이 나와 vuepress를 선택하게 되었습니다. 티스토리와 같이 Gyoogle이라는 이름으로 정했으며, 개발자들이 많이 이용하는 dev로 도메인을 구매했습니다. [링크] Gyoogle gyoogle.dev 개발자의 길을 꿈꾸거나, 취업..

    [알고리즘] 간단하지만 알면 좋은 최적화들

    알고리즘 문제를 풀면서 최적화에 신경을 써야할 때가 있다. (시간이나 메모리를 줄이는 것이 중요한 B형처럼..) 1. for문의 ++i와 i++ 차이 for(int i = 0; i < 1000; i++) { ... } for(int i = 0; i < 1000; ++i) { ... } 내부 operator 로직을 보면 i++은 한번더 연산을 거친다. 따라서 ++i가 미세하게 조금더 빠르다. 하지만 요즘 컴파일러는 거의 차이가 없어지게 되었다고 한다. 2. if/else if vs switch case '20개의 가지 수, 10억번의 연산이 진행되면?' if/else 활용 : 약 20초 switch case : 약 15초 switch case가 더 빠르다. (경우를 찾아서 접근하기 때문에 더 빠르다) if..

    삼성 상시 SW 역량테스트 B형 후기

    삼성 상시 SW 역량테스트 B형 후기 2019년 7월 27일, 삼성 상시 SW 역량테스트 B형 시험이 있었다. 장소는 수원에 있는 영통역 근처 삼성전자 인재개발원.. 엄청 멀어서 오고가고에 지쳤다. 인재개발원 입구 마치 군대 위병소에 들어가는 것 같았다;; 신분증으로 시험보는 사람이 맞는지 한명씩 확인절차가 이루어진 뒤 갈 수 있다. 건물도 엄청 크고 깨끗하다. 특히 화장실이 너무너무 좋다.. 시험은 13:30 ~ 17:30으로 4시간동안 진행된다. 이 시간동안 주어진 1문제를 다 풀고 제출하면 된다. 나머지는 A형 시험과 모두 똑같다고 생각하면 된다. 확실히 기억은 안나는데, 시작하고 30분 이후였나 1시간 이후부터 퇴실이 가능하다. 먼저 나가는 사람들은 거의 없고 대부분 시간을 채우며 조금이라도 최적..

    브라우저 동작 과정에 대해 알아보자 (DOM, Parsing)

    브라우저 동작 방법 "브라우저가 어떻게 동작하는지 아세요?" 웹 서핑하다보면 우리는 여러 url을 통해 사이트를 돌아다닌다. 이 url이 입력되었을 때 어떤 과정을 거쳐서 출력되는걸까? web의 기본적인 개념이지만 설명하기 무지 어렵다.. 렌더링..? 파싱..? 브라우저 주소 창에 http://naver.com을 입력했을 때 어떤 과정을 거쳐서 네이버 페이지가 화면에 보이는 지 알아보자 (오픈 소스 브라우저(크롬, 파이어폭스, 사파리 등)로 접속했을 때로 정리) 브라우저 주요 기능 사용자가 선택한 자원을 서버에 요청, 브라우저에 표시 자원은 html 문서, pdf, image 등 다양한 형태 자원의 주소는 URI에 의해 정해짐 브라우저는 html과 css 명세에 따라 html 파일을 해석해서 표시함 이 ..

    Javascript와 Node.js로 Git을 통해 협업하기

    Javascript와 Node.js로 Git을 통해 협업하기 협업 프로젝트를 하기 위해서는 Git을 잘 써야한다. 하나의 프로젝트를 같이 작업하면서 자신에게 주어진 파트에 대한 영역을 pull과 push 할 때 다른 팀원과 꼬이지 않도록 branch를 나누어 pull request 하는 등등.. 아직 제대로 활용해보지 못했기 때문에 이번에 정리해보자! 참고 : 네이버D2 링크 Prerequisites Required Description Git We follow the GitHub Flow Node.js 10.15.0 LTS Yarn 1.12.3 or above Git과 GitHub을 활용한 협업 개발 Git : 프로젝트를 진행할 때 소스 코드의 버전 관리를 효율적으로 처리할 수 있게 설계된 도구 Git..

    TDD(Test Driven Development) 이해하기

    TDD(Test Driven Development) TDD : 테스트 주도 개발 '테스트가 개발을 이끌어 나간다.' 우리는 보통 개발할 때, 설계(디자인)를 한 이후 코드 개발과 테스트 과정을 거치게 된다. 하지만 TDD는 기존 방법과는 다르게, 테스트케이스를 먼저 작성한 이후에 실제 코드를 개발하는 리팩토링 절차를 밟는다. 작가가 책을 쓰는 과정에 대해서 생각해보자. 책을 쓰기 전, 목차를 먼저 구성한다. 이후 목차에 맞는 내용을 먼저 구상한 뒤, 초안을 작성하고 고쳐쓰기를 반복한다. 목차 구성 : 테스트 코드 작성 초안 작성 : 코드 개발 고쳐 쓰기 : 코드 수정(리팩토링) 반복적인 '검토'와 '고쳐쓰기'를 통해 좋은 글이 완성된다. 이런 방법을 소프트웨어에 적용한 것이 TDD! (소프트웨어 또한 반..

    클린코드(Clean Code)와 리팩토링(Refactoring)

    클린코드와 리팩토링은 의미만 보면 비슷하다고 느껴진다. 어떤 차이점이 있을지 생각해보자 클린코드 클린코드란, 가독성이 높은 코드를 말한다. 가독성을 높이려면 다음과 같이 구현해야 한다. - 네이밍이 잘 되어야 함 - 오류가 없어야 함 - 중복이 없어야 함 - 의존성을 최대한 줄여야 함 - 클래스 혹은 메소드가 한가지 일만 처리해야 함 얼마나 코드가 잘 읽히는 지, 코드가 지저분하지 않고 정리된 코드인지를 나타내는 것이 바로 '클린 코드' 1 2 3 4 5 6 public int AAA(int a, int b){ return a+b; } public int BBB(int a, int b){ return a-b; } cs 두 가지 문제점이 있다. 1 2 3 4 5 6 7 public int sum(int a..

    삼성 상시 SW 역량테스트 A형 후기

    삼성에서 주최하는 소프트웨어 역량테스트 시험이다. 최근 상시로 변경되면서 시험 횟수도 많아졌다. (단, 1년에 3회로 제한되어있다.) 사이트 : 링크 SW Expert Academy SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요! www.swexpertacademy.com 회원가입 후, 사이트에 올라온 문제를 주어진 난이도에 맞는 3문제를 풀면 응시 지원이 가능하다. 일정은 사이트에서 직접 확인해야하고, 시험 접수하는 사람이 워낙 많기 때문에 열린 후 바로 신청하지 않으면 바로 마감되므로 조심해야 한다. A형이 검정 유형 중에서는 가장 낮은 난이도지만, 실제 입사 전에 진행되는 코딩테스트 난이도와 같은 수준이다. C형은 실제 실무자도 많이 갖고 있지 않다고 하니.. 극악의 난이..

    객체지향 프로그래밍(OOP)이란?

    객체지향 프로그래밍 보통 OOP라고 많이 부른다. 객체지향은 수 없이 많이 들어왔지만, 이게 뭔지 설명해달라고 하면 어디서부터 해야할 지 막막해진다.. 개념을 잡아보자 객체지향 패러다임이 나오기 이전의 패러다임들부터 간단하게 살펴보자. 패러다임의 발전 과정을 보면 점점 개발자들이 편하게 개발할 수 있도록 개선되는 방식으로 나아가고 있는 걸 확인할 수 있다. 가장 먼저 순차적, 비구조적 프로그래밍이 있다. 말 그대로 순차적으로 코딩해나가는 것! 필요한 게 있으면 계속 순서대로 추가해가며 구현하는 방식이다. 직관적일 것처럼 생각되지만, 점점 규모가 커지게 되면 어떻게 될까? 이런 비구조적 프로그래밍에서는 goto문을 활용한다. 만약 이전에 작성했던 코드가 다시 필요하면 그 곳으로 이동하기 위한 것이다. 점점..

    [Git] git bash 사용법

    Git 사용법 Git Bash 터미널을 열어 사용해보자! 명령어cd [폴더 이름] : 해당 디렉토리로 이동x$ cd documents : 현재폴더의 하위폴더인 documents 폴더로 이동$ cd /c/workspace : 절대경로 /c/workspace 로 이동$ cd .. : 상위 폴더로 이동 mkdir [폴더 이름] : 디렉토리 생성x$ mkdir test : 현재 위치에 test 디렉토리 생성touch [파일 이름] : 빈 파일 생성xxxxxxxxxx$ touch index.txt : 현재 위치에 index.txt 파일을 생성ls : 현재 디렉토리 폴더, 파일을 보여줌xxxxxxxxxx$ ls Git 사용사용자 등록user.email과 user.name을 등록한다.x$ git config --gl..

    삼성 청년 소프트웨어 아카데미(SSAFY) 1기 합격

    수업 시간에 교수님이 이런 프로그램이 새로 나왔다라는 말을 듣고, 그 자리에서 바로 검색을 통해 알아봤다.삼성에서 주관하는 소프트웨어 아카데미로, 1년이라는 시간동안 4년제 대학 졸업자 대상으로 실시하는 무료 교육이었다. 게다가 한 달에 100만원이라는 교육 지원금까지 제공해준다는 점이 상당히 매력적이었다. 또한 1기라는 첫 스타트라는 점에서 많은 것을 배우고 얻을 수 있지 않을까 하는 기대도 있었다. 졸업을 앞두고, 취업을 하기에는 아직 준비가 너무 부족한 것 같아서 혼자 어떻게 공부해서 대비할 지 걱정이 많았는데, 이 교육을 들으면서 취업 준비를 하면 딱 좋을 것 같아서 바로 지원했다. 서류는 생각보다 간단했고, 성적이나 자격증 입력 및 자기소개를 작성하면 됐다. 나는 왜 이 교육을 받고 싶은 지 지..

    객체 지향(Object-Oriented)이란?

    객체 지향 개념사람은 포유류에 속하는 '동물'이다.사람이 다른 동물과 구별되는 고유한 특징은?'상징 체계'를 만들고 공유하는 능력 - 언어, 음악, 문자, 수학 등등..사람은 상징 체계를 만들고 발전시켜서 다음 세대에게 물려준다! 이것을 가능하게 만든 것이 바로 '추상화'(abstraction) 능력즉, 추상화는 대상에서 특징만을 뽑아낸 것을 말한다.인간은 '추상'을 만들고, 공유하고, 발전시키는 고유한 능력이 있다. 객체 지향(Object Oriented)이란?여기서 Oriented는 '위주' 혹은 '선호'에 가깝다. (방향성 X)따라서 '객체 위주'라고 이해하는 것이 편함 흔히 약자로 많이 불리는 OOA, OOD, OOP와 같은 것들은 이렇게 정리할 수 있다.OOA(Object Oriented Ana..

    [git] error: failed to push some refs to

    git pull --rebase origin mastergit push origin masterpull로 rebase 처리해서 local에도 새로 적용된 내용을 넣어준 이후 git push를 진행하면 에러가 해결된다.

    Regex (정규표현식)

    Regex (정규표현식) Regex( Regular Expression, 정규 표현식 )은 문자열을 검사할 때 사용합니다. 문자열에 특정한 규칙에 맞는 문자열이 있는지 확인하는 표현식이라고 말할 수 있겠습니다. 보통 회원가입 시에 많이 쓰이는데요. 예를 들면, 아이디가 4글자 이상이어야 하거나 비밀번호가 영문+숫자 조합으로 만들어야 하는 조건이 있는 걸 한번씩은 보셨을겁니다. 이럴때 사용하는 것이 바로 Regex입니다. 해당 모델의 스키마에서 match 안에다가 작성하는데요. match: [/정규표현식/, "에러메시지"]와 같이 사용합니다. 만약 정규표현식에 맞지 않은 값이 들어온다면, 에러메시지가 출력되는 형식입니다. 1234567891011name:{ type:String, required:[true..

    구글 클라우드 플랫폼(GCP)으로 NVIDIA GPU 사용해보기

    구글 클라우드 플랫폼(GCP)을 이용해서 GPU 사용해보기 최근 머신러닝, 딥러닝이 큰 이슈가 되고 있는데요. 이에 관심있는 분들이 만들고 싶은 모델의 훈련 속도를 빠르게 진행하려면, 대부분 성능이 좋은 GPU가 필요한데 기업이나 단체가 아닌 개인적으로 공부하는 사람들에게는 값 비싼 GPU를 구매하기 부담스러운게 사실입니다. 이런 사람들을 위해 구글에서 제공하는 클라우드 플랫폼을 이용해서 NVIDIA GPU를 빌려 사용할 수 있는 방법이 있는데요. 처음에 가입하면 무료로 제공해주는 크레딧을 통해 충분히 학습이 가능합니다. 한번 자세히 알아보겠습니다. 구글 클라우드 플랫폼 사이트 : https://cloud.google.com/?hl=ko 우선 구글 계정으로 플랫폼 가입을 진행합니다. 클라우드 플랫폼은, ..

    [Git] 사용 요약

    Git 사용 요약 git config --global user.name "이름" git config --global user.email "깃허브 메일주소" // 매번 물어보는 귀찮음을 피하기 위해 설정. mkdir ~/MyProject // 로컬 디렉토리 만들고 cd ~/myproject // 디렉토리로 들어가서 git init // 깃 명령어를 사용할 수 있는 디렉토리로 만든다. git status // 현재 상태를 훑어보고 git add 화일명.확장자 // 깃 주목 리스트에 화일을 추가하고 or git add . // 이 명령은 현재 디렉토리의 모든 화일을 추가할 수 있다. git commit -m “현재형으로 설명” // 커밋해서 스냅샷을 찍는다. git remote add origin https:..

    개발자 기술면접 준비하기

    개발자 기술면접 준비하기'코딩인터뷰 완전분석' 책을 토대로 작성했습니다. 준비하기기술면접을 준비할 때는 절대 문제와 답을 읽는 식으로 하지 말 것문제를 직접 푸는 훈련을 해야함 직접 문제를 풀수 있도록 노력하자포기하지말고, 최대한 힌트를 보지말고 답을 찾자코드를 종이에 적자컴퓨터를 이용하면 코드 문법 강조나, 자동완성 기능으로 도움 받을 수 있기 때문에 손으로 먼저 적는 연습코드를 테스트하자기본 조건, 오류 발생 조건 등을 테스트 하자. 왜냐하면 면접에서는 이 부분이 필수이기 때문종이에 적은 코드를 그대로 컴퓨터로 옮기고 실행해보자종이로 적었을 때 실수를 많이 했을 것이다. 컴퓨터로 옮기면서 실수 목록을 적고 다음부터 저지르지 않도록 유의하자 기술면접 필수로 알아야 할 것들자료구조와 알고리즘은 코딩테스트..

    클라우드 컴퓨팅 정리

    [클라우드 컴퓨팅] 클라우드 컴퓨팅 개요인터넷을 통해 이루어지는 새로운 종류의 네트워크 기반 컴퓨터,유틸리티 컴퓨팅이다.인터넷을 통해 통신과 전송을 하고, 하드웨어와 소프트웨어, 네트워크 서비스를 클라이언트에게 제공자원과 서비스를 배달하는 새로운 종류의 패러다임이다.하드웨어 및 연관된 인프라를 가상으로 다운로드하고 가상데이터 센터를 구축인터넷 또는 사설 네트워크를 통해 클라우드 서비스를 개발하고 제공 할 수 있게 해주는 IT 구성 요소 및 배포 프로세스다.인터넷을 통해 서비스로 제공되는 응용 프로그램과 인터넷 인프라의 하드웨어 및 시스템 소프트웨어(=플랫폼이라고도 함)플랫폼은 인프라의 복잡성과 세부사항을 간단한 GUI를 사용하면서 유저와 앱을 숨겨줌언제 어디서든지 이용할 수 있는 수요 서비스 제공사용료 ..