VPN으로 로아하기 100% 되는 방법(2022년 4월 테스트 완료)

반응형
728x170

로스트 아크(스마게)의 경우 해외 유저의 출입을 막기 위해 다분한 노력을 하고 있습니다.

 

보통 국산 게임이나 다른 회사의 게임의 경우 해외 ip를 차단하더라도 

 

유명 회사의 VPN을 쓰면 접속 가능한 경우가 대부분입니다.

 

하지만, 로아의 경우

 

Express VPN, SurfShark VPN, Nord VPN 등 여러 유명 VPN 회사들의 IP까지 차단하고 있습니다.

 

그래서 인터넷을 보면 이러한 유명 VPN을 사용해도 접속하지 못하는 경우가 있습니다.

 

그렇기 때문에 반대로 무료 VPN의 경우 접속 가능한 경우가 생깁니다.

 

하지만.... 무료 VPN은 진짜 위험하죠

 

서버 관리자가 여러분들이 어느 사이트에 접속중인지 다 알 수 있고

 

여러 보안상 위험도 있고...

 

심하면 범죄에 연루될 가능성도 있죠

 

여기서 안전하게 100% 방법으로 로아를 접속할 수 있는 방법은 2개입니다.


1. 유명하지 않은 유료 VPN 사용

 

아직 로스트아크(스마게)에서 차단하지 않은 유료 VPN 회사를 찾는겁니다.

 

하지만.... 이 방법은 시간이 지나면 들킬 가능성이 있습니다.

 

또한 스마게는 해외 유저에 대해 정책 위반으로 생각하기 때문에

 

[일시 정지] 같은게 아니라 [영구 정지]를 바로 때려버립니다.

 

그래서 100% 접속할 수 있을지 몰라도 안전하지 않은 방법이며 시간과 돈도 꽤 많이 들어갑니다.

 


2. 한국에 있는 공유기를 VPN 서버로 만들기

 

제일 좋은 방법입니다.

 

하지만, 제일 큰 단점은 한국에 누군가 지인이 있어야합니다.

 

즉, 가족 or 친구의 공유기가 필요합니다.

 

한국에서는 대부분 [IPTIME]이라는 공유기를 많이 사용하기 때문에

 

이 브랜드를 이용하여 설정하는 방법을 알려주겠습니다.

 

공유기를 이용해 VPN 서버를 구축하기 위해서, 먼저 공유기 설정에 들어가 주어야 합니다.

우선 검색 메뉴를 이용해서 'cmd' 또는 '명령 프롬프트'를 검색하여 명령 프롬프트를 켜 주세요.

명령 프롬프트에서 'ipconfig'이라는 명령어를 입력하고 엔터키를 누르면, 현재 컴퓨터에 할당된 내부 IP 정보들이 쭉 나오게 됩니다.

여기서 우리가 주목해 주셔야 할 것은 저 '기본 게이트웨이'에 쓰여져 있는 항목인데, 저 기본 게이트웨이의 주소를 잘 기억해 두세요.

아까 명령 프롬프트에 나왔던 기본 게이트웨이 주소를 인터넷 주소창에 치고 접속해 봅시다.

그럼 위 사진처럼 공유기 모델명과 함께 설정 페이지가 나오게 됩니다. 여기서 맨 왼쪽에 있는 '관리도구'를 눌러주세요.

그런 다음, 왼쪽의 사이드 메뉴에서 [고급 설정] - [특수기능] - [VPN 서버설정]을 차례대로 클릭해 주세요.

여기서 먼저, 위쪽의 '동작 모드' 란에서는 [실행]에, '암호화(MPPE)' 란에서는 [암호화 사용함]에 체크를 해 주시고, 최종적으로 밑의 [적용]을 눌러 마무리해주시기 바랍니다.

이제 VPN 서버 접속을 위한 계정을 만들 차례입니다.

VPN 접속 계정VPN 접속 암호를 임의로 설정해 주시고, 할당될 IP 주소는 일반적인 경우에는 4번째 칸만 임의대로 채워주시고 나머지 칸들은 그냥 그대로 놔두시면 됩니다. (4번째 칸은 2~254까지 설정 가능)

참고로 4번째 칸의 주소를 설정할 때, 되도록 200번대 이후로 설정해 두시는 것을 추천해 드립니다. 너무 앞번대의 주소로 설정하게 되면 다른 앞번대의 주소를 할당받아 연결된 기기들과 충돌이 일어날 수도 있기 때문입니다.

최종적으로 목록에 생성했던 계정이 표시된다면, 이렇게 VPN 서버 구축은 완료되었습니다.

그런데 아직 여기서 끝난 것이 아닙니다.

뒤에서도 다루게 되겠지만 공유기의 외부 IP 주소를 입력하여 VPN 서버에 접속을 하게 되는데, 숫자투성이인 IP 주소는 영 익숙치 않죠.

그래서 DDNS 기능을 이용해, 익숙치 않은 IP 주소 대신 도메인 주소를 이용하여 외부에서 공유기에 접속할 수 있도록 해보겠습니다.

DDNS 도메인 설정하기

관리 도구의 왼쪽 사이드 메뉴에서 [고급 설정] - [특수기능] - [DDNS 설정]을 차례대로 클릭해 보도록 하겠습니다.

혹시 공유기 설정 화면에 접속하는 법을 찾고 계시다면 윗부분를 참조하세요.

그런 다음, 윗부분에서 원하는 호스트 이름과 등록에 필요한 사용자 ID, 사용자 암호를 채워주시고, [추가]를 눌러 마무리해주세요.

호스트 이름은 '(name).iptime.org'의 형식으로 써주셔야 하며, 사용자 ID는 자주 사용하는 이메일 주소를 입력해 주세요. 나중에 잊어버린 암호를 찾을 때 도움이 됩니다.

추가를 완료하고 아래의 목록에서 [갱신] 버튼을 눌러 등록한 호스트의 접속상태가 '정상 등록'으로 표시되는 것을 보셨다면, DDNS 설정까지 성공적으로 끝난 것입니다. 수고하셨습니다!

300x250

3. VPN에 접속하기

 

먼저 윈도우키를 누르고 VPN을 검색해줍니다.

 

이제 VPN 연결 추가를 선택합니다.

 

VPN 공급자 : 기본

연결 이름 : 자유롭게 작성

서버 이름 또는 주소 : 자신의 공인 IP나 DDNS 주소 입력

VPN 종류 : 설정한 VPN 종류 선택

미리 공유한 키 : 설정한 암호 입력 (다른 VPN종류 사용시 설정이 달라집니다.)

사용자 이름 : IPTIME에서 설정한 계정 입력 (다른 VPN종류 사용시 설정이 달라집니다.)

암호 : IPTIME에서 설정한 계정 암호 입력 (다른 VPN종류 사용시 설정이 달라집니다.)

 

이제 저장을 누르고 연결버튼을 눌러봅시다.

 


4. VPN 접속 시 에러가 발생할 때

 

VPN에 접속할 때 아래와 같이 에러가 발생할 가능성이 있습니다.

 

 

이런 에러가 발생할 경우 아래와 같이 따라하면됩니다.

 

제어판에 들어갑니다.

 

 

"네트워크 상태 및 작업 보기"에 들어갑니다.

 

"어댑터 설정 변경"에 들어갑니다.

 

"어댑터 설정 변경"에 들어가면 아까 VPN 설정으로 만들어진 VPN 연결 어댑터가 만들어져 있습니다.

 

이를 "우클릭 -> 속성"으로 들어갑니다.

 

 

"보안" 탭에서 VPN 종류를 "PPTP"로 설정하고 "확인"을 클릭합니다

 

그리고나서 다음의 경로로 접속을 해주세요.


C:\Users\daehyun\AppData\Roaming\Microsoft\Network\Connections\Pbk

 

접속하신 후 rasphone notepad(메모장)으로 열어주세요.

 

(메모장으로 여는 방법)

 

시작을 누르신 후, notepad를 타이핑하시고 엔터를 쳐주세요!

 

엔터를 누르신 후, 메모장이 열리면 그곳으로 rasphone를 드래드&드롭 하면됩니다.

 

 

메모장으로 열으셨으면 DataEncryption=8을 찾아,

DataEncryption=256으로 바꾸면됩니다.

 

 

수정한 내용을 저장한 후

 

다시 VPN에 접속하면 잘 될겁니다!

 


주의사항

접속하는 컴퓨터(클라이언트)가 IPv6나 transix 방식의 접속을 하고 있다면

 

자신이 IPv6이나 transix 방식을 사용하고 있는지 알아보려면

 

아래의 두 가지 방법으로 알아볼 수 있습니다.

 

1. cmd의 ipconfig 커맨드로 IPv6에 IP가 할당되어있는지 확인 = IPv6 방식 사용중

 

2. 인터넷 회사에 직접 문의 = IPv6인지 trasix 방식을 사용중인지 가르쳐줌

 

위와 같은 방식으로 인터넷을 접속중이라면 제가 가르쳐드린 방법으로는 접속할 수 없습니다 ㅠㅠ

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형

댓글()

일본에서 인터넷 바꾸기 (일본 거주시 인터넷 회사 추천!)

일본 생활 문화|2022. 8. 21. 20:40
반응형
728x170

일본은 참 인터넷 바꾸기도 힘드네요 ㅎㅎ

 

저 같은 실수 하지않도록 팁을 공유해드리겠습니다...

 

이번에 또 지들 회사가 만든 그지같은 룰에 당했네요 ㅠㅠ

 


1. 일단 자신이 사는 곳에 광케이블이 들어오는지 확인하자!

 

이것을 확인하는 방법은 간단합니다

 

일본은 대부분 관리회사를 끼고 있는데 여기에 전화해서 물어보면됩니다

 

혹시 레오팔레스 이런데 사는 분들은 아마 그냥 레오넷 쓰셔야할거에요.... ㅠ

(아니면 소프트뱅크 에어 같은 무선 루터...)

 

광케이블이 들어와있지 않다면 아래의 3가지 방법이 존재합니다.

 

1) 그냥 광케이블이 아닌 VDSL 방식 같은 인터넷을 사용한다(최대 다운로드 속도 100Mbps)

 

2) 소프트 뱅크 에어 같은 무선 루터 방식의 인터넷을 사용한다(조금 비쌈)

 

3) 관리 회사에 물어봐서 개인 광케이블을 방 안에 넣어도되는지 물어본다

 

사실 여기서 할 수 있는 현실적인 선택지는 1, 2번일거 같네요 ㅠㅠ

 

3번은 돈도 많이 들고 시간도 많이 들고 허가도 잘 안해줘요 ㅠㅠ

 


2. 다른 인터넷 회사들의 캠페인을 확인하자!

 

여기서 중요한 점은 처음부터 가성비 인터넷 회사에 들어가지 않는 것입니다.

 

왜냐??

 

가성비 인터넷 회사(또는 저렴한 회사)들은 처음 들어갈 때 가입비를 받는 곳이 대부분입니다.

 

하지만 메이저 인터넷 회사들(소뱅, KDDI 등)은 대부분 면제입니다.

(가입비, 설치비 등 면제인 곳이 많음)

 

또한 첫 12개월 또는 24개월까지 할인 캠페인을 하는 곳이 대부분입니다.

 

그렇기 때문에 해당 캠페인을 잘 보고 할인 폭이 제일 큰 회사를 결정하시면됩니다!

 

대신 계약 기간이 얼마나되는지 보고 잘 기록해놓으셔야 합니다.

 

왜냐하면 그 기간 끝나면 다른 곳으로 갈아타야하거든요 ㅎ


3. 기존에 쓰던 메이저 회사의 계약 기간이 끝났다면??

 

이제는 가성비 인터넷으로 갈아타시면됩니다.

 

제가 찾아본 회사중 제일 가성비가 좋은 회사는 여기였습니다.

 

enひかり - https://enhikari.jp/

 

enひかり(公式)|NTT光コラボレーションモデル最安値水準の光インターネット接続サ

フォーム入力後2営業日以内にenひかりカスタマーセンターよりお申込確認及び工事日調整のご連絡を入れさせていただきます。こちらのお電話にてお申し込みの最終確認とさせて頂き、確

enhikari.jp

 

특징으로는 일단 맨션 기준으로 3,520엔(세금포함)이며 여기에 ipv6 옵션을 달면 200엔 정도 플러스 됩니다.

 

또한 계약기간이 존재하지 않기 때문에 언제든지 계약을 해지할 수 있습니다.

 

그럼 이제 어떻게 해야할지 알려드리겠습니다.


4. 기존에 쓰던 인터넷을 해지하자

 

보통 수수료 없이 해약 가능한 기간은 1~3달입니다

 

그럼 해약 가능한 첫 달이 되자마자 갈아타는 것을 추천합니다.

 

그 이유는 다음과 같습니다.

300x250

1) 갈아탈가면 그냥 빨리 타는게 낫다

 

2) 엔히카라는 1일에 가입해도 31일에 가입해도 무조건 그 달에 가입했으면 3,520엔을 다 내야합니다.

 

그렇기 때문에 딱 해지할 수 있는 기간이 되자마자 하는게 좋습니다.

 

그럼 어떻게 해지하냐

 

기존에 쓰던 인터넷 회사에 연락해서 사업자 변경 승낙번호(事業者変更承諾番号)를 받습니다.

 

이것을 사용해서 事業者変更申込에 체크를 하고

 

받은 事業者変更承諾番号를 입력하면됩니다

 

 

여기서 주의할 점은

 

사업자 변경 승낙번호를 사용해서 다른 인터넷 회사를 개통한 순간 기존에 쓰고 있던 인터넷은

 

자동으로 해지됩니다.

 

그렇기 떄문에 1일에 해지하고 싶다면 최소 2주전에 신청해야합니다.

 

예를들어 8월 1일에 새로운 인터넷을 사용하고 싶다면

 

7월 15일 정도에는 신청을 해야 8월 1일에 사용할 수 있습니다.


5. 제가 한 실수

 

저는 엔히카리가 그 달에 사용했을 경우 무조건 금액을 전부 내야하는 것을 모르고

 

울며 겨자먹기로 3일 쓰고 기존에 쓰던 인터넷 요금과 엔히카리 요금 둘 다 냈습니다 ㅠㅠㅠ

 

여러분들은 1일에 신청해서 꼭 같은 피해를 입지 마시기 바랍니다...

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형

댓글()

후쿠시마 응원 기업의 비밀? 어? 뭔가 다르다...?

일본 생활 문화|2022. 8. 7. 13:39
반응형
728x170

한국에서 이야기 하고 있는

 

후쿠시마를 응원하고 있는 기업들의 리스트와

 

일본 공식 사이트에서 보여주는 기업들이 뭔가 다르다는 것을

 

알게되었기 때문에 이 블로그를 작성합니다.


1. 한국에서 찾아본 후쿠시마 응원 기업

 

단순하게 구글링 해봅시다

 

구글에서 "후쿠시마 응원 기업" 이라고 검색하면 

 

다음과 같이 음식점 이름들이 쭉 나옵니다.

 

검색 결과

그리고 안에 들어가서 내용을 확인해보면 

 

후쿠시마를 응원하는 식품 관련 기업들이 나옵니다.

 

【あ行 

アイオー(아이오. 고기가게.) 

相生産業(아이오이 산업. 레토르트 상품.) 

アコーディア・ゴルフ(아코디아 골프) 

アサヒビール(아사히 맥주) 

味の民芸フードサービス(아지노민게이 푸드 서비스) 

イオン(이온) 

いせ食品(이세 식품. 계란.) 

イトーヨーカドー(이토요카도. 마트, 쇼핑몰.) 

今井屋(이마이야. 음식점.) 

イワイ(이와이. 오무스비 곤베이라는 주먹밥 전문점 운영.) 

イワタニダイレクト(이와타니 다이렉트) 

インジェンス「八百恋」(인젠스「핫뺘쿠코이」 동키라는 이름 들어가는 음식점들.) 

H・I・S(여행선물 회사) 

エコスグループ(에고스 그룹. 동북, 관동 슈퍼) 

江崎グリコ(에자키 글리코. 과자 회사.) 

エチカ池袋(에치카 이케부쿠로. 백화점.) 

エバラ食品(에바라 식품. 음식 회사.) 

エルトリート(엘트리트. 관동, 관서 쪽 멕시코 요리점.) 

オイシックス(오이식스. 어떤 회사인지는 잘 모르겠어요.) 

大阪王将(오사카 오쇼. 만두집.) 

大戸屋(오오토야. 나베 요리 전국 체인점.) 

尾家産業(오이에 산업. 반찬업체. 선홈(サンホーム), 찬옥몽(燦宝夢) 오이시 우미(맛있는 바다おいしい海) 선플라자(サンプラザ)) 

 

【か行 

雅秀殿(가슈덴. 도치기에 있는 음식점.) 

ガスト(가스토. 패밀리 레스토랑) 

カスミ(카스미. 관동 지역의 식품회사.) 

春日井さぼてん(카스가이 사보텐. 카스가이 시에 있다고 합니다.) 

関西スーパーマーケット(관서 슈퍼마켓.) 

牛庵(규안. 스테이크 전국 체인점.) 

キューピー(큐피. 소스 회사.) 

キングフィールズゴルフクラブ(킹필즈 골프 클럽) 

京王ストア(케이오 스토어. 슈퍼마켓 체인) 

京急百貨店(게이큐 백화점.) 

ケンタッキー(KFC) 

コヴァ・ジャパン(코바 재팬. 카페&레스토랑.) 

ココス(코코스. 패밀리 레스토랑.) 

小僧寿し(코조 스시.) 

コープ(코프. 음식 회사) 

コープ神戸(코프 고베.) 

 

【さ行 

サイゼリヤ(사이제리야. 패밀리 레스토랑) 

坂本せん餅(사카모토 센베. 전병 가게.) 

さくら水産(사쿠라 수산. 이자카야.) 

SAKE bistro W(조미료 업체.) 

サステナブル・プランニング(사스테이나블 플래닝. 식료품 인터넷 판매업체.) 

佐藤食品工業(사토 식품공업. 식물 엑기스. 차 엑기스. 천연조미료. 가루 술.) 

サブウェイ(서브웨이. 샌드위치 음식점.) 

JA系列(JA계열.) 

JACKPOT(잭팟. 도쿄 음식점 계열.) 

JTBグループ(JTB 그룹) 

食文化(식문화. 식료품 인터넷 판매업체.) 

ジョナサン(죠나산. 조나단. 패밀리 레스토랑.) 

ジョリーパスタ(죠리 파스타. 파스타 전문점.) 

スーパーダイイチ(슈퍼 다이이치. 홋카이도 쪽 슈퍼.) 

すき家(스키야. 덮밥 체인점) 

スジャータ(스쟈타. 우유.) 

ステーキレストラン千一夜(스테이크 레스토랑 센이치야.) 

精華堂あられ総本舗(세카도 아라레 소본포. 쌀과자 업체.) 

セブンイレブン(세븐일레븐.) 

全国かまぼこ連合会(전국 어묵 연합회.) 

ゼンショー(젠쇼. 산하 회사로 스키야(덮밥집), 天下一(중국집), 伝丸(중국집), 규안(불고기 샤브샤브), 이치방(불고기 샤브샤브), 모리바 커피.) 

 

300x250

 

【た行 

大地を守る会(타이치오마모루카이. 대지를 지키는 모임. 식재료 업체.) 

ダイエー(다이에. 마트.) 

たいらや(타이라야. 토치기현의 슈퍼.) 

高島屋(타카시야마. 백화점.) 

たからやフレサ(타카라야 프레사. 식품 슈퍼마켓.) 

つねもと商店(츠네모토 상점. 관서 쌀가게.) 

デイリーヤマザキ(데일리 야마자키. 편의점.) 

デニーズ(데니즈. 패밀리 레스토랑.) 

天神屋(텐진야. 주먹밥, 도시락 전문점) 

てんや(텐야. 튀김덮밥집.) 

東急ストア(도큐 스토어. 슈퍼마켓.) 

東京都青果物商業協同組合(도쿄 청과물 상업 협동조합) 

道後温泉の道後にきたつの路(도고온천.) 

トミーファーム(토미 팜. 군마현 농가.) 

 

【な行 

なか卯(나카우. 규동, 우동 체인점.) 

農家の店しんしん(농가의 집 신신. 농산물 전문점.) 

日本中央競馬会(일본 중앙 경마회.) 

 

【は行 

バーミヤン(바미얀. 중국음식 패밀리레스토랑) 

華屋与兵衛(하나요헤이. 패밀리레스토랑) 

はま寿司(하마스시.) 

パルシステム(팔 시스템. 식품업체.) 

ピーコックストア(피콕 스토어. 인터넷 판매업체) 

P4(P4. 베트남 요리.) 

ピザーラ(피자라. 피자업체.) 

ビッグボーイ(빅보이. 패밀리레스토랑.) 

ファーマーズネットワーク(파머즈 네트워크. 관동 농산물 그룹.) 

ファミリーマート(패밀리 마트.) 

フォーシーズンズホテル椿山荘(포 시즌 호텔 친잔소.) 

富士シティオ(후지 시티오. 슈퍼마켓 기업. Fuji, 데리토(デリド).) 

プライム・リンク(프라임 링크. 인터넷 판매 업체.) 

プリンスホテル(프린스 호텔.) 

ふるさとファーム(후루사토 팜. 야채 판매.) 

ベルク(벨크. 관동 슈퍼.) 

ヘリオス酒造(헬리오스 주조. 오키나와 술 제조업체.) 

ベンガベンガ(벵가벵가. 슈퍼.) 

ホテルオークラ(호텔 오쿠라.) 

ホテルグランパシフィック(호텔 그란 퍼시픽.) 

 

【ま行 

丸栄(마루에이. 백화점.) 

マクドナルド(맥도날드) 

マルシェ系列(이자카야 체인점. 八剣伝, 酔虎伝, 居心伝) 

マルト神戸屋(마루토 고베야. 빵회사.) 

三越伊勢丹(미츠코시 이세탄. 미츠코시 백화점, 이세탄 백화점.) 

ミツハシライス(미츠하시 라이스. 관동 쌀업체.) 

緑提灯応援隊(미도리쵸친 응원대. 음식점.) 

明治(메이지.) 

モスバーガー(모스버거. 햄버거 업체.) 

モンテローザ系列(몬테로자. 이자카야 체인점. 白木屋, 魚民, 笑笑.) 

 

【や行 

ヤオコー(야오코. 슈퍼마켓 체인.) 

ヤマキ(야마키. 조미료 메이커.) 

やよい軒(야요이켄. 체인 음식점.) 

山崎パン(야마자키 빵.) 

ヤマト運輸(야마토 운수. 택배업체.) 

雪印(유키지루시. 우유업체.) 

養老乃瀧(요로노타키. 이자카야 업체.) 

ヨンナナダイニング(욘나나 다이닝. 레스토랑, 이동식 음식 판매업체.) 

 

【ら行 

ラゾーナ川崎(라조나 카와자키. 라조나현 카와사키시.) 

らでぃっしゅぼーや(식료배달 서비스.) 

藍屋(아이야. 일본 정식 체인점.) 

リンガーハット(링거핫. 나가사키 짬뽕 주력인 외식업체.) 

ロック・フィールド(록필드. 홈쇼핑 업체.) 

 

【わ行 

ワイルドチーズベイクドケーキ(와일드 치즈 베이크도 케이크.) 

ワタミ(와타미. 외식산업 업체. 와타미, 자 와타미, 나고미테, 고항, 와타밍치, T.G.I. 프라이데이. 스미슌. 그 외 다수.) 

和光堂(와코도. 아기용품 업체.) 

 

그럼 일본 공식 사이트에 있는 응원 기업 리스트를 볼까요?


2. 일본의 공식 후쿠시마 응원 기업 리스트

아래가 후쿠시마 응원 기업의 공식 사이트입니다.

 

https://fukushima-oknet.com/participants.html

 

参画企業

 

fukushima-oknet.com

 

메인 페이지에 보이는 기업들을 보면 

 

대부분이 전기, 부동산, 건설 기업이며 식품 기업은 거의 없습니다.

 

이게 어떻게된 일일까요?

 

혹시 메인 페이지에는 후원을 많이한 기업만 기재되어있는게 아닐까 싶어서 

 

좀 더 상세 페이지를 살펴보기로 했습니다.

 

보아하니 후쿠시마를 응원하는 기업은 2종류가 있었습니다

 

1. 정회원 기업

2. 준회원 기업

 

1번 정회원 기업에는 우리가 흔히 알고 있는 대기업들이 많았습니다.

 

하지만 역시나 대부분 전기, 전자, 부동산, 건설 관련 기업이 대부분이었습니다

 

2번 준회원도 마찬가지였습니다.

 

그렇다면 우리가 위에서 본 식품 기업들은 다 어디로 간것일까?

 


3. 일본에서 관련된 뉴스 및 블로그를 찾아보자

 

가장 유명하고 일본에서 흔히 볼 수 있는 식품업체인

 

세븐일레븐

 

요시노야

 

이 둘을 예로 찾아보겠습니다

 

먼저 세븐일레븐입니다.

 

정말 놀랍게도 관련 내용이 거의 없었습니다...

 

(아래의 내용은 일본어 검색을 번역한 결과입니다.)

 

세븐일레븐 후쿠시마 응원 검색 결과

왜 한국어로 검색하면 이렇게 우후 죽순 나오는데 일본어로 검색하면 거의 나오지 않는걸까요?

 

똑같이 한국어로 검색하면 이렇게 대량으로 정보가 나옵니다.

 

한국어로 세븐일레븐 후쿠시마 응원 검색

 

그렇다면 지금은 응원하지 않는 것일까요?

 

아래는 2022년 4월 22일에 게재한 세븐일레븐 공식 트위터를 번역한 내용입니다.

 

 

이것을 보면 아직 세븐일레븐은 후쿠시마 응원 캠페인을 계속 하고 있고

 

응원 하고 있다는 말은 거짓말이 아니였습니다.

 

그렇다면???

 

숨기고 있다....

 

이게 제일 적절한 말이 아닐까요?

 

사실 제가 알기로 세븐일레븐은 후쿠시마 응원 캠페인에

 

적극적으로 하고 있는 기업입니다.

 

여기서 적극적 = "기업측에서 직접 후쿠시마에 농장을 지어서 그 식재료를 사용하여 상품을 만듬"

 

그럼 요시노야는 어떨까요?

 

요시노야 역시 제가 알기로 적극적으로 응원하고 있는 기업입니다.

 

요시노야 역시 일본어로 검색해보면 옛날 블로그나 자료만 조금 나오지

 

최근 자료는 하나도 없습니다...

 

제일 최근 자료는 2018년인데...

 

한국어로 검색하면 관련 자료가 많이 나옵니다

 

 

이 역시 뭔가 숨기고 있다 or 관련 자료에 대해 삭제 요청을 하고 있다라고

 

킹리적 갓심을 가질 수 밖에 없네요...


4. 정리

 

어쨋든

 

일본에 놀러왔을 때는 위에서 언급한 기업들은 가능한한 피하는게 좋겠네요...

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형

댓글()

[초급]안드로이드 DataStore 사용방법 A to Z

반응형
728x170

이전에 안드로이드에서 사용했던 

 

PreferenceDataStore는 API29부터 deprecated되어있다

 

그 이후 비슷한 SharedPreferen라는 것이 있는데 얘보다 더 좋은 놈이 나왔다

 

그게 바로

 

DataStore이다!!


1. 기존의 SharedPreference와 비교했을 때 장단점

 

SharedPreference와 DataStore 비교

가장 큰 차이점은 다음과 같다

 

DataStore는 Flow를 통해 데이터를 collect하여 받을 수 있다!

 

이는 상당히 큰 장점이다

 

그 이유는 어떠한 데이터를 DataStore를 통해 넣었고

 

특정 위치에서 해당 데이터를 collect 하고 있었다면

 

데이터를 저장한 순간 인지할 수 있기 때문이다!

300x250

2. 사용방법

 

https://developer.android.com/jetpack/androidx/releases/datastore?hl=ko 

 

DataStore  |  Android 개발자  |  Android Developers

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. DataStore 비동기적이고 일관된 트랜잭션 방식으로 데이터를 저장하여 SharedPreferences의 취약점을 극복하세요.

developer.android.com

 

일단 사용을 하기 위해선 depenedency 정의가 필요하다

dependencies{

    // Preferences Data Store
    implementation "androidx.datastore:datastore-preferences:1.0.0-alpha07"
    implementation "androidx.datastore:datastore-core:1.0.0-alpha07"

    // Preferences Data Store를 사용하기 위해선 Coroutine이 필요함
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
}

먼저 DataStore를 사용하기 위한 depenedency 와 코루틴을 사용하기 위한 depenedency 가 필요하다

 

그럼 이제 사용해보겠다

 

<layout 정의>

 

먼저 레이아웃은 그림과 같이 대충 정의한다 (참고로 main_activity.xml이다)

 

main_activity.xml

1. EditText에 데이터를 입력한다

2. save 버튼을 통해 dataStore에 입력한 값을 저장한다

3. "READ TEXT", "READ INT"를 통해 데이터를 읽어온다

4. 읽어온 데이터는 TextView에 출력한다

 

그 다음으로는 MainActivity를 정의한다

 

 

<MainActivty.kt>

 

MainActivity의 전체 코드는 제일 아래에 적어놓겠다

 

먼저 전역 변수로 DataStore를 컨트롤할 dataStore라는 인스턴트

 

dataStore의 이름은 보다시피 "settings"로 했다

 

DataStore를 저장하거나 읽어올 객체를 만든다 = stringKey, numberKey

class MainActivity : AppCompatActivity() {

    private val dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    private val stringKey = stringPreferencesKey("textKey")
    private val numberKey = intPreferencesKey("numberKey")

 

다음으로 

 

저장 버튼에 대한 정의를 한다

 

정규식을 사용하여 입력한 값이 String 형태인지 아니면 Int 형태인지 확인한다

 

(정규식이 뭔지 모른다면?? 아래 링크 참조)

https://mmol.tistory.com/272

 

코틀린 안드로이드 정규식(Regex) 활용하기 -기본부터 심화

안드로이드에서 정규식은 주로 회원가입 같이 입력한 값이 특정한 양식을 따르는지 확인할 때 주로 사용됩니다. 1. 기본 개념 및 양식 ^ : 문자열의 시작을 의미. $ : 문자열의 끝을 의미.  . : 문

mmol.tistory.com

 

이렇게 따로 나누어서 저장하는 이유는 Int인지 String인지에 따라 사용해야하는 함수가 다르기 때문이다

 

(Int는 setInt로 String은 setText로 내가 커스텀한 함수를 사용해서 저장할거기 때문)

 

DataStore의 저장은 비동기로 이루어지기 때문에 여기서 Coroutine을 사용해야한다

binding.save.setOnClickListener {
            val data = binding.editText.text.toString()
            val regex = Regex("-?\\d+(\\.\\d+)?")

            if (data.isNotEmpty()) {
                CoroutineScope(Dispatchers.Main).launch {
                    if (regex.matches(data)){
                        // 숫자일 경우
                        Log.d("MainActivity", "숫자 저장")
                        setInt(data.toString().toInt())
                    }
                    else {
                        // 문자일 경우
                        Log.d("MainActivity", "문자열 저장")
                        setText(data.toString())
                    }
                }
            } else {
                Toast.makeText(this, "무언가를 입력하세요", Toast.LENGTH_SHORT).show()
            }
        }
        
private suspend fun setText(text: String) {
    this.dataStore.edit { preferences ->
        preferences[stringKey] = text
    }
}

private suspend fun setInt(number: Int) {
    this.dataStore.edit { preferences ->
        preferences[numberKey] = number
    }
}

 

다음으로 저장한 데이터를 꺼내본다

 

여기서 catch를 사용한 이유는 혹시 위에서 찾으려고 하는 dataStore의 이름 "settings"가 없다면

 

바로 에러를 띄우기 때문이다

 

그렇기 때문에 값을 저장하지 않고 데이터를 읽으려고 하면 에러가 발생하기 때문에 catch를 사용했다

 

그리고 map 함수를 사용해서 혹시 해당 preference에 아무 값이 없다면 즉, null이라면 ""을 넣어주게 했다

 

정상적으로 불러왔다면 textData에는 저장한 String 데이터가 Flow 형태로 들어있을 것이다.

 

그렇기 때문에 textData를 collect해서 해당 값을 사용할 수 있게된다

 

Int 부분도 동일하다

 

binding.readText.setOnClickListener {
        val textData: Flow<String> = this.dataStore.data
            .catch { exception ->
                if (exception is IOException) {
                    emit(emptyPreferences())
                } else {
                    throw exception
                }
            }
            .map { preferences ->
                preferences[stringKey] ?: ""
            }
        CoroutineScope(Dispatchers.Main).launch {
            textData.collect {
                binding.textView.text = it
            }
        }
    }

    binding.readInt.setOnClickListener {
        val intData: Flow<Int> = this.dataStore.data
            .catch { exception ->
                if (exception is IOException) {
                    emit(emptyPreferences())
                } else {
                    throw exception
                }
            }
            .map { preferences ->
                preferences[numberKey] ?: 0
            }
        CoroutineScope(Dispatchers.Main).launch {
            intData.collect {
                binding.textView.text = it.toString()
            }
        }
    }
}

 

<결과>

 

String 데이터를 저장하고 불러오기
Int 데이터를 저장하고 불러오기


3. MainActivity의 전체 코드

import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.datastore.core.DataStore
import androidx.datastore.preferences.core.*
import androidx.datastore.preferences.preferencesDataStore
import com.example.selftest.databinding.ActivityMainBinding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import java.io.IOException

class MainActivity : AppCompatActivity() {

    private val dataStore: DataStore<Preferences> by preferencesDataStore(name = "settings")
    private val stringKey = stringPreferencesKey("textKey")
    private val numberKey = intPreferencesKey("numberKey")
    private val booleanKey = booleanPreferencesKey("booleanKey")

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.save.setOnClickListener {
            val data = binding.editText.text.toString()
            val regex = Regex("-?\\d+(\\.\\d+)?")

            if (data.isNotEmpty()) {
                CoroutineScope(Dispatchers.Main).launch {
                    if (regex.matches(data)) {
                        // 숫자일 경우
                        Log.d("MainActivity", "숫자 저장")
                        setInt(data.toString().toInt())
                    } else {
                        // 문자일 경우
                        Log.d("MainActivity", "문자열 저장")
                        setText(data.toString())
                    }
                }
            } else {
                Toast.makeText(this, "무언가를 입력하세요", Toast.LENGTH_SHORT).show()
            }
        }

        binding.readText.setOnClickListener {
            val textData: Flow<String> = this.dataStore.data
                .catch { exception ->
                    if (exception is IOException) {
                        emit(emptyPreferences())
                    } else {
                        throw exception
                    }
                }
                .map { preferences ->
                    preferences[stringKey] ?: ""
                }
            CoroutineScope(Dispatchers.Main).launch {
                textData.collect {
                    binding.textView.text = it
                }
            }
        }

        binding.readInt.setOnClickListener {
            val intData: Flow<Int> = this.dataStore.data
                .catch { exception ->
                    if (exception is IOException) {
                        emit(emptyPreferences())
                    } else {
                        throw exception
                    }
                }
                .map { preferences ->
                    preferences[numberKey] ?: 0
                }
            CoroutineScope(Dispatchers.Main).launch {
                intData.collect {
                    binding.textView.text = it.toString()
                }
            }
        }
    }

    private suspend fun setText(text: String) {
        this.dataStore.edit { preferences ->
            preferences[stringKey] = text
        }
    }

    private suspend fun setInt(number: Int) {
        this.dataStore.edit { preferences ->
            preferences[numberKey] = number
        }
    }
}

이상입니다!

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

반응형

댓글()