카페라던지 공공장소에서 맥북을 사용할 일이 생겨서 고민끝에 Macin 제품에 맥북 잠금장치를 구매하여 사용한지 한달이 조금 지났습니다. 

가격이 3만6천500원이라 조금 비싼감은 있었습니다만, 해당제품에 리뷰가 많아서 구매를 망설이다가 구매를 하고 말았네요. 

최초에 구매했던 모델은 아래의 링크에 모델입니다. 

Macin 터치바 모델 

해당모델을 장착하던중 불량인걸 확인해서 아래의 모델로 교환을 해서 잘쓰고 있습니다. 

Macin 2세대 모델 





[카페에서 잠금장치를 사용한 모습]



Macin Gen2 Guide from kang on Vimeo.


잠금하는 방법은 위 동영상을 보시면 좀더 수월하게 알수 있습니다만, 저는 생각보다 엄청 해맸던거같네요 ..

잠금 걸쇠를 맥킨이라하고, 줄을 켄싱턴락이라고 합니다. 



구매시 반드시 확인할점


맥킨과 켄싱턴락을 장착한후 제대로 장착이 되었는지 확인하는것이필요합니다. 아래는 불량품인경우 장착사례 


터치바 모델은 켄싱턴락을 잠글때 일자로된 홈을 90도로 돌려주게되어있는데 이부분이 굉장히 빡빡하게 돌아갔습니다.

사진상으로 보면 완전히 일자로 되지 않습니다. 이때는 구매처에 문의한 후에 착샷을 찍어서 교환받도록 합니다. 

만약에 이 제품을 구매하실려면 Macin 2세대 모델  구매하시는 걸 추천드립니다. 잠금장치가 훨신 유연하게 되어있습니다. 


한달정도 제품을 사용해보니 굳이 단점으로 뽑자면 맥킨을 분실할경우 맥킨만 따로 구매할수가 없습니다. 그리고 장착시 처음에 적응되시기 전까지는 약간에 시간이 걸립니다.  


















블로그 이미지

클라인STR

,

최근에 들어서 Udemy 강좌속도가 너무 드려서 듣기힘들정도 느려져서 인터넷을 통해서 해결방법을 알아보았습니다. 


https://chrome.google.com/webstore/detail/touch-vpn/bihmplhobchoageeokmgbdihknkjbknd/related?hl=ko


크롬확장 프로그램 Touch VPN을  확장프로그램에 추가합니다. 



Touch VPN 플러그인을 실행합니다.  Switch location to 아래를 미국으로 변경해줍니다. 



Connect 클릭하여 실행한 후 VPN 접속이 완료되면 Udemy 강좌를 실행해봅니다.  사용후에 VPN을 Off해주도록 합니다.



블로그 이미지

클라인STR

,

11번가 결제 화면에서 배송지 정보 입력란에서 배송지목록을 선택합니다. 


배송지 정보에서 기본주소지 또는 선택하고자하는 주소지에 연락처정보가 비어있는경우 해당 연락처를 선택하고 수정버튼을 눌러줍니다. 



배송주소에서 연락처1에 내용이 비어있으므로 정보를 입력하고 확인버튼을 선택합니다. 


나머지 결제 과정 진행시 정상적으로 진행되는것을 확인할 수 있습니다.


블로그 이미지

클라인STR

,

React 프로젝트에서 node-sass를 설치하고 @import 로 변수를 참조하였는데  scss가 동작하지 않았다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
  "name""person-list2",
  "version""0.1.0",
  "private"true,
  "dependencies": {
    "react""^16.8.6",
    "react-dom""^16.8.6",
    "react-scripts""0.9.x"
  },
  "devDependencies": {},
  "scripts": {
    "start""react-scripts start",
    "build""react-scripts build",
    "test""react-scripts test --env=jsdom",
    "eject""react-scripts eject"
  }
}

cs

[변경전 package.json]

package.json 파일에서 react-scripts 버전을 2.0.3으로 변경하고 npm install을 다시 실행해줍니다.





1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
{
  "name""city-tours",
  "version""0.1.0",
  "private"true,
  "dependencies": {
    "node-sass""^4.12.0",
    "react""^16.8.6",
    "react-dom""^16.8.6",
    "react-scripts""2.0.3"
  },
  "devDependencies": {},
  "scripts": {
    "start""react-scripts start",
    "build""react-scripts build",
    "test""react-scripts test --env=jsdom",
    "eject""react-scripts eject"
  },
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]
}
 
cs


[변경된 package.json]



참고 : https://reactjs.org/blog/2018/10/01/create-react-app-v2.html

https://velog.io/@velopert/create-react-app-v2

블로그 이미지

클라인STR

,

작년 8월에 퇴직한 이후에 아직까지 재취업을 하고 있지않아서, 종합소득세 신고를 처음 하게되었다. 


국세청홈텍스에 회원가입이 반드시 필요합니다. 


https://www.hometax.go.kr 접속하여 로그인을 합니다. 




해당 하면의 링크를 이용하여 종합소득세 신고화면으로 이동합니다. 




중간퇴사자인경우 근로소득자 신고서에서 정기신고 작성을 선택합니다. 경정청구작성에 경우는 신고한내용을 정정할때 이용합니다.



조회를 하면 신규작성이 됩니다. 연말정산 불러오기를 선택하면 회사에서 제출한 연말정산 내역을 불러올 수있는 화면이 나타납니다. 




근로소득 불러오기 팝업이 뜨고 이전 근무지 정보와 급여액, 결정세액을 확인할 수 있습니다. 위 내용대로 적용하기 버튼을 선택해줍니다.

페이지 하단에 저장 후 다음이동 버튼을 선택해줍니다. 




근로지별 소득명세란에 이전 화면에서 선택했던 근무지 정보랑 총급여, 근로소득공제 근로소득금액이 나타납니다. 21,22,23번항목에 값이 반드시 나타나야합니다. 



이전직장에 연말정산내역을 불러오면 기본적으로 국민연금보험료공제 금액이랑 고용보험료 부분에 값이 표시됩니다. (현재 스샷에서 고용보험료 0로 나온건 스샷을 잘못찍어서 그런거에요 -_-)

건강보험료 금액을 입력하기위해서 계산비 버튼을 선택합니다.



팝업이 나타나면 귀속년도를 전년도로 선택하고 작년에 근무했던 개월 수만큼 체크해줍니다. 8월까지 근무했을경우에는 8월까지로 체크해야 합니다. 계산하기와 적용하기 버튼을 선택해줍니다.


 



그 밖에 소득공제란에 해당되는내용이 있는 부분에 금액을 입력해줍니다. 저는 주택마련저축 신용카드 등 사용액이 해당되어 입력하였습니다. 



저는 주택청약종합처죽을 넣고있어서 주택청약종합 저축에 가입일자를 2014년 12.31일 이전가입을 선택하였습니다. 

납입금액을 입력하고 계산하기 버튼을 눌러주면 공제금액이 나타납니다. 적용하기 버튼을 눌러줍니다. 



귀속년도를 선택하고 해당근무월까지 만 체크하고 불러오기를 선택합니다. 

불러오기를 하면 아래란에 사용내역에 다한 화면이 나타납니다. 계산하기를 선택하면 화면 맨 아래에 신용카드 등 소득공제금액란에 공제액이 자동계산되어 집니다. 적용하기 버튼을 선택해줍니다. 


세액공제란에 해당되는내용을 추가로 입력해주면됩니다. 저는 보장성보험료, 의료비를 입력해주었습니다. 



입력방법은 앞전에 팝업과 동일합니다. 


화면아래 스크롤을 내리면 납부(환급)세액이 나타납니다. 납부세액값이 마이너스이면 환급을 받을수 있습니다. 화면 아래에 환급받을 계좌를 입력하면 됩니다. 환급액이 마이너스가 아닐경우는 계좌입력화면이 나타나지 않습니다. 

신고서 작성완료를 눌르면 아래와 같은 화면이 나타납니다. 



신고서내용 요약화면이 타나타고 하단에 신고서 제출하기 버튼을 선택하면 신고가 완료됩니다. 



블로그 이미지

클라인STR

,


https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi 접속하여 React Developer Tools 

크롬브라우저에 추가한다.




chrome://extensions 입력해서 아래와같이 dev 플러그인 설정을 한다. 





크롬개발자 도구를 열고 React 탭을 확인한다. 



출처 : https://reactjs.org/blog/2015/09/02/new-react-developer-tools.html#installation


사용법은 아래 링크를 참조한다. 

https://github.com/facebook/react-devtools/blob/master/README.md#the-react-tab-doesnt-show-up 


블로그 이미지

클라인STR

,

JDK 버전을 11로 올리고 Gradle 프로젝트를 실행하는도중 해당에러를 마주하게되었다.


lombok.javac.apt.LombokProcessor could not be initialized. Lombok will not run during this compilation: java.lang.ClassCastException: class org.gradle.api.internal.tasks.compile.processing.IncrementalFiler cannot be cast to class com.sun.tools.javac.processing.JavacFiler (org.gradle.api.internal.tasks.compile.processing.IncrementalFiler is in unnamed module of loader org.gradle.initialization.MixInLegacyTypesClassLoader @66f57048; com.sun.tools.javac.processing.JavacFiler is in module jdk.compiler of loader 'app')

at lombok.javac.apt.LombokProcessor.getJavacFiler(LombokProcessor.java:447)

at lombok.javac.apt.LombokProcessor.init(LombokProcessor.java:90)

at lombok.core.AnnotationProcessor$JavacDescriptor.want(AnnotationProcessor.java:112)

at lombok.core.AnnotationProcessor.init(AnnotationProcessor.java:165)

at lombok.launch.AnnotationProcessorHider$AnnotationProcessor.init(AnnotationProcessor.java:73)

at org.gradle.api.internal.tasks.compile.processing.DelegatingProcessor.init(DelegatingProcessor.java:57)

at org.gradle.api.internal.tasks.compile.processing.IsolatingProcessor.init(IsolatingProcessor.java:44)

at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(JavacProcessingEnvironment.java:678)

at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(JavacProcessingEnvironment.java:778)

at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:873)

at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1214)

at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1326)

at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)

at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:936)

at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)

at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)

at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)

at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)

at org.gradle.api.internal.tasks.compile.AnnotationProcessingCompileTask.call(AnnotationProcessingCompileTask.java:89)

at org.gradle.api.internal.tasks.compile.ResourceCleaningCompilationTask.call(ResourceCleaningCompilationTask.java:57)

at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:50)

at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:36)

at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:100)

at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:52)

at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)

at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:49)

at org.gradle.api.internal.tasks.compile.AnnotationProcessorDiscoveringCompiler.execute(AnnotationProcessorDiscoveringCompiler.java:35)

at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:39)

at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory$2.execute(IncrementalCompilerFactory.java:110)

at org.gradle.api.internal.tasks.compile.incremental.IncrementalCompilerFactory$2.execute(IncrementalCompilerFactory.java:106)

at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:59)

at org.gradle.api.internal.tasks.compile.incremental.IncrementalResultStoringCompiler.execute(IncrementalResultStoringCompiler.java:43)

at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:153)

at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:121)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.base/java.lang.reflect.Method.invoke(Method.java:566)

at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)

at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.java:50)

at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)

at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:131)

at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)

at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)

at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)

at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)

at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:120)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:99)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:77)

at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)

at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)

at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)

at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)

at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)

at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)

at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)

at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)

at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)

at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)

at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)

at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)

at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.run(EventFiringTaskExecuter.java:51)

at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:301)

at org.gradle.internal.operations.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:293)

at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:175)

at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:91)

at org.gradle.internal.operations.DelegatingBuildOperationExecutor.run(DelegatingBuildOperationExecutor.java:31)

at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:46)

at org.gradle.execution.taskgraph.LocalTaskInfoExecutor.execute(LocalTaskInfoExecutor.java:42)

at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:277)

at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareWorkItemExecutor.execute(DefaultTaskExecutionGraph.java:262)

at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:135)

at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:130)

at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.execute(DefaultTaskPlanExecutor.java:200)

at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.executeWithWork(DefaultTaskPlanExecutor.java:191)

at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$ExecutorWorker.run(DefaultTaskPlanExecutor.java:130)

at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)

at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)

at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)

at java.base/java.lang.Thread.run(Thread.java:834)




1
2
3
4
5
dependencies {
     
        implementation('org.projectlombok:lombok:1.18.2')
    
}
cs


build.gradle 파일에 디펜더시 설정중 롬복관련 라이브러리 설정을 위와같이 변경한다.



참고링크 

https://kb.novaordis.com/index.php/Lombok

https://decaffein.tistory.com/entry/lombokjavacaptLombokProcessor-could-not-be-initialized-Lombok-will-not-run-during-this-compilation

https://stackoverflow.com/questions/50519138/annotationprocessor-gradle-4-7-configuration-doesnt-run-lombok

블로그 이미지

클라인STR

,

[PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister


JDK 버전을 11로 변경하고 스프링부트 프로젝트를 실행한경우 위와 같은 에러가 발생하였다.


1
2
3
4
5
6
<!-- https://mvnrepository.com/artifact/org.javassist/javassist -->
<dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.23.1-GA</version>
</dependency>

cs



해당라이브러리를 추가하고 다시 실행하면 정상적으로 잘 실행된다. 




출처 : https://stackoverflow.com/questions/52913597/springboot-org-hibernate-mappingexception-could-not-get-constructor-for-org-hi

블로그 이미지

클라인STR

,