본문 바로가기

프로그래밍

(73)
인수테스트 격리 유스콘 마지막 과제를 진행하고 나서 제이슨님이 아래와 같은 질문을 주셨다. 인수테스트를 작성하셨는데 테스트 격리를 매번 테스트를 수행하고 초기화를 해주는 작업을 하신 것 같다. 선택하신 방법 외에 어떤 방법이 있는지? 나는 @Transactional 어노테이션을 쓰면 될 것 같다고 하였고 추가로 테스트 메서드에 어노테이션을 붙여주면 정상적으로 동작할 것 같냐는 질문에 나는 아래와 같이 답변하였다. 동작할 것 같다. 발생할 수 있는 문제로는 실제로 데이터의 변경이 일어나는 서비스 로직에 @Transactional 어노테이션을 붙이지 않고 테스트에만 붙이는 경우 테스트는 통과하는데 실제로 해당 로직에서 에러가 발생할 수도 있을 것 같다. 과연 정상적으로 동작하였을까? 한번 알아보도록 하자. 테스트 격리 인수..
RESTful API API를 개발하다 보면 혹은 많은 회사의 JD의 자격 요건을 보면 이러한 문장을 흔히들 볼 수 있다. RESTful API 설계 및 개발 경험누구나 흔하게 REST라는 말을 쓰지만 잘 모르겠는 주제인데 최근에 플람님이 아래와 같은 질문을 주셨다. RESTful 하게 개발하려 하신 것 같은데 호출 URL 들이 동사로 되어있는 것 같은데 어떤 의도가 있으신가요?그 질문을 받고 순간 아차 싶었고 순간 당황해서 RESTful하게 개발하려 했는데 그 부분은 놓친 것 같다라고 답변하였지만 명확하게 정리하지 못한 것 같아서 정리를 해보려 한다. RESTful API REST는 REpresentational statue Transfer의 약자로 웹의 장점을 최대한 잘 활용할 수 있는 제약조건의 집합이다. REST 아키..
[코틀린 인 액션] 2장. 코틀린 기초 함수와 변수 코틀린 함수 기본구조 fun 함수이름 (파라미터 목록) : 반환타입 { return 함수 본문 } // 아무런 값을 반환하지 않는 함수 fun printHelloWorld() { println("Hello World") } // 블럭문이 아닌 식으로 정의 가능 fun printHelloWorld() = println("Hello World") // if는 문장이 아니고 식(expression)이다. fun sum(a: Int, b: Int): Int { return if (a > b) a else b } // 식이 본문인 함수 fun maxNum2(a: Int, b: Int) = if (a > b) a else b 반환 타입을 생략할 수 있는이유는 정적 타입 지정 언어여서 컴파일러가 타입추론..
[코틀린 인 액션] 1장. 코틀린이란 무엇이며, 왜 필요한가? 코틀린 주요 특성 정적 타입 지정 언어 자바와 마찬가지로 정적 타입 지정 언어 성능 런타임에 어떤 메서드를 호출할지 알아내지 않아도되 메서드 호출이 빠름 신뢰성 컴파일러가 검증하기 때문에 오류로 중단될 가능석이 적음 유지보수성 도구지원 코틀린의 철학 실용성 연구를 위한 언어가 아닌 실제 문제를 해결하기 위해 만들어진 실용적인 언어 이미 성공적으로 검증된 해법과 기능에 의존함 간결성 코드가 간결하여 파악하기 쉬움 getter, setter, 생성자 파라미터를 필드에 대입하는 로직 등을 묵시적으로 제공 안전성 JVM 기반으로 동작하여 이미 상당한 안전성을 보장받음 상호운용성 자바와 매우 높은 호환성을 가짐 참고문서 코틀린 인 액션 - 드미리 제로프, 스트나 이코바
블록체인이란 블록체인 정보를 블록이라는 단위로 저장하여 블록들을 체인형태로 묶은 저장기술 블록 헤더에 블록 정보와 이전 블록의 해시(hash pointer)를 가짐 해시를 가지기떄문에 앞에 어떤 블록이 와야하는지 알 수 있음( 블록의 순서를 결정할 수 있음) 블록 높이 이전 블록이 아래, 최근블록이 위로오도록 sort하면 블록이 생성될때마다 높이가 증가 블록의 순서 = 높이라고함( 첫번째 블록은 편의상 높이를 0) 블록 생성 주기 블록생성 시간: 다음 블록을 생성하기까지 걸리는 시간 블록생성 주기: 생성 시간이 비교적 일정한경우 합의(Consensus) PoW: 계산이 어려운 문제를 풀어 제안자격을 취득 PoS: 플랫폼 토큰을 보유한 양과 기간에 따라 결정적으로 또는 확률적으로 취득 BFT: 정해진 순번 또는 정해진..
Test Double, Stub, Spy, Mock 대역(Test Double) 외부요인(테스트 대상의 파일 시스템접근이나 DB에서 데이터 조회, 외부 서버와 http통신)에 의존적인 테스트는 때때로 원활한 테스트를 진행하기 힘든 경우가 발생할 수 있다. 이때 실제 객체를 대신 사용할 객체를 테스트 더블이라고 한다. 테스트 더블의 종류에는 Stub, Fake, Spy, Mock등이 있다. Stub 구현을 단순한 것으로 대체한다. 전체 기능이 아닌 테스트에 맞게 일부 기능에 집중하여 원하는 기능대로 동작하게 구현한다. Fake 실제 구현이 존재하는 객체로 실제로는 사용할 수 없지만, 테스트를 위해 사용하는 객체 수행하려는 테스트가 외부 환경에 의존적인 경우(fake DB) Spy 호출된 내역을 기록한다. 기록한 내용은 테스트 결과를 검증할 때 사용한다. M..
HTTP 헤더 HTTP 헤더 - 일반 헤더 header-field = field-name":" OWS field-value OWS(OWS: 띄어쓰기 허용) field-name은 대소문자 구분 없음 HTTP 전송에 필요한 모든 부가정보 표현 Content-Type: 표현 데이터의 형식에 대한 정보,미디어 타입이나 문자 인코딩(application/json, charset=utf-8...) Content-Encoding: 표현 데이터를 압축하기위해 사용(gzip, deflate, identity) Content-Language: 표현 데이터의 자연 언어(ko, en) Content-Length: 표현 데이터의 길이, 바이트 협상 클라이언트가 선호하는 표현 요청으로 요청을 보낼 경우에만 사용한다. Accept: 클라이언트가..
HTTP 상태코드 HTTP 상태코드 클라이언트의 요청의 처리상태를 응답 메세지에서 알려줌 1xx(informational): 요청이 수신돼 처리 중. 2xx(successful): 정상 처리됨 3xx(redirection): 요청을 완료하려면 추가적인 처리가 필요함 4xx(client error): 클라이언트 오류나 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx(server error): 서버 오류. 서버가 정상 요청을 처리하지 못함 2xx - successful 클라이언트의 요청을 성공적으로 처리함 200대에서 자주 볼 수 있는 응답코드 200 ok: 요청 성공 201 Created: 요청 성공으로 새로운 리소스 생성 202 Accepted: 요청은 접수되었으나 처리가 완료되지 않음 204 No Content..