Development 41

왜 String은 new 키워드를 사용하지 않을까?

들어가며 String literalString = "ABC"; String objectString = new String("ABC"); 이번 포스팅은 위 코드의 차이를 설명하기 위해 작성되었다. Java의 메모리 구조를 이해하기 위한 좋은 예제이므로 이미 알고 계신 분들은 가볍게 보시고, 모르는 분들도 쭉 글을 읽고 나면 금방 이해할 수 있다. String은 무엇인가? String은 한글로 '문자열'이라고 부른다. 문자열은 '문자 배열'을 줄여 부르는 말이다. 그래서 String == char[] 로 이해하고 char[]를 쉽게 사용하기 위해 만든 객체를 String이라고 생각해도 좋다. 사용방법은 크게 두 가지가 있다. 첫 번째는 리터럴방식으로 쌍따옴표(")사이에 원하는 문자열을 선언한다. 두 번째는 ..

Development/Java 2020.11.25

HTTP v1.0과 v1.1 비교하기

들어가며 이제 웹 개발을 처음 시작하는 학생이 있다. 클라이언트와 서버의 관계를 공부하던 중 문득 낯선 듯 낯설지 않은 HTTP라는 단어가 보인다. '이 학생에게 어떻게 설명을 하면 간단명료하게 설명하면서 핵심을 놓치지 않을 수 있을까?' 어려울 수 있지만 기술면접 준비를 한다 생각하고 고민해보기로 했다. HTTP의 탄생과 HTTP/0.9 HTTP의 의미 Hypertext Transfer Protocol를 줄여 HTTP라고 부른다. 그럼 세 단어가 어떤 의미인지 알 수 있다면 전체의 뜻도 알 수 있을 것이다. 먼저 Hypertext(하이퍼 텍스트)는 Hyperlink를 통해 다른 문서로 접근할 수 있는 문자를 말한다. Transfer(트랜스퍼)는 전송하다, 이동하다 라고 번역되며, Protocol(프로토..

Development/Infra 2020.11.16

HHH000206: hibernate.properties not found 오류 해결하기

들어가며 처음 Hiberate를 공부하며 맞이한 오류이기에 이렇게 기록으로 남겨 보려고 한다. 환경설정부터 오류가 나니 적잖이 당황스럽지만 조금의 구글링으로 원인을 파악할 수 있었다. 오류발생 환경 [ 오류 발생 환경설정 ] JDK 11 Hibernate 5.3.7.Final H2 1.4.200 [ 변경한 환경설정 ] JDK 8 Hibernate 5.3.7.Final H2 1.4.200 오류 내용 및 원인 원인을 찾아보니 JDK 11에서는 기존의 내장되어있던 JAXB가 사라지게 되었다. 만약 JDK 버전을 변경하지 않고 사용하시려면 별도의 JAXB 라이브러리를 추가하여 문제를 해결 할 수 있다. 아래는 오류에 대한 Stacktrace 이다. Exception in thread "main" java.lan..

[Mokito Docs] Part1. Mockito? 그게 뭐지?

[학습목표] Mockito의 개념을 이해한다 Mockito is a mocking framework that tastes really good. Mockito 프레임워크 공식 사이트에 나와있는 설명이다. Mockito는 맛이 좋은 목킹 프레임워크라... 아직은 혼란스럽지만 이번 글을 끝까지 읽고 나면 목히토에서 목디브 한잔이 생각 날 것이다. 우선 필요한 개념들을 먼저 설명하겠다. Test: 사전적으로는 '시험하다'의 뜻도 있지만, 여기서는 실험, 모의실험의 의미로 테스트라고 사용한다. Test code는 JUnit 프레임워크를 기반하는 모의실험 코드를 뜻한다. JUnit: 테스트 코드 작성을 도와주는 JVM 기반 프레임워크이다. 작성한 코드가 의도한 대로 동작하는지 간단한 방법으로 검증할 수 있다. M..

Development/Testing 2020.06.14

폐쇄망에서 K사 로그인API 적용 후기

폐쇄망에서 개발은 정말 신경 써야 할 것이 많다. 그중에 대외 시스템과 연계하는 개발은 더더욱 신경 쓸 것이 많다. 이번에는 F 생명보험사의 K사 로그인 방식을 도입하기 위해 시행착오를 겪었던 후기를 올린다. 절차는 다음과 같았다. K사의 개발 가이드문서 및 샘플 소스를 받는다. 인프라 팀과 협의하여 대외망으로 연결할 IP 및 도메인 이름을 정의하여 K사에 전달한다. K사는 해당 IP를 서비스에 등록하여 테스트를 진행할 수 있도록 한다. 내부 서버와 대외망으로 연결할 수 있는 IP를 연결한다. 샘플 소스를 기반으로 테스트 데이터를 API 요청을 보낸다. 정상적으로 데이터가 응답되는지 확인한다. 간단해 보이는 절차지만, 전체 흐름을 개발자가 혼자 통제하는 것이 아니기 때문에 과정마다 신경 써야 할 곳이 많..

[개발 Tip] Intellij에서 lombok을 인식하지 못하는 경우 해결방법

인텔리제이를 처음 쓰다보니 낯설게 되어 간단한 오류에도 허둥지둥하게 되는데요, 그 중 가장 오랜기간 괴롭혔던 이슈를 소개하고자 합니다. Spring initializr을 통해 스프링 부트 프로젝트를 생성하다 보니 자연스럽게 lombok을 사용하게 됐습니다. 하지만 컴파일시에 자꾸 빨간줄이 가고 설정에서 구글링에서 제시하는 대부분의 해법인 Enable Annotation Processing을 체크해도 사라지지 않아 적잖이 당황했습니다.(런타임 시에는 또 정상적으로 돌아갑니다) 그러던 중 Stackoverflow에서 maven이나 gradle에 주입하는 것 말고 인텔리제이 플러그인 중 'lombok'을 설치해보라는 글이 있었고 이를 설치 후 재시작하니 한방에 해결되었습니다. 평소 줄 맞추는 것..

[개발 Tip] 무상태 프로토콜이란 무엇인가?

들어가며 '무상태 프로토콜은 무엇입니까??' 올해 TOPCIT 문제 중 하나였다. 듣기는 했는데 어떻게 설명해야 할지 몰라 답을 비우고 나오게 되었다. 시간이 흘러 최근에 네트워크 기초에 대해 공부하며 알게된 지식을 남기기 위해 포스팅을 하게 되었다. 무상태 프로토콜이란? HTTP는 기본적으로 무상태 프로토콜을 기반으로 한다. 프로토콜은 '규약', '약속'인데 무상태는 그럼 무엇인가? 통신은 기본적으로 클라이언트와 서버 사이의 의사소통이다. 서로가 통신을 할 때 상태정보, 세션 등을 요구하지 않는 것이 무상태의 정의가 된다. 이는 서버 디자인을 단순하게 만들어 주며, 리소스의 소비를 억제해준다. 다만 인증정보에 대해 매 요청마다 인증을 해야하는 불편이 발생할 수 있다. 무상태 프로토콜의 이런 단점은 쿠키..

Development/Etc 2020.05.30

[개발 Tip] URL과 URI의 차이점을 무엇일까?

최근에 부족한 네트워크의 기초를 공부하다 URL과 URI의 차이를 알게되어 공유하고자 글을 남기게 되었다. 우선 각 용어의 아래 문장의 약어이다. URL : Uniform Resouce Locator URI : Uniform Resouce Identifier 굳이 해석을 하자면 '통일된 자원 위치'와 '통일된 자원 식별자' 따위로 해석된다. 따라서 URL은 자원의 위치를 기존의 정해논 규칙대로 표시하는 방법이고, URI는 자원의 구분자를 정해진 형태논 규칙대로 표시하는 방법이다. 정리하자면 URL은 단순히 파일의 위치를 표시한다면, URI는 파일의 위치일수도, 이름일수도 있는 파일의 식별자를 표시한다. URI가 URL을 포함하는 개념이라고 생각하면 좋다. URI에 포함 되는 ..

Development/Etc 2020.05.30

테스트를 시작하는데 방해하는 것들

테스트의 중요성이 대두되고 있습니다. 이미 기본적인 개발룰로 적용되어 강제적으로 작성해야하는 회사도 있고, 아직까지 테스트는 거추장스럽고 불필요한 시간을 소모시키는 천덕꾸러기로 생각하는 회사도 있습니다. 오늘날은 바야흐로 테스트 코드의 과도기라고 할 수 있다고 생각합니다. 이런 시대에 맞춰 테스트코드를 작성하기 시작하는 분들을 위해, 테스트 코드를 작성하기에 어떤 것들이 방해하는지 경험적이고 주관적인 생각들을 꺼내보겠습니다. 1. TDD(Test-Driven Development) '응? 테스트 열풍의 중심인 TDD가 오히려 테스트를 시작하는데 방해한다고?' 네 그렇습니다. TDD는 생각보다 극단적으로 치우쳐있습니다. 어떤 개발을 하든 테스트 코드를 작성해두고, 이를 하나씩 통과시켜가는 과정으로 개발을 ..

Development/Testing 2020.05.24

IntelliJ 에서 Static method 호출하기. with JUnit

"좋아, TDD를 배웠으니 한번 적용시켜볼까?" 기대에 찬 마음으로 IntelliJ(이하 인텔리제이)를 열고, 테스트 코드를 작성해본다. 하지만 생각만큼 매끄럽게 진행되지 않을 것이다. assert...T....h.. 아무리 자동완성 단축키를 눌러도 어느 하나 완성되는 메서드가 없다. 평소에는 그렇게 대단해보였던 인텔리제이가 이렇게 멍청해보일수가 없다. 이 과정이 트라우마가 되어 TDD를 알지만 실천하지 못하는 분들을 간혹 본다. 그 분들을 위해 간단히 포스팅을 한다. 과정보다 해결방법을 빨리 알고 싶은 분들은 결론으로 이동하시면 됩니다. 문제상황 자동완성이 안된다. control + space, control + shift + space 등등 어떤 자동완성도 도와주지 않는다. 원인 사실 인텔리제이는 s..

Development/Testing 2020.05.23