[TIL] POST-GET 비교, TDD 설명, sql query(tree, 계층)
질문 1 : POST, GET 차이
POST와 GET 차이 설명
어떻게 동작되는 지, 어디에 데이터가 담기는 지,
스프링을 하시는 분이라면 어떤 방법으로 데이터를 받아낼 수 있는지?
케이스에 대해 작성하시오.
POST
서버에 변경사항을 만들며 Content-type이 나뉨, Request에 body를 가지고 있어 값을 넣어 보낼 수 있다.
Content-type으로 request body에 어떤 타입의 데이터가 실릴 지 정해주며 application/x-www-form-urlencoded는 &으로 분리되고 =기호로 key-value tuple로 인코딩되며 binary-data에는 적합한 타입이 아님, multipart/form-data은 binary-data 를 보내기엔 적합한 타입이며 이 외에도 text/plain, application/json 등의 Content-type이 있다.
스프링에서는 @RequestBody 를 통하여 payload 를 읽거나 application/x-www-form-urlencoded의 경우 객체만으로도 읽을 수 있다. 단, application/json 타입으로 보내지는 경우엔 @RequestBody만을 통해 읽히며 메세지컨버터가 Body를 읽고 Io를 비워버리므로 body를 재사용하기 위해선 wrapper클래스를 구현하여 body값을 별도로 처리하거나 Io 버퍼가 비워지지 않도록 별도의 처리를 하는 방법이 필요하다.
GET
서버의 값이나 상태를 바꾸지 않고 Cashble함. 데이터는 URL의 파라미터로 보내지며 &으로 구분되고 key-value 로 이러우져있다.
스프링에서는 @RequestParam, 그냥 객체, @ModelAttribute, @PathVariable 로 받을 수 있음
질문 2 : 트리 테이블, SQL
트리 데이터를 표현할 데이터베이스 테이블을 작성하고 SQL 로 트리데이터를 뽑아내는 쿼리를 작성하세요.
Postgresql 기준이며 WITH RECURSIVE를 통한 재귀쿼리를 만든 뒤 재귀쿼리를 조인하여 작성한다.
id 와 parent_id 를 갖는 테이블을 작성한다는 기준으로 표현,
질문 3 : tdd란?
테스트케이스를 작성해 본 경험이 있는 지,
Mock object란? 무엇이고 왜 사용하는 지?
TDD란 무엇인 지?
TDD 작업 시 어려움은 어떤 게 있었는 지에 대해 서술하시고 더 나은 TDD를 위한 방안을 말하시오.
테스트케이스 작성 경험
테스트케이스는 작성해 본 경험이 있었으며 테스트케이스를 통해서 처리 로직이 변경되더라도 금방 아웃풋을 확인하여 자신의 변경된 코드를 신뢰할 수 있다고 느낀 경험이 있다.
Mock object란
행위 테스트를 하기 위해서 외부의 다른 서비스나 모듈을 사용하지 않고 가짜 객체를 생성해내어 해당 테스트를 위한 행위의 기능에 집중하여 테스트의 효용성을 높이는데 사용하는 것
tdd란
테스트 주도 개발이며 테스트케이스를 통해 먼저 인풋과 아웃풋을 작성한 뒤 테스트케이스를 검증하기 위한 로직을 작성하여 테스트 케이스가 정상적으로 동작하는 지 확인하는 것
tdd 작성 시 어려움
테스트를 먼저 작성한다는 것이 어려웠고 테스트를 실제로 작성하였다고 해도 간단하게만 짜놓고 실제로 로직을 짜는 것에 있어서 테스트보다는 로직에 집중을 하게 되다보니 테스트에 소홀해진다. 여러 케이스를 고려하기가 쉽지 않았다.
더 나은 TDD를 위해서는 요구사항과 발생할 수 있는 에러들에 대해서 상세히 정리하고 이에 따른 테스트케이스가 작성이 되어야하며 각 조건에 알맞는 시퀀스가 진행되도록 고려해야한다.
Leave a comment