목록분류 전체보기 (253)
개발일기
메서드로 재정의하면 어떤 일이 일어나는지를 정확히 정리하여 문서로 남겨야 한다. 상속용 클래스는 재정의할 수 있는 메서드들을 내부적으로 어떻게 이용하는지(자기사용)문서로 남겨야 한다. 메서드 주석에 @implSpec 태그를 붙여주면 자바독 도구가 생성해줌.내부 매커니즘을 문서로 남기는 것만이 상속을 위한 설계의 전부는 아님. 효율적인 하위 클래스를 큰 어려움 없이 만들 수 있게 하려면 클래스의 내부 동작 과정 중간에 끼어들 수 있는 훅(hook)을 잘 선별하여 protected 메서드 형태로 공개해야 할 수도 있다. removeRange 메서드 예시) protected the removeRange(int fromIndex, int toIndex) fromIndex(포함) ~ toIndex(미포함)까지의 ..

테스트코드에 관심이 많다보니, 자연스럽게 성능테스트에도 눈길이 갔습니다. 그래서 지금까지 성능 테스트를 Jmeter 사용하여 로컬에서 진행했습니다. 그러다가 문득 든 의문은 로컬에 있는 스펙과 서버에있는 스펙이 다른데 서버에서 성능 테스트를 더 좋다는 결론이 나왔습니다. 기존처럼 Jmeter로 진행할까도 고민했지만, k6 javascript 사용하여 손쉽게 성능 테스트를 할 수 있다는 장점이 있어 빠르게 습득할 수 있겠다는 생각이 들어 k6로 진행하겠습니다. services: influxdb: image: influxdb:1.8 ports: - "8086:8086" environment: - INFLUXDB_DB=k6 networks: - monito..

SonarQube 관련 글을 읽고 오시면 조금 더 이해하기 좋습니다. https://seounggyun.tistory.com/302 정적 코드 분석 AWS EC2 SonarQube 사용하여 Github Action CI 하기🤗 정적 코드 분석 vs 동적 코드 분석정적 코드 분석은 코드가 실행 되기 전 소스 코드 또는 바이너리 코드를 분석해 코드를 직접 실행하지 않고 코드의 구조, 문법, 스타일, 잠재적인 버그, 코seounggyun.tistory.com해당 글은 JaCoCo 테스트 커버리지에 대한 내용이기에 SonarQube는 제외하고 글을 작성하겠습니다. 해당 글을 작성한 계기는 SonarQube에서 단위 테스트 코드를 작성했음에도 불구하고, 테스트 커버리지를 인식하지 못하여 찾아보던 중, JaC..
해당 Step에서 레거시 코드를 바탕으로 테스트코드를 작성하는 것을 연습한다. 해당 Step을 하면서 느낀 점은 기존의 코드를 변경하지 않고 테스트코드를 작성하니, 테스트코드에 비즈니스 로직이 많이 들어간다. 나의 생각은 좋은 테스트 코드는 최대한 테스트코드에서 비즈니스 로직을 작성하지 않는 테스트코드가 좋은 코드라는 생각이다. 물론 Mockito를 최대한 사용하지 않는 것도 좋은 테스트코드이다. 해당 Step을 하면서 테스트코드에서 객체를 생성 할 때, 생성자를 만든다면 해당 코드는 레거시 코드를 수정하는 행위이기에 TestFixture 사용하여 객체를 생성하는 것을 구현하였다. 이제 부터 본격적으로 내가 작성한 코드를 보여드리겠습니다. MenuGroupRestControllerTest.javapa..
가장 우선적으로 Beacon 을 사용하기 위하여 라이브러리를 설치해주었다. 해당 프로젝트는 파이썬으로 코드를 구현하였음. 이 때, 거리를 측정하기 위해서 코드를 작성해주었다. bleAdbReadCalculator.py # 거리 계산 함수 (RSSI와 TxPower을 이용)def calculate_distance(tx_power, rssi, n=2): return 10 ** ((tx_power - rssi) / (10 * n)) 해당 코드는 비콘이 디바이스에서 떨어져 있는 거리를 구하기위하여 만들어주었다. 아래에 해당하는 블로그를 기준으로 비콘의 거리를 구해주었다. RSSI = -10n*log*D+TXpower D = 10 ^ ( (TXpower-RSSI) / (10*n) ) / 20https://m..
코드를 작성하여 돌아가는 코드를 만드는 것 또한 굉장히 중요하다. 하지만 나는 코드를 작성하여 돌아가는 코드도 중요하지만, 견고한 설계및 요구 사항을 작성하여 견고한 코드를 작성하는 것이 가장 중요하다고 점점 코딩을 하면 할 수록 느낀다. 아래는 next-step DDD 세레나데를 수강하며 http 메서드 분석을 통하여 작성한 요구사항 설계이다. menu-group http 메서드###POST {{host}}/api/menu-groupsContent-Type: application/json{ "name": "추천메뉴"}###GET {{host}}/api/menu-groups menus http 메서드 ###POST {{host}}/api/menusContent-Type: application/js..

저는 이전에 Security 코드를 짤 때 느낀점은 Mockito가 없다면 절대로 테스트하기가 힘들다는 점이다. 이마저도 Security 테스트 라이브러리를 그래들에 import하여 검증하였다. 하지만, 이번에는 Service 코드만 단순하게 테스트 검증한다면, 작동하게끔 코드를 작성해보려고 한다. 누군가는 왜 Session 방식으로 하지 않고, Jwt 방식으로 진행하는지에 대한 여부를 물어볼 수 있습니다. 저는 Session방식으로 하지 않은 이유는 일단 RestAPI 원칙은 stateless 하지 않습니다. 궁극적으로 저희 프로젝트에는 추후, 결제 시스템을 붙일 예정이며, 해당 부분은 서버를 분리하여 MSA형식으로 진행할 것이기에 적당하지 않다고 판단하여, Jwt방식으로 Elastic Cache 즉..
나는 상속이 객체지향적으로 어느정도 완벽한 개념이라고 생각했었던거 같다. 하지만, 이번장을 읽고 상속에 대해서 다시 생각해보는 계기가 되었다. 상속은 부모타입에 강하게 결합이 생긴다. 이로인해서 부모타입과 자식타입관계의 강한 결합이 생기며, 부모에 있는 코드가 바뀐다면, 자식에 있는 코드들이 정상작동하지 않을 확률이 높아진다. 여기서 말하는 상속은 인터페이스로 확장하는 상속이 아닌 클래스가 다른 클래스를 확장하는 구현 상속을 말함. 핵심 정리- 상위 클래스가 어떻게 구현되느냐에 따라 하위 클래스의 동작에 이상이 생길 수 있음.- 하위 클래스에 얼마나 영향을 끼칠지 여파를 알 수 없음. public class InstrumentedHashSet extends HashSet { // 추가된 원소의..