전체 글 36

[Python] WSGI 그리고 WebOb

배경 사내에서 개발 완료 후, 테스트를 진행하게 되었습니다. 제가 테스트를 할 때는 잘되었는데, 다른 개발자가 테스트를 할 때 정상적으로 동작하지 않았습니다. 화면에서 서버에 데이터를 넘기는데, body의 특정 속성이 0 ~ 10000 사이즈 까지 넘길 수 있었습니다. 해당 데이터에 500정도 사이즈를 넘겼을 때는 정상적으로 동작을 했지만, 최대값에 근접한 사이즈로 데이터를 넘길 때면 에러가 발생하곤 했습니다. 제가 테스트 할 때는 사이즈를 크게 안 넣었고, 다른 개발자가 테스트 할 때는 최대 사이즈로 값을 넣어서 에러가 발생한 것이었습니다.Spring 프레임워크를 사용한 서비스에서는 해당 사이즈에 대한 에러가 발생하지 않았지만, python 프레임워크로 개발한 서비스에서는 발생한 점이 신기했습니다. 그..

개발 이슈 2024.12.03

[Test] ArgumentCaptor 란?

배경 테스트 코드를 짜면서 Stubbing을 통해서 제가 원하는 대로 코드를 조작할 수 있었습니다. 또한 해당 메서드의 Stubbing이 잘 동작하는지 Mockito.verify, BDDMockito.then 을 이용하여 해당 메서드가 몇 번 호출이 되었고 어떤 인자를 갖고 호출이 되었는지 확인할 수 있었습니다. 점차 다양한 테스트 코드를 짜면서 해당 코드의 인자의 값이 로직에서 의도한 대로 세팅이 되었는지 확인을 필수로 해야하는 경우가 생겼습니다. 이 때 자주 사용했던 ArgumentCaptor 라는 클래스에 대해 알아보도록 하겠습니다. 이 글에서 사용한 코드는 해당 github에 저장되어 있습니다. 테스트 코드 GitHub - Rabongg/Test-Junit: Junit을 이용한 test 예제 Ju..

[Test] Mock, Spy

배경 테스트 코드를 작성할 때 Mock, Spy, Stubbing이라는 단어는 빼 놓을 수 없습니다. 테스트 코드를 처음 접했을 때 해당 용어들이 많이 헷갈렸습니다. 테스트 코드를 계속 작성을 해나가면서 어떤 상황에서는 Spy를 사용하고 어떤 상황에서는 Mock을 사용하고 이런 것들을 stubbing이라고 말하는 구나를 깨우칠 수 있었습니다. 이번에는 Test의 기본이 되는 Mock, Spy에 대해서 얘기해보려고 합니다. 해당 글에서 사용한 코드는 밑의 github에 있습니다. 테스트 소스 코드 GitHub - Rabongg/Test-Junit: Junit을 이용한 test 예제 Junit을 이용한 test 예제. Contribute to Rabongg/Test-Junit development by cr..

[Test] 테스트 코드를 왜 작성해야할까?

배경 회사에서 테스트 코드를 작성하면서 문득 테스트 코드를 왜 작성해야하는가에 대한 생각을 하게되었습니다. 많은 블로그에서 테스트 코드를 잘 작성하면 로직이 잘 동작하는지 빠르게 확인할 수 있고, 여러 예외 케이스들도 확인할 수 있다 등 여러 장점에 대해서 설명을 하고 있습니다. 오늘은 제가 테스트 코드를 작성하면서 개인적으로 테스트 코드를 작성하면 어떤 이점이 있는지 얘기해보려고 합니다. 제가 여기서 다루는 테스트 코드는 Unite Test 를 의미합니다. 해당 기능 빠르게 확인 테스트 코드를 통해서 기능을 쉽게 확인할 수 있습니다. 기능이라면 해당 로직에 어떤 값이 들어왔을 때 어떻게 동작하는지를 파악할 수 있다는 뜻입니다. java spring boot를 기준으로 보겠습니다. 보통 spring bo..

[NETWORK] ARP란?

네트워크를 공부할 때, OSI 7계층이라는 것을 배웁니다. 송신쪽에서 7계층에서 1계층으로 데이터가 캡슐화되어 전달을 하면 수신쪽에서 역캡슐화를 하면서 데이터를 주고받습니다. 그럼 어떻게 요청하는 쪽(클라이언트라고 하겠습니다)에서 수신하는 쪽(서버)의 위치를 알 수 있을까요?? 2계층의 물리적 주소인 MAC 주소와 3계층의 논리적 주소인 IP주소로 원하는 목적지로 데이터를 전달할 수 있는데요. IP는 우리가 어떤 네트워크에 접속되어 있는지에 따라서 바뀌게 됩니다.(예를 들어 집, 도서관, 핫스팟 등등) 반면, MAC 주소는 하드웨어를 만드는 업체가 임의로 정한 주소이고 일반적으로 ROM에 고정되어 나오기에 변경이 불가능합니다. (사실 변경을 원하면 할 수 있긴 합니다.. 몇몇 운영체제에서는 변경이 불가능..

CS 2023.05.13

[Spring] Spring Container란?(feat: DI, IOC, Singleton)

DI, Ioc, Singleton, Bean 등 Spring을 공부하는 사람이라면 한 번쯤은 들어봤을 내용입니다. 저 또한 Spring을 처음 공부할 때, 블로그나 강의에서 많이 듣곤 하였습니다. Spring boot를 사용할 때 이러한 개념들이 헷갈려서 정리하려고 합니다. 이 글에서는 엄청 자세하게 이야기를 하지 않으려고 합니다. 제가 공부하면서 헷갈렸던 부분이나, 연관성이 어떻게 있는지에 대해서 풀어보려고 합니다. 자세한 내용이 궁금하시면 '김영한님의 스프링 핵심원리 기본편'을 들으시는 것을 추천드리겠습니다. Spring Container Spring Container는 쉽게 말해 객체를 관리해주는 컨테이너라고 생각하면 됩니다. 아무 객체나 관리해주는 것이 아니라, 당연히 개발자가 해당 객체를 관리해..

Spring 2023.01.17

[JUnit5] test code에서 Array 비교(assertarrayEquals vs assertEquals vs assertTrue)

JUnit을 이용하여 test code를 짤 때 assertTrue와 assertEquals를 이용해서 원하는 값이 나오는지 테스트를 하곤 합니다. Array를 비교할 때는 어떤 method를 쓰는 것이 좋은지에 대해 비교해보려고 합니다. assertTrue, assertArrayEquals, assertEquals 3개를 비교하려고 합니다. 저의 주관적인 생각이 들어가기에 원하는 상황에 원하는 method를 알아서 사용하면 됩니다. 코드는 다음과 같습니다. public class ArrayTest { @Test public void compareArrayTest() { List list1 = Arrays.asList("a", "b", "c", "d", "e", "f"); List list2 = Arra..

[Jackson] 왜 field가 1개인 DTO는 기본 생성자가 필요할까?(1)

API server를 개발하면서 DTO를 이용해서 client으로부터 request를 받거나 server내의 다른 layer로 넘기곤 합니다. Spring boot를 이용하여 프로젝트를 할 때도 DTO를 이용하여 데이터를 주고받곤 하였습니다. client가 Content-Type을 application/json 형태로 요청을 할 경우, Node.js 기반의 express 와 Nest.js와는 다르게 Spring boot는 Json을 객체로 변환시켜주는 과정이 필요합니다. 이 때, jackson library가 json을 객체로, 객체를 json으로 변환해줍니다. Jackson library는 별도로 설치할 필요가 없고 spring web mvc dependency를 설치하면 자동으로 설치가 됩니다. sp..

Spring 2022.12.15

[Lombok] Lombok에서 생성자 Annotation에 대해 알아보자

Spring 을 이용해서 프로젝트를 하면 Annotation을 이용해서 쉽게 코드를 작성할 수 있는 lombok 라이브러리를 사용하곤 했습니다. 수 많은 Annotation이 있다보니 정확히 내부적으로 어떻게 동작하는지도 모르고 종종 사용하였습니다. spring의 생성자 주입과 관련된 생성자 annotation에 대해서 헷갈려 정리하려고 합니다. 생성자 관련 Annotation 종류 Lombok에서 생성자 관련 Annotaion은 3가지가 있습니다. @AllArgsConstructor @RequiredArgsConstructor @NoArgsConstructor 하나씩 어떤 조건의 생성자를 만들어주는지 확인해 보겠습니다. @AllArgsConstructor 영어 뜻 그대로 모든 argument를 가지고 ..

Spring 2022.10.29

[Java] modifier(제어자)란?

Java를 사용하다 보면 메소드나 변수 심지어 클래스 앞에 public, private, final, abstract등을 볼 수 있습니다. 이러한 것을 modifier(제어자)라고 합니다. 오늘은 제어자에 대해서 이야기 해보려고 합니다. Modifier란? 제어자는 클래스, 변수 또는 메서드에 함께 사용되어 부가적인 의미를 부여합니다. 제어자의 종류로는 크게 접근 제어자와 그 외 제어자로 나눌 수 있습니다. 접근 제어자: public, protected, default, private 그 외 제어자: static, final, abstract 등 주로 제어자는 클래스나 멤버변수, 메서드에 사용되고 하나의 대상에 여러 제어자를 조합하여 사용이 가능합니다. 그러나 접근 제어자는 접근에 관련된 제어이기에 하나..

[JAVA] Java란? (JVM 아키텍처 (2))

저번 글에서 JVM 아키텍처에서 어떻게 class가 memory에 loading이되고 JVM memory 영역은 어떻게 이루어져 있는지에 대해 알아보았습니다. 오늘은 JVM에서 bytecode를 어떻게 실행시키는지에 대해 알아보겠습니다. 이전 글을 읽어야 이해가 조금 더 잘됩니다. 2022.05.11 - [웹/Java] - [JAVA] Java란? (JVM 아키텍처 (1)) [JAVA] Java란? (JVM 아키텍처 (1)) 요새 Spring boot를 이용하여 백엔드 개발을 하면서 프레임 워크와 마찬가지로 바탕이 되는 언어에 대해 공부하고 기록하려 합니다. 틀린 내용이 있으면 언제든 댓글로 지적해주세요!! JAVA란? Jav hanrabong.com JVM Architecture 3. Execution..